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 2505c295b..c373119fb 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,36 +12,40 @@ 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
@@ -60,8 +53,12 @@ bundle exec rake db:migrate:up VERSION=20140410021724
5.配置CKEditor插件(Administration > Plugins > Configure)
6.把文本格式 (Administration > Settings > General > Text formatting)改为CKEditor
注意:一定要先配置CKEditor插件再见文本格式更改,不然,数据库不会生成对应记录,会报错。。
-===============================================================================
-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
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 1ed1581d1..781d07d58 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -211,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/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/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..ede00b694 100644
--- a/app/helpers/user_score_helper.rb
+++ b/app/helpers/user_score_helper.rb
@@ -336,8 +336,81 @@ 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)
+ option_number = OptionNumber.where("user_id = '#{user.id}' and score_type = '#{type}'");
+ if option_number.nil?
+ option_number = OptionNumber.new
+ option_number.user_id = user.id
+ option_number.score_type =type
+ end
+ option_number
+ 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
+ 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}").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
+
+ #更新踩别人帖子的数量
end
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/views/admin/contest_page_made.html.erb b/app/views/admin/contest_page_made.html.erb
index ef99abf7d..7f054324d 100644
--- a/app/views/admin/contest_page_made.html.erb
+++ b/app/views/admin/contest_page_made.html.erb
@@ -35,9 +35,18 @@
-
- <% labelled_form_for %>
- <%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :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 %>
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/projects/_member_list.html.erb b/app/views/projects/_member_list.html.erb
index 6fe6b55f0..cdf6c459d 100644
--- a/app/views/projects/_member_list.html.erb
+++ b/app/views/projects/_member_list.html.erb
@@ -24,7 +24,7 @@
<%= content_tag "div", content_tag("p", rolesToLanguage(member.roles.sort.collect(&:to_s)).join(', ')), :class => "clear avatar_name" %>
- <%= l(:label_user_for_project_grade) %>: <%= UserGrade.find_by_user_id_and_project_id(member[:user_id], @project.id).grade %>
+ <%= l(:label_user_for_project_grade) %>: <%= format("%.2f" ,UserGrade.find_by_user_id_and_project_id(member[:user_id], @project.id).grade).to_i %>
<% end %>
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index cd5dd630a..52cc04000 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -573,6 +573,8 @@ zh:
label_site_description: 网站简介
label_site_image: 简介图片
label_sort_type: 热门项目排序方式
+ label_contest_notification_title: 竞赛通知标题
+ label_contest_notification_content: 竞赛通知内容
#by young
label_requirement: 需求
label_new_course: 课程列表
diff --git a/config/routes.rb b/config/routes.rb
index 08183f55e..948eee4a5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -42,6 +42,8 @@ RedmineApp::Application.routes.draw do
end
end
+ resources :contest_notification
+
resources :open_source_projects do
collection do
match 'search', via: [:get, :post]
diff --git a/db/migrate/20140722080529_create_contest_notifications.rb b/db/migrate/20140722080529_create_contest_notifications.rb
new file mode 100644
index 000000000..0aff8d268
--- /dev/null
+++ b/db/migrate/20140722080529_create_contest_notifications.rb
@@ -0,0 +1,10 @@
+class CreateContestNotifications < ActiveRecord::Migration
+ def change
+ create_table :contest_notifications do |t|
+ t.text :title
+ t.text :content
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20140722080924_set_notification.rb b/db/migrate/20140722080924_set_notification.rb
new file mode 100644
index 000000000..87e90318c
--- /dev/null
+++ b/db/migrate/20140722080924_set_notification.rb
@@ -0,0 +1,19 @@
+# -*coding:utf-8 -*-
+class SetNotification < ActiveRecord::Migration
+ def change
+ notifications = ContestNotification.all
+ if notifications.nil? || notifications.count == 0
+ notification = ContestNotification.new
+ notification.title = "2014年Android程序设计大赛获奖名单"
+ notification.content = "一等奖: 消灭那怪兽
+ 二等奖: 兄弟向前冲
+ 二等奖: 鸟鸟文件管理器(银河之光版)
+ 三等奖: 疯狂猜图
+ 三等奖: 愉快的定向越野
+ 三等奖: 体能训练助手
+ 三等奖: 迷你日记本
+ 三等奖: 永齐飞机大战
"
+ notification.save
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index c4d359dab..0cc830fd8 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20140722024513) do
+ActiveRecord::Schema.define(:version => 20140723082637) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@@ -241,6 +241,13 @@ ActiveRecord::Schema.define(:version => 20140722024513) do
add_index "comments", ["author_id"], :name => "index_comments_on_author_id"
add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type"
+ create_table "contest_notifications", :force => true do |t|
+ t.text "title"
+ t.text "content"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
create_table "contesting_projects", :force => true do |t|
t.integer "project_id"
t.string "contest_id"
@@ -709,6 +716,32 @@ ActiveRecord::Schema.define(:version => 20140722024513) do
t.datetime "updated_at", :null => false
end
+ create_table "option_numbers", :force => true do |t|
+ t.string "user_id"
+ t.integer "memo"
+ t.integer "messages_for_issues"
+ t.integer "issues_status"
+ t.integer "replay_for_message"
+ t.integer "replay_for_memo"
+ t.integer "follow"
+ t.integer "tread"
+ t.integer "praise_by_one"
+ t.integer "praise_by_two"
+ t.integer "praise_by_three"
+ t.integer "tread_by_one"
+ t.integer "tread_by_two"
+ t.integer "tread_by_three"
+ t.integer "changeset"
+ t.integer "document"
+ t.integer "attachment"
+ t.integer "issue_done_ratio"
+ t.integer "post_issue"
+ t.integer "score_type"
+ t.integer "total_score"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
create_table "praise_tread_caches", :force => true do |t|
t.integer "object_id", :null => false
t.string "object_type"
diff --git a/doc/Automated testing documentation.doc b/doc/Automated testing documentation.doc
index d01506181..8b43c8f3d 100644
Binary files a/doc/Automated testing documentation.doc and b/doc/Automated testing documentation.doc differ
diff --git a/test/unit/course_test.rb b/test/unit/course_test.rb
index a9544fc05..d9cd6d00c 100644
--- a/test/unit/course_test.rb
+++ b/test/unit/course_test.rb
@@ -15,7 +15,6 @@ class CourseTest < ActiveSupport::TestCase
error_keys = course.errors.keys
valid_attr = [:password, :term, :name, :class_period]
- puts error_keys
valid_attr.each do |attr|
assert(error_keys.include?(attr), "attr unknow: #{attr}")
end
@@ -43,7 +42,7 @@ class CourseTest < ActiveSupport::TestCase
course.name = "test_course"
assert course.valid?
course.name = name_quirk
- assert course.valid?
+ assert course.valid?, "Quirk name ===> #{course.name}"
end
test 'description too long must be valid.(4096)' do