審核學生請假
對應程式: enter_logs/holiday/admin/review_holiday.php

業務功能
管理員後台頁面,供有權限的工作人員審核學生請假申請,可批次選取後設定「通過」或「不通過」,審核後自動發送通知 Email 給申請學生。
頁面操作
- 校區篩選:導覽列顯示
hi / hc / tc / st / all / co快速連結(school_areaGET 參數);未選校區前頁面不顯示資料 - 狀態切換:「待審」/ 「已審」兩個分頁(GET 參數
type=REVIEWED或空) - 勾選申請:表格每列有 checkbox(只有「待審」頁才可勾選);支援同一
log_datetime的多筆合併送出(holiday_log_id 以`分隔) - 填寫不通過原因:每列有
reject_reason[]textarea,選「不通過」時必填 - 選擇審核結果(radio):
- 通過(不送時數,視為缺席)→
HOLIDAY_REVIEW_RESULT_PASS - 不通過 →
HOLIDAY_REVIEW_RESULT_REJECT
- 通過(不送時數,視為缺席)→
- 送出:
<form method=post>,前端 JS 驗證至少勾選一個 radio 才送出
處理邏輯
POST 驗證:
$review必須在[HOLIDAY_REVIEW_RESULT_PASS, HOLIDAY_REVIEW_RESULT_PASS_BUT_NOT_ABSENCE, HOLIDAY_REVIEW_RESULT_REJECT]之內log_id必須為非空陣列
資料庫更新(每個 holiday_log_id):
$wpdb->update(TBL_HOLIDAY_LOGS, ['who_review'=>$user_login, 'review_result'=>$review, (reject時)+reviewer_reason], ['holiday_log_id'=>$id])
發送通知 Email:
- Email 模板從 WordPress post 讀取(
get_post(APPROVAL_HOLIDAY_POST_ID)或get_post(REJECT_HOLIDAY_POST_ID)) - 替換
{NAME}、{TIME}、{HOLIDAY}、{REJECT_REASON}文字變數 - 寄件人為
$school_area@aiacademy.tw;收件人為申請者 Email + 分校 Email - 僅在正式伺服器(
$_SERVER['SERVER_ADDR'] == LIVE_SERVER_IP)且非@aiacademy.tw帳號時才真正寄信,否則寄到測試信箱 - 透過
post_request($API_SENDMAIL, $post_data)呼叫edm.aiacademy.tw發信 API - 結果回寫
sent_email_result、is_sent_succ到TBL_HOLIDAY_LOGS
列表查詢 SQL:
- 以
GROUP BY log_datetime將同時間提交的多筆請假合併為一列(GROUP_CONCAT holiday_log_id) - 依
typeGET 參數決定顯示「review_result IS NULL(待審)」或「IS NOT NULL(已審)」
備註
- 存取權限由
admin/inc.php的$REVIEW_HOLIDAY_USERS白名單管理(charlene、vansindata、bao等帳號) - Email 模板 WordPress post ID:通過 =
1082(APPROVAL_HOLIDAY_POST_ID)、不通過 =1079(REJECT_HOLIDAY_POST_ID) - 導覽列(
AIA_Holiday_UI::display_nav())可快速跳至 delete_holiday.php 和 view_deleted_holiday.php
使用的 Functions
| Function | 定義於 |
|---|---|
AIA_Holiday_UI::setup_CSS() | enter_logs/holiday/admin/inc.php |
AIA_Holiday_UI::display_nav() | enter_logs/holiday/admin/inc.php |
AIA_Holiday_UI::display_school_area_ui() | enter_logs/holiday/admin/inc.php |
AIA_Holiday_UI::display_initial_log_table($type) | enter_logs/holiday/admin/inc.php |
AIA_Holiday_UI::display_review_result_text($review_result) | enter_logs/holiday/admin/inc.php |
AIA_Holiday_UI::display_reason_textarea($s) | enter_logs/holiday/admin/inc.php |
AIA_Holiday::is_valid_school_area_querystring() | enter_logs/holiday/admin/inc.php |
AIA_Holiday::get_sqlwhere_school_area($school_area) | enter_logs/holiday/admin/inc.php |
get_override_or_append_GET($ary) | wp-config.php |
post_request($url, $data) | wp-config.php |
wp_get_current_user() | WordPress core |
get_post($post_id) | WordPress core |
$wpdb->update/get_results | WordPress core |
使用的常數
| Constant | 值 | 定義於 |
|---|---|---|
TBL_HOLIDAY_LOGS | "holiday_logs" | enter_logs/inc.php |
HOLIDAY_REVIEW_RESULT_PASS | "V" | enter_logs/inc.php |
HOLIDAY_REVIEW_RESULT_PASS_BUT_NOT_ABSENCE | "O" | enter_logs/inc.php |
HOLIDAY_REVIEW_RESULT_REJECT | "X" | enter_logs/inc.php |
APPROVAL_HOLIDAY_POST_ID | 1082 | enter_logs/holiday/admin/inc.php |
REJECT_HOLIDAY_POST_ID | 1079 | enter_logs/holiday/admin/inc.php |
LIVE_SERVER_IP | "172.18.0.8" | wp-config.php |