diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 4faa42107..ac53343b5 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -23,21 +23,21 @@ class ApplicationController < ActionController::Base
# 所有请求必须合法签名
def check_sign
- # Rails.logger.info("66666 #{params}")
- # suffix = request.url.split(".").last
- # suffix_arr = ["xls", "xlsx"] # excel文件先注释
- # unless suffix_arr.include?(suffix)
- # if params[:client_key].present?
- # randomcode = params[:randomcode]
- # tip_exception(501, "请求不合理") unless (Time.now.to_i - randomcode.to_i).between?(0,5)
- #
- # sign = Digest::MD5.hexdigest("#{OPENKEY}#{randomcode}")
- # Rails.logger.info("2222 #{sign}")
- # tip_exception(501, "请求不合理") if sign != params[:client_key]
- # else
- # tip_exception(501, "请求不合理")
- # end
- # end
+ Rails.logger.info("66666 #{params}")
+ suffix = request.url.split(".").last
+ suffix_arr = ["xls", "xlsx"] # excel文件先注释
+ unless suffix_arr.include?(suffix)
+ if params[:client_key].present?
+ randomcode = params[:randomcode]
+ tip_exception(501, "请求不合理") unless (Time.now.to_i - randomcode.to_i).between?(0,5)
+
+ sign = Digest::MD5.hexdigest("#{OPENKEY}#{randomcode}")
+ Rails.logger.info("2222 #{sign}")
+ tip_exception(501, "请求不合理") if sign != params[:client_key]
+ else
+ tip_exception(501, "请求不合理")
+ end
+ end
end
# 全局配置参数
diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js
index 6759fc334..24493dd13 100644
--- a/public/react/src/AppConfig.js
+++ b/public/react/src/AppConfig.js
@@ -51,7 +51,7 @@ if (isDev) {
checkSubmitFlg=true
window.setTimeout(function () {
checkSubmitFlg=false;
- }, 3500);
+ }, 2500);
}else if(checkSubmitFlg===false){
$.ajax({url:proxy,async:false,success:function(data){
if(data.status===0){
@@ -61,7 +61,7 @@ if (isDev) {
checkSubmitFlg=true
window.setTimeout(function () {
checkSubmitFlg=false;
- }, 3500);
+ }, 2500);
}
}
window._debugType = debugType;
diff --git a/public/react/src/common/UrlTool.js b/public/react/src/common/UrlTool.js
index d7a49ea63..33a84dc55 100644
--- a/public/react/src/common/UrlTool.js
+++ b/public/react/src/common/UrlTool.js
@@ -1,3 +1,5 @@
+import md5 from 'md5';
+const $ = window.$;
const isDev = window.location.port == 3007;
export const TEST_HOST = "https://test-newweb.educoder.net"
export function getImageUrl(path) {
@@ -68,19 +70,46 @@ export function getUrl2(path, goTest) {
}
return `${path ? path: ''}`;
}
+const newopens ="79e33abd4b6588941ab7622aed1e67e8";
+let newtimestamp;
+let checkSubmitFlgs = false;
+function railsgettimess(proxy) {
+ if(checkSubmitFlgs===false){
+ $.ajax({url:proxy,async:false,success:function(data){
+ if(data.status===0){
+ newtimestamp=data.message;
+ }
+ }})
+ checkSubmitFlgs=true
+ window.setTimeout(function () {
+ checkSubmitFlgs=false;
+ }, 2500);
+ }
+}
+
+export function Railsgettimes() {
+ railsgettimess(`${getUrl()}/api/main/first_stamp.json`);
+}
+
export function getUploadActionUrl(path, goTest) {
- return `${getUrl()}/api/attachments.json${isDev ? `?debug=${window._debugType || 'admin'}` : ''}`
+ Railsgettimes()
+ let anewopens=md5(newopens+newtimestamp);
+ return `${getUrl()}/api/attachments.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}`;
}
export function getUploadActionUrltwo(id) {
-
- return `${getUrlmys()}/api/shixuns/${id}/upload_data_sets.json${isDev ? `?debug=${window._debugType || 'admin'}` : ''}`
+ Railsgettimes()
+ let anewopens=md5(newopens+newtimestamp);
+ return `${getUrlmys()}/api/shixuns/${id}/upload_data_sets.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}`
}
export function getUploadActionUrlthree() {
-
- return `${getUrlmys()}/api/jupyters/import_with_tpm.json${isDev ? `?debug=${window._debugType || 'admin'}` : ''}`
+ Railsgettimes()
+ let anewopens=md5(newopens+newtimestamp);
+ return `${getUrlmys()}/api/jupyters/import_with_tpm.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}`
}
export function getUploadActionUrlOfAuth(id) {
- return `${getUrl()}/api/users/accounts/${id}/auth_attachment.json${isDev ? `?debug=${window._debugType || 'admin'}` : ''}`
+ Railsgettimes()
+ let anewopens=md5(newopens+newtimestamp);
+ return `${getUrl()}/api/users/accounts/${id}/auth_attachment.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}`
}
export function test(path) {
@@ -96,6 +125,11 @@ export function getTaskUrlById(id) {
return `/tasks/${id}`
}
+export function getRandomcode(url) {
+ Railsgettimes()
+ let anewopens=md5(newopens+newtimestamp);
+ return `${url}?&randomcode=${newtimestamp}&client_key=${anewopens}`
+}
export function htmlEncode(str) {
var s = "";
diff --git a/public/react/src/common/educoder.js b/public/react/src/common/educoder.js
index 3d11ee3cb..126a42e87 100644
--- a/public/react/src/common/educoder.js
+++ b/public/react/src/common/educoder.js
@@ -2,7 +2,7 @@
// export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil';
-export { getImageUrl as getImageUrl, getUrl as getUrl, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
+export { getImageUrl as getImageUrl, getUrl as getUrl, getRandomcode as getRandomcode,getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
, getUploadActionUrl as getUploadActionUrl,getUploadActionUrltwo as getUploadActionUrltwo ,getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth
, getTaskUrlById as getTaskUrlById, TEST_HOST ,htmlEncode as htmlEncode } from './UrlTool';
export { default as queryString } from './UrlTool2';
diff --git a/public/react/src/modules/comment/CommentItemMDEditor.js b/public/react/src/modules/comment/CommentItemMDEditor.js
index 8c49d356f..0bde1c6a7 100644
--- a/public/react/src/modules/comment/CommentItemMDEditor.js
+++ b/public/react/src/modules/comment/CommentItemMDEditor.js
@@ -6,7 +6,7 @@ import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
import PropTypes from 'prop-types';
import classNames from 'classnames'
-
+import { getImageUrl, toPath, getUrl,getUploadActionUrl } from 'educoder';
import './CommentItemMDEditor.css'
const $ = window.$;
@@ -36,7 +36,7 @@ class CommentItemMDEditor extends Component {
if( $(`#${initMD_ID} textarea`).length === 1 ) { // 没有初始化
const placeholder = '我要回复...'
// const imageUrl = `/upload_with_markdown?container_id=${commentId}&container_type=Memo`;
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
const otherOptions = {
watch: false,
diff --git a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
index 049f2bab1..9ea972177 100644
--- a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
+++ b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import {Button, Card, Row, Col ,Upload,Icon,message,Tabs} from 'antd';
import axios from 'axios';
-import {getImageUrl,getUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
+import {getUploadActionUrl,getUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
const { TabPane } = Tabs;
class CompetitionContentsMd extends Component{
@@ -184,7 +184,7 @@ class CompetitionContentsMd extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleContentUploadChange,
onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'),
beforeUpload: (file) => {
diff --git a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
index eb304e007..360d65937 100644
--- a/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
+++ b/public/react/src/modules/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import {Button,Layout,Row, Col,Divider,Table} from 'antd';
import axios from 'axios';
-import {getImageUrl} from 'educoder';
+import {getImageUrl,getRandomcode} from 'educoder';
import './CompetitionContentspdfdownload.css';
// import NoneData from "../../../courses/shixunHomework/shixunHomework";
@@ -158,7 +158,7 @@ class CompetitionContentspdfdownload extends Component{
return(
- 立即下载
)
@@ -172,7 +172,7 @@ class CompetitionContentspdfdownload extends Component{
return(
- 立即下载
)
diff --git a/public/react/src/modules/courses/busyWork/NewWorkForm.js b/public/react/src/modules/courses/busyWork/NewWorkForm.js
index 81851d2f2..6740f7579 100644
--- a/public/react/src/modules/courses/busyWork/NewWorkForm.js
+++ b/public/react/src/modules/courses/busyWork/NewWorkForm.js
@@ -3,7 +3,7 @@ import { Input, InputNumber, Form, Button, Checkbox, Upload, Icon, message, Moda
import axios from 'axios'
import '../css/busyWork.css'
import '../css/Courses.css'
-import { WordsBtn, getUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'
+import {getUploadActionUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'
import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor';
import CBreadcrumb from '../common/CBreadcrumb'
@@ -333,7 +333,7 @@ class NewWorkForm extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleContentUploadChange,
onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'),
beforeUpload: (file) => {
@@ -352,7 +352,7 @@ class NewWorkForm extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleAnswerUploadChange,
onRemove: (file) => this.onAttachmentRemove(file, 'answerFileList'),
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/busyWork/common/TabRightComponents.js b/public/react/src/modules/courses/busyWork/common/TabRightComponents.js
index 9c8f96cc2..41e03d176 100644
--- a/public/react/src/modules/courses/busyWork/common/TabRightComponents.js
+++ b/public/react/src/modules/courses/busyWork/common/TabRightComponents.js
@@ -150,8 +150,8 @@ class TabRightComponents extends Component{
{this.props.isAdmin()?
导出
:""}
diff --git a/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js b/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
index 049f2bab1..9ea972177 100644
--- a/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
+++ b/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentsMd.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import {Button, Card, Row, Col ,Upload,Icon,message,Tabs} from 'antd';
import axios from 'axios';
-import {getImageUrl,getUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
+import {getUploadActionUrl,getUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
const { TabPane } = Tabs;
class CompetitionContentsMd extends Component{
@@ -184,7 +184,7 @@ class CompetitionContentsMd extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleContentUploadChange,
onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'),
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js b/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
index eb304e007..360d65937 100644
--- a/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
+++ b/public/react/src/modules/courses/competitions/Competitioncommon/CompetitionCommonChild/CompetitionContentspdfChild/CompetitionContentspdfdownload.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import {Button,Layout,Row, Col,Divider,Table} from 'antd';
import axios from 'axios';
-import {getImageUrl} from 'educoder';
+import {getImageUrl,getRandomcode} from 'educoder';
import './CompetitionContentspdfdownload.css';
// import NoneData from "../../../courses/shixunHomework/shixunHomework";
@@ -158,7 +158,7 @@ class CompetitionContentspdfdownload extends Component{
return(
- 立即下载
)
@@ -172,7 +172,7 @@ class CompetitionContentspdfdownload extends Component{
return(
- 立即下载
)
diff --git a/public/react/src/modules/courses/coursesPublic/CoursesMarkdown.js b/public/react/src/modules/courses/coursesPublic/CoursesMarkdown.js
index fea6c79be..7b996480c 100644
--- a/public/react/src/modules/courses/coursesPublic/CoursesMarkdown.js
+++ b/public/react/src/modules/courses/coursesPublic/CoursesMarkdown.js
@@ -6,7 +6,7 @@ import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
// import "antd/dist/antd.css";
-import { getImageUrl, toPath, getUrl } from 'educoder';
+import { getImageUrl, toPath, getUrl,getUploadActionUrl } from 'educoder';
import axios from 'axios';
@@ -171,7 +171,7 @@ export default class CoursesMarkdown extends Component {
// const placeholder = "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
const answers_editormd = create_editorMD(_id, '100%', 400, placeholder, imageUrl, () => {
diff --git a/public/react/src/modules/courses/coursesPublic/SelectSetting.js b/public/react/src/modules/courses/coursesPublic/SelectSetting.js
index ea87e8bb2..337b4d2e8 100644
--- a/public/react/src/modules/courses/coursesPublic/SelectSetting.js
+++ b/public/react/src/modules/courses/coursesPublic/SelectSetting.js
@@ -1,7 +1,7 @@
import React,{ Component } from "react";
import { Modal,Checkbox,Select,Input,Upload,Button,Icon,message,DatePicker,Tooltip,Radio} from "antd";
import axios from'axios';
-import {getUrl,handleDateString,appendFileSizeToUploadFileAll} from 'educoder';
+import {getUrl,handleDateString,appendFileSizeToUploadFileAll,getUploadActionUrl} from 'educoder';
import locale from 'antd/lib/date-picker/locale/zh_CN';
import moment from 'moment';
import Modals from '../../modals/Modals';
@@ -264,7 +264,7 @@ class Selectsetting extends Component{
const uploadProps = {
width: 600,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/coursesPublic/sendResource.js b/public/react/src/modules/courses/coursesPublic/sendResource.js
index 5f5ffdeb4..517adcd82 100644
--- a/public/react/src/modules/courses/coursesPublic/sendResource.js
+++ b/public/react/src/modules/courses/coursesPublic/sendResource.js
@@ -2,7 +2,7 @@ import React,{ Component } from "react";
import { Modal,Checkbox,Upload,Button,Icon,message,DatePicker,Select,Tooltip,Radio} from "antd";
import axios from 'axios';
import Modals from '../../modals/Modals';
-import {getUrl,handleDateString,bytesToSize,appendFileSizeToUploadFileAll} from 'educoder';
+import {getUploadActionUrl,handleDateString,appendFileSizeToUploadFileAll} from 'educoder';
import locale from 'antd/lib/date-picker/locale/zh_CN';
import moment from 'moment';
const CheckboxGroup = Checkbox.Group;
@@ -245,7 +245,7 @@ class Sendresource extends Component{
const uploadProps = {
width: 600,
// showUploadList:false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
index ab662555d..ca4a0758a 100644
--- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
+++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
@@ -1,7 +1,7 @@
import React,{ Component } from "react";
import {Checkbox,Input,Table, Pagination,Menu,Spin} from "antd";
import {Link,NavLink} from 'react-router-dom';
-import { WordsBtn ,ActionBtn,queryString,downloadFile} from 'educoder';
+import { WordsBtn ,ActionBtn,queryString,getRandomcode} from 'educoder';
import CoursesListType from '../coursesPublic/CoursesListType';
import '../css/members.css';
import '../css/busyWork.css';
@@ -404,7 +404,7 @@ class Testpapersettinghomepage extends Component{
:""}
diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js
index 7ac909958..f535c01bb 100644
--- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js
+++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js
@@ -2,7 +2,7 @@ import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Spin,Tooltip} from "antd";
import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
-import { WordsBtn,getUrl ,bytesToSize,getImageUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
+import { WordsBtn,getUploadActionUrl ,bytesToSize,getImageUrl,appendFileSizeToUploadFileAll,appendFileSizeToUploadFile} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
const Search = Input.Search;
@@ -512,7 +512,7 @@ class GraduationTasksSubmitedit extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
index d505ba15d..4918c1f6e 100644
--- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
+++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
@@ -3,7 +3,7 @@ import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip,Spin} from "antd";
import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
-import { WordsBtn,getUrl,getImageUrl,bytesToSize,appendFileSizeToUploadFileAll} from 'educoder';
+import { WordsBtn,getUrl,getImageUrl,getUploadActionUrl,appendFileSizeToUploadFileAll} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
const Search = Input.Search;
@@ -536,7 +536,7 @@ render(){
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksedit.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksedit.js
index b530a4de6..1a9c1490e 100644
--- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksedit.js
+++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksedit.js
@@ -2,7 +2,7 @@ import React,{Component} from "react";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal} from "antd";
import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
-import { WordsBtn,getUrl ,bytesToSize,appendFileSizeToUploadFileAll,AttachmentList,appendFileSizeToUploadFile} from 'educoder';
+import { WordsBtn,getUrl ,getUploadActionUrl,appendFileSizeToUploadFileAll,AttachmentList,appendFileSizeToUploadFile} from 'educoder';
import axios from 'axios';
import Modals from '../../../modals/Modals';
import '../../css/Courses.css';
@@ -314,7 +314,7 @@ class GraduationTasksedit extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/graduation/topics/GraduateTopicPostWorksNew.js b/public/react/src/modules/courses/graduation/topics/GraduateTopicPostWorksNew.js
index 38e68ad32..6d4d08743 100644
--- a/public/react/src/modules/courses/graduation/topics/GraduateTopicPostWorksNew.js
+++ b/public/react/src/modules/courses/graduation/topics/GraduateTopicPostWorksNew.js
@@ -7,7 +7,7 @@ import {
} from 'antd';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
import axios from 'axios'
-import {getUrl} from 'educoder';
+import {getUrl,getUploadActionUrl} from 'educoder';
import "../../common/formCommon.css"
// import './board.css'
@@ -248,7 +248,7 @@ class GraduateTopicPostWorksNew extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleChange,
onRemove: this.onAttachmentRemove,
beforeUpload: (file) => {
diff --git a/public/react/src/modules/courses/statistics/Statistics.js b/public/react/src/modules/courses/statistics/Statistics.js
index 281052426..d0f47e21a 100644
--- a/public/react/src/modules/courses/statistics/Statistics.js
+++ b/public/react/src/modules/courses/statistics/Statistics.js
@@ -1,6 +1,6 @@
import React,{ Component } from "react";
import {Table, Pagination,Popover,Spin, Row, Col ,Tabs, Icon} from "antd";
-import { WordsBtn,on, off, trigger ,getImageUrl,sortDirections} from 'educoder';
+import { WordsBtn,on, off, getRandomcode ,getImageUrl,sortDirections} from 'educoder';
import axios from'axios';
import Dropdownbox from './Dropdownbox';
import Dynamiclist from './Dynamiclist';
@@ -172,7 +172,7 @@ class Statistics extends Component{
}
})
- this.props.slowDownload(`${url}?${urllist}`);
+ this.props.slowDownload(getRandomcode(`${url}?${urllist}`));
}
diff --git a/public/react/src/modules/forums/MemoDetailMDEditor.js b/public/react/src/modules/forums/MemoDetailMDEditor.js
index 6e2563b9b..57a48fe91 100644
--- a/public/react/src/modules/forums/MemoDetailMDEditor.js
+++ b/public/react/src/modules/forums/MemoDetailMDEditor.js
@@ -7,7 +7,7 @@ import PropTypes from 'prop-types';
import classNames from 'classnames'
-import { isDev } from 'educoder'
+import { getUploadActionUrl } from 'educoder'
import './MemoDetailEditor.css'
@@ -36,7 +36,7 @@ class MemoDetailMDEditor extends Component {
// 因为props.memo不存在时,本组件不会被加载,这里直接在didMount里初始化即可
const placeholder = '我要回复...'
// const imageUrl = `/upload_with_markdown?container_id=${this.props.memo.id}&container_type=Memo`;
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
if (this.isMDInited) {
return;
}
diff --git a/public/react/src/modules/forums/MemoDetailMDEditortwo.js b/public/react/src/modules/forums/MemoDetailMDEditortwo.js
index cc3a2b1af..eafc1451f 100644
--- a/public/react/src/modules/forums/MemoDetailMDEditortwo.js
+++ b/public/react/src/modules/forums/MemoDetailMDEditortwo.js
@@ -7,7 +7,7 @@ import PropTypes from 'prop-types';
import classNames from 'classnames'
-import { isDev } from 'educoder'
+import { getUploadActionUrl } from 'educoder'
import './MemoDetailEditor.css'
@@ -35,7 +35,7 @@ class MemoDetailMDEditortwo extends Component {
// 因为props.memo不存在时,本组件不会被加载,这里直接在didMount里初始化即可
const placeholder = '我要回复...'
// const imageUrl = `/upload_with_markdown?container_id=${this.props.memo.id}&container_type=Memo`;
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 执行太快了,样式不正常
window.__tt = 400;
diff --git a/public/react/src/modules/forums/MemoNew.js b/public/react/src/modules/forums/MemoNew.js
index fbbd88044..a9e7d6668 100644
--- a/public/react/src/modules/forums/MemoNew.js
+++ b/public/react/src/modules/forums/MemoNew.js
@@ -441,7 +441,7 @@ class MemoNew extends Component {
// amp;
// 编辑时要传memoId
// const imageUrl = `/upload_with_markdown?container_id=&container_type=Memo`;
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
diff --git a/public/react/src/modules/paths/PathNew.js b/public/react/src/modules/paths/PathNew.js
index d9da9c0d4..8fdbf918f 100644
--- a/public/react/src/modules/paths/PathNew.js
+++ b/public/react/src/modules/paths/PathNew.js
@@ -2,6 +2,7 @@ import React,{ Component } from "react";
import {getUrl,markdownToHTML} from 'educoder';
import {Input,Button} from 'antd';
+import TPMMDEditor from "../tpm/challengesnew/TPMMDEditor";
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
import axios from 'axios';
@@ -11,79 +12,11 @@ require('codemirror/lib/codemirror.css');
const $ = window.$;
-let origin = getUrl();
-let path = getUrl("/editormd/lib/");
-function create_editorMD(id, width, high, placeholder, imageUrl,initValue, callback) {
- var editorName = window.editormd(id, {
- width: width,
- height: high,
- path: path, // "/editormd/lib/"
- markdown : initValue,
- syncScrolling: "single",
- tex: true,
- tocm: true,
- emoji: true,
- taskList: true,
- codeFold: true,
- searchReplace: true,
- htmlDecode: "style,script,iframe",
- sequenceDiagram: true,
- autoFocus: false,
- placeholder: placeholder,
- toolbarIcons: function () {
- // Or return editormd.toolbarModes[name]; // full, simple, mini
- // Using "||" set icons align right.
- return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|", "testIcon", "testIcon1", '|', "image", "table", '|', "watch", "clear"]
- },
- toolbarCustomIcons: {
- testIcon: "",
- testIcon1: ""
- },
- //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。
- saveHTMLToTextarea: true,
- // 用于增加自定义工具栏的功能,可以直接插入HTML标签,不使用默认的元素创建图标
- dialogMaskOpacity: 0.6,
- imageUpload: true,
- imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
- imageUploadURL: imageUrl,//url
- onload: function () {
- // this.previewing();
- var id = this.id;
- var editorName = this;
- $("#" + id + " [type=\"latex\"]").bind("click", function () {
- editorName.cm.replaceSelection("```latex");
- editorName.cm.replaceSelection("\n");
- editorName.cm.replaceSelection("\n");
- editorName.cm.replaceSelection("```");
- var __Cursor = editorName.cm.getDoc().getCursor();
- editorName.cm.setCursor(__Cursor.line - 1, 0);
- });
-
- $("#" + id + " [type=\"inline\"]").bind("click", function () {
- editorName.cm.replaceSelection("`$$$$`");
- var __Cursor = editorName.cm.getDoc().getCursor();
- editorName.cm.setCursor(__Cursor.line, __Cursor.ch - 3);
- editorName.cm.focus();
- });
- $("[type=\"inline\"]").attr("title", "行内公式");
- $("[type=\"latex\"]").attr("title", "多行公式");
-
-
- callback && callback()
- }
- });
- // 一个页面有多个md时,onload方法只执行了一次
- // window.md_elocalStorage(editorName, `MemoQuestion_${id}`, `${id}`);
-
- return editorName;
-}
-
-
-
-
class PathNew extends Component{
constructor(props){
super(props);
+ this.contentMdRef = React.createRef();
+ this.Point_editMD = React.createRef();
this.state={
pathName:"",
description:"",
@@ -104,7 +37,7 @@ class PathNew extends Component{
})
return;
}
- let des=this.Des_editMD.getValue();
+ let des= this.contentMdRef.current.getValue().trim();
if(des===""){
this.props.showSnackbar("请输入实践课程的简介");
window.location.href="#part_Des";
@@ -115,7 +48,7 @@ class PathNew extends Component{
window.location.href="#part_Des";
return;
}
- let point = this.Point_editMD.getValue();
+ let point = this.Point_editMD.current.getValue().trim();
if(point===""){
this.props.showSnackbar("请输入实践课程的学习须知");
window.location.href="#part_point";
@@ -207,13 +140,9 @@ class PathNew extends Component{
this.setState({
pathName: response.data.name
})
+ this.contentMdRef.current.setValue(response.data && response.data.description);
+ this.Point_editMD.current.setValue(response.data && response.data.learning_notes);
- const Des_editMD = create_editorMD("shixun_introduction","100%","490px"
- ,"请在此输入实践课程的简介,最大限制8000个字符","/api/attachments.json", response.data.description,"");
- this.Des_editMD=Des_editMD;
- const Point_editMD = create_editorMD("shixun_propaedeutics","100%","260px"
- ,"请在此输入实践课程的学习须知,最大限制2000个字符","/api/attachments.json",response.data.learning_notes,"");
- this.Point_editMD=Point_editMD;
}
}).catch((error)=>{
console.log(error);
@@ -221,10 +150,8 @@ class PathNew extends Component{
} else {
this.isEditPage = false
- const Des_editMD = create_editorMD("shixun_introduction","100%","490px","请在此输入实践课程的简介,最大限制8000个字符","/api/attachments.json","","");
- this.Des_editMD=Des_editMD;
- const Point_editMD = create_editorMD("shixun_propaedeutics","100%","260px","请在此输入实践课程的学习须知,最大限制2000个字符","/api/attachments.json","","");
- this.Point_editMD=Point_editMD;
+ this.contentMdRef.current.setValue("");
+ this.Point_editMD.current.setValue("");
}
}
@@ -266,8 +193,14 @@ class PathNew extends Component{
*
-
-
+
+ {/**/}
+
+
@@ -280,8 +213,13 @@ class PathNew extends Component{
*
-
-
+
+ {/**/}
+
diff --git a/public/react/src/modules/projectPackages/MDEditors.js b/public/react/src/modules/projectPackages/MDEditors.js
index abd1d2da8..ab69aa83c 100644
--- a/public/react/src/modules/projectPackages/MDEditors.js
+++ b/public/react/src/modules/projectPackages/MDEditors.js
@@ -4,7 +4,7 @@ import {Input, Select, Radio, Checkbox, Popconfirm, message, Modal} from 'antd';
import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
-import { getImageUrl, toPath, getUrl } from 'educoder';
+import { getImageUrl, getUploadActionUrl, getUrl } from 'educoder';
require('codemirror/lib/codemirror.css');
@@ -222,7 +222,7 @@ export default class MDEditors extends Component {
const _placeholder = placeholder || "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
let react_id = `react_${_id}`;
diff --git a/public/react/src/modules/tpm/TPMsettings/oldTPMsettings.js b/public/react/src/modules/tpm/TPMsettings/oldTPMsettings.js
index 8688e9669..3c42b38db 100644
--- a/public/react/src/modules/tpm/TPMsettings/oldTPMsettings.js
+++ b/public/react/src/modules/tpm/TPMsettings/oldTPMsettings.js
@@ -15,7 +15,7 @@ import axios from 'axios';
import './css/TPMsettings.css';
-import { getImageUrl, toPath, getUrl ,appendFileSizeToUploadFileAll, getUploadActionUrl} from 'educoder';
+import { getImageUrl, toPath, getUrl ,getUploadActionUrl} from 'educoder';
let origin = getUrl();
@@ -280,7 +280,7 @@ export default class TPMsettings extends Component {
const placeholder = "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
const description_editormd =create_editorMD(id, '100%', 400, placeholder, imageUrl, initValue,()=> {
@@ -307,7 +307,7 @@ export default class TPMsettings extends Component {
const placeholder = "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
const evaluate_script_editormd =create_editorMD(id, '100%', 400, placeholder, imageUrl, initValue,()=> {
diff --git a/public/react/src/modules/tpm/challengesnew/TPMMDEditor.js b/public/react/src/modules/tpm/challengesnew/TPMMDEditor.js
index 22326e9e7..64cc373dc 100644
--- a/public/react/src/modules/tpm/challengesnew/TPMMDEditor.js
+++ b/public/react/src/modules/tpm/challengesnew/TPMMDEditor.js
@@ -6,7 +6,7 @@ import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
// import "antd/dist/antd.css";
-import { getImageUrl, toPath, getUrl } from 'educoder';
+import { getImageUrl, getUploadActionUrl, getUrl } from 'educoder';
import '../../courses/css/Courses.css'
import axios from 'axios';
@@ -226,7 +226,7 @@ export default class TPMMDEditor extends Component {
const _placeholder = placeholder || "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
let react_id = `react_${_id}`;
// 将实例存到了window
diff --git a/public/react/src/modules/tpm/challengesnew/editorMD.js b/public/react/src/modules/tpm/challengesnew/editorMD.js
index 50f15b601..26d21d86a 100644
--- a/public/react/src/modules/tpm/challengesnew/editorMD.js
+++ b/public/react/src/modules/tpm/challengesnew/editorMD.js
@@ -1,6 +1,6 @@
import React, {Component} from 'react';
-import {getUrl} from 'educoder';
+import {getUrl,getUploadActionUrl} from 'educoder';
let path = getUrl("/editormd/lib/");
@@ -85,7 +85,7 @@ export default class TPMeditorMD extends Component {
// amp;
// 编辑时要传memoId
// const imageUrl = `/upload_with_markdown?container_id=&container_type=Memo`;
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
let questio_editormd = create_editorMD(id, '100%', 400, placeholder, imageUrl, () => {
diff --git a/public/react/src/modules/tpm/challengesnew/old/TPManswer.js b/public/react/src/modules/tpm/challengesnew/old/TPManswer.js
index 7d090c607..350a5ca8d 100644
--- a/public/react/src/modules/tpm/challengesnew/old/TPManswer.js
+++ b/public/react/src/modules/tpm/challengesnew/old/TPManswer.js
@@ -6,7 +6,7 @@ import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom";
// import "antd/dist/antd.css";
-import { getImageUrl, toPath, getUrl } from 'educoder';
+import { getImageUrl, getUploadActionUrl, getUrl } from 'educoder';
import axios from 'axios';
@@ -170,7 +170,7 @@ export default class TPManswer extends Component {
const placeholder = "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `${getUploadActionUrl()}`;
// 创建editorMd
const answers_editormd = create_editorMD(id, '100%', 400, placeholder, imageUrl, () => {
diff --git a/public/react/src/modules/tpm/newshixuns/oldNewshixuns.js b/public/react/src/modules/tpm/newshixuns/oldNewshixuns.js
index 1eaee9ad6..4904219bb 100644
--- a/public/react/src/modules/tpm/newshixuns/oldNewshixuns.js
+++ b/public/react/src/modules/tpm/newshixuns/oldNewshixuns.js
@@ -243,7 +243,7 @@ class Newshixuns extends Component {
const placeholder = "";
// amp;
// 编辑时要传memoId
- const imageUrl = `/api/attachments.json`;
+ const imageUrl = `getUploadActionUrl`;
// 创建editorMd
const taskpass_editormd = create_editorMD("memoMD", '100%', 400, placeholder, imageUrl, () => {
diff --git a/public/react/src/modules/user/usersInfo/banks/NewGtaskForm.js b/public/react/src/modules/user/usersInfo/banks/NewGtaskForm.js
index 8c0f6474c..70994e42d 100644
--- a/public/react/src/modules/user/usersInfo/banks/NewGtaskForm.js
+++ b/public/react/src/modules/user/usersInfo/banks/NewGtaskForm.js
@@ -1,7 +1,7 @@
import React,{ Component } from "react";
import { Input, InputNumber, Form, Button, Checkbox, Upload, Icon, message, Modal } from "antd";
import axios from 'axios'
-import { WordsBtn, getUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'
+import { getUploadActionUrl, getUrl, ConditionToolTip, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
const $ = window.$;
const MAX_TITLE_LENGTH = 60;
@@ -191,7 +191,7 @@ class NewGtaskForms extends Component{
// https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
// showUploadList: false,
- action: `${getUrl()}/api/attachments.json`,
+ action: `${getUploadActionUrl()}`,
onChange: this.handleContentUploadChange,
onRemove: (file) => this.onAttachmentRemove(file, 'contentFileList'),
beforeUpload: (file) => {