Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

dev_forum
hjm 5 years ago
commit 4bf0b94cc9

@ -229,7 +229,7 @@ class ApplicationController < ActionController::Base
uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous"))
if !User.current.logged? && Rails.env.development?
User.current = User.find 12
User.current = User.find 57703
end
if params[:debug] == 'teacher' #todo 为了测试,记得讲debug删除

@ -3,7 +3,7 @@ module ControllerRescueHandler
included do
rescue_from Exception do |e|
logger.error e
Util.logger_error e
render json: {status: -1, message: e.message}
end
# rescue_from ActionView::MissingTemplate, with: :object_not_found

@ -1,7 +1,7 @@
module PaginateHelper
def paginate(objs, **opts)
page = params[:page].to_i <= 0 ? 1 : params[:page].to_i
per_page = params[:per_page].to_i > 0 ? params[:per_page].to_i : 20
per_page = params[:per_page].to_i > 0 ? params[:per_page].to_i : opts[:per_page] || 20
Kaminari.paginate_array(objs).page(page).per(per_page)
end

@ -1,6 +1,6 @@
class DepartmentsController < ApplicationController
def for_option
render_ok(departments: current_school.departments.select(:id, :name).as_json)
render_ok(departments: current_school.departments.without_deleted.select(:id, :name).as_json)
end
private

@ -1,19 +1,32 @@
class TidingsController < ApplicationController
include PaginateHelper
after_action :update_onclick_time!, only: [:index]
def index
tidings = current_user.tidings.order(created_at: :desc)
tidings = current_user.tidings
tiding_types =
case params[:type]
when 'notice' then 'System'
when 'apply' then 'Apply'
when 'course' then %w(HomeworkCommon Exercise Poll)
when 'course' then %w(HomeworkCommon Exercise Poll GraduationTask GraduationTopic)
when 'project' then 'Project'
when 'interaction' then %w(Comment Mentioned Praise Fan)
when 'project_package' then %w(Created Destroyed Bidding BiddingEnd BiddingWon BiddingLost)
end
tidings = tidings.where(tiding_type: tiding_types) if tiding_types.present?
tidings = tidings.where(container_type: 'ProjectPackage') if params[:type] == 'project_package'
@count = tidings.count
@tidings = paginate tidings
@tidings = paginate(tidings.order(created_at: :desc), per_page: 10)
@onclick_time = current_user.click_time
end
private
def update_onclick_time!
current_user.onclick_time.touch(:onclick_time)
end
end

@ -8,6 +8,10 @@ module TidingDecorator
time_from_now(created_at)
end
def unread?(time)
created_at > time
end
# 组装国际化路径locale_format('Apply', 1) ==> tiding.ApplyUserAuthentication.Apply.1_end
def locale_format(*arr)
arr.unshift("tiding.#{container_type}").join('.') << '_end'
@ -340,4 +344,20 @@ module TidingDecorator
def department_content
I18n.t(locale_format) % [container.try(:name), container.try(:school)&.name]
end
def library_content
if tiding_type == 'System'
I18n.t(locale_format(tiding_type, status), reason: extra) % container.try(:title)
else
I18n.t(locale_format) % container.try(:title)
end
end
def project_package_content
if tiding_type == 'System'
I18n.t(locale_format(tiding_type, status), reason: extra) % container.try(:title)
else
I18n.t(locale_format(tiding_type)) % [container.try(:title) || extra]
end
end
end

@ -2,4 +2,6 @@ class Department < ApplicationRecord
belongs_to :school
has_many :department_members, dependent: :destroy
scope :without_deleted, -> { where(is_delete: false) }
end

@ -1,9 +1,11 @@
json.extract! tiding, :id, :status, :viewed, :user_id, :tiding_type, :container_type, :parent_container_type
json.extract! tiding, :id, :status, :viewed, :user_id, :tiding_type, :container_id, :container_type, :parent_container_id, :parent_container_type
json.content tiding.content
json.identifier tiding.try(:container).try(:identifier) rescue nil
json.time tiding.how_long_time
json.new_tiding tiding.unread?(@onclick_time)
json.trigger_user do
json.partial! 'users/user_simple', user: tiding.trigger_user
json.partial! 'users/user_simple', user: tiding.trigger_user_id.zero? ? User.find(1) : tiding.trigger_user
end
json.attachments tiding.attachments, partial: 'attachments/attachment_small', as: :attachment

@ -14,6 +14,7 @@ if @course
if params[:group_info]
json.group_info @course.teacher_group(@user.id) if @course_identity < Course::STUDENT
end
json.first_category_url module_url(@course.none_hidden_course_modules.first, @course)
end
if params[:school]

@ -199,3 +199,19 @@
Apply_end: "发起了匿评申诉申请:%s"
HomeworkCommon_end: "有人对你的匿评发起了申诉:%s"
Department_end: "你选填的二级单位:%s%s因不符合规范,已被系统删除.请重新选择"
Library:
Apply_end: "申请发布教学案例:%s"
System:
1_end: "你提交的发布教学案例申请:%s审核已通过"
2_end: "你提交的发布教学案例申请:%s审核未通过原因%{reason}"
ProjectPackage:
Apply_end: "申请发布众包需求:%s"
System:
1_end: "你提交的众包需求申请:%s审核已通过"
2_end: "你提交的众包需求申请:%s审核未通过原因%{reason}"
Created_end: "你创建了众包需求:%s"
Destroyed_end: "你删除了众包需求:%s"
Bidding_end: "应征了你发布的众包任务:%s"
BiddingEnd_end: "你发布的众包任务:%s已进入选标阶段请尽快进行选择确认"
BiddingWon_end: "恭喜,你应征的众包任务:%s在评选环节中标了"
BiddingLost_end: "很遗憾,你应征投稿的众包任务:%s未中标"

@ -0,0 +1,7 @@
class ModifyAttachmentUrlForChallengeAnswer < ActiveRecord::Migration[5.2]
def change
ChallengeChoose.find_each do |cc|
cc.update_column(:subject, cc.subject.gsub("(/attachments/download", "(/api/attachments")) if cc.subject.present?
end
end
end

@ -78,12 +78,12 @@ class GraduationTasksSubmitedit extends Component{
}
setedit=()=>{
let coursesId=this.props.match.params.coursesId;
let workId=this.props.match.params.work_Id;
let {workslist}=this.state
let task_id=workslist&&workslist.task_id;
// let coursesId=this.props.match.params.coursesId;
// let workId=this.props.match.params.work_Id;
// let {workslist}=this.state
// let task_id=workslist&&workslist.task_id;
// window.location.href="/courses/"+coursesId+"/graduation_tasks/"+task_id+"/"+workId+"/works/edit";
window.location.href="/courses/"+coursesId+"/graduation_tasks/"+workId+"/appraise";
this.goback()
}
@ -96,11 +96,13 @@ class GraduationTasksSubmitedit extends Component{
}
goback=()=>{
let courseId=this.props.match.params.coursesId;
let work_Id=this.props.match.params.work_Id;
// window.location.href="/courses/"+courseId+"/graduation/graduation_tasks/"+category_id;
window.location.href="/courses/"+courseId+"/graduation_tasks/"+work_Id+"/appraise";
let courseId=this.props.match.params.coursesId;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
@ -568,7 +570,7 @@ class GraduationTasksSubmitedit extends Component{
<p className="clearfix mt10">
{/*<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation"} className="color-grey-6">{workslist&&workslist.course_name}</Link></WordsBtn>*/}
{/*<span className="color-grey-9 fl ml3 mr3">&gt;</span>*/}
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">毕设任务</Link></WordsBtn>
<WordsBtn style="grey" className="fl"> <a onClick={this.goback} className="color-grey-6">毕设任务</a></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+work_Id+"/list"} className="color-grey-6">任务详情</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
@ -825,7 +827,7 @@ class GraduationTasksSubmitedit extends Component{
<Form.Item>
<div className="clearfix mt30 mb30">
<Button type="primary" htmlType="submit" onClick={()=>this.handleSubmit()} className="defalutSubmitbtn fl mr20">提交</Button>
<a onClick={this.gocannel} className="defalutCancelbtn fl">取消</a>
<a onClick={this.goback} className="defalutCancelbtn fl">取消</a>
</div>
</Form.Item>
{/*</Form>*/}

@ -100,9 +100,12 @@ class GraduationTasksSubmitnew extends Component{
goback=()=>{
let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id;
}
@ -438,7 +441,7 @@ class GraduationTasksSubmitnew extends Component{
spinnings:false
})
if(response!==undefined){
this.setedit(response.data.work_id)
this.goback()
}
// if(response.status===200) {
// GraduationTasksnewtype=false;
@ -567,7 +570,7 @@ render(){
<p className="clearfix mt10">
{/*<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks"} className="color-grey-6">{workslist&&workslist.course_name}</Link></WordsBtn>*/}
{/*<span className="color-grey-9 fl ml3 mr3">&gt;</span>*/}
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">毕设任务</Link></WordsBtn>
<WordsBtn style="grey" className="fl"> <a onClick={this.goback} className="color-grey-6">毕设任务</a></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/list"} className="color-grey-6">任务详情</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
@ -802,7 +805,7 @@ render(){
<Form.Item>
<div className="clearfix mt30 mb30">
<Button type="primary" htmlType="submit" onClick={()=>this.handleSubmit()} className="defalutSubmitbtn fl mr20">提交</Button>
<a onClick={this.gocannel} className="defalutCancelbtn fl">取消</a>
<a onClick={this.goback} className="defalutCancelbtn fl">取消</a>
</div>
</Form.Item>
{/*</Form>*/}

@ -70,7 +70,13 @@ class GraduationTasksappraise extends Component{
// let category_id=this.props.match.params.category_id;
//
// window.location.href="/courses/"+courseId+"/graduation_tasks/"+datalist.graduation_id;
window.history.go(-1)
let courseId=this.props.match.params.coursesId;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
Cancelvisible=()=>{

@ -81,10 +81,13 @@ class GraduationTasksedit extends Component{
goback=()=>{
// let courseId=this.props.match.params.coursesId;
// window.location.href="/courses/"+courseId+"/graduation_tasks/"+this.state.data.graduation_id;
// goback = () => {
window.history.go(-1)
let courseId = this.props.match.params.coursesId;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
@ -233,8 +236,8 @@ class GraduationTasksedit extends Component{
// console.log(response)
// GraduationTasksedittype=false;
// window.location.href="/courses/"+course_id+"/graduation/"+graduationId+"/graduation_tasks/"+category_id+"/questions";
// this.goback()
this.props.history.push("/courses/"+this.props.match.params.coursesId+"/graduation_tasks/"+graduation_id+"/"+this.props.match.params.category_id +"/setting");
this.goback()
//this.props.history.push("/courses/"+this.props.match.params.coursesId+"/graduation_tasks/"+graduation_id+"/"+this.props.match.params.category_id +"/setting");
}
}).catch((error) => {
console.log(error)
@ -333,7 +336,7 @@ class GraduationTasksedit extends Component{
<div className={"educontent mb20"}>
<p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/students"} className="color-grey-6">{this.props.current_user&&this.props.current_user.course_name}</Link></WordsBtn>
<WordsBtn style="grey" className="fl"> <a onClick={this.goback} className="color-grey-6">{this.props.current_user&&this.props.current_user.course_name}</a></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">毕设任务</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>

@ -91,7 +91,7 @@ class GraduationTasksnew extends Component {
// GraduationTasksnewtype = false;
// this.goback();
if(response!==undefined){
this.props.history.push("/courses/" + this.props.match.params.coursesId + "/graduation_tasks/" + this.props.match.params.category_id + "/" + response.data.task_id + "/setting");
this.goback()
}
// }
}).catch((error) => {
@ -108,9 +108,11 @@ class GraduationTasksnew extends Component {
goback = () => {
let courseId = this.props.match.params.coursesId;
let category_id = this.props.match.params.category_id;
window.location.href = "/courses/" + courseId + "/graduation_tasks/" + category_id;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
@ -307,8 +309,7 @@ class GraduationTasksnew extends Component {
<div className={"educontent mb20"}>
<p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/" + courseId + "/students"}
className="color-grey-6">{this.props.current_user && this.props.current_user.course_name}</Link></WordsBtn>
<WordsBtn style="grey" className="fl"> <a onClick={this.goback} className="color-grey-6">{this.props.current_user && this.props.current_user.course_name}</a></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link
to={"/courses/" + courseId + "/graduation_tasks/" + category_id} className="color-grey-6">毕设任务</Link></WordsBtn>

@ -761,9 +761,11 @@ class GraduationTaskssettingapp extends Component{
goback=()=>{
let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id;
window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
isgoback=()=>{
@ -1046,7 +1048,7 @@ class GraduationTaskssettingapp extends Component{
<div className={"educontent mb20"}>
<p className="clearfix mt10">
<Link to={"/courses/"+courseId+"/students"} className="color-grey-9 fl">{coursename}</Link>
<a onClick={this.goback} className="color-grey-9 fl">{coursename}</a>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<Link to={"/courses/"+courseId+"/graduation_tasks/"+settingdata.graduation_id} className="color-grey-9 fl">毕设任务</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>

@ -57,11 +57,15 @@ class GraduationTaskssettinglist extends Component{
let{teacher_comment,task_status,course_group,cross_comment,order,b_order,search}=this.state;
this.seacthdata(teacher_comment,task_status,course_group,cross_comment,order,b_order,search,this.state.page);
}
goback=()=>{
// window.history.back(-1)
let courseId=this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id;
window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
@ -1058,7 +1062,7 @@ class GraduationTaskssettinglist extends Component{
<div className={"educontent mb20"}>
<p className="clearfix mt10">
<Link className="color-grey-9 fl" to={"/courses/"+courseId+"/students"}>{taskslistdata.course_name}</Link>
<a className="color-grey-9 fl" onClick={this.goback}>{taskslistdata.course_name}</a>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<Link className="color-grey-9 fl" to={"/courses/"+courseId+"/graduation_tasks/"+taskslistdata.graduation_id}>{taskslistdata.graduation_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>

@ -55,7 +55,12 @@ class GraduationTasksquestions extends Component{
// let courseId=this.props.match.params.coursesId;
// let category_id=this.props.match.params.category_id;
// window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id;
window.history.go(-1)
let courseId = this.props.match.params.coursesId;
if(courseId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(this.props.current_user.first_category_url);
}
}
end=()=>{
@ -300,7 +305,7 @@ class GraduationTasksquestions extends Component{
<div className={"educontent mb20"}>
<p className="clearfix mt10">
<Link to={"/courses/"+courseId+"/students"} className="color-grey-9 fl">{questionslist.course_name}</Link>
<a onClick={this.goback} className="color-grey-9 fl">{questionslist.course_name}</a>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<Link to={"/courses/"+courseId+"/graduation_tasks/"+questionslist.graduation_id} className="color-grey-9 fl">{questionslist.graduation_name}</Link>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>

@ -28,6 +28,7 @@ function disabledDateTime() {
};
}
class CoursesNew extends Component {
constructor(props) {
@ -191,17 +192,7 @@ class CoursesNew extends Component {
).then((response) => {
// debugger
if (response.data.status === 0) {
// this.setState({
// Modalstype: true,
// Modalstopval: response.data.message,
// ModalSave: this.cancelmodel,
// Loadtype: true,
// checkBoxValues: [],
// checkAllValue: false,
// // Realnamecertification : authentication,
// // professional_certification: values.Professionalcertification
// })
window.location.href = "/courses/" + coursesId+"/students";
this.goback
}
}).catch((error) => {
console.log(error)
@ -262,7 +253,7 @@ class CoursesNew extends Component {
if(this.props.match.params.coursesId===undefined){
this.props.history.push("/courses");
}else{
this.props.history.push(`/courses/${this.props.match.params.coursesId}`);
this.props.history.push(this.props.current_user.first_category_url);
}
// window.history.go(-1)
}
@ -390,7 +381,7 @@ class CoursesNew extends Component {
const optionschool = this.state.searchlistscholl&&this.state.searchlistscholl.map(z => <Option key={z} value={z}>{z}</Option>);
// console.log(this.props.current_user.user_school)
// form合并了
console.log(options)
return (
<React.Fragment>

@ -93,7 +93,7 @@ class ShixunsHome extends Component {
const CustomNextArrow = props => {
return (
<div {...props} id="bannerright" style={arrowStyler}>
<img id="bannerrightimg" style={noneStyler} src={"images/educoder/banner-right.png"} />
<img id="bannerrightimg" style={noneStyler} src={"/images/educoder/banner-right.png"} />
</div>
);
};
@ -101,7 +101,7 @@ class ShixunsHome extends Component {
const CustomPrevArrow = props => {
return (
<div {...props} id="bannerleft" style={arrowStylel}>
<img id="bannerleftimg" style={noneStyler} src={"images/educoder/banner-left.png"} />
<img id="bannerleftimg" style={noneStyler} src={"/images/educoder/banner-left.png"} />
</div>
);
};
@ -374,7 +374,7 @@ class ShixunsHome extends Component {
<li className="mt35 pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan-two.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -388,7 +388,7 @@ class ShixunsHome extends Component {
<li className="pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -402,7 +402,7 @@ class ShixunsHome extends Component {
<li className="mt35 pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan-three.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -418,7 +418,7 @@ class ShixunsHome extends Component {
return (
<li key={key}>
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url}/>
<img src={'/images/'+item.image_url}/>
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -450,7 +450,7 @@ class ShixunsHome extends Component {
<li className="mt35 pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan-two.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -464,7 +464,7 @@ class ShixunsHome extends Component {
<li className="pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -478,7 +478,7 @@ class ShixunsHome extends Component {
<li className="mt35 pr" key={key}>
<img src={getImageUrl("images/educoder/huangguan-three.png")} className="huangguan" />
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url} />
<img src={'/images/'+item.image_url} />
<span className="task-hide rankName">{item.username}</span>
</a>
</li>
@ -494,7 +494,7 @@ class ShixunsHome extends Component {
return (
<li key={key}>
<a href={"/users/"+item.login} className="color-dark">
<img src={'images/'+item.image_url}/>
<img src={'/images/'+item.image_url}/>
<span className="task-hide rankName">{item.username}</span>
</a>
</li>

@ -38,7 +38,7 @@ class ShixunPathCard extends Component{
</div>
<Link to={"/paths/"+item.id} className="square-img" >
{/*target="_blank"*/}
<img alt="13?1543211263" src={item.image_url} style={{"display":"block"}}/>
<img alt="13?1543211263" src={"/"+item.image_url} style={{"display":"block"}}/>
</Link>
<div className="square-main">
<p className="task-hide">

Loading…
Cancel
Save