diff --git a/Guardfile b/Guardfile index 75aa93c15..5c48ddefe 100644 --- a/Guardfile +++ b/Guardfile @@ -6,6 +6,7 @@ # end # guard 'spork', :test_unit => true, :test_unit_env => {'RAILS_ENV' => 'test'}, :wait => 60 do + watch(%r{app/models/.+\.rb}) watch('config/application.rb') watch('config/environment.rb') watch('config/environments/test.rb') diff --git a/ReadMe.txt b/ReadMe.txt index 8c57f348c..35e56515d 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,19 +1,8 @@ -patch: -用户姓名的部分,根据issues#655。 -为了修改方便 -alias: -方法 之前显示 调整之后 -name firstname+lastname login -nickname xxx login -realname xxx firstname+lastname +===================================[2014-04-09]================================= +kw: 域名, 二级域名, subdomain, forge, course, contest +域名跳转(forge/course/contest)这几个设置在settings.yml中 +但是跳转在development模式下会导致无法开发 -User model经过修改,已经完全集成了user_extensions的功能 -例如 -user.gender=1 -user.save -user_extensions字段会自动保存 -不必要每次user.user_extensions.xxx以及判断是否为空 -================================================================================ app/models/setting.rb :165 # fixed domain url in development. tantantan's bug if Rails.env.development? @@ -23,52 +12,54 @@ app/models/setting.rb :165 end 程序部分链接中制定了subdomain参数,使链接在二级域名中来回跳转。 为了开发方便,使之功能在development模式下失效。 - # => nyan -================================================================================ -app/controller/projects_controller.rb ===> projects#fake - fake filter: 修改了传到页面中的Count后缀的数量 - 改为正确的数量,删掉fake过滤器即可 -================================================================================ + + +===================================[2014-04-09]================================= +kw: 菜单, 导航栏, layout +网页上方的导航条没有用Redmine::MenuManager +MenuManager的样式无法定制,菜单显示条件if中的proc执行行为没有了解 + #导航栏匹配域名显示和改变 app\helper\application_helper.rb -# rewrite navigation +render_dynamic_nav 方法中,利用变量,可以设置在layout中具体显示哪些条目 app\views\layouts\_base_header.html.erb -# reset navigation by domain name and url through regular match -================================================================================ +需要显示的条目,由具体的实例变量设置(在各个layout中) + + +===================================[2014-04-09]================================= +kw: home_path, 首页, 跳转, 二级域名, welcome #首页根据域名匹配进入不同的页面 app\controller\welcome_controller.rb - def entry_select_user - if request.original_url.match(/user\.trustie\.net/) - redirect_to(:controller => "users", :action => "index") - return 0 - end - end -================================================================================ +#entry_select 放射设置二级域名所显示的首页 -================================================================================ -0606:新坑 + + +===================================[2014-06-06]================================= +kw: user_scores user_scores表结构有问题,需要运行 bundle exec rake db:migrate:down VERSION=20140410021724 bundle exec rake db:migrate:up VERSION=20140410021724 -=============================================================================== -0708:CKEditor插件加载方法 + + + +===================================[2014-07-08]================================= +kw: CKEditor, 富文本, 编辑器 +CKEditor插件加载方法 1.把插件文件夹拷入plugins文件夹,确保文件夹名为redmine_ckeditor 2.运行 bundle install --without development test 3.运行 rake redmine:plugins:migrate RAILS_ENV=production 4.启动服务器 -5.把文本格式 (Administration > Settings > General > Text formatting)改为CKEditor -6.配置CKEditor插件(Administration > Plugins > Configure) +5.配置CKEditor插件(Administration > Plugins > Configure) +6.把文本格式 (Administration > Settings > General > Text formatting)改为CKEditor +注意:一定要先配置CKEditor插件再见文本格式更改,不然,数据库不会生成对应记录,会报错。。 -某些情况数据库未插入插件配置值解决方案: -1 复制plugins -2 启动rails -3 运行migrate -3 打开admin配置插件(http://127.0.0.1:3000/settings/plugin/redmine_ckeditor) -4 点击“查询”(就是确定的功能) -=============================================================================== -0719:若遇到首页定制报错问题请尝试如下操作 + + +===================================[2014-07-19]================================= +kw: 首页, 定制, forge, course, contest, 排序 +若遇到首页定制报错问题请尝试如下操作 如果运行迁移文件有报错与‘sort_type’相关 先运行 bundle exec rake db:migrate:down version=20140716021202 bundle exec rake db:migrate:up version=20140716021202 在按如下步骤执行,未报与之相关的则直接按如下步骤执行 1.运行 bundle exec rake db:migrate:down version=20140719080032 -2.运行 bundle exec rake db:migrate:up version=20140719080032 \ No newline at end of file +2.运行 bundle exec rake db:migrate:up version=20140719080032 diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 171d34377..a76a78dcb 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -24,6 +24,7 @@ class AdminController < ApplicationController before_filter :require_admin helper :sort helper :Users + helper :Settings include SortHelper def index @@ -35,15 +36,12 @@ class AdminController < ApplicationController scope = Project.status(@status).order('lft') scope = scope.like(params[:name]) if params[:name].present? - @projects = scope.all + @projects = scope.where(project_type: Project::ProjectType_project).all render :action => "projects", :layout => false if request.xhr? end def users - @project_type = params[:project_type] - role = params[:role] - sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) @@ -55,95 +53,14 @@ class AdminController < ApplicationController end @status = params[:status] || 1 - has = { - "show_changesets" => true - } - # @count = Redmine::Activity::Fetcher.new(User.current, :author => @user).scope_select {|t| !has["show_#{t}"].nil?}.events(nil, nil).count - - scope = UserStatus.visible - case role - when 'teacher' - scope = UserStatus.teacher - when 'student' - scope = UserStatus.student - else - - end - + scope = User.logged.status(@status) + scope = User.like(params[:name]) if params[:name].present? scope = scope.in_group(params[:group_id]) if params[:group_id].present? - # scope.each do |user| - # UserStatus.create(:changesets_count => user.changesets.count, :watchers_count => user.watcher_users.count, :user_id => user.id) - # end + @user_count = scope.count @user_pages = Paginator.new @user_count, @limit, params['page'] - #@offset ||= @user_pages.offset - #@users = scope.order(sort_clause).limit(@limit).offset(@offset).all - @user_base_tag = params[:id] ? 'base_users':'base' - if params[:user_sort_type].present? - case params[:user_sort_type] - when '0' - @offset ||= @user_pages.reverse_offset - unless @offset == 0 - @users_statuses = scope.offset(@offset).limit(@limit).all.reverse - else - limit = @user_count % @limit - if limit == 0 - limit = @limit - end - @users_statuses = scope.offset(@offset).limit(limit).all.reverse - end - @s_type = 0 - # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } - # @projects = @projects[@offset, @limit] - when '1' - @offset ||= @user_pages.reverse_offset - unless @offset == 0 - @users_statuses = scope.reorder('grade').offset(@offset).limit(@limit).all.reverse - else - limit = @user_count % @limit - if limit == 0 - limit = @limit - end - @users_statuses = scope.reorder('grade').offset(@offset).limit(limit).all.reverse - end - @s_type = 1 - #sort {|x,y| y.user_status.changesets_count <=> x.user_status.changesets_count} - #@users = @users[@offset, @limit] - when '2' - @offset ||= @user_pages.reverse_offset - unless @offset == 0 - @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(@limit).all.reverse - else - limit = @user_count % @limit - if limit == 0 - limit = @limit - end - @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(limit).all.reverse - end - @s_type = 2 - #@users = @users[@offset, @limit] - end - - else - @offset ||= @user_pages.reverse_offset - unless @offset == 0 - @users_statuses = scope.reorder('grade').offset(@offset).limit(@limit).all.reverse - else - limit = @user_count % @limit - if limit == 0 - limit = @limit - end - @users_statuses = scope.reorder('grade').offset(@offset).limit(limit).all.reverse - end - @s_type = 1 - # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } - # @projects = @projects[@offset, @limit] - end - - @users = [] - @users_statuses.each do |obj| - @users << User.find_by_id("#{obj.user_id}") - end + @offset ||= @user_pages.offset + @users = scope.order(sort_clause).limit(@limit).offset(@offset).all respond_to do |format| @@ -208,24 +125,13 @@ class AdminController < ApplicationController end @status = params[:status] || 1 - has = { - "show_changesets" => true - } scope = User.logged.status(@status) scope = scope.like(params[:name]) if params[:name].present? @user_count = scope.count @user_pages = Paginator.new @user_count, @limit, params['page'] @user_base_tag = params[:id] ? 'base_users':'base' - @offset ||= @user_pages.reverse_offset - unless @offset == 0 - @users = scope.offset(@offset).limit(@limit).all.reverse - else - limit = @user_count % @limit - if limit == 0 - limit = @limit - end - @users = scope.offset(@offset).limit(limit).all.reverse - end + + @users = scope.offset(@user_pages.offset).limit(@user_pages.per_page) respond_to do |format| format.html { @@ -242,8 +148,8 @@ class AdminController < ApplicationController elsif request.post? @first_page = FirstPage.where("page_type = 'project'").first @first_page.web_title = params[:web_title] - @first_page.description = params[:description] - @first_page.title = params[:title] + @first_page.description = params[:first_page][:description] + #@first_page.title = params[:title] @first_page.sort_type = params[:sort_type] if @first_page.save respond_to do |format| @@ -305,14 +211,19 @@ class AdminController < ApplicationController if request.get? @contest_page = FirstPage.where("page_type = 'contest'").first @first_page = FirstPage.where("page_type = 'project'").first + @notification = ContestNotification.all.first; elsif request.post? @first_page = FirstPage.where("page_type = 'project'").first @contest_page = FirstPage.where("page_type = 'contest'").first + @notification = ContestNotification.all.first; @first_page.web_title = params[:web_title] @contest_page.web_title = params[:web_title] @contest_page.title = params[:contest_title] @contest_page.description = params[:contest_description] - if @first_page.save && @contest_page.save + @notification.title = params[:contest_notification_title] + @notification.content = params[:contest_notification][:content] + + if @first_page.save && @contest_page.save && @notification.save respond_to do |format| format.html { flash[:notice] = l(:notice_successful_update) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e6efca1e8..110974b77 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -482,14 +482,19 @@ class ApplicationController < ActionController::Base # Renders an error response def render_error(arg) arg = {:message => arg} unless arg.is_a?(Hash) - @message = arg[:message] + @lay = arg[:layout] @message = l(@message) if @message.is_a?(Symbol) @status = arg[:status] || 500 respond_to do |format| format.html { - render :template => 'common/error', :layout => use_layout, :status => @status + if @lay + render :template => 'common/error', :layout => @lay,:status => @status + else + render :template => 'common/error', :layout => use_layout, :status => @status + end + } format.any { head @status } end diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index bef128e50..a0da2d025 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class AttachmentsController < ApplicationController + layout "users_base" before_filter :find_project, :only => [:show, :download, :thumbnail, :destroy, :delete_homework]#, :except => [:upload, :autocomplete] before_filter :file_readable, :read_authorize, :only => [:show, :thumbnail]#Modified by young before_filter :delete_authorize, :only => :destroy @@ -172,7 +173,7 @@ class AttachmentsController < ApplicationController respond_to do |format| # modify by nwb - if @attachment.container_type == 'Course' + if @attachment.container.is_a?(Course) || @attachment.container.course if @course.nil? format.html { redirect_to_referer_or forum_memo_path(@attachment.container.forum, @attachment.container) } else @@ -285,6 +286,8 @@ private raise ActiveRecord::RecordNotFound if params[:filename] && params[:filename] != @attachment.filename if @attachment.container_type == 'Course' @course = @attachment.course + elsif @attachment.container.has_attribute?(:course) && @attachment.container.course + @course = @attachment.container.course else unless @attachment.container_type == 'Bid' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' @project = @attachment.project diff --git a/app/controllers/contest_notification_controller.rb b/app/controllers/contest_notification_controller.rb new file mode 100644 index 000000000..143941cc0 --- /dev/null +++ b/app/controllers/contest_notification_controller.rb @@ -0,0 +1,5 @@ +class ContestNotificationController + def show + + end +end \ No newline at end of file diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index b0ad6b109..2b92c32bb 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -42,7 +42,8 @@ class DocumentsController < ApplicationController when 'title' @grouped = documents.group_by {|d| d.title.first.upcase} when 'author' - @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author} + # @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author} + @grouped = documents.group_by {|d| d.user.name } else @grouped = documents.group_by(&:category) end diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index b5c67478c..a8ba3d426 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -163,7 +163,7 @@ class FilesController < ApplicationController end end - # 返回制定资源类型的资源列表 + # 返回指定资源类型的资源列表 # added by nwb def getattachtype sort_init 'created_on', 'desc' diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb index 9c41f91d6..d3de11177 100644 --- a/app/controllers/forums_controller.rb +++ b/app/controllers/forums_controller.rb @@ -1,5 +1,7 @@ # added by fq class ForumsController < ApplicationController + layout "users_base" + # GET /forums # GET /forums.json before_filter :find_forum_if_available @@ -143,9 +145,10 @@ class ForumsController < ApplicationController respond_to do |format| if @forum.update_attributes(params[:forum]) - format.html { redirect_to @forum, notice: 'Forum was successfully updated.' } + format.html { redirect_to @forum, notice: l(:label_forum_update_succ) } format.json { head :no_content } else + flash.now[:error] = "#{l :label_forum_update_fail}: #{@forum.errors.full_messages[0]}" format.html { render action: "edit" } format.json { render json: @forum.errors, status: :unprocessable_entity } end diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index 7ad0702e8..1cb3fa197 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -1,4 +1,5 @@ class HomeworkAttachController < ApplicationController + layout "course_base" include CoursesHelper ############################### #判断当前角色权限时需先找到当前操作的project diff --git a/app/controllers/issue_categories_controller.rb b/app/controllers/issue_categories_controller.rb index 9803eb789..3bc0ff245 100644 --- a/app/controllers/issue_categories_controller.rb +++ b/app/controllers/issue_categories_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class IssueCategoriesController < ApplicationController + layout "project_base" menu_item :settings model_object IssueCategory before_filter :find_model_object, :except => [:index, :new, :create] diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 8bce84f90..650f65555 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -98,10 +98,12 @@ class NewsController < ApplicationController end def new - @news = News.new(:project => @project, :author => User.current) - @course_tag = @project.project_type - if @course_tag - render :layout => 'base_courses' + #modify by nwb + if @project + @news = News.new(:project => @project, :author => User.current) + elsif @course + @news = News.new(:course => @course, :author => User.current) + render :layout => 'base_courses' end end diff --git a/app/controllers/softapplications_controller.rb b/app/controllers/softapplications_controller.rb index d7b2477a8..1808a3eaa 100644 --- a/app/controllers/softapplications_controller.rb +++ b/app/controllers/softapplications_controller.rb @@ -19,20 +19,20 @@ class SoftapplicationsController < ApplicationController #new added sort if params[:softapplication_sort_type].present? - case params[:softapplication_sort_type] + case params[:softapplication_sort_type] when '0' - @softapplications = @softapplications[@offset, @limit] + @softapplications = @softapplications[@offset, @limit] @s_state = 0 when '1' - @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit] + @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit] @s_state = 1 end - else - @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit] - @s_state = 1 + else + @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit] + @s_state = 1 end #new added end - + respond_to do |format| format.html # index.html.erb format.json { render json: @softapplications } @@ -216,19 +216,19 @@ class SoftapplicationsController < ApplicationController def new_message @jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id] if @jour - user = @jour.user - text = @jour.notes + user = @jour.user + text = @jour.notes else - user = @softapplication.user - text = @softapplication.description + user = @softapplication.user + text = @softapplication.description end text = text.to_s.strip.gsub(%r{
((.|\s)*?)
}m, '[...]') @content = "> #{ll(User.current.language, :text_user_wrote, user)}\n> " @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" @id = user.id - rescue ActiveRecord::RecordNotFound + rescue ActiveRecord::RecordNotFound render_404 - end + end #新建评价 def create_message diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9e7ee0229..a3bb96aa9 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -151,7 +151,7 @@ class UsersController < ApplicationController # added by fq def user_activities - redirect_to user_path(@user, type: params[:type]) + redirect_to user_path(@user, type: params[:type], page: params[:page]) return # useless abort. @watcher = User.watched_by_id(@user) @@ -315,7 +315,7 @@ class UsersController < ApplicationController # get users ActiveRecord @users = @users_statuses.includes(:user).map(&:user) - @user_base_tag = params[:id] ? 'base_users':'base' + @user_base_tag = params[:id] ? 'base_users':'users_base' respond_to do |format| format.html { @groups = Group.all.sort @@ -344,7 +344,7 @@ class UsersController < ApplicationController scope = scope.like(params[:name]) if params[:name].present? @user_count = scope.count @user_pages = Paginator.new @user_count, @limit, params['page'] - @user_base_tag = params[:id] ? 'base_users':'base' + @user_base_tag = params[:id] ? 'base_users':'users_base' @offset ||= @user_pages.reverse_offset unless @offset == 0 @users = scope.offset(@offset).limit(@limit).all.reverse @@ -475,7 +475,7 @@ class UsersController < ApplicationController def new @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) @auth_sources = AuthSource.all - render :layout => "base" + render :layout => "users_base" end def create @@ -510,7 +510,7 @@ class UsersController < ApplicationController @user.password = @user.password_confirmation = nil respond_to do |format| - format.html { render :action => 'new',:layout => "base" } + format.html { render :action => 'new',:layout => "users_base" } format.api { render_validation_errors(@user) } end end @@ -586,7 +586,7 @@ class UsersController < ApplicationController def destroy @user.destroy respond_to do |format| - format.html { redirect_back_or_default(users_path) } + format.html { redirect_back_or_default(admin_users_path) } format.api { render_api_ok } end end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 516b88310..7109a5460 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -24,24 +24,19 @@ class WelcomeController < ApplicationController def index @first_page = FirstPage.where("page_type = 'project'").first - @hot_projects = find_miracle_project(10, 3) - @hot_projects_ids = [] - @hot_projects.each do |p| - @hot_projects_ids << p - end - @projects_all = Project.active.visible. - joins("LEFT JOIN #{ProjectStatus.table_name} ON #{Project.table_name}.id = #{ProjectStatus.table_name}.project_id"). - where("#{Project.table_name}.project_type = ? and #{Project.table_name}.id in (?)", Project::ProjectType_project,@hot_projects_ids) if @first_page.nil? || @first_page.sort_type.nil? - @projects = @projects_all.order("grade desc") + @projects = find_miracle_project(10, 3,"grade desc") else case @first_page.sort_type when 0 - @projects = @projects_all.order("created_on desc") + @projects = find_miracle_project(10, 3,"created_on desc") + #@projects = @projects_all.order("created_on desc") when 1 - @projects = @projects_all.order("grade desc") + @projects = find_miracle_project(10, 3,"grade desc") + #@projects = @projects_all.order("grade desc") when 2 - @projects = @projects_all.order("watchers_count desc") + @projects = find_miracle_project(10, 3,"watchers_count desc") + #@projects = @projects_all.order("watchers_count desc") #gcm #when '3' diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index a4f53c100..110f81537 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -216,7 +216,7 @@ class WordsController < ApplicationController elsif ( referer.match(/homework_attach/) || referer.match(/homework_attach/) ) #new added obj = HomeworkAttach.find_by_id(obj_id) else - raise 'create reply obj unknow type.' + raise "create reply obj unknow type.#{referer}" end obj end @@ -240,8 +240,8 @@ class WordsController < ApplicationController elsif obj.kind_of? HomeworkAttach obj.add_jour(nil, nil, obj.id, options) #new added else - raise 'create reply obj unknow type.' + raise "create reply obj unknow type.#{obj.class}" end end #######end of message -end \ No newline at end of file +end diff --git a/app/controllers/zipdown_controller.rb b/app/controllers/zipdown_controller.rb index 653400cbe..a5506be93 100644 --- a/app/controllers/zipdown_controller.rb +++ b/app/controllers/zipdown_controller.rb @@ -1,4 +1,5 @@ class ZipdownController < ApplicationController + #查找项目(课程) before_filter :find_project_by_bid_id, :only => [:assort] #检查权限 @@ -41,16 +42,19 @@ class ZipdownController < ApplicationController if homework != nil if homework.attachments.count > 0 zipfile = zip_homework_by_user homework - send_file zipfile, :filename => homework.name+".zip", :type => detect_content_type(zipfile) if zipfile + send_file zipfile, :filename => homework.name+".zip", :type => detect_content_type(zipfile) if(zipfile) else - render_403 :message => :no_file_dowmload + render_403 :message => :no_file_dowmload ,:layout => "course_base" end else - render_403 :message =>:notice_file_not_found + render_403 :message =>:notice_file_not_found ,:layout => "course_base" end else - render_403 :message => :notice_not_authorized + render_403 :message => :notice_not_authorized ,:layout => "course_base" end + + rescue => e + render file: 'public/file_not_found.html' end private diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4967505a3..b6cd47924 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1703,7 +1703,7 @@ module ApplicationHelper def render_dynamic_nav home_link = link_to l(:field_homepage), {:controller => 'welcome', :action => 'index'} home_link = "
  • " << home_link << "
  • " - bootstrap_render_dynamic_nav + # bootstrap_render_dynamic_nav content_tag :ul, (home_link.html_safe+bootstrap_render_dynamic_nav) end diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb index 768e87a8f..720919369 100644 --- a/app/helpers/user_score_helper.rb +++ b/app/helpers/user_score_helper.rb @@ -336,8 +336,203 @@ module UserScoreHelper user.user_score.update_attributes(:collaboration => collaboration, :influence => influence, :skill => skill, :activity => activity, :file => file, :issue => issue, :level => level) end - - + #==================================================================================================== + def get_option_number(user,type,project_id=nil) + if project_id.nil? + option_number = OptionNumber.where("user_id = '#{user.id}' and score_type = '#{type}'"); + else + option_number = OptionNumber.where("user_id = '#{user.id}' and score_type = '#{type}' and project_id = '#{project_id}'"); + end + result = nil + if option_number.nil? || option_number.count == 0 + result = OptionNumber.new + result.user_id = user.id + result.memo = 0 + result.messages_for_issues = 0 + result.issues_status = 0 + result.replay_for_message = 0 + result.replay_for_memo = 0 + result.follow = 0 + result.tread = 0 + result.praise_by_one = 0 + result.praise_by_two = 0 + result.praise_by_three = 0 + result.tread_by_one = 0 + result.tread_by_two = 0 + result.tread_by_three = 0 + result.changeset = 0 + result.document = 0 + result.attachment = 0 + result.issue_done_ratio = 0 + result.post_issue = 0 + result.total_score = 0 + result.score_type =type + unless project_id.nil? + result.project_id = project_id + end + else + result = option_number.first + end + result + end + + #更新分数 + def update_score(option_number) + option_number.total_score = collaboration(option_number) + influence(option_number) + skill(option_number) + active(option_number) + option_number.save + end + + #协同得分 + def collaboration(option_number) + option_number.memo * 2 + option_number.messages_for_issues + option_number.issues_status + option_number.replay_for_message + option_number.replay_for_memo + end + #影响力得分 + def influence(option_number) + option_number.follow * 2 + end + #技术得分 + def skill(option_number) + option_number.praise_by_one * 4 + option_number.praise_by_two * 6 + option_number.praise_by_three * 8 - option_number.tread * 2 - option_number.tread_by_one * 2 - option_number.tread_by_two * 4 - option_number.tread_by_three * 6 + end + #项目贡献得分 + def active(option_number) + option_number.changeset * 4 + option_number.document * 4 + option_number.attachment * 4 + option_number.issue_done_ratio * 2 + option_number.post_issue * 4 + end + + #更新发帖数 + def update_memo_number(user,type) + option_number = get_option_number(user,type) + option_number.memo = Message.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count + Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count + update_score(option_number) + end + + #更新对缺陷留言数 + def update_messges_for_issue(user,type) + option_number = get_option_number(user,type) + option_number.messages_for_issues = Journal.includes(:user).where("user_id = '#{user.id}'").all.count + update_score(option_number) + end + + #更新更改缺陷状态状态次数 + def update_issues_status(user,type) + option_number = get_option_number(user,type) + option_number.issues_status = Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count + update_score(option_number) + end + #更新对留言的回复数量 + def update_replay_for_message(user,type) + option_number = get_option_number(user,type) + option_number.replay_for_message = JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id}").count + update_score(option_number) + end + + #更新对帖子的回复数量 + def update_replay_for_memo(user,type) + option_number = get_option_number(user,type) + option_number.replay_for_memo = Message.includes(:author).where("parent_id IS NOT NULL and author_id = #{user.id}").all.count + Memo.includes(:author).where("parent_id IS NOT NULL and author_id = #{user.id}").all.count + update_score(option_number) + end + + #更新被关注的人数 + def update_follow(user,type) + option_number = get_option_number(user,type) + option_number.follow = Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count + update_score(option_number) + end + + #更新帖子踩各项数量 + def update_tread(user,type) + option_number = get_option_number(user,type) + option_number.tread = PraiseTread.where("praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 0 and user_id = '#{user.id}'").all.count + pts = PraiseTread.where("praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 0").all + result = [] + result1 = [] + result2 = [] + pts.each do |pt| + obj = PraiseTread.find_object_by_type_and_id(pt.praise_tread_object_type, pt.praise_tread_object_id) + if obj.nil? + next + end + target_user = obj.author + level = UserLevels.get_level(pt.user)#pt.user.get_level + project = pt.project + if level == 1 && target_user.id = user.id + result << pt + elsif level == 2 && target_user.id = user.id + result1 << pt + elsif level == 3 && target_user.id = user.id + result2 << pt + end + end + option_number.tread_by_one = result.count + option_number.tread_by_two = result1.count + option_number.tread_by_three = result2.count + update_score(option_number) + end + + #更新帖子顶数量 + def update_praise(user,type) + option_number = get_option_number(user,type) + pts = PraiseTread.where("praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 1").all + result = [] + result1 = [] + result2 = [] + pts.each do |pt| + obj = PraiseTread.find_object_by_type_and_id(pt.praise_tread_object_type, pt.praise_tread_object_id) + if obj.nil? + next + end + target_user = obj.author + level = UserLevels.get_level(pt.user)#pt.user.get_level + project = pt.project + if level == 1 && target_user.id = user.id + result << pt + elsif level == 2 && target_user.id = user.id + result1 << pt + elsif level == 3 && target_user.id = user.id + result2 << pt + end + end + option_number.praise_by_one = result.count + option_number.praise_by_two = result1.count + option_number.praise_by_three = result2.count + update_score(option_number) + end + + #更新提交代码次数 + def update_changeset(user,type) + option_number = get_option_number(user,type) + option_number.changeset = Changeset.includes(:user).where("user_id = '#{user.id}'").all.count + update_score(option_number) + end + + #更新文档提交次数 + def update_document(user,type) + option_number = get_option_number(user,type) + option_number.document = Document.includes(:user).where("user_id = '#{user.id}'").all.count + update_score(option_number) + end + + #更新附件提交数量 + def update_attachment(user,type) + option_number = get_option_number(user,type) + option_number.attachment = Attachment.includes(:author).where("author_id = '#{user.id}'").all.count + update_score(option_number) + end + + #更新缺陷完成度次数 + def update_issue_done_ratio(user,type) + option_number = get_option_number(user,type) + option_number.issue_done_ratio = Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count + update_score(option_number) + end + + #更新发布缺陷次数 + def update_post_issue(user,type) + option_number = get_option_number(user,type) + option_number.post_issue = Issue.includes(:author).where("author_id = '#{user.id}'").all.count + update_score(option_number) + end end diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb index 99357a3d0..8ee7f42d8 100644 --- a/app/helpers/welcome_helper.rb +++ b/app/helpers/welcome_helper.rb @@ -203,12 +203,12 @@ module WelcomeHelper #end end - def find_miracle_project(sum, max_rate) + def find_miracle_project(sum, max_rate,order) #max = sum*(max_rate.to_f/10) #c1 = find_new_project(sum).to_a.dup #c2 = find_all_hot_project(sum).to_a.dup #(c2.take(sum-max)+c1.take(max)).take(sum) - find_all_hot_project(sum).dup#.to_a.dup + find_all_hot_project(sum,order).to_a.dup end def find_new_course limit=15 @@ -220,8 +220,8 @@ module WelcomeHelper end - def find_all_hot_project limit=15 - sort_project_by_hot limit + def find_all_hot_project limit=15,order + sort_project_by_hot limit,order end def find_all_hot_course limit=15 @@ -366,8 +366,9 @@ module WelcomeHelper private - def sort_project_by_hot limit=15 - sort_project_by_hot_rails 0, 'grade DESC', limit + def sort_project_by_hot limit=15,order + #'grade DESC' + sort_project_by_hot_rails 0,order , limit end def sort_course_by_hot limit=15 @@ -433,7 +434,7 @@ module WelcomeHelper # FROM projects AS p LEFT OUTER JOIN ( # SELECT project_id,grade FROM project_statuses # WHERE project_type = #{project_type} ORDER BY #{order_by} LIMIT #{limit} ) AS t ON p.id = t.project_id ") - Project.visible.joins(:project_status).where("#{Project.table_name}.project_type = ?", project_type).order(order_by).limit(limit)#.all + Project.visible.joins(:project_status).where("#{Project.table_name}.project_type = ?", project_type).order(order_by).limit(limit).all end def sort_bid_by_hot_rails reward_type, limit = 10 diff --git a/app/models/contest_notification.rb b/app/models/contest_notification.rb new file mode 100644 index 000000000..c1f2fde6f --- /dev/null +++ b/app/models/contest_notification.rb @@ -0,0 +1,3 @@ +class ContestNotification < ActiveRecord::Base + attr_accessible :content, :title +end diff --git a/app/models/first_page.rb b/app/models/first_page.rb index 52c6e204d..58d20901e 100644 --- a/app/models/first_page.rb +++ b/app/models/first_page.rb @@ -2,5 +2,5 @@ class FirstPage < ActiveRecord::Base attr_accessible :description, :title, :web_title,:page_type,:sort_type validates_presence_of :web_title, :title, :description,:page_type validates_length_of :web_title,:title, maximum: 30 - validates_length_of :description, maximum: 100 + #validates_length_of :description, maximum: 100 end diff --git a/app/models/issue.rb b/app/models/issue.rb index f47e1c6f9..83e7f8479 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -18,6 +18,7 @@ class Issue < ActiveRecord::Base include Redmine::SafeAttributes include Redmine::Utils::DateCalculation + include UserScoreHelper belongs_to :project belongs_to :tracker @@ -1507,17 +1508,20 @@ class Issue < ActiveRecord::Base #缺陷完成度更新 if self.done_ratio_changed? UserScore.project(:update_issue_ratio, User.current,self,{ issue_id: self.id }) + #update_issue_done_ratio(User.current,1) end #缺陷状态更改 if self.status_id_changed? #协同得分 UserScore.joint(:change_issue_status, User.current,nil,self, {issue_id: self.id}) + #update_issues_status(self.author , 1) end end #发布缺陷 def be_user_score_new_issue UserScore.project(:post_issue, User.current,self, { issue_id: self.id }) + update_post_issue(self.author,1) end diff --git a/app/models/journal.rb b/app/models/journal.rb index 2e9363dd7..8d03f2325 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class Journal < ActiveRecord::Base + include UserScoreHelper belongs_to :journalized, :polymorphic => true # added as a quick fix to allow eager loading of the polymorphic association # since always associated to an issue, for now @@ -161,6 +162,7 @@ class Journal < ActiveRecord::Base if !self.notes.nil? && self.notes.gsub(' ','') != '' #协同得分加分 UserScore.joint(:post_issue_message, User.current,self.issue.author,self, { message_id: self.id }) + update_messges_for_issue(User.current,1) end end # 减少用户分数 -by zjc diff --git a/app/models/journal_detail.rb b/app/models/journal_detail.rb index 1ec195733..4100a5b1c 100644 --- a/app/models/journal_detail.rb +++ b/app/models/journal_detail.rb @@ -16,9 +16,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class JournalDetail < ActiveRecord::Base + include UserScoreHelper belongs_to :journal before_save :normalize_values - + after_create :be_user_score private def normalize_values @@ -38,4 +39,15 @@ class JournalDetail < ActiveRecord::Base v end end + + def be_user_score + #更新缺陷完成度 + if self.prop_key = 'done_ratio' + update_issue_done_ratio(User.current,1) + #更新缺陷状态 + elsif self.prop_key = 'status_id' + update_issues_status(User.current , 1) + end + end + end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 9551ff28b..4debe668f 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -3,6 +3,7 @@ # 注意reply_id 是提到人的id,不是留言id, Base中叫做 at_user class JournalsForMessage < ActiveRecord::Base include Redmine::SafeAttributes + include UserScoreHelper safe_attributes "jour_type", # 留言所属类型 "jour_id", # 留言所属类型的id "notes", # 留言内容 @@ -132,6 +133,7 @@ class JournalsForMessage < ActiveRecord::Base if self.reply_id != 0 #协同得分加分 UserScore.joint(:reply_message, User.current,User.find(self.reply_id),self, { journals_for_messages_id: self.id }) + update_replay_for_message(User.current,1) end end # 更新用户分数 -by zjc diff --git a/app/models/memo.rb b/app/models/memo.rb index feb10dec9..6370065ba 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -1,5 +1,6 @@ class Memo < ActiveRecord::Base include Redmine::SafeAttributes + include UserScoreHelper belongs_to :forum belongs_to :author, :class_name => "User", :foreign_key => 'author_id' @@ -148,9 +149,11 @@ class Memo < ActiveRecord::Base #新建memo且无parent的为发帖 if self.parent_id.nil? UserScore.joint(:post_message, User.current,nil,self ,{ memo_id: self.id }) + update_memo_number(User.current,1) #新建memo且有parent的为回帖 elsif !self.parent_id.nil? UserScore.joint(:reply_posting, User.current,self.parent.author,self, { memo_id: self.id }) + update_replay_for_memo(User.current,1) end end diff --git a/app/models/message.rb b/app/models/message.rb index faf7e5bdf..2c183dc59 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -17,6 +17,8 @@ class Message < ActiveRecord::Base include Redmine::SafeAttributes + include UserScoreHelper + belongs_to :board belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' acts_as_tree :counter_cache => :replies_count, :order => "#{Message.table_name}.created_on ASC" @@ -149,9 +151,11 @@ class Message < ActiveRecord::Base #新建message且无parent的为发帖 if self.parent_id.nil? UserScore.joint(:post_message, User.current,nil,self, { message_id: self.id }) + update_memo_number(User.current,1) #新建message且有parent的为回帖 elsif !self.parent_id.nil? UserScore.joint(:reply_posting, User.current,self.parent.author,self, { message_id: self.id }) + update_replay_for_memo(User.current,1) end end #减少用户分数 diff --git a/app/models/option_number.rb b/app/models/option_number.rb new file mode 100644 index 000000000..8ba32a575 --- /dev/null +++ b/app/models/option_number.rb @@ -0,0 +1,4 @@ +class OptionNumber < ActiveRecord::Base + attr_accessible :attachment, :changeset, :document, :follow, :issue_done_ratio, :issues_status, :memo, :messages_for_issues, :post_issue, :praise_by_one, :praise_by_three, :praise_by_two, :replay_for_memo, :replay_for_message, :score_type, :total_score, :tread, :tread_by_one, :tread_by_three, :tread_by_two, :user_id + +end diff --git a/app/models/softapplication.rb b/app/models/softapplication.rb index f7eed43fc..770d70d53 100644 --- a/app/models/softapplication.rb +++ b/app/models/softapplication.rb @@ -10,7 +10,6 @@ class Softapplication < ActiveRecord::Base belongs_to :user belongs_to :project has_many :contests, :through => :contesting_softapplications - belongs_to :project def add_jour(user, notes, reference_user_id = 0, options = {}) if options.count == 0 diff --git a/app/views/admin/contest_page_made.html.erb b/app/views/admin/contest_page_made.html.erb index a4407cd6b..7f054324d 100644 --- a/app/views/admin/contest_page_made.html.erb +++ b/app/views/admin/contest_page_made.html.erb @@ -1,6 +1,6 @@

    <%=l(:label_first_page_made)%>

    -<%= form_tag(:controller => 'admin', :action => 'contest_page_made') do %> +<%= form_tag(:controller => 'admin', :action => 'contest_page_made') do%>

    <%= text_field_tag 'web_title', params[:wbe_title],:value => @first_page.web_title, :size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %> @@ -29,7 +29,26 @@ <%= text_area_tag 'contest_description',@contest_page.description,:rows => 8, :size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %>

    +

    + +

    +
    + + +

    + <%= text_field_tag 'contest_notification_title', params[:label_contest_notification_title], :value => @notification.title,:size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %> +

    + + <%= text_area 'contest_notification', 'content', :value => @notification.content,:cols => 80, :rows => 15, :class => 'wiki-edit' %> + <%= wikitoolbar_for 'contest_notification_content' %> + + +
    <%= submit_tag l(:button_save), :class => "small", :name => nil %> <% end %>
    diff --git a/app/views/admin/first_page_made.html.erb b/app/views/admin/first_page_made.html.erb index 242b7c689..e4a5119d3 100644 --- a/app/views/admin/first_page_made.html.erb +++ b/app/views/admin/first_page_made.html.erb @@ -20,13 +20,15 @@ <%= render :partial=>"avatar/avatar_form",:style => "display:inline",:locals=> {source:@first_page} %>
    -

    - - <%= text_field_tag 'title', params[:label_site_title], :value => @first_page.title,:size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %> -

    +

    - <%= text_area_tag 'description',@first_page.description,:rows => 8, :size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %> + + <%= text_area 'first_page', 'description', :value => @first_page.description,:cols => 80, :rows => 15, :class => 'wiki-edit' %> + <%= wikitoolbar_for 'first_page_description' %>

    diff --git a/app/views/admin/search.html.erb b/app/views/admin/search.html.erb index 17d91e78b..67c97366e 100644 --- a/app/views/admin/search.html.erb +++ b/app/views/admin/search.html.erb @@ -5,7 +5,7 @@

    <%= l(:label_user_plural)%>

    - <%= form_tag(:controller => 'admin', :action => 'search', :method => :get) do %> + <%= form_tag(:controller => 'admin', :action => 'search') do %>
    <%= l(:label_filter_plural) %> @@ -51,7 +51,7 @@ <%= format_time(user.created_on) %> <%= format_time(user.last_login_on) unless user.last_login_on.nil? %> <%= change_status_link(user) %> - <%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %> + <%= delete_link user_path(user, :back_url => admin_users_path(params)) unless User.current == user %> <% end -%> @@ -65,4 +65,4 @@ <% html_title(l(:label_user_plural)) -%> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/users.html.erb b/app/views/admin/users.html.erb index 4dceb5fd9..41df178d8 100644 --- a/app/views/admin/users.html.erb +++ b/app/views/admin/users.html.erb @@ -5,7 +5,7 @@

    <%= l(:label_user_plural)%>

    - <%= form_tag(:controller => 'admin', :action => 'search', :method => :get) do %> + <%= form_tag(:controller => 'admin', :action => 'search') do %>
    <%= l(:label_filter_plural) %> @@ -51,7 +51,7 @@ <%= format_time(user.created_on) %> <%= format_time(user.last_login_on) unless user.last_login_on.nil? %> <%= change_status_link(user) %> - <%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %> + <%= delete_link user_path(user, :back_url => admin_users_path(params)) unless User.current == user %> <% end -%> @@ -66,4 +66,4 @@ <% html_title(l(:label_user_plural)) -%> <%else %> -<% end%> \ No newline at end of file +<% end%> diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index 7f1887b23..b237c7d25 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -35,3 +35,5 @@ <% content_for :header_tags do %> <%= javascript_include_tag 'attachments' %> <% end %> + + diff --git a/app/views/contest_notification/show.html.erb b/app/views/contest_notification/show.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/documents/show.html.erb b/app/views/documents/show.html.erb index d626fe30c..b7740c951 100644 --- a/app/views/documents/show.html.erb +++ b/app/views/documents/show.html.erb @@ -11,7 +11,7 @@

    <%=h @document.title %>

    -

    <%=h @document.category.name %>
    +

    <%#=h @document.category.name %>
    <%= format_date @document.created_on %>

    <%= textilizable @document, :description, :attachments => @document.attachments %> diff --git a/app/views/homework_attach/edit.html.erb b/app/views/homework_attach/edit.html.erb index 8400eb805..a0876440c 100644 --- a/app/views/homework_attach/edit.html.erb +++ b/app/views/homework_attach/edit.html.erb @@ -1,7 +1,4 @@ -<% @nav_dispaly_course_all_label = 1 - @nav_dispaly_forum_label = 1 - @nav_dispaly_course_label = nil - @nav_dispaly_store_all_label = 1 %> +