Merge branch 'develop' of https://git.trustie.net/jacknudt/trustieforge into develop

This commit is contained in:
daiao 2017-03-02 09:45:45 +08:00
commit abcaf33a17
10 changed files with 101 additions and 67 deletions

View File

@ -853,7 +853,9 @@ class ProjectsController < ApplicationController
params = {jobName: jobName, pipeLine: pipeLine}
res = uri_exec uri, params
training_project_notice res
@project.update_attribute(:training_status, 1)
if res['code'] == 0
@project.update_attribute(:training_status, 1)
end
end
def training_project_update
@ -863,7 +865,9 @@ class ProjectsController < ApplicationController
params = {jobName: jobName, pipeLine: pipeLine}
res = uri_exec uri, params
training_project_notice res
@project.update_attribute(:training_status, 1)
if res['code'] == 0
@project.update_attribute(:training_status, 1)
end
end
def training_project_notice res
@ -891,18 +895,30 @@ class ProjectsController < ApplicationController
gitlab_address = Redmine::Configuration['gitlab_address']
gitUrl = gitlab_address.to_s+"/"+@project.owner.to_s+"/"+ rep_identify + "."+"git"
gitUrl = Base64.encode64(gitUrl)
if @training_task.status == 0
params = {:jobName => "#{jobName}", :taskId => "#{taskId}", :step => "#{step}", :gitUrl => "#{gitUrl}"}
uri = URI.parse("http://123.59.135.74:9999/jenkins-exec/api/buildJob")
begin
res = uri_exec uri, params
# 任务开启成功后创建一条留言提示,并发布
@training_task.update_attribute(:status, 2)
return
# 轮询获取
for i in 0..60 do
sleep(1)
result = TrainingTask.where(:id => @training_task.id).first.try(:result)
if (result != 0)
break
end
end
# @training_task = TrainingTask.find(@training_task.id)
@page = params[:page] ? params[:page].to_i + 1 : 0
@events_pages = ForgeActivity.where("project_id = ? and forge_act_type in ('Issue', 'TrainingTask','Message','News', 'Project', 'Attachment','Commit')", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10)
rescue Exception => e
puts e
end
end
respond_to do |format|
format.js
end
end
def uri_exec uri, params
@ -931,7 +947,7 @@ class ProjectsController < ApplicationController
forked_count = @project.forked_count.to_i + 1
@project.update_attributes(:forked_count => forked_count)
# 发布实训任务,只发布实训任务的第一个
publish_training_tasks(@project.id, new_training_project.id, 1)
publish_training_tasks(@project.id, new_training_project.id, 1, @project.user_id)
end
end
end
@ -944,7 +960,7 @@ class ProjectsController < ApplicationController
def training_task_status
status = params[:status].to_i
task_id = params[:taskId]
message = Base64.decode64(params[:msg])
message = Base64.decode64(params[:msg]) unless params[:msg].blank?
begin
@training_task = TrainingTask.find(task_id)
# 如果已经执行成功过,则不重复执行
@ -961,11 +977,12 @@ class ProjectsController < ApplicationController
ActiveRecord::Base.transaction do
if position < original_tasks_count
# 继续发布下一个任务
publish_training_tasks original_project_id, @training_task.project_id, position + 1
publish_training_tasks original_project_id, @training_task.project_id, position + 1, original_project.user_id
end
@training_task.update_attribute(:status, 1)
@training_task.update_attribute(:result, 1)
# 创建一条回复提醒
content = (position == original_tasks_count) ? "恭喜您,您已经完成了实训项目的所有任务" : "恭喜您,您已经完成了本任务"
content = (position == original_tasks_count) ? "恭喜您,您已经完成了实训项目的所有任务" : "恭喜您,您已经完成了本任务,请继续下一任务"
add_training_task_journal(content, original_project.user_id)
end
else
@ -973,6 +990,7 @@ class ProjectsController < ApplicationController
add_training_task_journal(content, original_project.user_id)
# 失败的时候可以继续提交
@training_task.update_attribute(:status, 0)
@training_task.update_attribute(:result, 2)
end
end
@ -989,7 +1007,7 @@ class ProjectsController < ApplicationController
# 实训开启成功后,发布第一个任务
# REDO:失败后提醒用户,及相关处理
def publish_training_tasks original_project_id, new_training_project_id, position
def publish_training_tasks original_project_id, new_training_project_id, position, user_id
original_task = TrainingTask.where(:project_id => original_project_id, :position => position).first
training_task = TrainingTask.new
training_task.save_attachments(params[:attachments] || (params[:training_task] && params[:training_task][:uploads]))
@ -998,13 +1016,12 @@ class ProjectsController < ApplicationController
training_task.position = original_task.position
training_task.project_id = new_training_project_id
training_task.author_id = User.current.id
if training_task.save
respond_to do |format|
format.html{redirect_to project_url(new_training_project_id)}
end
else
raise "create task failed"
begin
training_task.save
rescue Exception => e
puts e
end
end
# 复制项目

View File

@ -1,3 +1,4 @@
<% project = Project.find(project_id) %>
<% unless activity.author.nil? %>
<div class="container-big mt10" id="user_activity_<%= user_activity_id%>">
<div class="pr">
@ -11,7 +12,7 @@
TO
<%= link_to activity.project.name.to_s+" | 实训任务", project_training_tasks_path(activity.project), :class => "newsBlue ml15"%>
</div>
<% if !@project.is_child_training_project? && User.current.logged? && (is_project_manager?(User.current.id, project_id) || activity.author_id == User.current.id) %>
<% if !project.is_child_training_project? && User.current.logged? && (is_project_manager?(User.current.id, project_id) || activity.author_id == User.current.id) %>
<div class="homepagePostSetting">
<ul>
<li class="homepagePostSettingIcon">
@ -46,7 +47,7 @@
<div class="mb10" style="font-weight:normal;">
<%= render :partial=>"attachments/activity_attach", :locals=>{:activity => activity} %>
</div>
<% if @project.is_child_training_project? %>
<% if project.is_child_training_project? %>
<div id="training_project_task_status_<%= activity.id %>">
<%= render :partial => "training_tasks/action_status", :locals => {:activity => activity} %>
</div>

View File

@ -42,14 +42,16 @@
<%= render :partial => 'projects/act_issues', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :project_id => activity.project_id} %>
<% when "TrainingTask" %>
<% if User.current.admin? || is_project_manager?(User.current.id, @project.id) || is_project_manager?(User.current, @project.try(:forked_from_project_id)) %>
<%= render :partial => 'projects/act_training_tasks', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :project_id => activity.project_id} %>
<div id="project_show_training_task_<%= @project.id %>">
<%= render :partial => 'projects/act_training_tasks', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :project_id => activity.project_id} %>
</div>
<% end %>
<!--message-->
<% when "Message" %>
<%= render :partial => 'projects/act_messages', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :is_course => 1, :is_board => 0} %>
<!--Attachment -->
<% when "Attachment" %>
<%= render :partial => 'projects/project_attachment', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id } %>
<%#= render :partial => 'projects/project_attachment', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id } %>
<% when "Commit" %>
<%= render :partial => 'projects/project_commit', :locals => {:activity => activity.forge_act, :user_activity_id => activity.id, :identifier => get_rep_identifier_by_project(@project) } %>
<% end %>

View File

@ -34,8 +34,9 @@
</ul>
<div class="cl"></div>
</div>
<%= render :partial => "project_activities", :locals => {:forge_acts => @events_pages, :page => 0, :type => @type} %>
<div id="project_act_show_<%= @project.id %>">
<%= render :partial => "project_activities", :locals => {:forge_acts => @events_pages, :page => 0, :type => @type} %>
</div>
</div>
<script>
autoUrl('project_description_code');

View File

@ -1,2 +1,4 @@
$("#training_project_task_status_<%= @training_task.id %>").html('<%= escape_javascript( render :partial => 'training_tasks/action_status', :locals => {:activity => @training_task}) %>');
$("#training_task_details").html('<%= escape_javascript( render :partial => 'training_tasks/training_task_details', :locals => {:activity => @training_task, :project_id => @project.id}) %>');
//$("#training_project_task_status_<%#= @training_task.id %>").html('<%#= escape_javascript( render :partial => 'training_tasks/action_status', :locals => {:activity => @training_task}) %>');
//$("#training_task_details").html('<%#= escape_javascript( render :partial => 'training_tasks/training_task_details', :locals => {:activity => @training_task, :project_id => @project.id}) %>');
//$("#project_show_training_task_<%#= @training_task.project_id %>").html('<%#= escape_javascript( render :partial => 'projects/act_training_tasks', :locals => {:activity => @training_task, :user_activity_id => @training_task.id, :project_id => @training_task.project_id}) %>');
$("#project_act_show_<%= @project.id %>").html('<%= escape_javascript( render :partial => 'projects/project_activities', :locals => {:forge_acts => @events_pages, :page => 0, :type => @type}) %>');

View File

@ -1 +1 @@
$("#task_action_status_<%= @training_task.id %>").html('<%= escape_javascript( render :partial => 'training_tasks/action_status', :locals => {:activity => @training_task}) %>');
alert("test");

View File

@ -6,11 +6,19 @@
<span class="task-display-span alert-blue mt10">当前任务正在后台测评中,稍后将显示您的任务完成情况......</span>
<% else %>
<% if User.current.member_of?(@project) && @project.is_child_training_project? %>
<%= link_to "提交评测", task_execute_project_path(@project, :training_task_id => activity.id), :class => "task-display-span bBlue mt10", :remote => true %>
<div id="training_tasl_commit">
<%= link_to "提交评测", task_execute_project_path(@project, :training_task_id => activity.id), :class => "task-display-span bBlue mt10", :onclick => "training_task_submmit();", :remote => true %>
</div>
<% end %>
<% end %>
</div>
<script>
function training_task_submmit(){
$("#training_tasl_commit").html("<span class='task-display-span alert-blue mt10'>当前任务正在后台测评中,稍后将显示您的任务完成情况......</span>")
}
</script>

View File

@ -32,9 +32,7 @@
<%= render :partial => 'task_attachments', :locals => {:training_task => @training_task} %>
</div>
<div class="cl"></div>
<div id="training_project_task_status_<%= @training_task.id %>">
<%= render :partial => "training_tasks/action_status", :locals => {:activity => @training_task} %>
</div>
</div>
<script type="text/javascript">

View File

@ -1,43 +1,43 @@
class HomeworkBankMigration < ActiveRecord::Migration
def up
add_column :homework_commons, :homework_bank_id, :integer
add_column :homework_commons, :is_update, :boolean, :default => false
count =Course.all.count / 30 + 2
transaction do
for i in 1 ... count do i
Course.page(i).per(30).each do |course|
if course.is_delete == 0
course.homework_commons.each do |homework|
unless homework.user.homework_banks.select("name").to_s.include?(homework.name)
homework_bank = HomeworkBank.create(:user_id => homework.user_id, :name => homework.name, :description => homework.description, :homework_type => homework.homework_type,
:quotes => 1, :is_public => course.is_public, :applicable_syllabus => course.syllabus.title, :homework_common_id => homework.id, :created_at => homework.created_at)
if homework.homework_type == 2 && homework.homework_detail_programing
homework_bank.update_attributes(:language => homework.homework_detail_programing.language, :standard_code => homework.homework_detail_programing.standard_code)
homework.homework_tests.each do |test|
homework_bank.homework_bank_tests << HomeworkBankTest.create(
input: test.input,
output: test.output,
test_type: true
)
end
homework.homework_samples.each do |test|
homework_bank.homework_bank_tests << HomeworkBankTest.create(
input: test.input,
output: test.output,
test_type: false
)
end
elsif homework.homework_type == 3 && homework.homework_detail_group
homework_bank.update_attributes(:min_num => homework.homework_detail_group.min_num, :max_num => homework.homework_detail_group.max_num, :base_on_project => homework.homework_detail_group.base_on_project)
end
homework.update_column('homework_bank_id', homework_bank.id)
end
end
end
end
end
end
# add_column :homework_commons, :homework_bank_id, :integer
# add_column :homework_commons, :is_update, :boolean, :default => false
#
# count =Course.all.count / 30 + 2
# transaction do
# for i in 1 ... count do i
# Course.page(i).per(30).each do |course|
# if course.is_delete == 0
# course.homework_commons.each do |homework|
# unless homework.user.homework_banks.select("name").to_s.include?(homework.name)
# homework_bank = HomeworkBank.create(:user_id => homework.user_id, :name => homework.name, :description => homework.description, :homework_type => homework.homework_type,
# :quotes => 1, :is_public => course.is_public, :applicable_syllabus => course.syllabus.title, :homework_common_id => homework.id, :created_at => homework.created_at)
# if homework.homework_type == 2 && homework.homework_detail_programing
# homework_bank.update_attributes(:language => homework.homework_detail_programing.language, :standard_code => homework.homework_detail_programing.standard_code)
# homework.homework_tests.each do |test|
# homework_bank.homework_bank_tests << HomeworkBankTest.create(
# input: test.input,
# output: test.output,
# test_type: true
# )
# end
# homework.homework_samples.each do |test|
# homework_bank.homework_bank_tests << HomeworkBankTest.create(
# input: test.input,
# output: test.output,
# test_type: false
# )
# end
# elsif homework.homework_type == 3 && homework.homework_detail_group
# homework_bank.update_attributes(:min_num => homework.homework_detail_group.min_num, :max_num => homework.homework_detail_group.max_num, :base_on_project => homework.homework_detail_group.base_on_project)
# end
# homework.update_column('homework_bank_id', homework_bank.id)
# end
# end
# end
# end
# end
# end
end
def down

View File

@ -0,0 +1,5 @@
class AddResultToTrainingTask < ActiveRecord::Migration
def change
add_column :training_tasks, :result, :integer, :default => 0
end
end