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

dev_cs
杨树明 6 years ago
commit 6127cc2ca9

@ -253,7 +253,10 @@ class ApplicationController < ActionController::Base
if Digest::MD5.hexdigest(content) == params[:chinaoocKey]
user = open_class_user
start_user_session(user) if user
if user
start_user_session(user)
set_autologin_cookie(user)
end
User.current = user
end
end

@ -51,7 +51,7 @@ class CommonsController < ApplicationController
200
end
when 'journals_for_message'
course = @object.jour&.course || @object.jour&.student_work&.homework_common&.course
course = @object&.jour_type.to_s == "StudentWorksScore" ? @object.jour&.student_work&.homework_common&.course : @object.jour&.course
if current_user.course_identity(course) >= Course::STUDENT && @object.user != current_user
403
else

@ -128,8 +128,8 @@ class CoursesController < ApplicationController
# POST /courses
# POST /courses.json
def create
ActiveRecord::Base.transaction do
begin
ActiveRecord::Base.transaction do
@course = Course.new(name: params[:name], class_period: params[:class_period], credit: params[:credit],
end_date: params[:end_date], is_public: params[:is_public], school_id: @school.id,
authentication: params[:authentication], professional_certification: params[:professional_certification])
@ -174,13 +174,14 @@ class CoursesController < ApplicationController
course_module_types = params[:course_module_types]
@course.create_course_modules(course_module_types)
end
end
CreateSubjectCourseStudentJob.perform_later(@course.id) if @course.subject && @course.subject.subject_appointments.count > 0
rescue => e
uid_logger_error(e.message)
tip_exception(e.message)
raise ActiveRecord::Rollback
end
end
end
# PATCH/PUT /courses/1
# PATCH/PUT /courses/1.json

@ -0,0 +1,22 @@
class CreateSubjectCourseStudentJob < ApplicationJob
queue_as :default
def perform(course_id)
course = Course.find_by(id: course_id)
return if course.blank? || course.subject.blank?
attrs = %i[course_id user_id role created_at updated_at]
same_attrs = {course_id: course.id, role: 4}
Rails.logger.info("1:course.students.count:##{course.students.count}")
CourseMember.bulk_insert(*attrs) do |worker|
course.subject.subject_appointments.each do |app|
Rails.logger.info("##{course.students.where(user_id: app.user_id)}")
next if course.students.where(user_id: app.user_id).any?
worker.add same_attrs.merge(user_id: app.user_id)
end
end
Rails.logger.info("2:course.students.count:##{course.students.count}")
course.subject.subject_appointments.destroy_all
end
end

@ -10,9 +10,11 @@ json.results do
# 去除开头标点符号
reg = /^[,。?:;‘’!“”—……、]/
# 附件的替换
atta_reg = /!\[\]\(\/api\/attachments\/\d+\)/
highlights[:description]&.first&.sub!(reg, '').sub!(atta_reg, '')
highlights[:content]&.first&.sub!(reg, '').sub!(atta_reg, '')
atta_reg = /!\[.*]\(\/api\/attachments\/\d+\)/
highlights[:description]&.first&.sub!(reg, '')
highlights[:description]&.map{|des| des.gsub!(atta_reg, '')}
highlights[:content]&.first&.sub!(reg, '')
highlights[:content]&.map{|des| des.gsub!(atta_reg, '')}
json.content highlights
end

@ -8,9 +8,12 @@ json.shixun_list do
# 去除开头标点符号
reg = /^[,。?:;‘’!“”—……、]/
# 附件的替换
atta_reg = /!\[\]\(\/api\/attachments\/\d+\)/
highlights[:description]&.first&.sub!(reg, '')&.sub!(atta_reg, '')
highlights[:content]&.first&.sub!(reg, '')&.sub!(atta_reg, '')
atta_reg = /!\[.*]\(\/api\/attachments\/\d+\)/
highlights[:description]&.first&.sub!(reg, '')
highlights[:description]&.map{|des| des.gsub!(atta_reg, '')}
highlights[:content]&.first&.sub!(reg, '')
highlights[:content]&.map{|des| des.gsub!(atta_reg, '')}
json.title highlights.delete(:name)&.join('...') || obj.searchable_title
json.description highlights[:description]&.join('...') || Util.extract_content(obj.description)[0..300]&.sub!(atta_reg, '')

@ -22,7 +22,7 @@ import 'moment/locale/zh-cn';
import './yslexercisetable.css';
import {getImageUrl, toPath} from 'educoder';
import CheckBoxGroup from "../../page/component/CheckBoxGroup";
import NoneData from '../../../modules/courses/coursesPublic/NoneData'
const Search = Input.Search;
const RadioGroup = Radio.Group;
const CheckboxGroup = Checkbox.Group;
@ -1217,6 +1217,7 @@ class Studentshavecompletedthelist extends Component {
)
},
],
exercise_status:0,
}
// console.log("Studentshavecompletedthelist");
// console.log(props.current_status);
@ -1277,6 +1278,20 @@ class Studentshavecompletedthelist extends Component {
}catch (e) {
}
try {
if(this.props.Commonheadofthetestpaper.exercise_status !== undefined){
this.setState({
exercise_status:this.props.Commonheadofthetestpaper.exercise_status,
})
}else{
this.setState({
exercise_status:0,
})
}
}catch (e) {
}
}
componentWillReceiveProps = (nextProps) => {
@ -2065,11 +2080,11 @@ class Studentshavecompletedthelist extends Component {
this.setState({
loadingstate: false,
})
console.log(response);
console.log(1997);
// console.log(response);
// console.log(1997);
this.Generatenewdatasy(response.data.exercise_users, response);
}).catch((error) => {
console.log(error)
// console.log(error)
this.setState({
loadingstate: false,
})
@ -2472,7 +2487,7 @@ class Studentshavecompletedthelist extends Component {
render() {
const isAdmin = this.props.isAdmin();
let {data, datas, page, columns, course_groupyslsthree, columnstwo, styletable, course_groupyslstwodatas, limit, course_groupysls, course_groupyslstwodata, course_groupyslstwo, teacherlists, Teacherliststudentlist, order, columnss, course_groupsdatas, course_groups, Evaluationarray, unlimited, unlimiteds, unlimitedtwo, teacherlist, searchtext, loadingstate, review, nocomment, commented, unsubmitted, submitted, columnsys, exercise_users,mylistansum} = this.state;
let {data, datas, page, columns, course_groupyslsthree, columnstwo, styletable,exercise_status, course_groupyslstwodatas, limit, course_groupysls, course_groupyslstwodata, course_groupyslstwo, teacherlists, Teacherliststudentlist, order, columnss, course_groupsdatas, course_groups, Evaluationarray, unlimited, unlimiteds, unlimitedtwo, teacherlist, searchtext, loadingstate, review, nocomment, commented, unsubmitted, submitted, columnsys, exercise_users,mylistansum} = this.state;
// console.log("Studentshavecompletedthelist");
// console.log(this.props.current_status);
return (
@ -2483,6 +2498,13 @@ class Studentshavecompletedthelist extends Component {
" min-width": " 1200px",
}}>
{/*老师*/}
{
exercise_status===0 || exercise_status===1 ?
<div className="edu-back-white">
<NoneData></NoneData>
</div>
:
<div>
<div className="edu-back-white" >
<ul className="clearfix" style={{padding: '10px 30px 10px 30px'}}>
@ -2680,6 +2702,8 @@ class Studentshavecompletedthelist extends Component {
</div>
: ""
}
</div>
}
</div>
@ -2691,6 +2715,12 @@ class Studentshavecompletedthelist extends Component {
<div>
<div className=" clearfix "
style={{"margin": "0 auto", "padding-bottom": "100px", " min-width": " 1200px"}}>
{
exercise_status === 0 || exercise_status === 1 ?
<div className="edu-back-white">
<NoneData></NoneData>
</div>
:
<div className={"educontent mb20"}>
<div className="edu-back-white" id="graduation_work_list"
@ -2754,7 +2784,7 @@ class Studentshavecompletedthelist extends Component {
</div>
}
</div>
</div>
@ -2766,6 +2796,13 @@ class Studentshavecompletedthelist extends Component {
"padding-bottom": "100px",
" min-width": " 1200px"
}}>
{
exercise_status === 0 || exercise_status === 1 ?
<div className="edu-back-white">
<NoneData></NoneData>
</div>
:
<div>
<div className={"educontent mb20 edu-back-white"}>
<style>
{
@ -2903,6 +2940,8 @@ class Studentshavecompletedthelist extends Component {
: ""
}
</div>
}
</div>
</div>

@ -436,7 +436,7 @@ class Testpapersettinghomepage extends Component{
/>
{
// 教师列表
parseInt(tab[0])==0 && <Studentshavecompletedthelist {...this.props} {...this.state} triggerRef={this.bindRef} setcourse_groupysls={(value)=>this.setcourse_groupysls(value)} current_status = {this.state.current_status}></Studentshavecompletedthelist>
parseInt(tab[0])==0 && <Studentshavecompletedthelist {...this.props} {...this.state} triggerRef={this.bindRef} setcourse_groupysls={(value)=>this.setcourse_groupysls(value)} current_status = {this.state.current_status} Commonheadofthetestpaper={this.state.Commonheadofthetestpaper}></Studentshavecompletedthelist>
}
{/*统计结果*/}

@ -33,6 +33,8 @@ import Startshixuntask from "../coursesPublic/Startshixuntask";
import ModulationModal from "../coursesPublic/ModulationModal";
import HomeworkModal from "../coursesPublic/HomeworkModal";
import ShixunWorkModal from "./Shixunworkdetails/ShixunWorkModal";
import NoneData from '../../../modules/courses/coursesPublic/NoneData'
const Search = Input.Search;
const RadioGroup = Radio.Group;
const CheckboxGroup = Checkbox.Group;
@ -1451,6 +1453,7 @@ class Listofworksstudentone extends Component {
],
yslpros:false,
datajs:[],
homework_status:[],
}
}
@ -1569,7 +1572,8 @@ class Listofworksstudentone extends Component {
allow_late:result.data.allow_late,
loadingstate: false,
computeTimetype:true,
})
homework_status:result.data.homework_status,
});
this.seacthdatat(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,1);
if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") {
@ -1626,7 +1630,8 @@ class Listofworksstudentone extends Component {
code_review: result.data.code_review,
challenges_count:result.data.challenges_count,
view_report:result.data.view_report,
})
homework_status:result.data.homework_status,
});
if (result.data.student_works === undefined || result.data.student_works === null || JSON.stringify(result.data.student_works) === "[]") {
this.seacthdata(result.data);
} else {
@ -2129,7 +2134,8 @@ class Listofworksstudentone extends Component {
code_review: result.data.code_review,
challenges_count:result.data.challenges_count,
view_report:result.data.view_report,
})
homework_status:result.data.homework_status,
});
this.seacthdata(result.data);
this.props.Getdataback(result,result.data);
}
@ -2242,7 +2248,8 @@ class Listofworksstudentone extends Component {
end_immediately: result.data.end_immediately,
code_review: result.data.code_review,
challenges_count:result.data.challenges_count,
})
homework_status:result.data.homework_status,
});
this.seacthdatat(result.data,result.data.student_works,result.data.work_efficiency,result.data.course_group_info,page);
this.props.Getdataback(result,result.data);
// }
@ -3037,7 +3044,7 @@ class Listofworksstudentone extends Component {
})
}
render() {
let {columns,course_groupysls,datajs,isAdmin, course_groupyslstwo, unlimited, unlimitedtwo, course_group_info, orders, task_status, checkedValuesine, searchtext, teacherlist, visible,visibles, game_list,columnsstu,columnsstu2, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state;
let {columns,course_groupysls,datajs,isAdmin,homework_status, course_groupyslstwo, unlimited, unlimitedtwo, course_group_info, orders, task_status, checkedValuesine, searchtext, teacherlist, visible,visibles, game_list,columnsstu,columnsstu2, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state;
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
// console.log(this.state.student_works);
@ -3068,8 +3075,8 @@ class Listofworksstudentone extends Component {
}
return (
this.props.isAdmin() === true ?
(
<div className=" clearfix " style={{margin: "auto" , minWidth:"1200px"}}>
{visible === true ? <ModulationModal
visible={visible}
@ -3143,6 +3150,17 @@ class Listofworksstudentone extends Component {
starttimes={this.state.starttimes}
typs={this.state.typs}
/>
{
homework_status.length===0?
<div className="edu-back-white">
<NoneData></NoneData>
</div>
:
homework_status.length>0 && homework_status[0]==="未发布"?
<div className="edu-back-white">
<NoneData></NoneData>
</div>
:
<div className={"educontent "}>
@ -3387,11 +3405,10 @@ class Listofworksstudentone extends Component {
: ""
}
</div>
}
</div>
)
:
(
<div>
{
teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ?
@ -3473,6 +3490,19 @@ class Listofworksstudentone extends Component {
: ""
}
{
homework_status.length===0?
<div className=" clearfix edu-back-white" style={{margin: "auto" , minWidth:"1200px"}}>
<NoneData></NoneData>
</div>
:
homework_status.length>0 && homework_status[0]==="未发布"?
<div className=" clearfix edu-back-white " style={{margin: "auto" , minWidth:"1200px"}}>
<NoneData></NoneData>
</div>
:
<div className={"educontent "}>
<div className="edu-back-white" style={{width: "1200"}}>
@ -3593,7 +3623,7 @@ class Listofworksstudentone extends Component {
</div>
</div>
}
</div>
:
// 学生能查看别人的
@ -3619,6 +3649,18 @@ class Listofworksstudentone extends Component {
Cancel={() => this.cancelModulationModels()}
/> : ""
}
{
homework_status.length===0?
<div className=" clearfix edu-back-white" style={{margin: "auto" , minWidth:"1200px"}}>
<NoneData></NoneData>
</div>
:
homework_status.length>0 && homework_status[0]==="未发布"?
<div className=" clearfix edu-back-white" style={{margin: "auto" , minWidth:"1200px"}}>
<NoneData></NoneData>
</div>
:
<div className={"educontent mb20"}>
<div >
@ -3807,10 +3849,12 @@ class Listofworksstudentone extends Component {
}
</div>
</div>
}
</div>
}
</div>
)
)
}

@ -86,7 +86,7 @@ class Trainingjobsetting extends Component {
latepenaltytype: false,
unifiedsetting: true,
allowreplenishment: undefined,
completionefficiencyscore: true,
completionefficiencyscore: false,
whethertopay: false,
proportion: undefined,
level: undefined,
@ -120,6 +120,7 @@ class Trainingjobsetting extends Component {
showmodel:false,
code_review:false,
testscripttiptype:false,
end_timebool:false,
late_timesbool:false,
}
@ -1701,6 +1702,8 @@ class Trainingjobsetting extends Component {
flagPageEditstwo:releasetime,
flagPageEditsthrees:deadline,
flagPageEditsfor:endtime,
completionefficiencyscore:true,
latedeductiontwo:20,
unifiedsetting:this.state.unifiedsetting,
})
if(this.state.proportion === "自定义分值"){
@ -1733,6 +1736,8 @@ class Trainingjobsetting extends Component {
hand__e_tip: "",
hand_flags: false,
handclass: undefined,
completionefficiencyscore:false,
latedeductiontwo:0,
unit_e_tip: "",
})
this.refs.targetElementTrainingjobsetting.scrollIntoView();
@ -2139,7 +2144,7 @@ class Trainingjobsetting extends Component {
</div>
<div className=" mt20" style={{marginLeft:"75px"}}>
<span className="c_grey mr10" style={{"color":"#999999"}}>分值</span>
<InputNumber min={0} disabled={!flagPageEdit} max={100} className="ml10 h40 mr10 color-grey-9"
<InputNumber min={0} disabled={!this.state.completionefficiencyscore} max={100} className="ml10 h40 mr10 color-grey-9"
style={{width: "100px","color":"#999999"}}
onChange={this.changeTopicNametwo}
value={this.state.latedeductiontwo}/>

@ -1064,8 +1064,7 @@ class ShixunHomework extends Component{
<div className="edu-back-white">
<p className="clearfix padding30 bor-bottom-greyE">
<p style={{height: '20px'}}>
{/*<span className="font-18 fl color-dark-21">{datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"}</span>*/}
<span className="font-18 fl color-dark-21">实训作业</span>
<span className="font-18 fl color-dark-21">{datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"}</span>
<li className="fr">
{datas===undefined?"":datas.homeworks && datas.homeworks.length>1?this.props.isAdminOrCreator()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null?
<span>

@ -39,20 +39,20 @@ class EcStudentList extends Component {
let major_id=this.props.match.params.major_id;
let year_id=this.props.match.params.year_id;
const url ='/ec_major_schools/'+major_id+'/academic_years/'+year_id+'/student_lists_data';
axios.get(url, {
withCredentials: true,
}).then((response) => {
if(response.status===200){
this.setState({
majorschoollist:response.data,
ismanager:response.data.ismanager,
})
}
})
.catch(function (error) {
console.log(error);
});
// const url ='/ec_major_schools/'+major_id+'/academic_years/'+year_id+'/student_lists_data';
// axios.get(url, {
// withCredentials: true,
// }).then((response) => {
// if(response.status===200){
// this.setState({
// majorschoollist:response.data,
// ismanager:response.data.ismanager,
// })
// }
// })
// .catch(function (error) {
// console.log(error);
// });
// let majorschoollist={
// ec_students: [{index: 1, student_name: "同意", student_id: "s20111458"},
// {index: 1, student_name: "同意", student_id: "s20111458"},

@ -479,6 +479,8 @@ class MessagSub extends Component{
return '';
case "PublicCourseStart":
return window.open(`/courses/${item.container_id}/informs`);
case "SubjectStartCourse":
return window.open(`/paths/${item.container_id}`);
default :
return window.open("/")
}

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe CreateSubjectCourseStudentJob, type: :job do
pending "add some examples to (or delete) #{__FILE__}"
end
Loading…
Cancel
Save