Mukho

Divide board

1 module.exports=(function(){ 1 module.exports=(function(){
2 return{ 2 return{
3 - board:{ 3 + notice_board:{
4 + host:'localhost',
5 + port:3306,
6 + user:'root',
7 + password:'',
8 + database:'singer_composer'
9 + },
10 + composer_board:{
11 + host:'localhost',
12 + port:3306,
13 + user:'root',
14 + password:'',
15 + database:'singer_composer'
16 + },
17 + singer_board:{
18 + host:'localhost',
19 + port:3306,
20 + user:'root',
21 + password:'',
22 + database:'singer_composer'
23 + },
24 + free_board:{
25 + host:'localhost',
26 + port:3306,
27 + user:'root',
28 + password:'',
29 + database:'singer_composer'
30 + },
31 + suggestion_board:{
4 host:'localhost', 32 host:'localhost',
5 port:3306, 33 port:3306,
6 user:'root', 34 user:'root',
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
...@@ -32,6 +32,24 @@ ...@@ -32,6 +32,24 @@
32 </div> 32 </div>
33 </div> 33 </div>
34 </nav> 34 </nav>
35 + <div class ="wrap">
36 + <div class="list_board">
37 + <a class="board_btn" href="/board/list/notice">
38 + 공지사항
39 + </a>
40 + <a class="board_btn" href="/board/list/composer">
41 + 작곡가 구인
42 + </a>
43 + <a class="board_btn" href="/board/list/singer">
44 + 가수 구인
45 + </a>
46 + <a class="board_btn" href="/board/list/free">
47 + 자유게시판
48 + </a>
49 + <a class="board_btn" href="/board/list/suggestion">
50 + 건의사항
51 + </a>
52 + </div>
35 <!-- Footer--> 53 <!-- Footer-->
36 <footer class="footer bg-light"> 54 <footer class="footer bg-light">
37 <div class="container"> 55 <div class="container">
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
21 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 21 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
22 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 22 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
23 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 23 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
24 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 24 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
25 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li> 25 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
26 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 26 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
27 </ul> 27 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href="/chat" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -36,7 +36,7 @@ create table userdb( ...@@ -36,7 +36,7 @@ create table userdb(
36 profilepic varchar(300) unique 36 profilepic varchar(300) unique
37 )engine=innodb; 37 )engine=innodb;
38 38
39 -create table board( 39 +create table _board(
40 idx int not null primary key auto_increment, 40 idx int not null primary key auto_increment,
41 nickname varchar(50) not null, 41 nickname varchar(50) not null,
42 title varchar(50) not null, 42 title varchar(50) not null,
...@@ -47,13 +47,13 @@ create table board( ...@@ -47,13 +47,13 @@ create table board(
47 ID varchar(20) not null 47 ID varchar(20) not null
48 )engine=innodb; 48 )engine=innodb;
49 49
50 -create table comment( 50 +create table _comment(
51 idx int auto_increment primary key, 51 idx int auto_increment primary key,
52 ID varchar(20) not null, 52 ID varchar(20) not null,
53 nickname varchar(50) not null, 53 nickname varchar(50) not null,
54 comment mediumtext not null, 54 comment mediumtext not null,
55 bulletin_id int not null, 55 bulletin_id int not null,
56 - foreign key (bulletin_id) references board(idx) on delete cascade 56 + foreign key (bulletin_id) references _board(idx) on delete cascade
57 )engine=innodb; 57 )engine=innodb;
58 ``` 58 ```
59 59
...@@ -69,8 +69,15 @@ create table comment( ...@@ -69,8 +69,15 @@ create table comment(
69 >SET @COUNT = 0;<br> 69 >SET @COUNT = 0;<br>
70 >UPDATE board SET idx = @COUNT:=@COUNT+1; 70 >UPDATE board SET idx = @COUNT:=@COUNT+1;
71 71
72 +- 게시판 추가 DB 이름(댓글은 board 대신 comment)
73 +>공지사항: notice_board
74 +>작곡가 구인: composer_board
75 +>가수 구인: singer_board
76 +>자유게시판: free_board
77 +>건의사항: suggestion_board
78 +
72 --- 79 ---
73 -### 최종 수정: 2021-11-29 19:47<br> 80 +### 최종 수정: 2021-12-01 01:22<br>
74 ### 수정 내용: 81 ### 수정 내용:
75 1. 채팅 구현(팝업) 82 1. 채팅 구현(팝업)
76 2. 시간 실시간 반영 83 2. 시간 실시간 반영
...@@ -83,3 +90,4 @@ create table comment( ...@@ -83,3 +90,4 @@ create table comment(
83 9. 댓글 등록, 열람, 삭제 기능 구현 및 버그 픽스 90 9. 댓글 등록, 열람, 삭제 기능 구현 및 버그 픽스
84 10. 채팅 중 서버 재시작시 기존 참여자들 리셋시킴 91 10. 채팅 중 서버 재시작시 기존 참여자들 리셋시킴
85 11. 요소 좌우 길이 80%로 조절 92 11. 요소 좌우 길이 80%로 조절
93 +12. 게시판 [공지사항/작곡가 구인/가수 구인/자유게시판/건의사항]으로 분화
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -28,53 +28,800 @@ function init(){ ...@@ -28,53 +28,800 @@ function init(){
28 } 28 }
29 init() 29 init()
30 30
31 -router.get('/list/:page', function(req, res, next) { 31 +router.get('/', function(req,res,next){
32 var ip = requestIp.getClientIp(req); 32 var ip = requestIp.getClientIp(req);
33 var id = req.user; 33 var id = req.user;
34 if(!id){ 34 if(!id){
35 - console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.('+ip+')') 35 + console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
36 - res.redirect('/board/list/1') 36 + res.sendFile(path.join(__dirname, "../../public/login.html"))
37 + }
38 + else res.redirect('/board/list/notice/1')
39 +})
40 +
41 +// 공지사항
42 +router.get('/list/notice/:page', function(req, res, next) {
43 + var ip = requestIp.getClientIp(req);
44 + var id = req.user;
45 + if(!id){
46 + console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
47 + res.redirect('/board/list/notice/1')
48 + }
49 + else{
50 + var page = req.params.page;
51 + var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
52 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from notice_board order by idx desc";
53 + board.query(sql, function(err,rows) {
54 + if (err) console.error("err : " + err);
55 + var id = req.user.ID;
56 + var nickname = req.user.nickname;
57 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 게시판을 보고있습니다.('+ip+')')
58 + res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '공지사항', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
59 + })
60 + }
61 +});
62 +
63 +router.get('/notice', function(req,res,next){
64 + var ip = requestIp.getClientIp(req);
65 + var id = req.user;
66 + if(!id){
67 + console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
68 + res.sendFile(path.join(__dirname, "../../public/login.html"))
69 + }
70 + else res.redirect('/board/list/notice/1')
71 +})
72 +
73 +router.get('/list/notice', function(req,res,next){
74 + var ip = requestIp.getClientIp(req);
75 + var id = req.user;
76 + if(!id){
77 + console.log(logString+'익명 유저의 공지사항 게시판 접근을 거부했습니다.('+ip+')')
78 + res.sendFile(path.join(__dirname, "../../public/login.html"))
79 + }
80 + else res.redirect('/board/list/notice/1')
81 +})
82 +
83 +router.get('/write/notice', function(req,res,next){
84 + var ip = requestIp.getClientIp(req);
85 + var id = req.user;
86 + if(!id){
87 + console.log(logString+'익명 유저의 공지사항 글쓰기 시도를 거부했습니다.('+ip+')')
88 + res.sendFile(path.join(__dirname, "../../public/login.html"))
89 + }
90 + else{
91 + var id = req.user.ID;
92 + var nickname = req.user.nickname;
93 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 게시글 작성 중입니다.('+ip+')')
94 + res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"공지사항 글 쓰기"})
95 + }
96 +})
97 +
98 +router.post('/write/notice', function(req,res,next){
99 + var ip = requestIp.getClientIp(req);
100 + var nickname = req.user.nickname // var name = req.body.name
101 + var title = req.body.title
102 + var content = req.body.content
103 + var ID = req.user.ID
104 + var datas = [nickname, title, content, ID]
105 +
106 + var sql = "insert into notice_board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
107 + board.query(sql, datas, function (err, rows) {
108 + if (err) console.error("err : " + err);
109 + });
110 +
111 + var idx_;
112 + var sql_ = "select max(idx) as idx from notice_board"
113 + board.query(sql_, function(err, rows){
114 + if(err) console.error("err : " + err);
115 + idx_ = rows[0].idx;
116 +
117 + if(!idx_) // 글이 없으면 NULL
118 + idx_ = 1;
119 +
120 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
121 + res.redirect('/board/read/notice/'+idx_);
122 + });
123 +})
124 +
125 +router.get('/read/notice/:idx', function(req,res,next){
126 + var ip = requestIp.getClientIp(req);
127 +
128 + var idx = req.params.idx
129 + var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
130 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from notice_board where idx=?";
131 + board.query(sql, [idx], function(err,row){
132 + if(err) console.error(err)
133 +
134 + var id = req.user;
135 + if(!id){
136 + console.log(logString+'익명 유저의 공지사항 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
137 + res.redirect('/login')
138 + }
139 + else{
140 + var id = req.user.ID;
141 + var nickname = req.user.nickname;
142 +
143 + // 조회수 증가
144 + var sql_ = 'update notice_board set hit=hit+1 where idx="'+idx+'"';
145 + board.query(sql_, function(err, row){
146 + if(err) console.error(err)
147 + })
148 +
149 + var sql_comment = "select idx, nickname, comment from notice_comment where bulletin_id =?"
150 + board.query(sql_comment, [idx], function(err,comment){
151 + if (err) console.error("err : " + err);
152 + res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"공지사항 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
153 + })
154 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 보고있습니다.('+ip+')')
155 + }
156 + })
157 +})
158 +
159 +router.post('/read/notice/commentwrite', function(req,res,next){
160 + var ip = requestIp.getClientIp(req);
161 + var idx = req.body.idx;
162 + var nickname = req.user.nickname // var name = req.body.name
163 + var comment = req.body.comment
164 + var ID = req.user.ID
165 + var datas = [ID, nickname, comment, idx]
166 +
167 + var sql = "insert into notice_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
168 + board.query(sql, datas, function(err,row){
169 + if (err) console.error("err : " + err);
170 + })
171 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
172 + res.redirect('/board/read/notice/'+idx);
173 +})
174 +
175 +router.post('/read/notice/commentdelete', function(req,res,next){
176 + var ip = requestIp.getClientIp(req);
177 + var idx = req.body.idxcomment;
178 + var idxbulletin = (req.headers.referer).split('/')[6];
179 + var ID = req.user.ID;
180 + var datas = [ID, idx]
181 +
182 + var sql = "delete from notice_comment where ID =? and idx=?"
183 + board.query(sql,datas,function(err,result){
184 + if(err) console.error(err)
185 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
186 + if(result.affectedRows == 0){
187 + // 운영자세요?
188 + var sql_ = 'select type from userdb where ID="'+ID+'"';
189 + board.query(sql_, function(err_, result_){
190 + if(err_) console.error(err_)
191 +
192 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
193 + var sqlAdmin = 'delete from notice_comment where idx="'+idx+'"';
194 + board.query(sqlAdmin, function(err__, result__){
195 + if(err__) console.error(err__)
196 +
197 + var nickname = req.user.nickname;
198 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 공지사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
199 + res.redirect('/board/read/notice/'+idxbulletin)
200 + })
201 + }
202 + else{ // 작성자도, 운영자도 아니면
203 + var nickname = req.user.nickname;
204 + console.log(logString+req.user.ID+'('+nickname+') 유저의 공지사항 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
205 + res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
206 + }
207 + })
208 + }
209 + else{ // 작성자인 경우
210 + var nickname = req.user.nickname;
211 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
212 + res.redirect('/board/read/notice/'+idxbulletin)
213 + }
214 + })
215 +})
216 +
217 +router.post('/update/notice', function(req,res,next){
218 + var ip = requestIp.getClientIp(req);
219 + var ID = req.user.ID;
220 + var idx = req.body.idx
221 + var title = req.body.title
222 + var content = req.body.content
223 + var datas = [title, content, idx, ID]
224 +
225 + var sql = "update notice_board set title=?,content=?,modidate=now() where idx =? and ID=?"
226 + board.query(sql,datas,function(err,result){
227 + if(err) console.error(err)
228 + if(result.affectedRows==0){
229 + console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 공지사항 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
230 + res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
231 + }
232 + else{
233 + var id = req.user.ID;
234 + var nickname = req.user.nickname;
235 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 수정했습니다.('+ip+')')
236 + res.redirect('/board/read/notice/'+idx)
237 + }
238 + })
239 +})
240 +
241 +router.post('/delete/notice', function(req,res,next){
242 + var ip = requestIp.getClientIp(req);
243 + var idx = req.body.idx
244 + var ID = req.user.ID;
245 + var datas = [idx,ID]
246 +
247 + var sql = "delete from notice_board where idx=? and ID=?"
248 + board.query(sql,datas, function(err,result){
249 + if(err) console.error(err)
250 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
251 + if(result.affectedRows == 0){
252 + // 운영자세요?
253 + var sql_ = 'select type from userdb where ID="'+ID+'"';
254 + board.query(sql_, function(err_, result_){
255 + if(err_) console.error(err_)
256 +
257 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
258 + var sqlAdmin = 'delete from notice_board where idx="'+idx+'"';
259 + board.query(sqlAdmin, function(err__, result__){
260 + if(err__) console.error(err__)
261 +
262 + var nickname = req.user.nickname;
263 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/notice/';</script>");
264 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
265 + })
266 + }
267 + else{ // 작성자도, 운영자도 아니면
268 + var nickname = req.user.nickname;
269 + console.log(logString+req.user.ID+'('+nickname+') 유저의 공지사항 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
270 + res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
271 + }
272 + })
273 + }
274 + else{ // 작성자인 경우
275 + var id = req.user.ID;
276 + var nickname = req.user.nickname;
277 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/notice/';</script>");
278 + console.log(logString+req.user.ID+'('+nickname+') 유저가 공지사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
279 + }
280 + })
281 +})
282 +
283 +// 작곡가 구인
284 +router.get('/list/composer/:page', function(req, res, next) {
285 + var ip = requestIp.getClientIp(req);
286 + var id = req.user;
287 + if(!id){
288 + console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
289 + res.redirect('/board/list/composer/1')
290 + }
291 + else{
292 + var page = req.params.page;
293 + var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
294 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from composer_board order by idx desc";
295 + board.query(sql, function(err,rows) {
296 + if (err) console.error("err : " + err);
297 + var id = req.user.ID;
298 + var nickname = req.user.nickname;
299 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 게시판을 보고있습니다.('+ip+')')
300 + res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '작곡가 구인', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
301 + })
302 + }
303 +});
304 +
305 +router.get('/composer', function(req,res,next){
306 + var ip = requestIp.getClientIp(req);
307 + var id = req.user;
308 + if(!id){
309 + console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
310 + res.sendFile(path.join(__dirname, "../../public/login.html"))
311 + }
312 + else res.redirect('/board/list/composer/1')
313 +})
314 +
315 +router.get('/list/composer', function(req,res,next){
316 + var ip = requestIp.getClientIp(req);
317 + var id = req.user;
318 + if(!id){
319 + console.log(logString+'익명 유저의 작곡가 구인 게시판 접근을 거부했습니다.('+ip+')')
320 + res.sendFile(path.join(__dirname, "../../public/login.html"))
321 + }
322 + else res.redirect('/board/list/composer/1')
323 +})
324 +
325 +router.get('/write/composer', function(req,res,next){
326 + var ip = requestIp.getClientIp(req);
327 + var id = req.user;
328 + if(!id){
329 + console.log(logString+'익명 유저의 작곡가 구인 글쓰기 시도를 거부했습니다.('+ip+')')
330 + res.sendFile(path.join(__dirname, "../../public/login.html"))
331 + }
332 + else{
333 + var id = req.user.ID;
334 + var nickname = req.user.nickname;
335 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 게시글 작성 중입니다.('+ip+')')
336 + res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"작곡가 구인 글 쓰기"})
337 + }
338 +})
339 +
340 +router.post('/write/composer', function(req,res,next){
341 + var ip = requestIp.getClientIp(req);
342 + var nickname = req.user.nickname // var name = req.body.name
343 + var title = req.body.title
344 + var content = req.body.content
345 + var ID = req.user.ID
346 + var datas = [nickname, title, content, ID]
347 +
348 + var sql = "insert into composer_board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
349 + board.query(sql, datas, function (err, rows) {
350 + if (err) console.error("err : " + err);
351 + });
352 +
353 + var idx_;
354 + var sql_ = "select max(idx) as idx from composer_board"
355 + board.query(sql_, function(err, rows){
356 + if(err) console.error("err : " + err);
357 + idx_ = rows[0].idx;
358 +
359 + if(!idx_) // 글이 없으면 NULL
360 + idx_ = 1;
361 +
362 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
363 + res.redirect('/board/read/composer/'+idx_);
364 + });
365 +})
366 +
367 +router.get('/read/composer/:idx', function(req,res,next){
368 + var ip = requestIp.getClientIp(req);
369 +
370 + var idx = req.params.idx
371 + var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
372 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from composer_board where idx=?";
373 + board.query(sql, [idx], function(err,row){
374 + if(err) console.error(err)
375 +
376 + var id = req.user;
377 + if(!id){
378 + console.log(logString+'익명 유저의 작곡가 구인 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
379 + res.redirect('/login')
380 + }
381 + else{
382 + var id = req.user.ID;
383 + var nickname = req.user.nickname;
384 +
385 + // 조회수 증가
386 + var sql_ = 'update composer_board set hit=hit+1 where idx="'+idx+'"';
387 + board.query(sql_, function(err, row){
388 + if(err) console.error(err)
389 + })
390 +
391 + var sql_comment = "select idx, nickname, comment from composer_comment where bulletin_id =?"
392 + board.query(sql_comment, [idx], function(err,comment){
393 + if (err) console.error("err : " + err);
394 + res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"작곡가 구인 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
395 + })
396 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 보고있습니다.('+ip+')')
397 + }
398 + })
399 +})
400 +
401 +router.post('/read/composer/commentwrite', function(req,res,next){
402 + var ip = requestIp.getClientIp(req);
403 + var idx = req.body.idx;
404 + var nickname = req.user.nickname // var name = req.body.name
405 + var comment = req.body.comment
406 + var ID = req.user.ID
407 + var datas = [ID, nickname, comment, idx]
408 +
409 + var sql = "insert into composer_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
410 + board.query(sql, datas, function(err,row){
411 + if (err) console.error("err : " + err);
412 + })
413 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
414 + res.redirect('/board/read/composer/'+idx);
415 +})
416 +
417 +router.post('/read/composer/commentdelete', function(req,res,next){
418 + var ip = requestIp.getClientIp(req);
419 + var idx = req.body.idxcomment;
420 + var idxbulletin = (req.headers.referer).split('/')[6];
421 + var ID = req.user.ID;
422 + var datas = [ID, idx]
423 +
424 + var sql = "delete from composer_comment where ID =? and idx=?"
425 + board.query(sql,datas,function(err,result){
426 + if(err) console.error(err)
427 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
428 + if(result.affectedRows == 0){
429 + // 운영자세요?
430 + var sql_ = 'select type from userdb where ID="'+ID+'"';
431 + board.query(sql_, function(err_, result_){
432 + if(err_) console.error(err_)
433 +
434 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
435 + var sqlAdmin = 'delete from ncomposer_comment where idx="'+idx+'"';
436 + board.query(sqlAdmin, function(err__, result__){
437 + if(err__) console.error(err__)
438 +
439 + var nickname = req.user.nickname;
440 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
441 + res.redirect('/board/read/composer/'+idxbulletin)
442 + })
443 + }
444 + else{ // 작성자도, 운영자도 아니면
445 + var nickname = req.user.nickname;
446 + console.log(logString+req.user.ID+'('+nickname+') 유저의 작곡가 구인 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
447 + res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
448 + }
449 + })
450 + }
451 + else{ // 작성자인 경우
452 + var nickname = req.user.nickname;
453 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
454 + res.redirect('/board/read/composer/'+idxbulletin)
455 + }
456 + })
457 +})
458 +
459 +router.post('/update/composer', function(req,res,next){
460 + var ip = requestIp.getClientIp(req);
461 + var ID = req.user.ID;
462 + var idx = req.body.idx
463 + var title = req.body.title
464 + var content = req.body.content
465 + var datas = [title, content, idx, ID]
466 +
467 + var sql = "update composer_board set title=?,content=?,modidate=now() where idx =? and ID=?"
468 + board.query(sql,datas,function(err,result){
469 + if(err) console.error(err)
470 + if(result.affectedRows==0){
471 + console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 작곡가 구인 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
472 + res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
473 + }
474 + else{
475 + var id = req.user.ID;
476 + var nickname = req.user.nickname;
477 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 수정했습니다.('+ip+')')
478 + res.redirect('/board/read/composer/'+idx)
479 + }
480 + })
481 +})
482 +
483 +router.post('/delete/composer', function(req,res,next){
484 + var ip = requestIp.getClientIp(req);
485 + var idx = req.body.idx
486 + var ID = req.user.ID;
487 + var datas = [idx,ID]
488 +
489 + var sql = "delete from composer_board where idx=? and ID=?"
490 + board.query(sql,datas, function(err,result){
491 + if(err) console.error(err)
492 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
493 + if(result.affectedRows == 0){
494 + // 운영자세요?
495 + var sql_ = 'select type from userdb where ID="'+ID+'"';
496 + board.query(sql_, function(err_, result_){
497 + if(err_) console.error(err_)
498 +
499 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
500 + var sqlAdmin = 'delete from composer_board where idx="'+idx+'"';
501 + board.query(sqlAdmin, function(err__, result__){
502 + if(err__) console.error(err__)
503 +
504 + var nickname = req.user.nickname;
505 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/composer/';</script>");
506 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
507 + })
508 + }
509 + else{ // 작성자도, 운영자도 아니면
510 + var nickname = req.user.nickname;
511 + console.log(logString+req.user.ID+'('+nickname+') 유저의 작곡가 구인 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
512 + res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
513 + }
514 + })
515 + }
516 + else{ // 작성자인 경우
517 + var id = req.user.ID;
518 + var nickname = req.user.nickname;
519 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/composer/';</script>");
520 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작곡가 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
521 + }
522 + })
523 +})
524 +
525 +// 가수 구인
526 +router.get('/list/singer/:page', function(req, res, next) {
527 + var ip = requestIp.getClientIp(req);
528 + var id = req.user;
529 + if(!id){
530 + console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
531 + res.redirect('/board/list/singer/1')
532 + }
533 + else{
534 + var page = req.params.page;
535 + var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
536 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from singer_board order by idx desc";
537 + board.query(sql, function(err,rows) {
538 + if (err) console.error("err : " + err);
539 + var id = req.user.ID;
540 + var nickname = req.user.nickname;
541 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 게시판을 보고있습니다.('+ip+')')
542 + res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '가수 구인', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
543 + })
544 + }
545 +});
546 +
547 +router.get('/singer', function(req,res,next){
548 + var ip = requestIp.getClientIp(req);
549 + var id = req.user;
550 + if(!id){
551 + console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
552 + res.sendFile(path.join(__dirname, "../../public/login.html"))
553 + }
554 + else res.redirect('/board/list/singer/1')
555 +})
556 +
557 +router.get('/list/singer', function(req,res,next){
558 + var ip = requestIp.getClientIp(req);
559 + var id = req.user;
560 + if(!id){
561 + console.log(logString+'익명 유저의 가수 구인 게시판 접근을 거부했습니다.('+ip+')')
562 + res.sendFile(path.join(__dirname, "../../public/login.html"))
563 + }
564 + else res.redirect('/board/list/singer/1')
565 +})
566 +
567 +router.get('/write/singer', function(req,res,next){
568 + var ip = requestIp.getClientIp(req);
569 + var id = req.user;
570 + if(!id){
571 + console.log(logString+'익명 유저의 가수 구인 글쓰기 시도를 거부했습니다.('+ip+')')
572 + res.sendFile(path.join(__dirname, "../../public/login.html"))
573 + }
574 + else{
575 + var id = req.user.ID;
576 + var nickname = req.user.nickname;
577 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 게시글 작성 중입니다.('+ip+')')
578 + res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"가수 구인 글 쓰기"})
579 + }
580 +})
581 +
582 +router.post('/write/singer', function(req,res,next){
583 + var ip = requestIp.getClientIp(req);
584 + var nickname = req.user.nickname // var name = req.body.name
585 + var title = req.body.title
586 + var content = req.body.content
587 + var ID = req.user.ID
588 + var datas = [nickname, title, content, ID]
589 +
590 + var sql = "insert into singer_board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
591 + board.query(sql, datas, function (err, rows) {
592 + if (err) console.error("err : " + err);
593 + });
594 +
595 + var idx_;
596 + var sql_ = "select max(idx) as idx from singer_board"
597 + board.query(sql_, function(err, rows){
598 + if(err) console.error("err : " + err);
599 + idx_ = rows[0].idx;
600 +
601 + if(!idx_) // 글이 없으면 NULL
602 + idx_ = 1;
603 +
604 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
605 + res.redirect('/board/read/singer/'+idx_);
606 + });
607 +})
608 +
609 +router.get('/read/singer/:idx', function(req,res,next){
610 + var ip = requestIp.getClientIp(req);
611 +
612 + var idx = req.params.idx
613 + var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
614 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from singer_board where idx=?";
615 + board.query(sql, [idx], function(err,row){
616 + if(err) console.error(err)
617 +
618 + var id = req.user;
619 + if(!id){
620 + console.log(logString+'익명 유저의 '+idx+'번 가수 구인 게시물 접근을 거부했습니다.('+ip+')')
621 + res.redirect('/login')
622 + }
623 + else{
624 + var id = req.user.ID;
625 + var nickname = req.user.nickname;
626 +
627 + // 조회수 증가
628 + var sql_ = 'update singer_board set hit=hit+1 where idx="'+idx+'"';
629 + board.query(sql_, function(err, row){
630 + if(err) console.error(err)
631 + })
632 +
633 + var sql_comment = "select idx, nickname, comment from singer_comment where bulletin_id =?"
634 + board.query(sql_comment, [idx], function(err,comment){
635 + if (err) console.error("err : " + err);
636 + res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"가수 구인 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
637 + })
638 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 보고있습니다.('+ip+')')
639 + }
640 + })
641 +})
642 +
643 +router.post('/read/singer/commentwrite', function(req,res,next){
644 + var ip = requestIp.getClientIp(req);
645 + var idx = req.body.idx;
646 + var nickname = req.user.nickname // var name = req.body.name
647 + var comment = req.body.comment
648 + var ID = req.user.ID
649 + var datas = [ID, nickname, comment, idx]
650 +
651 + var sql = "insert into singer_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
652 + board.query(sql, datas, function(err,row){
653 + if (err) console.error("err : " + err);
654 + })
655 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
656 + res.redirect('/board/read/singer/'+idx);
657 +})
658 +
659 +router.post('/read/singer/commentdelete', function(req,res,next){
660 + var ip = requestIp.getClientIp(req);
661 + var idx = req.body.idxcomment;
662 + var idxbulletin = (req.headers.referer).split('/')[6];
663 + var ID = req.user.ID;
664 + var datas = [ID, idx]
665 +
666 + var sql = "delete from singer_comment where ID =? and idx=?"
667 + board.query(sql,datas,function(err,result){
668 + if(err) console.error(err)
669 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
670 + if(result.affectedRows == 0){
671 + // 운영자세요?
672 + var sql_ = 'select type from userdb where ID="'+ID+'"';
673 + board.query(sql_, function(err_, result_){
674 + if(err_) console.error(err_)
675 +
676 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
677 + var sqlAdmin = 'delete from nsinger_comment where idx="'+idx+'"';
678 + board.query(sqlAdmin, function(err__, result__){
679 + if(err__) console.error(err__)
680 +
681 + var nickname = req.user.nickname;
682 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
683 + res.redirect('/board/read/singer/'+idxbulletin)
684 + })
685 + }
686 + else{ // 작성자도, 운영자도 아니면
687 + var nickname = req.user.nickname;
688 + console.log(logString+req.user.ID+'('+nickname+') 유저의 가수 구인 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
689 + res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
690 + }
691 + })
692 + }
693 + else{ // 작성자인 경우
694 + var nickname = req.user.nickname;
695 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
696 + res.redirect('/board/read/singer/'+idxbulletin)
697 + }
698 + })
699 +})
700 +
701 +router.post('/update/singer', function(req,res,next){
702 + var ip = requestIp.getClientIp(req);
703 + var ID = req.user.ID;
704 + var idx = req.body.idx
705 + var title = req.body.title
706 + var content = req.body.content
707 + var datas = [title, content, idx, ID]
708 +
709 + var sql = "update singer_board set title=?,content=?,modidate=now() where idx =? and ID=?"
710 + board.query(sql,datas,function(err,result){
711 + if(err) console.error(err)
712 + if(result.affectedRows==0){
713 + console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 가수 구인 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
714 + res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
715 + }
716 + else{
717 + var id = req.user.ID;
718 + var nickname = req.user.nickname;
719 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 수정했습니다.('+ip+')')
720 + res.redirect('/board/read/singer/'+idx)
721 + }
722 + })
723 +})
724 +
725 +router.post('/delete/singer', function(req,res,next){
726 + var ip = requestIp.getClientIp(req);
727 + var idx = req.body.idx
728 + var ID = req.user.ID;
729 + var datas = [idx,ID]
730 +
731 + var sql = "delete from singer_board where idx=? and ID=?"
732 + board.query(sql,datas, function(err,result){
733 + if(err) console.error(err)
734 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
735 + if(result.affectedRows == 0){
736 + // 운영자세요?
737 + var sql_ = 'select type from userdb where ID="'+ID+'"';
738 + board.query(sql_, function(err_, result_){
739 + if(err_) console.error(err_)
740 +
741 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
742 + var sqlAdmin = 'delete from singer_board where idx="'+idx+'"';
743 + board.query(sqlAdmin, function(err__, result__){
744 + if(err__) console.error(err__)
745 +
746 + var nickname = req.user.nickname;
747 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/singer/';</script>");
748 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
749 + })
750 + }
751 + else{ // 작성자도, 운영자도 아니면
752 + var nickname = req.user.nickname;
753 + console.log(logString+req.user.ID+'('+nickname+') 유저의 가수 구인 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
754 + res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
755 + }
756 + })
757 + }
758 + else{ // 작성자인 경우
759 + var id = req.user.ID;
760 + var nickname = req.user.nickname;
761 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/singer/';</script>");
762 + console.log(logString+req.user.ID+'('+nickname+') 유저가 가수 구인 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
763 + }
764 + })
765 +})
766 +
767 +// 자유게시판
768 +router.get('/list/free/:page', function(req, res, next) {
769 + var ip = requestIp.getClientIp(req);
770 + var id = req.user;
771 + if(!id){
772 + console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
773 + res.redirect('/board/list/free/1')
37 } 774 }
38 else{ 775 else{
39 var page = req.params.page; 776 var page = req.params.page;
40 var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " + 777 var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
41 - "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from board order by idx desc"; 778 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from free_board order by idx desc";
42 board.query(sql, function(err,rows) { 779 board.query(sql, function(err,rows) {
43 if (err) console.error("err : " + err); 780 if (err) console.error("err : " + err);
44 var id = req.user.ID; 781 var id = req.user.ID;
45 var nickname = req.user.nickname; 782 var nickname = req.user.nickname;
46 - console.log(logString+req.user.ID+'('+nickname+') 유저가 게시판을 보고있습니다.('+ip+')') 783 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판을 보고있습니다.('+ip+')')
47 - res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '게시판 리스트', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true}) 784 + res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '자유게시판', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
48 }) 785 })
49 } 786 }
50 }); 787 });
51 788
52 -router.get('/list', function(req,res,next){ 789 +router.get('/free', function(req,res,next){
790 + var ip = requestIp.getClientIp(req);
791 + var id = req.user;
792 + if(!id){
793 + console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
794 + res.sendFile(path.join(__dirname, "../../public/login.html"))
795 + }
796 + else res.redirect('/board/list/free/1')
797 +})
798 +
799 +router.get('/list/free', function(req,res,next){
53 var ip = requestIp.getClientIp(req); 800 var ip = requestIp.getClientIp(req);
54 var id = req.user; 801 var id = req.user;
55 if(!id){ 802 if(!id){
56 - console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.('+ip+')') 803 + console.log(logString+'익명 유저의 자유게시판 접근을 거부했습니다.('+ip+')')
57 res.sendFile(path.join(__dirname, "../../public/login.html")) 804 res.sendFile(path.join(__dirname, "../../public/login.html"))
58 } 805 }
59 - else res.redirect('/board/list/1') 806 + else res.redirect('/board/list/free/1')
60 }) 807 })
61 808
62 -router.get('/write', function(req,res,next){ 809 +router.get('/write/free', function(req,res,next){
63 var ip = requestIp.getClientIp(req); 810 var ip = requestIp.getClientIp(req);
64 var id = req.user; 811 var id = req.user;
65 if(!id){ 812 if(!id){
66 - console.log(logString+'익명 유저의 글쓰기 시도를 거부했습니다.('+ip+')') 813 + console.log(logString+'익명 유저의 자유게시판 글쓰기 시도를 거부했습니다.('+ip+')')
67 res.sendFile(path.join(__dirname, "../../public/login.html")) 814 res.sendFile(path.join(__dirname, "../../public/login.html"))
68 } 815 }
69 else{ 816 else{
70 var id = req.user.ID; 817 var id = req.user.ID;
71 var nickname = req.user.nickname; 818 var nickname = req.user.nickname;
72 - console.log(logString+req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.('+ip+')') 819 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 게시글 작성 중입니다.('+ip+')')
73 - res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"게시판 글 쓰기"}) 820 + res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"자유게시판 글 쓰기"})
74 } 821 }
75 }) 822 })
76 823
77 -router.post('/write', function(req,res,next){ 824 +router.post('/write/free', function(req,res,next){
78 var ip = requestIp.getClientIp(req); 825 var ip = requestIp.getClientIp(req);
79 var nickname = req.user.nickname // var name = req.body.name 826 var nickname = req.user.nickname // var name = req.body.name
80 var title = req.body.title 827 var title = req.body.title
...@@ -82,13 +829,13 @@ router.post('/write', function(req,res,next){ ...@@ -82,13 +829,13 @@ router.post('/write', function(req,res,next){
82 var ID = req.user.ID 829 var ID = req.user.ID
83 var datas = [nickname, title, content, ID] 830 var datas = [nickname, title, content, ID]
84 831
85 - var sql = "insert into board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)"; 832 + var sql = "insert into free_board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
86 board.query(sql, datas, function (err, rows) { 833 board.query(sql, datas, function (err, rows) {
87 if (err) console.error("err : " + err); 834 if (err) console.error("err : " + err);
88 }); 835 });
89 836
90 var idx_; 837 var idx_;
91 - var sql_ = "select max(idx) as idx from board" 838 + var sql_ = "select max(idx) as idx from free_board"
92 board.query(sql_, function(err, rows){ 839 board.query(sql_, function(err, rows){
93 if(err) console.error("err : " + err); 840 if(err) console.error("err : " + err);
94 idx_ = rows[0].idx; 841 idx_ = rows[0].idx;
...@@ -96,23 +843,23 @@ router.post('/write', function(req,res,next){ ...@@ -96,23 +843,23 @@ router.post('/write', function(req,res,next){
96 if(!idx_) // 글이 없으면 NULL 843 if(!idx_) // 글이 없으면 NULL
97 idx_ = 1; 844 idx_ = 1;
98 845
99 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.('+ip+')') 846 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
100 - res.redirect('/board/read/'+idx_); 847 + res.redirect('/board/read/free/'+idx_);
101 }); 848 });
102 }) 849 })
103 850
104 -router.get('/read/:idx', function(req,res,next){ 851 +router.get('/read/free/:idx', function(req,res,next){
105 var ip = requestIp.getClientIp(req); 852 var ip = requestIp.getClientIp(req);
106 853
107 var idx = req.params.idx 854 var idx = req.params.idx
108 var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " + 855 var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
109 - "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from board where idx=?"; 856 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from free_board where idx=?";
110 board.query(sql, [idx], function(err,row){ 857 board.query(sql, [idx], function(err,row){
111 if(err) console.error(err) 858 if(err) console.error(err)
112 859
113 var id = req.user; 860 var id = req.user;
114 if(!id){ 861 if(!id){
115 - console.log(logString+'익명 유저의 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')') 862 + console.log(logString+'익명 유저의 자유게시판 '+idx+'번 게시물 접근을 거부했습니다.('+ip+')')
116 res.redirect('/login') 863 res.redirect('/login')
117 } 864 }
118 else{ 865 else{
...@@ -120,22 +867,22 @@ router.get('/read/:idx', function(req,res,next){ ...@@ -120,22 +867,22 @@ router.get('/read/:idx', function(req,res,next){
120 var nickname = req.user.nickname; 867 var nickname = req.user.nickname;
121 868
122 // 조회수 증가 869 // 조회수 증가
123 - var sql_ = 'update board set hit=hit+1 where idx="'+idx+'"'; 870 + var sql_ = 'update free_board set hit=hit+1 where idx="'+idx+'"';
124 board.query(sql_, function(err, row){ 871 board.query(sql_, function(err, row){
125 if(err) console.error(err) 872 if(err) console.error(err)
126 }) 873 })
127 874
128 - var sql_comment = "select idx, nickname, comment from comment where bulletin_id =?" 875 + var sql_comment = "select idx, nickname, comment from free_comment where bulletin_id =?"
129 board.query(sql_comment, [idx], function(err,comment){ 876 board.query(sql_comment, [idx], function(err,comment){
130 if (err) console.error("err : " + err); 877 if (err) console.error("err : " + err);
131 - res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname}) 878 + res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"자유게시판 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
132 }) 879 })
133 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고있습니다.('+ip+')') 880 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 보고있습니다.('+ip+')')
134 } 881 }
135 }) 882 })
136 }) 883 })
137 884
138 -router.post('/read/commentwrite', function(req,res,next){ 885 +router.post('/read/free/commentwrite', function(req,res,next){
139 var ip = requestIp.getClientIp(req); 886 var ip = requestIp.getClientIp(req);
140 var idx = req.body.idx; 887 var idx = req.body.idx;
141 var nickname = req.user.nickname // var name = req.body.name 888 var nickname = req.user.nickname // var name = req.body.name
...@@ -143,22 +890,22 @@ router.post('/read/commentwrite', function(req,res,next){ ...@@ -143,22 +890,22 @@ router.post('/read/commentwrite', function(req,res,next){
143 var ID = req.user.ID 890 var ID = req.user.ID
144 var datas = [ID, nickname, comment, idx] 891 var datas = [ID, nickname, comment, idx]
145 892
146 - var sql = "insert into comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)" 893 + var sql = "insert into free_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
147 board.query(sql, datas, function(err,row){ 894 board.query(sql, datas, function(err,row){
148 if (err) console.error("err : " + err); 895 if (err) console.error("err : " + err);
149 }) 896 })
150 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')') 897 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
151 - res.redirect('/board/read/'+idx); 898 + res.redirect('/board/read/free/'+idx);
152 }) 899 })
153 900
154 -router.post('/read/commentdelete', function(req,res,next){ 901 +router.post('/read/free/commentdelete', function(req,res,next){
155 var ip = requestIp.getClientIp(req); 902 var ip = requestIp.getClientIp(req);
156 var idx = req.body.idxcomment; 903 var idx = req.body.idxcomment;
157 - var idxbulletin = (req.headers.referer).split('/')[5]; 904 + var idxbulletin = (req.headers.referer).split('/')[6];
158 var ID = req.user.ID; 905 var ID = req.user.ID;
159 var datas = [ID, idx] 906 var datas = [ID, idx]
160 907
161 - var sql = "delete from comment where ID =? and idx=?" 908 + var sql = "delete from free_comment where ID =? and idx=?"
162 board.query(sql,datas,function(err,result){ 909 board.query(sql,datas,function(err,result){
163 if(err) console.error(err) 910 if(err) console.error(err)
164 // 삭제를 요청한 사용자가 작성자가 아닌 경우 911 // 삭제를 요청한 사용자가 작성자가 아닌 경우
...@@ -169,32 +916,273 @@ router.post('/read/commentdelete', function(req,res,next){ ...@@ -169,32 +916,273 @@ router.post('/read/commentdelete', function(req,res,next){
169 if(err_) console.error(err_) 916 if(err_) console.error(err_)
170 917
171 if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우 918 if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
172 - var sqlAdmin = 'delete from comment where idx="'+idx+'"'; 919 + var sqlAdmin = 'delete from nfree_comment where idx="'+idx+'"';
173 board.query(sqlAdmin, function(err__, result__){ 920 board.query(sqlAdmin, function(err__, result__){
174 if(err__) console.error(err__) 921 if(err__) console.error(err__)
175 922
176 var nickname = req.user.nickname; 923 var nickname = req.user.nickname;
177 - console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')') 924 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
178 - res.redirect('/board/read/'+idxbulletin) 925 + res.redirect('/board/read/free/'+idxbulletin)
179 }) 926 })
180 } 927 }
181 else{ // 작성자도, 운영자도 아니면 928 else{ // 작성자도, 운영자도 아니면
182 var nickname = req.user.nickname; 929 var nickname = req.user.nickname;
183 - console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')') 930 + console.log(logString+req.user.ID+'('+nickname+') 유저의 자유게시판 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
184 res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>"); 931 res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
185 } 932 }
186 }) 933 })
187 } 934 }
188 else{ // 작성자인 경우 935 else{ // 작성자인 경우
189 var nickname = req.user.nickname; 936 var nickname = req.user.nickname;
190 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')') 937 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
191 - res.redirect('/board/read/'+idxbulletin) 938 + res.redirect('/board/read/free/'+idxbulletin)
939 + }
940 + })
941 +})
942 +
943 +router.post('/update/free', function(req,res,next){
944 + var ip = requestIp.getClientIp(req);
945 + var ID = req.user.ID;
946 + var idx = req.body.idx
947 + var title = req.body.title
948 + var content = req.body.content
949 + var datas = [title, content, idx, ID]
950 +
951 + var sql = "update free_board set title=?,content=?,modidate=now() where idx =? and ID=?"
952 + board.query(sql,datas,function(err,result){
953 + if(err) console.error(err)
954 + if(result.affectedRows==0){
955 + console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 자유게시판 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
956 + res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
957 + }
958 + else{
959 + var id = req.user.ID;
960 + var nickname = req.user.nickname;
961 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 수정했습니다.('+ip+')')
962 + res.redirect('/board/read/free/'+idx)
963 + }
964 + })
965 +})
966 +
967 +router.post('/delete/free', function(req,res,next){
968 + var ip = requestIp.getClientIp(req);
969 + var idx = req.body.idx
970 + var ID = req.user.ID;
971 + var datas = [idx,ID]
972 +
973 + var sql = "delete from free_board where idx=? and ID=?"
974 + board.query(sql,datas, function(err,result){
975 + if(err) console.error(err)
976 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
977 + if(result.affectedRows == 0){
978 + // 운영자세요?
979 + var sql_ = 'select type from userdb where ID="'+ID+'"';
980 + board.query(sql_, function(err_, result_){
981 + if(err_) console.error(err_)
982 +
983 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
984 + var sqlAdmin = 'delete from free_board where idx="'+idx+'"';
985 + board.query(sqlAdmin, function(err__, result__){
986 + if(err__) console.error(err__)
987 +
988 + var nickname = req.user.nickname;
989 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/free/';</script>");
990 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
991 + })
992 + }
993 + else{ // 작성자도, 운영자도 아니면
994 + var nickname = req.user.nickname;
995 + console.log(logString+req.user.ID+'('+nickname+') 유저의 자유게시판 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
996 + res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
997 + }
998 + })
999 + }
1000 + else{ // 작성자인 경우
1001 + var id = req.user.ID;
1002 + var nickname = req.user.nickname;
1003 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/free/';</script>");
1004 + console.log(logString+req.user.ID+'('+nickname+') 유저가 자유게시판 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
1005 + }
1006 + })
1007 +})
1008 +
1009 +// 건의사항
1010 +router.get('/list/suggestion/:page', function(req, res, next) {
1011 + var ip = requestIp.getClientIp(req);
1012 + var id = req.user;
1013 + if(!id){
1014 + console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
1015 + res.redirect('/board/list/suggestion/1')
1016 + }
1017 + else{
1018 + var page = req.params.page;
1019 + var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
1020 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit from suggestion_board order by idx desc";
1021 + board.query(sql, function(err,rows) {
1022 + if (err) console.error("err : " + err);
1023 + var id = req.user.ID;
1024 + var nickname = req.user.nickname;
1025 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 게시판을 보고있습니다.('+ip+')')
1026 + res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '건의사항', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
1027 + })
1028 + }
1029 +});
1030 +
1031 +router.get('/suggestion', function(req,res,next){
1032 + var ip = requestIp.getClientIp(req);
1033 + var id = req.user;
1034 + if(!id){
1035 + console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
1036 + res.sendFile(path.join(__dirname, "../../public/login.html"))
1037 + }
1038 + else res.redirect('/board/list/suggestion/1')
1039 +})
1040 +
1041 +router.get('/list/suggestion', function(req,res,next){
1042 + var ip = requestIp.getClientIp(req);
1043 + var id = req.user;
1044 + if(!id){
1045 + console.log(logString+'익명 유저의 건의사항 게시판 접근을 거부했습니다.('+ip+')')
1046 + res.sendFile(path.join(__dirname, "../../public/login.html"))
1047 + }
1048 + else res.redirect('/board/list/suggestion/1')
1049 +})
1050 +
1051 +router.get('/write/suggestion', function(req,res,next){
1052 + var ip = requestIp.getClientIp(req);
1053 + var id = req.user;
1054 + if(!id){
1055 + console.log(logString+'익명 유저의 건의사항 글쓰기 시도를 거부했습니다.('+ip+')')
1056 + res.sendFile(path.join(__dirname, "../../public/login.html"))
1057 + }
1058 + else{
1059 + var id = req.user.ID;
1060 + var nickname = req.user.nickname;
1061 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 게시글 작성 중입니다.('+ip+')')
1062 + res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"건의사항 글 쓰기"})
1063 + }
1064 +})
1065 +
1066 +router.post('/write/suggestion', function(req,res,next){
1067 + var ip = requestIp.getClientIp(req);
1068 + var nickname = req.user.nickname // var name = req.body.name
1069 + var title = req.body.title
1070 + var content = req.body.content
1071 + var ID = req.user.ID
1072 + var datas = [nickname, title, content, ID]
1073 +
1074 + var sql = "insert into suggestion_board(nickname, title, content, regdate, modidate, hit, ID) values(?,?,?,now(),now(),0, ?)";
1075 + board.query(sql, datas, function (err, rows) {
1076 + if (err) console.error("err : " + err);
1077 + });
1078 +
1079 + var idx_;
1080 + var sql_ = "select max(idx) as idx from suggestion_board"
1081 + board.query(sql_, function(err, rows){
1082 + if(err) console.error("err : " + err);
1083 + idx_ = rows[0].idx;
1084 +
1085 + if(!idx_) // 글이 없으면 NULL
1086 + idx_ = 1;
1087 +
1088 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx_+'번 게시글을 작성했습니다.('+ip+')')
1089 + res.redirect('/board/read/suggestion/'+idx_);
1090 + });
1091 +})
1092 +
1093 +router.get('/read/suggestion/:idx', function(req,res,next){
1094 + var ip = requestIp.getClientIp(req);
1095 +
1096 + var idx = req.params.idx
1097 + var sql = "select idx, nickname, title, content, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
1098 + "date_format(regdate,'%Y-%m-%d %H:%i:%s') regdate, hit, ID from suggestion_board where idx=?";
1099 + board.query(sql, [idx], function(err,row){
1100 + if(err) console.error(err)
1101 +
1102 + var id = req.user;
1103 + if(!id){
1104 + console.log(logString+'익명 유저의 '+idx+'번 건의사항 게시물 접근을 거부했습니다.('+ip+')')
1105 + res.redirect('/login')
1106 + }
1107 + else{
1108 + var id = req.user.ID;
1109 + var nickname = req.user.nickname;
1110 +
1111 + // 조회수 증가
1112 + var sql_ = 'update suggestion_board set hit=hit+1 where idx="'+idx+'"';
1113 + board.query(sql_, function(err, row){
1114 + if(err) console.error(err)
1115 + })
1116 +
1117 + var sql_comment = "select idx, nickname, comment from suggestion_comment where bulletin_id =?"
1118 + board.query(sql_comment, [idx], function(err,comment){
1119 + if (err) console.error("err : " + err);
1120 + res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"건의사항 글 상세", row:row[0], comment:comment, comment_length : comment.length, usernick:req.user.nickname})
1121 + })
1122 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 보고있습니다.('+ip+')')
192 } 1123 }
193 }) 1124 })
1125 +})
1126 +
1127 +router.post('/read/suggestion/commentwrite', function(req,res,next){
1128 + var ip = requestIp.getClientIp(req);
1129 + var idx = req.body.idx;
1130 + var nickname = req.user.nickname // var name = req.body.name
1131 + var comment = req.body.comment
1132 + var ID = req.user.ID
1133 + var datas = [ID, nickname, comment, idx]
1134 +
1135 + var sql = "insert into suggestion_comment(ID, nickname, comment, bulletin_id) values(?, ?, ?, ?)"
1136 + board.query(sql, datas, function(err,row){
1137 + if (err) console.error("err : " + err);
1138 + })
1139 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시물에 댓글을 작성했습니다.('+ip+')')
1140 + res.redirect('/board/read/suggestion/'+idx);
1141 +})
1142 +
1143 +router.post('/read/suggestion/commentdelete', function(req,res,next){
1144 + var ip = requestIp.getClientIp(req);
1145 + var idx = req.body.idxcomment;
1146 + var idxbulletin = (req.headers.referer).split('/')[6];
1147 + var ID = req.user.ID;
1148 + var datas = [ID, idx]
1149 +
1150 + var sql = "delete from suggestion_comment where ID =? and idx=?"
1151 + board.query(sql,datas,function(err,result){
1152 + if(err) console.error(err)
1153 + // 삭제를 요청한 사용자가 작성자가 아닌 경우
1154 + if(result.affectedRows == 0){
1155 + // 운영자세요?
1156 + var sql_ = 'select type from userdb where ID="'+ID+'"';
1157 + board.query(sql_, function(err_, result_){
1158 + if(err_) console.error(err_)
1159 +
1160 + if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
1161 + var sqlAdmin = 'delete from nsuggestion_comment where idx="'+idx+'"';
1162 + board.query(sqlAdmin, function(err__, result__){
1163 + if(err__) console.error(err__)
194 1164
1165 + var nickname = req.user.nickname;
1166 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 건의사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
1167 + res.redirect('/board/read/suggestion/'+idxbulletin)
1168 + })
1169 + }
1170 + else{ // 작성자도, 운영자도 아니면
1171 + var nickname = req.user.nickname;
1172 + console.log(logString+req.user.ID+'('+nickname+') 유저의 건의사항 '+idxbulletin+'번 글의 '+idx+'번 댓글 삭제를 거부했습니다.(권한없음 // '+ip+')')
1173 + res.send("<script>alert('댓글 작성자가 아닙니다');history.back();</script>");
1174 + }
1175 + })
1176 + }
1177 + else{ // 작성자인 경우
1178 + var nickname = req.user.nickname;
1179 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idxbulletin+'번 글에서 '+idx+'번 댓글을 삭제했습니다.('+ip+')')
1180 + res.redirect('/board/read/suggestion/'+idxbulletin)
1181 + }
1182 + })
195 }) 1183 })
196 1184
197 -router.post('/update', function(req,res,next){ 1185 +router.post('/update/suggestion', function(req,res,next){
198 var ip = requestIp.getClientIp(req); 1186 var ip = requestIp.getClientIp(req);
199 var ID = req.user.ID; 1187 var ID = req.user.ID;
200 var idx = req.body.idx 1188 var idx = req.body.idx
...@@ -202,29 +1190,29 @@ router.post('/update', function(req,res,next){ ...@@ -202,29 +1190,29 @@ router.post('/update', function(req,res,next){
202 var content = req.body.content 1190 var content = req.body.content
203 var datas = [title, content, idx, ID] 1191 var datas = [title, content, idx, ID]
204 1192
205 - var sql = "update board set title=?,content=?,modidate=now() where idx =? and ID=?" 1193 + var sql = "update suggestion_board set title=?,content=?,modidate=now() where idx =? and ID=?"
206 board.query(sql,datas,function(err,result){ 1194 board.query(sql,datas,function(err,result){
207 if(err) console.error(err) 1195 if(err) console.error(err)
208 if(result.affectedRows==0){ 1196 if(result.affectedRows==0){
209 - console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')') 1197 + console.log(logString+req.user.ID+'('+req.user.nickname+') 유저의 건의사항 '+idx+'번 게시글 수정을 거부했습니다.(권한없음 // '+ip+')')
210 res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>") 1198 res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
211 } 1199 }
212 else{ 1200 else{
213 var id = req.user.ID; 1201 var id = req.user.ID;
214 var nickname = req.user.nickname; 1202 var nickname = req.user.nickname;
215 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.('+ip+')') 1203 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 수정했습니다.('+ip+')')
216 - res.redirect('/board/read/'+idx) 1204 + res.redirect('/board/read/suggestion/'+idx)
217 } 1205 }
218 }) 1206 })
219 }) 1207 })
220 1208
221 -router.post('/delete', function(req,res,next){ 1209 +router.post('/delete/suggestion', function(req,res,next){
222 var ip = requestIp.getClientIp(req); 1210 var ip = requestIp.getClientIp(req);
223 var idx = req.body.idx 1211 var idx = req.body.idx
224 var ID = req.user.ID; 1212 var ID = req.user.ID;
225 var datas = [idx,ID] 1213 var datas = [idx,ID]
226 1214
227 - var sql = "delete from board where idx=? and ID=?" 1215 + var sql = "delete from suggestion_board where idx=? and ID=?"
228 board.query(sql,datas, function(err,result){ 1216 board.query(sql,datas, function(err,result){
229 if(err) console.error(err) 1217 if(err) console.error(err)
230 // 삭제를 요청한 사용자가 작성자가 아닌 경우 1218 // 삭제를 요청한 사용자가 작성자가 아닌 경우
...@@ -235,18 +1223,18 @@ router.post('/delete', function(req,res,next){ ...@@ -235,18 +1223,18 @@ router.post('/delete', function(req,res,next){
235 if(err_) console.error(err_) 1223 if(err_) console.error(err_)
236 1224
237 if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우 1225 if(result_[0].type == "운영자"){ // 작성자는 아니나 유저 타입이 운영자인 경우
238 - var sqlAdmin = 'delete from board where idx="'+idx+'"'; 1226 + var sqlAdmin = 'delete from suggestion_board where idx="'+idx+'"';
239 board.query(sqlAdmin, function(err__, result__){ 1227 board.query(sqlAdmin, function(err__, result__){
240 if(err__) console.error(err__) 1228 if(err__) console.error(err__)
241 1229
242 var nickname = req.user.nickname; 1230 var nickname = req.user.nickname;
243 - res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>"); 1231 + res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/suggestion/';</script>");
244 - console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.('+ip+')') 1232 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
245 }) 1233 })
246 } 1234 }
247 else{ // 작성자도, 운영자도 아니면 1235 else{ // 작성자도, 운영자도 아니면
248 var nickname = req.user.nickname; 1236 var nickname = req.user.nickname;
249 - console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')') 1237 + console.log(logString+req.user.ID+'('+nickname+') 유저의 건의사항 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음 // '+ip+')')
250 res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>"); 1238 res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
251 } 1239 }
252 }) 1240 })
...@@ -254,8 +1242,8 @@ router.post('/delete', function(req,res,next){ ...@@ -254,8 +1242,8 @@ router.post('/delete', function(req,res,next){
254 else{ // 작성자인 경우 1242 else{ // 작성자인 경우
255 var id = req.user.ID; 1243 var id = req.user.ID;
256 var nickname = req.user.nickname; 1244 var nickname = req.user.nickname;
257 - res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>"); 1245 + res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/suggestion/';</script>");
258 - console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.('+ip+')') 1246 + console.log(logString+req.user.ID+'('+nickname+') 유저가 건의사항 '+idx+'번 게시글을 삭제했습니다.('+ip+')')
259 } 1247 }
260 }) 1248 })
261 }) 1249 })
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
6 <meta name="description" content="" /> 6 <meta name="description" content="" />
7 <meta name="author" content="" /> 7 <meta name="author" content="" />
8 - <title>묵호 - 게시판</title> 8 + <title>묵호 - <%= title %></title>
9 <!-- Favicon--> 9 <!-- Favicon-->
10 <link rel="icon" type="image/x-icon" href="../assets/favicon.ico" /> 10 <link rel="icon" type="image/x-icon" href="../assets/favicon.ico" />
11 <!-- Bootstrap icons--> 11 <!-- Bootstrap icons-->
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
23 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 23 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
24 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 24 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
25 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 25 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
26 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 26 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
27 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 27 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
28 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 28 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
29 </ul> 29 </ul>
...@@ -35,25 +35,49 @@ ...@@ -35,25 +35,49 @@
35 </nav> 35 </nav>
36 <div class ="wrap"> 36 <div class ="wrap">
37 <div class="list_board"> 37 <div class="list_board">
38 - <a class="board_btn" href="/board/list"> 38 + <a class="board_btn" href="/board/list/notice">
39 공지사항 39 공지사항
40 </a> 40 </a>
41 - <a class="board_btn" href="/board/list"> 41 + <a class="board_btn" href="/board/list/composer">
42 작곡가 구인 42 작곡가 구인
43 </a> 43 </a>
44 - <a class="board_btn" href="/board/list"> 44 + <a class="board_btn" href="/board/list/singer">
45 가수 구인 45 가수 구인
46 </a> 46 </a>
47 - <a class="board_btn" href="/board/list"> 47 + <a class="board_btn" href="/board/list/free">
48 자유게시판 48 자유게시판
49 </a> 49 </a>
50 - <a class="board_btn" href="/board/list"> 50 + <a class="board_btn" href="/board/list/suggestion">
51 건의사항 51 건의사항
52 </a> 52 </a>
53 </div> 53 </div>
54 54
55 <div class="container px-5 my-5"> 55 <div class="container px-5 my-5">
56 <h1><%= title %></h1> 56 <h1><%= title %></h1>
57 + <%
58 + var addr;
59 + %>
60 + <%
61 + switch(title){
62 + case '공지사항':
63 + addr = 'notice';
64 + break;
65 + case '작곡가 구인':
66 + addr = 'composer';
67 + break;
68 + case '가수 구인':
69 + addr = 'singer';
70 + break;
71 + case '자유게시판':
72 + addr = 'free';
73 + break;
74 + case '건의사항':
75 + addr = 'suggestion';
76 + break;
77 + %>
78 + <%
79 + }
80 + %>
57 <table border="1"> 81 <table border="1">
58 <tr> 82 <tr>
59 <td>번호</td> 83 <td>번호</td>
...@@ -73,7 +97,7 @@ ...@@ -73,7 +97,7 @@
73 <tr> 97 <tr>
74 <td><%=data.idx%></td> 98 <td><%=data.idx%></td>
75 <td><%=data.nickname%></td> 99 <td><%=data.nickname%></td>
76 - <td><a href="/board/read/<%=data.idx%>"><%=data.title%></a></td> 100 + <td><a href="/board/read/<%=addr%>/<%=data.idx%>"><%=data.title%></a></td>
77 <td><%=data.hit%></td> 101 <td><%=data.hit%></td>
78 <td><%=data.modidate%></td> 102 <td><%=data.modidate%></td>
79 <td><%=data.regdate%></td> 103 <td><%=data.regdate%></td>
...@@ -84,10 +108,9 @@ ...@@ -84,10 +108,9 @@
84 <tr> 108 <tr>
85 <td colspan="6"> 109 <td colspan="6">
86 <% 110 <%
87 -
88 for(var j = 0; j < rows.length/page_num ; j++){ 111 for(var j = 0; j < rows.length/page_num ; j++){
89 %> 112 %>
90 - [<a href="/board/list/<%= j + 1 %>"><%= j+1 %></a>] 113 + [<a href="/board/<%=addr%>/list/<%= j + 1 %>"><%= j+1 %></a>]
91 <% 114 <%
92 } 115 }
93 %> 116 %>
...@@ -95,7 +118,7 @@ ...@@ -95,7 +118,7 @@
95 </tr> 118 </tr>
96 </table> 119 </table>
97 <nav class="navbar"> 120 <nav class="navbar">
98 - <a class="btn btn-outline-primary me-2" href="/board/write">글쓰기</a> 121 + <a class="btn btn-outline-primary me-2" href="/board/write/<%=addr%>">글쓰기</a>
99 </nav> 122 </nav>
100 </div> 123 </div>
101 </div> 124 </div>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
21 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 21 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
22 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 22 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
23 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 23 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
24 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 24 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
25 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 25 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
26 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 26 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
27 </ul> 27 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
19 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 19 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
20 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 20 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
21 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 21 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
22 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 22 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
23 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 23 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
24 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 24 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
25 </ul> 25 </ul>
...@@ -29,16 +29,40 @@ ...@@ -29,16 +29,40 @@
29 </div> 29 </div>
30 </div> 30 </div>
31 </nav> 31 </nav>
32 + <%
33 + var addr;
34 + %>
32 <div class="container px-5 my-5"> 35 <div class="container px-5 my-5">
33 <h1><%= title %></h1> 36 <h1><%= title %></h1>
37 + <%
38 + switch(title){
39 + case '공지사항 글 상세':
40 + addr = 'notice';
41 + break;
42 + case '작곡가 구인 글 상세':
43 + addr = 'composer';
44 + break;
45 + case '가수 구인 글 상세':
46 + addr = 'singer';
47 + break;
48 + case '자유게시판 글 상세':
49 + addr = 'free';
50 + break;
51 + case '건의사항 글 상세':
52 + addr = 'suggestion';
53 + break;
54 + %>
55 + <%
56 + }
57 + %>
34 <script> 58 <script>
35 function submit2(frm){ 59 function submit2(frm){
36 - frm.action="/board/delete"; 60 + frm.action="/board/delete/<%=addr%>";
37 frm.submit(); 61 frm.submit();
38 return true; 62 return true;
39 } 63 }
40 </script> 64 </script>
41 - <form action="/board/update" method="post"> 65 + <form action="/board/update/<%=addr%>" method="post">
42 <table border="1"> 66 <table border="1">
43 <input type="hidden" name="idx" value="<%=row.idx%>"/> 67 <input type="hidden" name="idx" value="<%=row.idx%>"/>
44 <tr> 68 <tr>
...@@ -69,7 +93,7 @@ ...@@ -69,7 +93,7 @@
69 <td colspan="3"> 93 <td colspan="3">
70 <button type="submit">글 수정</button> 94 <button type="submit">글 수정</button>
71 <button type="summit" onclick="return submit2(this.form);">글 삭제</button> 95 <button type="summit" onclick="return submit2(this.form);">글 삭제</button>
72 - <a href="/board/list"> 96 + <a href="/board/<%=addr%>/list">
73 <input type="button" value="목록"> 97 <input type="button" value="목록">
74 </a> 98 </a>
75 </td> 99 </td>
...@@ -81,7 +105,7 @@ ...@@ -81,7 +105,7 @@
81 <h1>댓글</h1> 105 <h1>댓글</h1>
82 <script> 106 <script>
83 function submit3(frm){ 107 function submit3(frm){
84 - frm.action="/board/read/commentdelete"; 108 + frm.action="/board/read/<%=addr%>/commentdelete";
85 frm.submit(); 109 frm.submit();
86 return true; 110 return true;
87 } 111 }
...@@ -89,12 +113,12 @@ ...@@ -89,12 +113,12 @@
89 113
90 } 114 }
91 </script> 115 </script>
92 - <form action="/board/read/commentwrite" method="post"> 116 + <form action="/board/read/<%=addr%>/commentwrite" method="post">
93 <table border="1"> 117 <table border="1">
94 <input type="hidden" name="idx" value="<%=row.idx%>"/> 118 <input type="hidden" name="idx" value="<%=row.idx%>"/>
95 <tr> 119 <tr>
96 <td>닉네임</td> 120 <td>닉네임</td>
97 - <td>댓글</td> 121 + <td>내용</td>
98 </tr> 122 </tr>
99 <% 123 <%
100 for(var i=0; i<comment_length; i++){ 124 for(var i=0; i<comment_length; i++){
...@@ -115,7 +139,7 @@ ...@@ -115,7 +139,7 @@
115 } 139 }
116 %> 140 %>
117 <tr> 141 <tr>
118 - <td><%=usernick%></td> 142 + <td><%=nickname%></td>
119 <td><textarea name="comment" id="comment" cols="30" rows="2" required></textarea></td> 143 <td><textarea name="comment" id="comment" cols="30" rows="2" required></textarea></td>
120 <td colspan="2"> 144 <td colspan="2">
121 <button type="submit">댓글 쓰기</button> 145 <button type="submit">댓글 쓰기</button>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 23 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 24 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
25 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 25 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 26 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 27 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
28 </ul> 28 </ul>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
18 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 18 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
19 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0"> 19 <ul class="nav col-12 col-md-auto mb-2 justify-content-center mb-md-0">
20 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li> 20 <li><a href="/about" class="nav-link px-2 link-dark">About</a></li>
21 - <li><a href="/board/list" class="nav-link px-2 link-dark">게시판</a></li> 21 + <li><a href="/board" class="nav-link px-2 link-dark">게시판</a></li>
22 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li> 22 <li><a href = "javascript:;" onclick = "window.open('/chat','파일 업로드','width=500, height=801, toolbar=no,location=yes,status=no,menubar=no,scrollbars=yes,resizable=no');" class="nav-link px-2 link-dark">채팅</a></li>
23 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li> 23 <li><a href="http://khuhub.khu.ac.kr/2017104034/Singer-Composer" target="_blank" class="nav-link px-2 link-dark">사이트 git</a></li>
24 </ul> 24 </ul>
...@@ -28,9 +28,33 @@ ...@@ -28,9 +28,33 @@
28 </div> 28 </div>
29 </div> 29 </div>
30 </nav> 30 </nav>
31 + <%
32 + var addr;
33 + %>
31 <div class="container px-5 my-5"> 34 <div class="container px-5 my-5">
32 <h1><%= title %></h1> 35 <h1><%= title %></h1>
33 - <form action="/board/write" method="post"> 36 + <%
37 + switch(title){
38 + case '공지사항 글 쓰기':
39 + addr = 'notice';
40 + break;
41 + case '작곡가 구인 글 쓰기':
42 + addr = 'composer';
43 + break;
44 + case '가수 구인 글 쓰기':
45 + addr = 'singer';
46 + break;
47 + case '자유게시판 글 쓰기':
48 + addr = 'free';
49 + break;
50 + case '건의사항 글 쓰기':
51 + addr = 'suggestion';
52 + break;
53 + %>
54 + <%
55 + }
56 + %>
57 + <form action="/board/write/<%=addr%>" method="post">
34 58
35 <table border="1"> 59 <table border="1">
36 <tr> 60 <tr>
......