✅ /plugin/mail_manage 디렉토리가 자동으로 복사되었습니다.
"; } else { echo "❌ 플러그인 복사 실패. 수동 복사 필요.
"; } } // 4. 관리자 체크 if (!defined('_GNUBOARD_') || $is_admin != 'super') { alert('최고 관리자만 설치할 수 있습니다.'); } // ✅ 테이블 생성 함수 function create_plugin_tables() { $tables = []; // SMTP 설정 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_smtp_config` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `host` VARCHAR(255) NOT NULL, `username` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `port` INT NOT NULL DEFAULT 465, `encryption` ENUM('none','ssl','tls') NOT NULL DEFAULT 'ssl', `from_email` VARCHAR(255) NOT NULL, `from_name` VARCHAR(255) NOT NULL, `is_use` TINYINT(1) NOT NULL DEFAULT 1, `is_deleted` TINYINT(1) NOT NULL DEFAULT 0, `created_by` VARCHAR(20) NOT NULL, `updated_by` VARCHAR(20) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL ) DEFAULT CHARSET=utf8mb4"; // SMTP 변경 이력 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_smtp_change_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `smtp_config_id` INT UNSIGNED NOT NULL, `action` ENUM('insert','update','delete') NOT NULL, `changed_by` VARCHAR(20) NOT NULL, `change_date` DATETIME NOT NULL, `change_details` TEXT NOT NULL, KEY (`smtp_config_id`) ) DEFAULT CHARSET=utf8mb4"; // 메일 템플릿 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_template` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `code` VARCHAR(100) NOT NULL UNIQUE, `title` VARCHAR(255) NOT NULL, `content` LONGTEXT NOT NULL, `header_html` TEXT NULL, `footer_html` TEXT NULL COMMENT '메일 공통 푸터', `is_use` TINYINT(1) NOT NULL DEFAULT 1, `is_deleted` TINYINT(1) NOT NULL DEFAULT 0, `created_by` VARCHAR(20) NOT NULL, `updated_by` VARCHAR(20) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL ) DEFAULT CHARSET=utf8mb4"; // 템플릿 치환 변수 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_template_vars` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `template_id` INT UNSIGNED NOT NULL, `var_name` VARCHAR(100) NOT NULL, `default_value` TEXT DEFAULT '', `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, FOREIGN KEY (`template_id`) REFERENCES g5_mail_template(`id`) ON DELETE CASCADE ) DEFAULT CHARSET=utf8mb4"; // 템플릿 변경 이력 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_template_change_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `template_id` INT UNSIGNED NOT NULL, `action` ENUM('insert','update','delete') NOT NULL, `changed_by` VARCHAR(20) NOT NULL, `change_date` DATETIME NOT NULL, `change_details` TEXT NOT NULL, KEY (`template_id`) ) DEFAULT CHARSET=utf8mb4"; // 메일 발송 이력 테이블 $tables[] = " CREATE TABLE IF NOT EXISTS `g5_mail_send_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `to_email` VARCHAR(255) NOT NULL, `cc_email` VARCHAR(255) DEFAULT NULL, `subject` VARCHAR(255) NOT NULL, `body` LONGTEXT NOT NULL, `status` ENUM('success','fail') NOT NULL, `error_msg` TEXT, -- [추가] 발송 실패 시 상세 오류 메시지를 저장할 컬럼 `try_count` INT NOT NULL DEFAULT 0, `max_try_count` INT NOT NULL DEFAULT 3, `send_time` DATETIME DEFAULT NULL, `resend_of` INT UNSIGNED DEFAULT NULL, `is_scheduled` TINYINT(1) NOT NULL DEFAULT 0, `scheduled_time` DATETIME DEFAULT NULL, `created_by` VARCHAR(20) NOT NULL, `created_at` DATETIME NOT NULL, KEY (`resend_of`) ) DEFAULT CHARSET=utf8mb4;"; foreach ($tables as $sql) { sql_query($sql); } } // ✅ 관리자 메뉴 추가 함수 function register_plugin_admin_menu() { global $g5; $menu_table = $g5['menu_table']; $parent_code = 'mail_manage'; $menu_name = '메일 관리'; $menu_link = G5_ADMIN_URL . '/plugin/mail_manage/smtp_config.php'; // 이미 등록되어 있으면 건너뜀 $exists = sql_fetch("SELECT * FROM {$menu_table} WHERE me_code = '{$parent_code}'"); if (!$exists) { $max_order = sql_fetch("SELECT MAX(me_order) AS max_order FROM {$menu_table}"); $new_order = (int)($max_order['max_order'] ?? 0) + 1; sql_query(" INSERT INTO {$menu_table} (me_code, me_name, me_link, me_target, me_order, me_use) VALUES ('{$parent_code}', '{$menu_name}', '{$menu_link}', '', {$new_order}, 1) "); $sub_menus = [ ['smtp_config', 'SMTP 설정', './smtp_config.php'], ['template', '메일 템플릿 관리', './template.php'], ['send_log', '메일 발송 이력', './send_log.php'], ]; foreach ($sub_menus as $submenu) { [$code, $name, $link] = $submenu; $exist_sub = sql_fetch("SELECT * FROM {$menu_table} WHERE me_code = '{$code}' LIMIT 1"); if (!$exist_sub) { $parent = sql_fetch("SELECT me_id FROM {$menu_table} WHERE me_code = 'mail_manage' LIMIT 1"); $parent_id = $parent['me_id'] ?? 0; $max_order_sub = sql_fetch("SELECT MAX(me_order) as max_order FROM {$menu_table} WHERE me_parent = {$parent_id}"); $new_order_sub = (int)($max_order_sub['max_order'] ?? 0) + 1; sql_query(" INSERT INTO {$menu_table} (me_code, me_name, me_link, me_target, me_order, me_use, me_auth, me_parent) VALUES ('{$code}', '{$name}', '{$link}', '', {$new_order_sub}, 1, 'super', {$parent_id}) "); } } } } // ✅ 실행 create_plugin_tables(); register_plugin_admin_menu(); //copy_plugin_directory($plugin_source,$plugin_target); // ✅ 성공 메시지 및 이동 //alert('메일 관리 플러그인 설치가 완료되었습니다.', G5_ADMIN_URL . '/plugin/mail_manage/smtp_config.php'); echo ""; echo "테이블과 관리자 메뉴가 정상적으로 생성되었습니다.
"; echo ""; include_once(G5_ADMIN_PATH.'/admin.tail.php');