Files
dnssash/adm/mail_manage/install_#U3160#U3141#Ucc28#U3155#U3154.php
2026-06-11 18:47:38 +09:00

215 lines
7.9 KiB
PHP

<?php
/*ini_set('display_errors', 1);
error_reporting(E_ALL);*/
$sub_menu = "600000";
include_once("./_common.php");
auth_check_menu($auth, $sub_menu, 'r');
$g5['title'] = "email 솔루션 설치";
//$setup = (isset($_POST['setup']) && $_POST['setup']) ? 1 : 0;
include_once(G5_ADMIN_PATH.'/admin.head.php');
function copy_plugin_directory($source, $destination) {
if (!is_dir($source)) return false;
// 대상 디렉토리가 없으면 생성
if (!is_dir($destination)) {
mkdir($destination, 0755, true);
}
$dir = opendir($source);
while (false !== ($file = readdir($dir))) {
if ($file == '.' || $file == '..') continue;
$srcPath = $source . '/' . $file;
$dstPath = $destination . '/' . $file;
if (is_dir($srcPath)) {
copy_plugin_directory($srcPath, $dstPath); // 재귀 복사
} else {
copy($srcPath, $dstPath);
}
}
closedir($dir);
return true;
}
// 복사 실행 경로 설정
$plugin_target = G5_ADMIN_PATH . '/plugin/mail_manage'; // 예: /adm/plugin/mail_manage
$plugin_source = G5_PATH . '/plugin/mail_manage'; // 예: /plugin/mail_manage
if (!is_dir($plugin_target)) {
$success = copy_plugin_directory($plugin_source, $plugin_target);
if ($success) {
echo "<p>✅ /plugin/mail_manage 디렉토리가 자동으로 복사되었습니다.</p>";
} else {
echo "<p>❌ 플러그인 복사 실패. 수동 복사 필요.</p>";
}
}
// 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 "<meta charset='utf-8'>";
echo "<h2>메일 관리 플러그인 설치 완료!</h2>";
echo "<p>테이블과 관리자 메뉴가 정상적으로 생성되었습니다.</p>";
echo "<p><a href='./smtp_config.php'>SMTP 설정으로 이동</a></p>";
include_once(G5_ADMIN_PATH.'/admin.tail.php');