function moa_alarm_render_badge() { global $member; if (empty($member['mb_id'])) return; $count = moa_alarm_unread_count($member['mb_id']); $skin = MOA_ALARM_PLUGIN_PATH . '/skin/alarm_badge.skin.php'; if (file_exists($skin)) include $skin; } function moa_alarm_head_menu($html) { global $member; if (empty($member['mb_id']) || !is_string($html)) return $html; $count = moa_alarm_unread_count($member['mb_id']); $skin = MOA_ALARM_PLUGIN_PATH . '/skin/alarm_badge.skin.php'; if (!file_exists($skin)) return $html; ob_start(); include $skin; $badge = ob_get_clean(); foreach (['', '', ''] as $tag) if (strpos($html, $tag) !== false) return str_replace($tag, $badge . $tag, $html); return $html . $badge; } function moa_alarm_member_form($member_data) { $skin = MOA_ALARM_PLUGIN_PATH . '/skin/alarm_config_form.skin.php'; if (file_exists($skin)) include $skin; } // ── 내부 헬퍼 ──────────────────────────────────────────────────── function _moa_display_name($mb_id, $wr_name) { if (!$mb_id) return $wr_name; $mt = (defined('G5_TABLE_PREFIX') ? G5_TABLE_PREFIX : 'g5_') . 'member'; $m = sql_fetch("SELECT mb_nick, mb_name FROM `{$mt}` WHERE mb_id = '" . sql_escape_string($mb_id) . "'"); return ($m && ($m['mb_nick'] || $m['mb_name'])) ? ($m['mb_nick'] ?: $m['mb_name']) : $wr_name; } // ================================================================ // 3. 실행 코드 (함수 정의 완료 후) // ================================================================ // 테이블 자동 설치 moa_alarm_install(); // 30일 지난 알람 정리 (약 1% 확률로 실행 → 성능 영향 최소화) if (mt_rand(1, 100) === 1) { moa_alarm_cleanup(); } // Hook 등록 (extend/moa_alarm.extend.php 에서 등록하지 않은 경우만 실행) if (!defined('MOA_ALARM_HOOKS_REGISTERED')) { define('MOA_ALARM_HOOKS_REGISTERED', true); add_event('comment_update_after', 'moa_alarm_on_comment', G5_HOOK_DEFAULT_PRIORITY, 7); add_event('member_form_after', 'moa_alarm_member_form', G5_HOOK_DEFAULT_PRIORITY, 1); }