You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

898 lines
33 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. class Management extends WB_Controller {
  4. public function __construct()
  5. {
  6. parent::__construct();
  7. $this->theme = "admin";
  8. }
  9. /**
  10. * 메뉴 관리
  11. */
  12. public function menu()
  13. {
  14. // 게시판 리스트 가져오기
  15. $this->data['menu_list'] = $this->db->where('mnu_parent','0')->order_by('mnu_order ASC')->get('menu')->result_array();
  16. // 2차메뉴 가져오기
  17. foreach($this->data['menu_list'] as &$row)
  18. {
  19. $row['children']= $this->db->where('mnu_parent',$row['mnu_idx'])->order_by('mnu_order ASC')->get('menu')->result_array();
  20. foreach( $row['children'] as &$rw )
  21. {
  22. $rw['children']= $this->db->where('mnu_parent',$rw['mnu_idx'])->order_by('mnu_order ASC')->get('menu')->result_array();
  23. }
  24. }
  25. // 레이아웃 & 뷰파일 설정
  26. $this->theme = "admin";
  27. $this->view = "management/menu";
  28. $this->active = "management/menu";
  29. }
  30. /**
  31. * 메뉴 등록/수정
  32. */
  33. public function menu_form()
  34. {
  35. $this->load->library('form_validation');
  36. $this->form_validation->set_rules("mnu_name", "메뉴 이름", "required|trim|max_length[30]");
  37. $this->form_validation->set_rules("mnu_link", "메뉴 링크", "required|trim");
  38. if( $this->form_validation->run() != FALSE )
  39. {
  40. $data['mnu_idx'] = $this->input->post('mnu_idx', TRUE);
  41. $data['mnu_parent'] = $this->input->post('mnu_parent', TRUE);
  42. $data['mnu_name'] = $this->input->post('mnu_name', TRUE);
  43. $data['mnu_parent'] = $this->input->post('mnu_parent', TRUE);
  44. $data['mnu_link'] = str_replace(base_url(), '/', $this->input->post('mnu_link', TRUE));
  45. $data['mnu_newtab'] = $this->input->post('mnu_newtab', TRUE) == 'Y' ? 'Y' : 'N';
  46. $data['mnu_desktop'] = $this->input->post('mnu_desktop', TRUE) == 'N' ? 'N' : 'Y';
  47. $data['mnu_mobile'] = $this->input->post('mnu_mobile', TRUE) == 'N' ? 'N' : 'Y';
  48. $data['mnu_active_key'] = $this->input->post('mnu_active_key', TRUE);
  49. if(empty($data['mnu_idx']))
  50. {
  51. $sort = (int)$this->db->select_max('mnu_order', 'max')->where('mnu_parent', $data['mnu_parent'])->get('menu')->row(0)->max ;
  52. $data['mnu_order'] = $sort+1;
  53. $this->db->insert('menu', $data);
  54. }
  55. else
  56. {
  57. $this->db->where('mnu_idx', $data['mnu_idx'] );
  58. $this->db->update('menu', $data);
  59. }
  60. $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => PROJECT));
  61. $this->cache->delete('menu_desktop');
  62. $this->cache->delete('menu_mobile');
  63. alert_modal_close("메뉴 등록이 완료되었습니다.", TRUE);
  64. exit;
  65. }
  66. else
  67. {
  68. // 게시판 목록 가져오기
  69. $board_list = $this->db->get('board')->result_array();
  70. $this->data['board_list'] = array();
  71. foreach($board_list as $row) {
  72. $this->data['board_list'][] = array(
  73. "url" => '/board/'.$row['brd_key'],
  74. "name" => $row['brd_title']
  75. );
  76. }
  77. $this->data['mnu_idx'] = $this->input->get('mnu_idx', TRUE);
  78. $this->data['mnu_parent'] = $this->input->get('mnu_parent', TRUE);
  79. $this->data['view'] = array();
  80. if( ! empty($this->data['mnu_idx']) )
  81. {
  82. $this->data['view'] = $this->db->where('mnu_idx', $this->data['mnu_idx'])->get('menu')->row_array();
  83. }
  84. $this->theme = "admin";
  85. $this->theme_file = "iframe";
  86. $this->view = "management/menu_form";
  87. }
  88. }
  89. /**
  90. * 메뉴 삭제
  91. */
  92. public function menu_delete($mnu_idx)
  93. {
  94. if(empty($mnu_idx))
  95. {
  96. alert('잘못된 접근입니다.');
  97. exit;
  98. }
  99. // 하위메뉴가 있는지 확인한다
  100. $cnt = (int)$this->db->select('COUNT(*) AS cnt')->where('mnu_parent', $mnu_idx)->get('menu')->row(0)->cnt;
  101. if( $cnt > 0 )
  102. {
  103. alert('해당 메뉴에 하위메뉴가 존재합니다. 하위메뉴를 먼저 삭제해주세요');
  104. exit;
  105. }
  106. $this->db->where('mnu_idx', $mnu_idx)->delete('menu');
  107. $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => PROJECT));
  108. $this->cache->delete('menu_desktop');
  109. $this->cache->delete('menu_mobile');
  110. alert('삭제되었습니다.');
  111. }
  112. /**
  113. * 메뉴 전체 저장
  114. */
  115. public function menu_multi_update()
  116. {
  117. $mnu_idx = $this->input->post('mnu_idx', TRUE);
  118. $mnu_name = $this->input->post('mnu_name', TRUE);
  119. $mnu_link = $this->input->post('mnu_link', TRUE);
  120. $mnu_order = $this->input->post('mnu_order', TRUE);
  121. $mnu_newtab = $this->input->post('mnu_newtab', TRUE);
  122. $mnu_desktop = $this->input->post('mnu_desktop', TRUE);
  123. $mnu_mobile = $this->input->post('mnu_mobile', TRUE);
  124. $mnu_active_key = $this->input->post('mnu_active_key', TRUE);
  125. $data = array();
  126. for($i=0; $i<count($mnu_idx); $i++)
  127. {
  128. $data[] = array(
  129. "mnu_idx" => $mnu_idx[$i],
  130. "mnu_name" => $mnu_name[$i],
  131. "mnu_link" => $mnu_link[$i],
  132. "mnu_order"=> $mnu_order[$i],
  133. "mnu_desktop" => $mnu_desktop[$i],
  134. "mnu_newtab" => $mnu_newtab[$i],
  135. "mnu_mobile" => $mnu_mobile[$i],
  136. "mnu_active_key" => $mnu_active_key[$i]
  137. );
  138. }
  139. $this->db->update_batch("menu", $data, "mnu_idx");
  140. $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file', 'key_prefix' => PROJECT));
  141. $this->cache->delete('menu_desktop');
  142. $this->cache->delete('menu_mobile');
  143. alert('저장 되었습니다.', base_url('admin/management/menu'));
  144. exit;
  145. }
  146. /**
  147. * 사이트맵 기능
  148. */
  149. public function sitemap()
  150. {
  151. $this->view = $this->active = "management/sitemap";
  152. }
  153. /**
  154. * 사이트맵
  155. */
  156. public function sitemap_form()
  157. {
  158. $this->load->library('form_validation');
  159. $this->form_validation->set_rules('sit_loc', 'URL', 'required|trim');
  160. if( $this->form_validation->run() != FALSE )
  161. {
  162. $data['sit_loc'] = '/'.ltrim($this->input->post('sit_loc', TRUE),'/');
  163. $data['sit_priority'] = $this->input->post('sit_priority', TRUE);
  164. $data['sit_changefreq'] = $this->input->post('sit_changefreq', TRUE);
  165. $data['sit_memo'] = $this->input->post('sit_memo', TRUE);
  166. $data['reg_user'] = $data['upd_user'] = $this->member->is_login();
  167. $data['reg_datetime'] = $data['upd_datetime'] = date('Y-m-d H:i:s');
  168. $this->db->insert("sitemap", $data);
  169. alert_modal_close("등록되었습니다.",FALSE);
  170. exit;
  171. }
  172. else
  173. {
  174. $this->theme_file = "iframe";
  175. $this->view = "management/sitemap_form";
  176. }
  177. }
  178. /**
  179. * FAQ 관리
  180. * @param string $faq_idx
  181. */
  182. public function faq($fac_idx="")
  183. {
  184. // FAQ 모델
  185. $this->load->model('faq_model');
  186. // faq_idx 여부에 따라 하위 FAQ 목록 불러오기
  187. $this->data['fac_idx'] = $fac_idx;
  188. $this->data['faq_list'] = NULL;
  189. if( $this->data['fac_idx'] )
  190. {
  191. $this->data['faq_list'] = $this->faq_model->get_detail_list($fac_idx);
  192. $this->data['faq_group'] = $this->faq_model->get_category($fac_idx);
  193. }
  194. // 데이타 불러오기
  195. $this->data['faq_category'] = $this->faq_model->get_category_list();
  196. // 메타태그 설정
  197. $this->site->meta_title = "사이트 관리 - FAQ 관리"; // 이 페이지의 타이틀
  198. // 레이아웃 & 뷰파일 설정
  199. $this->theme = "admin";
  200. $this->view = "management/faq";
  201. $this->active = "management/faq";
  202. }
  203. /**
  204. * FAQ 분류 등록/수정
  205. */
  206. public function faq_category_form()
  207. {
  208. $this->load->model('faq_model');
  209. $this->load->library("form_validation");
  210. $this->form_validation->set_rules("fac_title", "제목", "required|trim");
  211. $this->form_validation->set_rules("fac_idx", "고유키", "required|trim");
  212. if( $this->form_validation->run() != FALSE )
  213. {
  214. $data['fac_idx'] = $this->input->post('fac_idx', TRUE);
  215. $data['fac_title'] = trim($this->input->post('fac_title', TRUE));
  216. $data['upd_user'] = $this->member->is_login();
  217. $data['upd_datetime'] = date('Y-m-d H:i:s');
  218. $mode = $this->input->post('mode', TRUE);
  219. if( $mode == 'INSERT' )
  220. {
  221. $data['reg_user'] = $data['upd_user'];
  222. $data['reg_datetime'] = $data['upd_datetime'];
  223. // 가장큰 순서값을 가져온다.
  224. $data['sort'] = ((int) $this->db->select_max("sort","max")->where('fac_status','Y')->get('faq_category')->row(0)->max) + 1;
  225. if(( $exist = $this->faq_model->get_category($data['fac_idx'])) && isset($exist['fac_idx']) )
  226. {
  227. alert('이미 존재하는 고유키 입니다.');
  228. exit;
  229. }
  230. if( $this->db->insert('faq_category', $data) ) {
  231. alert_modal_close("새로운 FAQ 분류를 추가하였습니다.");
  232. }
  233. else {
  234. alert('DB입력도중 오류가 발생하였습니다.');
  235. }
  236. }
  237. else if ( $mode == 'UPDATE' ) {
  238. $this->db->where('fac_idx', $data['fac_idx']);
  239. if( $this->db->update('faq_category', $data)) {
  240. alert_modal_close("FAQ 분류 정보를 수정하였습니다.");
  241. }
  242. else {
  243. alert('DB입력도중 오류가 발생하였습니다.');
  244. }
  245. }
  246. else {
  247. alert('잘못된 접근입니다.');
  248. }
  249. }
  250. else
  251. {
  252. $fac_idx = $this->input->get('fac_idx', TRUE);
  253. $this->data['view'] = ( empty($fac_idx) ) ? array() : $this->faq_model->get_category($fac_idx);
  254. $this->data['is_edit'] = ! ( empty($fac_idx) );
  255. if( $fac_idx && ! $this->data['view'] && ($this->data['view']['fac_idx'] != $fac_idx) )
  256. {
  257. alert_modal_close("잘못된 접근입니다.");
  258. exit();
  259. }
  260. $this->theme = "admin";
  261. $this->theme_file = "iframe";
  262. $this->view = "management/faq_category_form";
  263. }
  264. }
  265. /**
  266. * FAQ 등록/수정
  267. */
  268. public function faq_form()
  269. {
  270. $this->load->model('faq_model');
  271. $this->load->library("form_validation");
  272. $this->form_validation->set_rules("fac_idx", "FAQ 분류", "required|trim");
  273. $this->form_validation->set_rules("faq_title", "제목", "required|trim");
  274. if( $this->form_validation->run() != FALSE )
  275. {
  276. $data['faq_idx'] = $this->input->post('faq_idx', TRUE);
  277. $data['fac_idx'] = $this->input->post('fac_idx', TRUE);
  278. $data['faq_title'] = $this->input->post('faq_title', TRUE);
  279. $data['faq_content'] = $this->input->post('faq_content', FALSE);
  280. $data['upd_user'] = $this->member->is_login();
  281. $data['upd_datetime'] = date('Y-m-d H:i:s');
  282. if(empty($data['fac_idx']))
  283. {
  284. alert('잘못된 접근입니다.');
  285. exit;
  286. }
  287. if(empty($data['faq_idx']))
  288. {
  289. $data['sort'] = ((int) $this->db->select_max("sort","max")->where('faq_status','Y')->where('fac_idx', $data['fac_idx'])->get('faq')->row(0)->max) + 1;
  290. $data['reg_user'] = $data['upd_user'];
  291. $data['reg_datetime'] = $data['upd_datetime'];
  292. if( ! $this->db->insert("faq", $data) )
  293. {
  294. alert("DB정보 등록에 실패하였습니다.");
  295. exit;
  296. }
  297. }
  298. else
  299. {
  300. $this->db->where("faq_idx", $data['faq_idx']);
  301. if(! $this->db->update("faq", $data) )
  302. {
  303. alert("DB정보 수정에 실패하였습니다.");
  304. exit;
  305. }
  306. }
  307. // FAQ 분류에 등록된 FAQ 수를 최신화 한다.
  308. $this->faq_model->update_category_count($data['fac_idx']);
  309. alert_modal_close('FAQ 정보가 등록되었습니다.');
  310. exit;
  311. }
  312. else
  313. {
  314. $fac_idx = $this->input->get('fac_idx', TRUE);
  315. $faq_idx = $this->input->get('faq_idx', TRUE);
  316. $this->data['faq_group'] = $this->faq_model->get_category($fac_idx);
  317. $this->data['view'] = ( empty($faq_idx) ) ? array() : $this->faq_model->get_faq($faq_idx);
  318. if( ! $this->data['faq_group'] )
  319. {
  320. alert_modal_close("잘못된 접근입니다.");
  321. exit();
  322. }
  323. $this->theme = "admin";
  324. $this->theme_file = "iframe";
  325. $this->view = "management/faq_form";
  326. }
  327. }
  328. /**
  329. * 팝업 관리
  330. */
  331. public function popup()
  332. {
  333. // 메타태그 설정
  334. $this->site->meta_title = "팝업 관리";
  335. // 레이아웃 & 뷰파일 설정
  336. $this->active = $this->view = "management/popup";
  337. }
  338. /**
  339. * 팝업 등록/수정
  340. */
  341. public function popup_form($pop_idx="")
  342. {
  343. $this->load->model('popup_model');
  344. $this->load->library('form_validation');
  345. $this->form_validation->set_rules('pop_title', '팝업 이름', 'required|trim');
  346. $this->form_validation->set_rules('pop_width', '팝업 너비', 'required|trim|is_natural_no_zero');
  347. $this->form_validation->set_rules('pop_height', '팝업 높이', 'required|trim|is_natural_no_zero');
  348. $this->form_validation->set_rules('pop_type', '팝업 종류', 'required|trim|in_list[Y,N]');
  349. $this->form_validation->set_rules('pop_start', '표시 시작 시간', 'required|trim');
  350. $this->form_validation->set_rules('pop_start', '표시 종료 시간', 'required|trim');
  351. if( $this->form_validation->run() != FALSE )
  352. {
  353. $data['pop_title'] = $this->input->post('pop_title', TRUE);
  354. $data['pop_width'] = $this->input->post('pop_width', TRUE);
  355. $data['pop_height'] = str_replace(',','',$this->input->post('pop_height', TRUE));
  356. $data['pop_content'] = str_replace(',','',$this->input->post('pop_content', FALSE));
  357. $data['pop_status'] = 'Y';
  358. $data['pop_start'] = str_replace("T"," ", $this->input->post('pop_start', TRUE));
  359. $data['pop_end'] = str_replace("T"," ", $this->input->post('pop_end', TRUE));
  360. $data['upd_datetime'] = date('Y-m-d H:i:s');
  361. $data['upd_user'] = $this->member->is_login();
  362. $data['pop_type'] = $this->input->post('pop_type', TRUE) == 'N' ? 'N' : 'Y';
  363. if( empty($pop_idx) )
  364. {
  365. $data['reg_datetime'] = $data['upd_datetime'];
  366. $data['reg_user'] = $data['upd_user'];
  367. $this->db->insert('popup', $data);
  368. }
  369. else
  370. {
  371. $this->db->where('pop_idx', $pop_idx);
  372. $this->db->update('popup', $data);
  373. }
  374. alert_modal_close('팝업 정보 입력이 완료되었습니다.', FALSE);
  375. exit;
  376. }
  377. else
  378. {
  379. $this->data['view'] = array();
  380. if(! empty($pop_idx))
  381. {
  382. if(! $this->data['view'] = $this->db->where('pop_idx', $pop_idx)->get('popup')->row_array())
  383. {
  384. alert_modal_close('잘못된 접근입니다.',false);
  385. }
  386. }
  387. // 메타태그 설정
  388. $this->site->meta_title = "팝업 관리";
  389. // 레이아웃 & 뷰파일 설정
  390. $this->theme_file = "iframe";
  391. $this->view = "management/popup_form";
  392. }
  393. }
  394. function datetime_regex($str)
  395. {
  396. if(!preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/',$str, $matches))
  397. {
  398. $this->form_validation->set_message('datetime_regex', '올바른 형식의 날짜/시간 형태가 아닙니다 : {field}');
  399. return FALSE;
  400. }
  401. return TRUE;
  402. }
  403. /****************************************************************************
  404. * 배너 관리 - 목록
  405. ***************************************************************************/
  406. function banner($bng_key="")
  407. {
  408. $this->load->model('basic_model');
  409. // bng_key 여부에 따라 하위 FAQ 목록 불러오기
  410. $this->data['bng_key'] = $bng_key;
  411. $this->data['faq_list'] = NULL;
  412. if( $this->data['bng_key'] )
  413. {
  414. $this->data['banner_list'] = array();
  415. $param['limit'] = FALSE;
  416. $param['from'] = "banner";
  417. $param['order_by'] = "ban_sort ASC";
  418. $param['where']['bng_key'] = $bng_key;
  419. $this->data['banner_list'] = $this->basic_model->get_list($param);
  420. unset($param);
  421. $this->data['banner_group'] = $this->db->where('bng_key', $this->data['bng_key'])->get('banner_group')->row_array();
  422. }
  423. // 배너 그룹 목록 가져오기
  424. $param['limit'] = FALSE;
  425. $param['order_by'] = "bng_sort ASC";
  426. $param['from'] = "banner_group";
  427. $this->data['banner_group_list'] = $this->basic_model->get_list($param);
  428. // 메타태그 설정
  429. $this->site->meta_title = "사이트 관리 - 배너 관리"; // 이 페이지의 타이틀
  430. // 레이아웃 & 뷰파일 설정
  431. $this->theme = "admin";
  432. $this->view = "management/banner";
  433. $this->active = "management/banner";
  434. }
  435. /****************************************************************************
  436. * 배너 관리 - 그룹 추가/수정
  437. ***************************************************************************/
  438. function banner_group_form()
  439. {
  440. $this->load->library('form_validation');
  441. $this->form_validation->set_rules('bng_key', "배너 그룹 고유 키", "required|trim|max_length[20]|alpha_dash");
  442. $this->form_validation->set_rules('bng_name', "배너 이름","required|trim|max_length[50]");
  443. if( $this->form_validation->run() != FALSE )
  444. {
  445. $data['bng_idx'] = $this->input->post('bng_idx', TRUE);
  446. $data['bng_key'] = $this->input->post('bng_key', TRUE);
  447. $data['bng_name'] = $this->input->post('bng_name', TRUE);
  448. $data['bng_width'] = $this->input->post('bng_width', TRUE, 0);
  449. $data['bng_height'] = $this->input->post('bng_height', TRUE, 0);
  450. $data['upd_user'] = $this->member->is_login();
  451. $data['upd_datetime'] = date('Y-m-d H:i:s');
  452. for($i=1; $i<=5; $i++)
  453. {
  454. $data["bng_ext{$i}"] = $this->input->post("bng_ext{$i}",TRUE,'');
  455. $data["bng_ext{$i}_use"] = $this->input->post("bng_ext{$i}_use",TRUE,'N');
  456. }
  457. if(empty($data['bng_idx']))
  458. {
  459. $tmp = (int)$this->db->select('COUNT(*) AS cnt')->where('bng_key', $data['bng_key'])->get('banner_group')->row(0)->cnt;
  460. if($tmp > 0) {
  461. alert('이미 존재하는 고유키 입니다.');
  462. exit;
  463. }
  464. $sort = (int)$this->db->select_max('bng_sort', 'max')->get('banner_group')->row(0)->max;
  465. $data['reg_user'] = $data['upd_user'];
  466. $data['reg_datetime'] = $data['upd_datetime'];
  467. $data['bng_sort'] = $sort+1;
  468. if( $this->db->insert('banner_group', $data))
  469. {
  470. alert_modal_close('배너 그룹이 추가 되었습니다.', TRUE);
  471. exit;
  472. }
  473. }
  474. else
  475. {
  476. $this->db->where('bng_idx', $data['bng_idx']);
  477. if( $this->db->update('banner_group', $data) )
  478. {
  479. alert_modal_close('배너 그룹이 수정 되었습니다.', TRUE);
  480. exit;
  481. }
  482. }
  483. alert('서버 오류가 발생하였습니다.');
  484. exit;
  485. }
  486. else
  487. {
  488. $bng_idx = $this->input->get('bng_idx', TRUE);
  489. $this->data['view'] = array();
  490. if(! empty($bng_idx)) {
  491. $this->data['view'] = $this->db->where('bng_idx', $bng_idx)->get('banner_group')->row_array();
  492. }
  493. $this->theme_file = "iframe";
  494. $this->view = "management/banner_group_form";
  495. }
  496. }
  497. /****************************************************************************
  498. * 배너 관리 - 그룹 삭제
  499. ***************************************************************************/
  500. function banner_group_delete($bng_idx="")
  501. {
  502. if(empty($bng_idx)) {
  503. alert('잘못된 접근입니다.');
  504. exit;
  505. }
  506. $banner_group = $this->db->where('bng_idx', $bng_idx)->get('banner_group')->row_array();
  507. if(empty($banner_group) OR empty($banner_group['bng_key'])) {
  508. alert('존재하지 않는 그룹이거나, 이미 삭제된 그룹입니다.');
  509. exit;
  510. }
  511. // 배너에 포함된 파일을 삭제하기 위해 배너 목록을 가져와서 파일을 삭제한다.
  512. $banner_list = $this->db->where('bng_key', $banner_group['bng_key'])->get('banner')->result_array();
  513. // 트랜젝션 시작
  514. $this->db->trans_begin();
  515. $this->db->where('bng_idx', $bng_idx);
  516. $this->db->delete('banner_group');
  517. $this->db->where('bng_key', $banner_group['bng_key']);
  518. $this->db->delete('banner');
  519. if ($this->db->trans_status() === FALSE)
  520. {
  521. $this->db->trans_rollback();
  522. alert('그룹 삭제에 실패하였습니다. 관리자에게 문의하세요');
  523. exit;
  524. }
  525. else
  526. {
  527. $this->db->trans_commit();
  528. // 배너 파일들을 삭제
  529. if(count($banner_list) > 0)
  530. {
  531. foreach($banner_list as $row)
  532. {
  533. if(empty($row['ban_filepath'])) continue;
  534. file_delete($row['ban_filepath']);
  535. }
  536. }
  537. alert('배너 그룹을 삭제하였습니다.');
  538. exit;
  539. }
  540. }
  541. /****************************************************************************
  542. * 배너 관리 - 배너 추가/수정
  543. ***************************************************************************/
  544. function banner_form()
  545. {
  546. $this->load->library('form_validation');
  547. $this->form_validation->set_rules('bng_key', "배너 그룹 고유 키", "required|trim");
  548. $this->form_validation->set_rules('ban_name', "배너 이름","required|trim|max_length[50]");
  549. if($this->form_validation->run() != FALSE)
  550. {
  551. $data['bng_key'] = $this->input->post('bng_key', TRUE);
  552. $data['ban_idx'] = $this->input->post('ban_idx', TRUE);
  553. $data['ban_name'] = $this->input->post('ban_name', TRUE);
  554. $data['ban_link_use'] = $this->input->post('ban_link_use', TRUE) == 'Y' ? 'Y' : 'N';
  555. $data['ban_link_url'] = $this->input->post('ban_link_url', TRUE, "");
  556. $data['ban_link_type'] = $this->input->post('ban_link_url', TRUE) == 'Y' ? 'Y': 'N';
  557. $data['ban_status'] = $this->input->post('ban_status', TRUE) == 'H' ? 'H' : 'Y';
  558. $data['ban_timer_use'] = $this->input->post('ban_timer_use', TRUE) == 'Y' ? 'Y' : 'N';
  559. $data['ban_timer_start'] = $this->input->post('ban_timer_start', TRUE, '0000-00-00 00:00:00');
  560. $data['ban_timer_end'] = $this->input->post('ban_timer_end', TRUE, '0000-00-00 00:00:00');
  561. for($i=1; $i<=5; $i++)
  562. {
  563. $data["ban_ext{$i}"] = $this->input->post("ban_ext{$i}",TRUE,'');
  564. }
  565. $data['upd_user'] = $this->member->is_login();
  566. $data['upd_datetime'] = date('Y-m-d H:i:s');
  567. // 업로드된 파일이 있을경우 처리
  568. if( isset($_FILES['userfile']) && $_FILES['userfile'] && $_FILES['userfile']['tmp_name'] )
  569. {
  570. $up_dir = DIR_UPLOAD . DIRECTORY_SEPARATOR . 'banners';
  571. $up_dir = make_dir($up_dir, TRUE, TRUE);
  572. $config['upload_path'] = './'.ltrim($up_dir,'/');
  573. $config['allowed_types'] = 'gif|jpg|png';
  574. $config['file_ext_tolower'] = TRUE;
  575. $config['encrypt_name'] = TRUE;
  576. $this->load->library("upload", $config);
  577. $this->upload->initialize($config);
  578. if( ! $this->upload->do_upload('userfile') )
  579. {
  580. alert("이미지 업로드중 오류가 발생하였습니다.".$this->upload->display_errors('업로드 오류:', ' ').$config['upload_path'] );
  581. }
  582. else
  583. {
  584. $data['ban_filepath'] = rtrim(str_replace(DIRECTORY_SEPARATOR, "/", $up_dir), "/") . "/" . $this->upload->data('file_name');
  585. // 수정일경우 원래 이미지를 삭제한다
  586. if(! empty($data['ban_idx']))
  587. {
  588. db_file_delete("banner","ban_idx", $data['ban_idx'], 'ban_filepath');
  589. }
  590. }
  591. }
  592. if(empty($data['ban_idx']))
  593. {
  594. $data['ban_regtime'] = date('Y-m-d H:i:s');
  595. $data['reg_user'] = $data['upd_user'];
  596. $sort = (int)$this->db->select_max('ban_sort', 'max')->where('bng_key', $data['bng_key'])->get('banner')->row(0)->max;
  597. $data['ban_sort'] = $sort+1;
  598. $this->db->insert('banner', $data);
  599. }
  600. else
  601. {
  602. $this->db->where('ban_idx', $data['ban_idx']);
  603. $this->db->update('banner', $data);
  604. }
  605. alert_modal_close("등록이 완료되었습니다.", TRUE);
  606. exit;
  607. }
  608. else
  609. {
  610. $this->data['bng_key'] = $this->input->get('bng_key', TRUE);
  611. $this->data['ban_idx'] = $this->input->get('ban_idx', TRUE);
  612. $this->data['view'] = array();
  613. if(empty($this->data['bng_key']))
  614. {
  615. alert_modal_close('잘못된 접근입니다.');
  616. exit;
  617. }
  618. if( ! $this->data['banner_group'] = $this->db->where('bng_key', $this->data['bng_key'])->get('banner_group')->row_array())
  619. {
  620. alert_modal_close('잘못된 접근입니다.');
  621. exit;
  622. }
  623. if(! empty($this->data['ban_idx'])) {
  624. if(! $this->data['view'] = $this->db->where('ban_idx', $this->data['ban_idx'])->get('banner')->row_array())
  625. {
  626. alert('삭제되었거나 존재하지 않는 배너 입니다.');
  627. exit;
  628. }
  629. }
  630. $this->theme = "admin";
  631. $this->theme_file = "iframe";
  632. $this->view = "management/banner_form";
  633. }
  634. }
  635. /****************************************************************************
  636. * 배너 관리 - 배너 삭제
  637. ***************************************************************************/
  638. function banner_delete($ban_idx="")
  639. {
  640. if(empty($ban_idx)) {
  641. alert('잘못된 접근입니다.');
  642. exit;
  643. }
  644. $banner = $this->db->where('ban_idx', $ban_idx)->get('banner')->row_array();
  645. if(empty($banner) OR empty($banner['ban_idx'])) {
  646. alert('존재하지 않는 배너거나, 이미 삭제된 배너입니다.');
  647. exit;
  648. }
  649. $this->db->where('ban_idx', $ban_idx);
  650. if( $this->db->delete('banner') )
  651. {
  652. if(! empty($banner['ban_filepath']))
  653. {
  654. file_delete($banner['ban_filepath']);
  655. }
  656. alert('배너를 삭제하였습니다.');
  657. }
  658. else {
  659. alert('배너 삭제도중 오류가 발생하였습니다.');
  660. }
  661. }
  662. /****************************************************************************
  663. * Q&A 관리
  664. ***************************************************************************/
  665. function qna() {
  666. $this->view = $this->active = 'management/qna';
  667. }
  668. /****************************************************************************
  669. * Q&A 분류 관리
  670. ***************************************************************************/
  671. function qna_category()
  672. {
  673. $this->data['lists'] = $this->db->where('qnc_status','Y')->order_by('sort ASC')->get('qna_category')->result_array();
  674. $this->view = "management/qna_category";
  675. $this->theme_file = 'iframe';
  676. }
  677. /****************************************************************************
  678. * Q&A 내용 보기
  679. ***************************************************************************/
  680. function qna_view($qna_idx = "")
  681. {
  682. $this->load->library('form_validation');
  683. if(empty($qna_idx)) {
  684. alert_modal_close('잘못된 접근입니다.');
  685. exit;
  686. }
  687. if(! $this->data['view'] =
  688. $this->db
  689. ->select('Q.*, QC.qnc_title, M.mem_nickname AS qna_ans_upd_username')
  690. ->where('qna_idx', $qna_idx)
  691. ->from('qna AS Q')
  692. ->join('qna_category AS QC','QC.qnc_idx=Q.qnc_idx','left')
  693. ->join('member AS M','M.mem_idx=Q.qna_ans_user','left')
  694. ->get()
  695. ->row_array() )
  696. {
  697. alert_modal_close('잘못된 접근입니다.');
  698. exit;
  699. }
  700. $this->form_validation->set_rules('qna_ans_content', '답변 내용', 'required|trim');
  701. if( $this->form_validation->run() !=FALSE )
  702. {
  703. $data['qna_ans_status'] = 'Y';
  704. $data['qna_ans_upd_user'] = $this->member->is_login();
  705. $data['qna_ans_upd_datetime'] = date('Y-m-d H:i:s');
  706. $data['qna_ans_content'] = $this->input->post('qna_ans_content', TRUE);
  707. if($this->data['view']['qna_ans_status'] == 'N') {
  708. $data['qna_ans_user'] = $data['qna_ans_upd_user'];
  709. $data['qna_ans_datetime'] = $data['qna_ans_upd_datetime'];
  710. }
  711. $this->db->where('qna_idx', $qna_idx)->update('qna', $data);
  712. alert('답변 작성이 완료되었습니다.', base_url('admin/management/qna_view/'.$qna_idx));
  713. exit;
  714. }
  715. else {
  716. // 첨부파일 가져오기
  717. $this->data['view']['attach_list'] = $this->db->where('att_target_type','QNA')->where('att_target', $qna_idx)->get('attach')->result_array();
  718. $this->view = "management/qna_view";
  719. $this->theme_file = 'iframe';
  720. }
  721. }
  722. /****************************************************************************
  723. * Q&A 분류 관리 등록/수정
  724. ***************************************************************************/
  725. function qna_category_form($qnc_idx="")
  726. {
  727. $this->load->library('form_validation');
  728. $this->form_validation->set_rules('qnc_title', '질문 유형 제목', 'required|trim');
  729. if( $this->form_validation->run() != FALSE )
  730. {
  731. $data['qnc_title'] = $this->input->post('qnc_title', TRUE);
  732. $data['upd_user'] = $this->member->is_login();
  733. $data['upd_datetime'] = date('Y-m-d H:i:s');
  734. if(empty($qnc_idx)) {
  735. $data['qnc_status'] = 'Y';
  736. $data['reg_user'] = $data['upd_user'];
  737. $data['reg_datetime'] = $data['upd_datetime'];
  738. $data['sort'] = (int)$this->db->select_max('sort', 'max')->where('qnc_status','Y')->get('qna_category')->row(0)->max;
  739. $this->db->insert('qna_category', $data);
  740. }
  741. else {
  742. $this->db->where('qnc_idx', $qnc_idx)->update('qna_category', $data);
  743. }
  744. alert_modal2_close('Q&A 분류 정보가 입력되었습니다.', TRUE);
  745. }
  746. else {
  747. $this->data['view'] = array();
  748. if(! empty($qnc_idx)) {
  749. if(! $this->data['view'] = $this->db->where('qnc_idx', $qnc_idx)->get('qna_category')->row_array())
  750. {
  751. alert_modal2_close('잘못된 접근입니다.', FALSE);
  752. }
  753. }
  754. $this->theme_file = 'iframe';
  755. $this->view = "management/qna_category_form";
  756. }
  757. }
  758. }