-
Notifications
You must be signed in to change notification settings - Fork 0
/
question.php
137 lines (100 loc) · 4.02 KB
/
question.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
session_start();
$root_url = "http://localhost/pages/easelp";
$discord_api_url = "http://localhost:6000/send/";
if(isset($_POST["title"]) && isset($_POST["md"]) && isset($_POST["file_id"]) && isset($_POST["user"])){
if(isset($_GET["csrf_token"]) && isset($_SESSION["csrf_token"])){
if($_GET["csrf_token"] !== $_SESSION["csrf_token"]){
echo("403 Error");
http_response_code(403);
exit();
}
}else{
echo("403 Error");
http_response_code(403);
exit();
}
$user_id = $_POST["user"];
if(!preg_match("/^[0-9A-Za-z]+$/", $user_id)){
exit();
}
$title = $_POST["title"]; //title
$md_content = $_POST["md"]; //内容
$file_id = $_POST["file_id"]; //file id
//新規作成false
$new_create = false;
if($file_id === ""){
$new_create = true;
}
if($file_id === ""){ //新しいファイル作成
//新規作成モード
$new_create = true;
// ランダムな英数字を生成し、それをfile_idにする
for($i = 0;$i < 10;){
$str = '1234567890abcdefghijklmnopqrstuvwxyz';
$str_r = substr(str_shuffle($str), 0, 20);
//ファイル名の重複を防ぐため、同じ名前のファイルが存在したらもう一度
if(file_exists($str_r)){
}else{
$file_id = $str_r;
break;
}
}
if($file_id === ""){
echo("Error");
exit();
}
}
if($title === ""){
$title = 'No title';
}
//新規作成ならファイルを新しく作る
if($new_create){
//ファイルを作成
$file_handle = fopen( "./data/".$file_id.".md", "w");
fwrite( $file_handle, $md_content);
fclose($file_handle);
//ファイルを検索できるようにする
$filename = './question/'.$user_id.'.csv';
$fp = fopen($filename, 'a');
$title = str_replace('($split)','split','Question: '.$title);
$begin_part = str_replace('($split)','',substr($md_content,0,60)); //($split)が入力されてはまずいので、消す //冒頭部分
$begin_part = str_replace("\n",' ',$begin_part);
$add_data = "\n".$title.'($split)'.$file_id.'($split)'.$begin_part;
fputs($fp, $add_data);
fclose($fp);
file_get_contents($discord_api_url."?url=".urlencode("A new question: \n".$root_url."/view.php?u=".$user_id."&fid=".$file_id)."&user=".$user_id);
}else{
//保存に成功したか
$file_save_succeed = false;
$all_content = "";
//検索結果を更新
$lines = file("./question/".$user_id.".csv");
foreach($lines as $line){
$data = explode('($split)',$line);
if(count($data) == 3){
if($data[1] === $file_id){ //そのファイルが今編集している人に作られたなら
//ファイルを上書き保存
$file_handle = fopen( "./data/".$file_id.".md", "w");
fwrite( $file_handle, $md_content);
fclose($file_handle);
$title = str_replace('($split)','split',$title);
$begin_part = str_replace('($split)','',substr($md_content,0,60)); //($split)が入力されてはまずいので、消す //冒頭部分
$begin_part = str_replace("\n",' ',$begin_part);
$all_content .= $title.'($split)'.$file_id.'($split)'.$begin_part.'($split)0' ;
$file_save_succeed = true;
}else{
$all_content .= $line;
}
}
}
$filename = './question/'.$user_id.'.csv';
$fp = fopen($filename, 'w');
fputs($fp, $all_content);
fclose($fp);
if($file_save_succeed == false){
http_response_code(403);
}
}
}
?>