審核學生請假

對應程式: enter_logs/holiday/admin/review_holiday.php

02-審核學生請假

業務功能

管理員後台頁面,供有權限的工作人員審核學生請假申請,可批次選取後設定「通過」或「不通過」,審核後自動發送通知 Email 給申請學生。

頁面操作

  • 校區篩選:導覽列顯示 hi / hc / tc / st / all / co 快速連結(school_area GET 參數);未選校區前頁面不顯示資料
  • 狀態切換:「待審」/ 「已審」兩個分頁(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_resultis_sent_succTBL_HOLIDAY_LOGS

列表查詢 SQL

  • GROUP BY log_datetime 將同時間提交的多筆請假合併為一列(GROUP_CONCAT holiday_log_id
  • type GET 參數決定顯示「review_result IS NULL(待審)」或「IS NOT NULL(已審)」

備註

  • 存取權限由 admin/inc.php$REVIEW_HOLIDAY_USERS 白名單管理(charlenevansindatabao等帳號)
  • Email 模板 WordPress post ID:通過 = 1082APPROVAL_HOLIDAY_POST_ID)、不通過 = 1079REJECT_HOLIDAY_POST_ID
  • 導覽列(AIA_Holiday_UI::display_nav())可快速跳至 delete_holiday.phpview_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_resultsWordPress 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_ID1082enter_logs/holiday/admin/inc.php
REJECT_HOLIDAY_POST_ID1079enter_logs/holiday/admin/inc.php
LIVE_SERVER_IP"172.18.0.8"wp-config.php