'회원', 'member_approval_request' => '회원 승인요청', 'company' => '업체', 'designated_shop' => '지정판매소', 'sales_agency' => '판매 대행소', 'free_recipient' => '무료 수령처', 'manager' => '담당자', 'local_government' => '지자체', 'code_kind' => '기본코드 종류', 'code_detail' => '기본코드', 'packaging_unit' => '포장 단위', 'packaging_unit_history' => '포장 단위 이력', 'bag_price' => '단가', 'bag_price_history' => '단가 이력', 'bag_order' => '발주', 'bag_order_item' => '발주 품목', 'bag_receiving' => '입고', 'bag_inventory' => '재고', 'bag_sale' => '판매', 'bag_issue' => '무료용 불출', 'bag_issue_item_code' => '불출 품목코드', 'shop_order' => '전화 주문', 'shop_order_item' => '전화 주문 품목', 'menu' => '메뉴', 'menu_type' => '메뉴 유형', 'feedback' => '사용자 의견', 'feedback_file' => '의견 첨부', 'blockchain_ledger' => '원장', ]; /** action → 한글 라벨 */ private const ACTION_LABELS = [ 'create' => '등록', 'update' => '수정', 'delete' => '삭제', ]; public function __construct() { $this->logModel = model(ActivityLogModel::class); } public function index(): string { helper('admin'); $start = (string) ($this->request->getGet('start') ?? ''); $end = (string) ($this->request->getGet('end') ?? ''); $action = (string) ($this->request->getGet('action') ?? ''); $table = (string) ($this->request->getGet('table') ?? ''); $user = trim((string) ($this->request->getGet('user') ?? '')); $builder = $this->logModel ->select('activity_log.*, member.mb_id, member.mb_name, member.mb_lg_idx') ->join('member', 'member.mb_idx = activity_log.al_mb_idx', 'left'); // 테넌트 분리: 슈퍼/본부는 전체, 그 외 관리자는 소속 지자체 사용자만 $level = (int) session()->get('mb_level'); if (! Roles::isSuperAdminEquivalent($level)) { $lgIdx = admin_effective_lg_idx(); $builder->where('member.mb_lg_idx', $lgIdx); } if ($start !== '') { $builder->where('activity_log.al_regdate >=', $start . ' 00:00:00'); } if ($end !== '') { $builder->where('activity_log.al_regdate <=', $end . ' 23:59:59'); } if (isset(self::ACTION_LABELS[$action])) { $builder->where('activity_log.al_action', $action); } if ($table !== '' && isset(self::TABLE_LABELS[$table])) { $builder->where('activity_log.al_table', $table); } if ($user !== '') { $builder->groupStart() ->like('member.mb_id', $user) ->orLike('member.mb_name', $user) ->groupEnd(); } $list = $builder->orderBy('activity_log.al_idx', 'DESC')->paginate(20); $pager = $this->logModel->pager; return view('admin/layout', [ 'title' => '활동 로그', 'content' => view('admin/access/activity_log', [ 'list' => $list, 'pager' => $pager, 'start' => $start, 'end' => $end, 'action' => $action, 'table' => $table, 'user' => $user, 'tableLabels' => self::TABLE_LABELS, 'actionLabels' => self::ACTION_LABELS, ]), ]); } public function show(int $id): string { helper('admin'); $row = $this->logModel ->select('activity_log.*, member.mb_id, member.mb_name, member.mb_lg_idx') ->join('member', 'member.mb_idx = activity_log.al_mb_idx', 'left') ->where('activity_log.al_idx', $id) ->first(); if ($row === null) { return view('admin/layout', [ 'title' => '활동 로그', 'content' => '