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.

841 lines
30 KiB

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