Merge remote-tracking branch 'origin/szzh' into szzh

This commit is contained in:
lizanle 2015-07-20 15:03:53 +08:00
commit 39f25f05b6
21 changed files with 218 additions and 69 deletions

View File

@ -361,6 +361,17 @@ class ProjectsController < ApplicationController
end end
end end
# dts测试工具
def dts_rep
render_403 unless User.current.admin?
@dts = Dts.all
end
# dts云部署
def dts_yun
render_403 unless User.current.admin?
end
#发送邮件邀请新用户 #发送邮件邀请新用户
def invite_members_by_mail def invite_members_by_mail
if User.current.member_of?(@project) || User.current.admin? if User.current.member_of?(@project) || User.current.admin?

View File

@ -89,6 +89,7 @@ class WordsController < ApplicationController
elsif @journal_destroyed.jour_type == "Principal" elsif @journal_destroyed.jour_type == "Principal"
@user = User.find(@journal_destroyed.jour_id) @user = User.find(@journal_destroyed.jour_id)
@jours_count = @user.journals_for_messages.where('m_parent_id IS NULL').count @jours_count = @user.journals_for_messages.where('m_parent_id IS NULL').count
@is_user = true
end end
respond_to do |format| respond_to do |format|
format.js format.js

5
app/models/dts.rb Normal file
View File

@ -0,0 +1,5 @@
class Dts < ActiveRecord::Base
attr_accessible :Category, :Defect, :Description, :File, :IPLine, :IPLineCode, :Method, :Num, :PreConditions, :Review, :StartLine, :TraceInfo, :Variable, :project_id
belongs_to :project
end

View File

@ -68,6 +68,7 @@ class Project < ActiveRecord::Base
has_one :course_extra, :class_name => 'Course', :foreign_key => :extra,:primary_key => :identifier, :dependent => :destroy has_one :course_extra, :class_name => 'Course', :foreign_key => :extra,:primary_key => :identifier, :dependent => :destroy
has_many :applied_projects has_many :applied_projects
has_many :invite_lists has_many :invite_lists
has_one :dts
# end # end
#ADDED BY NIE #ADDED BY NIE

View File

@ -1,42 +1,4 @@
<%= stylesheet_link_tag 'css', :media => 'all' %> <%= stylesheet_link_tag 'css', :media => 'all' %>
<script type="text/javascript" language="javascript" xmlns="http://www.w3.org/1999/html">
function regexName()
{
var name = $.trim($("#homework_attach_name").val());
if(name=="")
{
$("#homework_attach_name_span").text("作品名称不能为空");
$("#homework_attach_name_span").css('color','#ff0000');
return false;
}
else
{
$("#homework_attach_name_span").text("填写正确");
$("#homework_attach_name_span").css('color','#008000');
return true;
}
}
function regexDescription()
{
var name = $.trim($("#homework_attach_description").val());
if(name=="")
{
$("#homework_attach_description_span").text("作品描述不能为空");
$("#homework_attach_description_span").css('color','#ff0000');
return false;
}
else
{
$("#homework_attach_description_span").text("填写正确");
$("#homework_attach_description_span").css('color','#008000');
return true;
}
}
function submit_homework_form(){if(regexName()&&regexDescription()){$('#new_homework_attach').submit();}}
</script>
<div class="container" id="content"> <div class="container" id="content">
<div class="Newwork"> <div class="Newwork">
<div id="tb_" class="tb_"> <div id="tb_" class="tb_">
@ -69,7 +31,7 @@
</span> </span>
&nbsp;&nbsp;作品名称&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;作品名称&nbsp;&nbsp;&nbsp;&nbsp;
</label> </label>
<%= f.text_field "name", :required => true, :size => 60, :class => "w430 bo", :maxlength => 254, :placeholder => "作品名称", :onkeyup => "regexName();" %> <%= f.text_field "name", :required => true, :size => 60, :class => "w430 bo", :maxlength => 254, :placeholder => "作品名称", :onkeyup => "regexHomeworkCommonName();" %>
<span id="homework_attach_name_span"></span> <span id="homework_attach_name_span"></span>
</p> </p>
<p style="float:left;"> <p style="float:left;">
@ -79,7 +41,7 @@
</span> </span>
&nbsp;&nbsp;作品描述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;作品描述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</label> </label>
<%= f.text_area "description", :class => "w620", :maxlength => 3000, :style => "width:430px", :placeholder => "最多3000个汉字", :onkeyup => "regexDescription();"%> <%= f.text_area "description", :class => "w620", :maxlength => 3000, :style => "width:430px", :placeholder => "最多3000个汉字", :onkeyup => "regexHomeworkCommonDescription();"%>
<p id="homework_attach_description_span" style="padding-left: 100px;"></p> <p id="homework_attach_description_span" style="padding-left: 100px;"></p>
</p> </p>
<div class="cl"></div> <div class="cl"></div>

View File

@ -57,7 +57,7 @@
<li > <li >
<label class="label02">&nbsp;开发语言:&nbsp;</label> <label class="label02">&nbsp;开发语言:&nbsp;</label>
<select class="fl mb10 h26 w150" > <select class="fl mb10 h26 w150" >
<option>C++</option> <option>C</option>
</select> </select>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
@ -89,11 +89,11 @@
<div> <div>
<li> <li>
<label class="label02">&nbsp;测试输入:&nbsp;</label> <label class="label02">&nbsp;测试输入:&nbsp;</label>
<input type="text" class="fl h26 w186 mb10" name="input[<%= homework_test.id%>]" value="<%= homework_test.input%>"/> <input type="text" class="fl h26 w200 mb10" name="input[<%= homework_test.id%>]" value="<%= homework_test.input%>"/>
</li> </li>
<li > <li >
<label class=" fl f14 ml10">&nbsp;输出:&nbsp;</label> <label class=" fl f14 ml10">&nbsp;输出:&nbsp;</label>
<input type="text" class="fl h26 w186 mb10" name="output[<%= homework_test.id%>]" value="<%= homework_test.output%>"/> <input type="text" class="fl h26 w200 mb10" name="output[<%= homework_test.id%>]" value="<%= homework_test.output%>"/>
</li> </li>
<li> <li>
<a class="icon_add ml10 " href="javascript:void(0);" title="添加测试" onclick="add_programing_test($(this).parent().parent())"></a> <a class="icon_add ml10 " href="javascript:void(0);" title="添加测试" onclick="add_programing_test($(this).parent().parent())"></a>
@ -107,11 +107,11 @@
<div> <div>
<li> <li>
<label class="label02">&nbsp;测试输入:&nbsp;</label> <label class="label02">&nbsp;测试输入:&nbsp;</label>
<input type="text" class="fl h26 w186 mb10" name="input[0]" /> <input type="text" class="fl h26 w200 mb10" name="input[0]" />
</li> </li>
<li > <li >
<label class=" fl f14 ml10">&nbsp;输出:&nbsp;</label> <label class=" fl f14 ml10">&nbsp;输出:&nbsp;</label>
<input type="text" class="fl h26 w186 mb10" name="output[0]" /> <input type="text" class="fl h26 w200 mb10" name="output[0]" />
</li> </li>
<li> <li>
<a class="icon_add ml10 " href="javascript:void(0);" title="添加测试" onclick="add_programing_test($(this).parent().parent())"></a> <a class="icon_add ml10 " href="javascript:void(0);" title="添加测试" onclick="add_programing_test($(this).parent().parent())"></a>

View File

@ -16,7 +16,7 @@
<div class="cl"></div> <div class="cl"></div>
<input type="radio" class="mb20 fl" name="homework_common_type" value="2" id="homework_detail_programing_radio"/> <input type="radio" class="mb20 fl" name="homework_common_type" value="2" id="homework_detail_programing_radio"/>
<span class="ml5 fl"> <span class="ml5 fl">
自动评测的编程作业支持C++程序的自动评分) 自动评测的编程作业支持C程序的自动评分
</span> </span>
<div class="cl"></div> <div class="cl"></div>
<a href="javascript:void(0);" class=" orange_btn" onclick="$(this).parent().submit();"> <a href="javascript:void(0);" class=" orange_btn" onclick="$(this).parent().submit();">

View File

@ -35,6 +35,16 @@
<li> <li>
<%= link_to l(:label_project_tool_response) ,project_feedback_path(@project)%> <%= link_to l(:label_project_tool_response) ,project_feedback_path(@project)%>
</li> </li>
<li>
<% if User.current.admin? %>
<%= link_to l(:label_project_dts_new) ,dts_rep_project_path(@project), data: { confirm:'你确定要进行DTS测试吗' } %>
<% end %>
</li>
<li>
<% if User.current.admin? %>
<%= link_to l(:label_project_dts_yun) ,dts_yun_project_path(@project) %>
<% end %>
</li>
<!--<li>--> <!--<li>-->
<!--<%# unless @project.enabled_modules.where("name = 'dts'").empty? %>--> <!--<%# unless @project.enabled_modules.where("name = 'dts'").empty? %>-->
<!--<%#= link_to l(:project_module_dts) ,share_show_path(@project) %>--> <!--<%#= link_to l(:project_module_dts) ,share_show_path(@project) %>-->

View File

@ -0,0 +1,30 @@
<div class="project_r_h">
<h2 class="project_h22"><%= l(:label_project_dts_statics) %></h2>
</div>
<p class="fr f14 ">语言:<span style="color: red">Java</span> 总文件数:<span style="color: red">361</span> 代码行数:<span style="color: red">48662</span></p>
<!--<p class="box_h3" style="text-align:center; padding-top: 20px; ">具体测试结果</p>-->
<!--<div style="font-size: 14px;">-->
<!--<p class="">描叙:</p>-->
<!--<p style="padding-left: 10px;color:#ACAEB1 "><%#= @dts.Description %></p>-->
<!--</div>-->
<% @dts.each do |dt| %>
<table width="600" border="2" bordercolor="red" style="padding-top: 10px; padding-left: 30px;">
<tr>
<td align="center" bgcolor="#999999" style="width: 80px"><strong>错误变量</strong></td>
<td style="width: 120px"><%= dt.Variable %></td>
<td align="center" bgcolor="#999999" style="width: 80px"><strong>起始行</strong></td>
<td style="width: 120px"><%= dt.StartLine %></td>
<td align="center" bgcolor="#999999" style="width: 80px"><strong>IP行</strong></td>
<td><%= dt.IPLine %></td>
</tr>
<tr>
<td align="center" bgcolor="#999999"><strong>缺陷代码</strong></td>
<td colspan="5"><%= dt.IPLineCode %></td>
</tr>
<tr>
<td align="center" bgcolor="#999999"><strong>错误描述</strong></td>
<td colspan="5"><%= dt.Description %></td>
</tr>
</table>
<% end %>

View File

@ -0,0 +1,3 @@
<div class="project_r_h">
<h2 class="project_h22"><%= l(:label_project_dts_yun) %></h2>
</div>

View File

@ -72,4 +72,5 @@
<% end%> <% end%>
</div><!---ping_box end---> </div><!---ping_box end--->
<a href="javascript:void(0);" class="fr c_blue mt5 mb5" onclick="$('#about_hwork_<%= @work.id%>').html('');">收起</a> <a href="javascript:void(0);" class="fr c_blue mt5 mb5" onclick="$('#about_hwork_<%= @work.id%>').html('');">收起</a>
<div class="cl"></div>
</div><!---show_hwork end---> </div><!---show_hwork end--->

View File

@ -1,12 +1,11 @@
<% if @journal_destroyed.nil? %> <% if @journal_destroyed.nil? %>
alert('<%=l(:notice_failed_delete)%>'); alert('<%=l(:notice_failed_delete)%>');
<% elsif (['Principal','Project','Course', 'Bid', 'Contest', 'Softapplication'].include? @journal_destroyed.jour_type)%> <% elsif (['Principal','Project','Course', 'Bid', 'Contest', 'Softapplication'].include? @journal_destroyed.jour_type)%>
<% if @user && @jours_count%> <% if @is_user%>
$("#nh_jours_<%= @journal_destroyed.id %>",$("div[nhname='container']",$("#nh_messages"))).remove(); $("#nh_jours_<%= @journal_destroyed.id %>",$("div[nhname='container']",$("#nh_messages"))).remove();
var params = init_list_more_div_params($("#nh_messages")); var params = init_list_more_div_params($("#nh_messages"));
change_status_4_list_more_div(params); change_status_4_list_more_div(params);
<% else %> <% else %>
<% if @bid && @jours_count %> <% if @bid && @jours_count %>
$('#jours_count').html("<%= @jours_count %>"); $('#jours_count').html("<%= @jours_count %>");
<% elsif @course && @jours_count%> <% elsif @course && @jours_count%>
@ -24,3 +23,4 @@
$('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user, :feedback_pages => @feedback_pages})) %>'); $('#message').html('<%= escape_javascript(render(:partial => 'words/message', :locals => {:jour => @jour, :state => false, :user => @user, :feedback_pages => @feedback_pages})) %>');
$('#new_form_reference_user_id').val(""); $('#new_form_reference_user_id').val("");
<% end %> <% end %>

View File

@ -90,6 +90,10 @@ zh:
label_project_tool_response: 用户反馈 label_project_tool_response: 用户反馈
label_project_news: 项目新闻 label_project_news: 项目新闻
label_project_dts_new: DTS测试
label_project_dts_statics: DTS缺陷报告
label_project_dts_yun: 云化部署
label_project_overview: "项目简介" label_project_overview: "项目简介"
label_expend_information: 展开更多信息 label_expend_information: 展开更多信息
label_project_create: "新建了项目" label_project_create: "新建了项目"

View File

@ -385,6 +385,8 @@ RedmineApp::Application.routes.draw do
get 'feedback', :action => 'feedback', :as => 'project_feedback' get 'feedback', :action => 'feedback', :as => 'project_feedback'
get 'watcherlist', :action=> 'watcherlist' get 'watcherlist', :action=> 'watcherlist'
get 'dts_rep', :action=> 'dts_rep'
get 'dts_yun', :action=> 'dts_yun'
get 'invite_members', :action=> 'invite_members' get 'invite_members', :action=> 'invite_members'
get 'invite_members_by_mail', :action=> 'invite_members_by_mail' get 'invite_members_by_mail', :action=> 'invite_members_by_mail'
get 'send_mail_to_member', :action => 'send_mail_to_member' get 'send_mail_to_member', :action => 'send_mail_to_member'

View File

@ -0,0 +1,22 @@
class CreateDts < ActiveRecord::Migration
def change
create_table :dts do |t|
t.string :IPLineCode
t.string :Description
t.string :Num
t.string :Variable
t.string :TraceInfo
t.string :Method
t.string :File
t.string :IPLine
t.string :Review
t.string :Category
t.string :Defect
t.string :PreConditions
t.string :StartLine
t.integer :project_id
t.timestamps
end
end
end

View File

@ -11,12 +11,14 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150715070534) do ActiveRecord::Schema.define(:version => 20150719092427) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
t.string "act_type", :null => false t.string "act_type", :null => false
t.integer "user_id", :null => false t.integer "user_id", :null => false
t.integer "activity_container_id"
t.string "activity_container_type", :default => ""
end end
add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type"
@ -473,6 +475,25 @@ ActiveRecord::Schema.define(:version => 20150715070534) do
add_index "documents", ["created_on"], :name => "index_documents_on_created_on" add_index "documents", ["created_on"], :name => "index_documents_on_created_on"
add_index "documents", ["project_id"], :name => "documents_project_id" add_index "documents", ["project_id"], :name => "documents_project_id"
create_table "dts", :force => true do |t|
t.string "IPLineCode"
t.string "Description"
t.string "Num"
t.string "Variable"
t.string "TraceInfo"
t.string "Method"
t.string "File"
t.string "IPLine"
t.string "Review"
t.string "Category"
t.string "Defect"
t.string "PreConditions"
t.string "StartLine"
t.integer "project_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "enabled_modules", :force => true do |t| create_table "enabled_modules", :force => true do |t|
t.integer "project_id" t.integer "project_id"
t.string "name", :null => false t.string "name", :null => false
@ -1357,6 +1378,7 @@ ActiveRecord::Schema.define(:version => 20150715070534) do
t.string "student_realname" t.string "student_realname"
t.string "location_city" t.string "location_city"
t.integer "school_id" t.integer "school_id"
t.string "description", :default => ""
end end
create_table "user_grades", :force => true do |t| create_table "user_grades", :force => true do |t|
@ -1462,6 +1484,17 @@ ActiveRecord::Schema.define(:version => 20150715070534) do
add_index "versions", ["project_id"], :name => "versions_project_id" add_index "versions", ["project_id"], :name => "versions_project_id"
add_index "versions", ["sharing"], :name => "index_versions_on_sharing" add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
create_table "visitors", :force => true do |t|
t.integer "user_id"
t.integer "master_id"
t.datetime "updated_on"
t.datetime "created_on"
end
add_index "visitors", ["master_id"], :name => "index_visitors_master_id"
add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on"
add_index "visitors", ["user_id"], :name => "index_visitors_user_id"
create_table "watchers", :force => true do |t| create_table "watchers", :force => true do |t|
t.string "watchable_type", :default => "", :null => false t.string "watchable_type", :default => "", :null => false
t.integer "watchable_id", :default => 0, :null => false t.integer "watchable_id", :default => 0, :null => false

View File

@ -506,14 +506,51 @@ function submit_homework(id)
} }
} }
function regexHomeworkCommonName()
{
var name = $.trim($("#homework_attach_name").val());
if(name=="")
{
$("#homework_attach_name_span").text("作品名称不能为空");
$("#homework_attach_name_span").css('color','#ff0000');
return false;
}
else
{
$("#homework_attach_name_span").text("填写正确");
$("#homework_attach_name_span").css('color','#008000');
return true;
}
}
function regexHomeworkCommonDescription()
{
var name = $.trim($("#homework_attach_description").val());
if(name=="")
{
$("#homework_attach_description_span").text("作品描述不能为空");
$("#homework_attach_description_span").css('color','#ff0000');
return false;
}
else
{
$("#homework_attach_description_span").text("填写正确");
$("#homework_attach_description_span").css('color','#008000');
return true;
}
}
function submit_homework_form(){if(regexHomeworkCommonName()&&regexHomeworkCommonDescription()){$('#new_homework_attach').submit();}}
//增加测试结果 //增加测试结果
function add_programing_test(obj) { function add_programing_test(obj) {
var now = new Date().getTime(); var now = new Date().getTime();
obj.after("<div><li><label class='label02'>&nbsp;测试输入:&nbsp;</label><input type='text' class='fl h26 w186 mb10' name='input[" + now +"]'' />" + obj.after("<div><li><label class='label02'>&nbsp;测试输入:&nbsp;</label><input type='text' class='fl h26 w200 mb10' name='input[" + now +"]'' />" +
"</li><li ><label class='fl f14 ml10'>&nbsp;输出:&nbsp;</label><input type='text' class='fl h26 w186 mb10' name='output[" + now +"]' />" + "</li><li ><label class='fl f14 ml10'>&nbsp;输出:&nbsp;</label><input type='text' class='fl h26 w200 mb10' name='output[" + now +"]' />" +
"</li><li><a class='icon_add ml10' href='javascript:void(0);' title='添加测试' onclick='add_programing_test($(this).parent().parent())'></a>" + "</li><li><a class='icon_add ml10' href='javascript:void(0);' title='添加测试' onclick='add_programing_test($(this).parent().parent())'></a>" +
"<a class='icon_remove' href='javascript:void(0);' title='删除测试' onclick='remove_programing_test($(this).parent().parent())'></a>" + "<a class='icon_remove' href='javascript:void(0);' title='删除测试' onclick='remove_programing_test($(this).parent().parent())'></a>" +
"<span class='green_btn fl ml5 mt1'>测试</span></li><div class='cl'></div></div>"); "</li><div class='cl'></div></div>");
} }
//删除测试结果 //删除测试结果
function remove_programing_test(obj) { function remove_programing_test(obj) {

View File

@ -609,6 +609,7 @@ a:hover.Reply_pic{border:1px solid #64bdd9;}
.w547{ width:544px;} .w547{ width:544px;}
.w196{ width:196px;} .w196{ width:196px;}
.w186{ width:186px;} .w186{ width:186px;}
.w200{width: 200px;}
.w459{ width:459px;} .w459{ width:459px;}
.hwork_new_set{border:1px dashed #CCC; background:#f5f5f5; text-align:center; padding:10px 0; margin-bottom:10px;} .hwork_new_set{border:1px dashed #CCC; background:#f5f5f5; text-align:center; padding:10px 0; margin-bottom:10px;}
.hwork_new_grey{background:#dbdbdb; width:610px; padding:10px 20px; margin:0 auto; text-align:left; margin-bottom:5px;} .hwork_new_grey{background:#dbdbdb; width:610px; padding:10px 20px; margin:0 auto; text-align:left; margin-bottom:5px;}

View File

@ -12,6 +12,7 @@ a:hover.lg-foot{ color:#787b7e;}
/*右侧内容--动态*/ /*右侧内容--动态*/
.project_r_h{ width:670px; height:40px; background:#eaeaea; margin-bottom:10px;} .project_r_h{ width:670px; height:40px; background:#eaeaea; margin-bottom:10px;}
.project_h2{ background:#64bdd9; color:#fff; height:33px; width:90px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;} .project_h2{ background:#64bdd9; color:#fff; height:33px; width:90px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;}
.project_h22{ background:#64bdd9; color:#fff; height:33px; width:124px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;}
.project_r_box{ border:1px solid #e2e1e1; width:670px; margin-top:10px;} .project_r_box{ border:1px solid #e2e1e1; width:670px; margin-top:10px;}
.project_h3 { color:#646464; font-size:14px; padding:0 10px; border-bottom:1px solid #e2e1e1;} .project_h3 { color:#646464; font-size:14px; padding:0 10px; border-bottom:1px solid #e2e1e1;}
a.more{ float:right; font-size:12px; font-weight:normal; color:#a9a9a9; margin-top:3px;} a.more{ float:right; font-size:12px; font-weight:normal; color:#a9a9a9; margin-top:3px;}
@ -752,3 +753,4 @@ a:hover.Reply_pic{border:1px solid #64bdd9;}
#about_newtalk{ display:none;} #about_newtalk{ display:none;}

19
spec/factories/dts.rb Normal file
View File

@ -0,0 +1,19 @@
FactoryGirl.define do
factory :dt, :class => 'Dts' do
IPLineCode "MyString"
Description "MyString"
Num "MyString"
Variable "MyString"
TraceInfo "MyString"
Method "MyString"
File "MyString"
IPLine "MyString"
Review "MyString"
Category "MyString"
Defect "MyString"
PreConditions "MyString"
StartLine "MyString"
project_id 1
end
end

5
spec/models/dts_spec.rb Normal file
View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe Dts, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end