first commit 2
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
<?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');
|
||||
Reference in New Issue
Block a user