215 lines
7.9 KiB
PHP
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'); |