TLC Media

  • หน้าแรกเว็บไซต์ (current)
  • TLC Media
  • สื่อเพื่อการอภิบาล
  • E-learning พพช.

สมุดคำอธิษฐาน

แผ่น 4 ‹ › แผ่น 6
  • สารบัญหนังสือเฝ้าเดี่ยว 45 วัน

📋 Changelog — v1.0.256
v1.0.2562026-09-22
Fix — แนบรูป .jpg ในทะเบียนทรัพย์สิน (church_asset) ขึ้น "ไม่สามารถอ่านไฟล์รูปได้"
· สาเหตุ: `church_asset.php::upload_image()` เดาชนิดไฟล์เพื่อตัด prefix ก่อน decode base64 ด้วยการค้นหาคำว่า "png"/"gif" **ในสตริง base64 ทั้งก้อน** (ไม่ได้จำกัดแค่ prefix `data:image/xxx;base64,`) — บางครั้งไฟล์ jpg มีคำว่า "png" หรือ "gif" ปนอยู่ในเนื้อ base64 โดยบังเอิญ (เกิดขึ้นได้บ่อยพอสมควรกับไฟล์ขนาดใหญ่ เพราะ base64 มีตัวอักษร a-z ปนอยู่) ทำให้ไปตัด prefix ผิดชนิด เหลือ prefix `data:image/jpeg;base64,` ติดค้างอยู่ในข้อมูลที่จะ decode แล้ว `imagecreatefromstring()` อ่านไม่ออก
· แก้ให้ตัดเอาเฉพาะส่วนหลัง comma แรกของ data URI (`data:image/xxx;base64,`) มา decode ตรงๆ โดยไม่ต้องเดาชนิดไฟล์เลย เพราะ `imagecreatefromstring()` รู้จักชนิดไฟล์จากข้อมูลไบนารีเองอยู่แล้ว
· **พบ pattern เดียวกันในไฟล์อื่นด้วย** (`mission.php`, `liff.php`, `treat.php`) — ยังไม่ได้แก้ เพราะอยู่นอกขอบเขตที่ถามตอนนี้ จะแยกไปแก้ต่างหาก
v1.0.2552026-09-17
Feat — แยก Dashboard เป็น 2 เวอร์ชัน (v1 เดิม + v2 เสนอพิจารณา)
· `staff/index` (URL เดิม `/staff`) กลับไปเป็นเวอร์ชันเดิม (กราฟ "การประกาศ ภาพรวม" อย่างเดียว) ตามที่ใช้งานจริงอยู่ก่อน v1.0.250 — ยกเว้นยังคง `aauth->isLogin()` guard ไว้ (แก้ไปตั้งแต่ v1.0.250 เพราะเดิมไม่มีการเช็ค login เลย ถือเป็นช่องโหว่ที่ไม่ควรเอากลับมา)
· เพิ่ม URL ใหม่ `staff/v2` (`view/dashboard_v2.php`) เก็บ Dashboard เวอร์ชันใหม่ทั้งหมดที่ทำไปตั้งแต่ v1.0.250-254 (KPI, ความครอบคลุมอภิบาล+memo รายทีม, การทำงานฝ่ายงาน, ความเคลื่อนไหว users ฯลฯ) ไว้ครบ สำหรับเสนอพิจารณาก่อนตัดสินใจใช้แทน v1 — ตั้งชื่อไฟล์ view เป็น `dashboard_v2.php` ไม่ใช่ `welcome_v2.php` เพราะชื่อนั้นมีไฟล์เดิมอยู่แล้วในระบบ (dashboard เก่าอีกแบบที่ไม่มี controller ไหน route ไปใช้แล้ว เป็นไฟล์ orphan เก็บไว้เฉยๆ ไม่ได้ลบ)
· มีลิงก์สลับไปมาระหว่าง 2 เวอร์ชันในแต่ละหน้า (v1 มีลิงก์ "ดูเวอร์ชันใหม่" / v2 มีลิงก์ "กลับไปเวอร์ชันเดิม" + ป้ายกำกับ "เสนอพิจารณา" ให้เห็นชัดว่ายังไม่ใช่เวอร์ชันที่ใช้งานจริง)
v1.0.2542026-09-17
Feat — Dashboard: เปลี่ยนคอลัมน์ "ความคืบหน้า" เป็น Memo + ประเภทการเลี้ยงดู
· แผง "ระบบอภิบาล — ความครอบคลุมรายทีม" เดิมแสดงแท่ง % ความคืบหน้า — เปลี่ยนเป็นแสดงจำนวนแกะที่ลงบันทึกแล้วในสัปดาห์นี้ 4 คอลัมน์: **Memo** (จาก `feed_respone`), **1:1**, **1:กลุ่ม**, **สื่อ** (จาก `treat_m.treat_type` = 1/2/3 ตามลำดับ)
· ใช้ query เดียว (LEFT JOIN 2 subquery ที่กรอง `treat_week`/`date_go` มาก่อนแล้ว) แทนที่จะยิงหลาย query แยกต่อทีม — คำนึงถึง performance ตามที่ขอ subquery ของ feed_respone ใส่ `DISTINCT` กันแถวซ้ำถ้ามีหลาย memo ต่อคนต่อสัปดาห์ (ป้องกันฐานเพี้ยน)
· **แก้บั๊กที่เจอระหว่างทาง**: `treat_type=4` หมายถึง "ไม่ได้อภิบาล" (ติ๊กแล้วแต่ไม่ได้เลี้ยงดู) แต่ KPI "% อภิบาลครบสัปดาห์นี้" เดิมนับรวม type 4 ว่า "ได้รับการอภิบาล" ด้วย (เช็คแค่ `treat_type > 0`) ทำให้ % คำนวณสูงเกินจริง แก้เป็น `treat_type > 0 AND treat_type < 4` ให้ตรงกับ logic เดียวกับรายงาน care_v3 เดิม
v1.0.2532026-09-17
Style — ย้ายกราฟ "การประกาศ ภาพรวม" ขึ้นบนสุดในหน้า Dashboard
v1.0.2522026-09-17
Style — เพิ่มขนาดฟอนต์หน้า Dashboard
· ตัวเลข KPI, หัวข้อ panel, ตาราง, รายการคนรับเชื่อล่าสุด และข้อความอธิบายต่างๆ ในหน้า Dashboard (`welcome.php`) ใหญ่ขึ้นทั้งหมด อ่านง่ายขึ้น
v1.0.2512026-09-17
Fix — Dashboard error 500 (v1.0.250 ใช้ชื่อคอลัมน์ผิด)
· KPI "สมาชิกใหม่สัปดาห์นี้" ใช้ `nano_users.crt_date` ซึ่งไม่มีอยู่จริง (ไปสับสนกับ `guest.crt_date` ที่ใช้ชื่อเดียวกัน) — คอลัมน์ที่ถูกต้องของ `nano_users` คือ `first_regis` ทำให้ query error และหน้า Dashboard ล่มทั้งหน้า (db_debug เปิดอยู่ query error เลย fatal ทั้งหน้า)
· แก้เป็น `first_regis` แล้ว ตรวจสอบคอลัมน์อื่นๆ ทั้งหมดที่ใช้ในหน้านี้ซ้ำอีกรอบเทียบกับโค้ดที่ใช้งานจริงอยู่แล้ว ไม่พบจุดอื่นที่ผิด
v1.0.2502026-09-17
Feat — ออกแบบ Dashboard ใหม่ (staff/index — "welcome.php")
· Dashboard เดิมมีแค่กราฟ "การประกาศ" (คนรับเชื่อรายสัปดาห์/สะสม) อย่างเดียว — เพิ่มแผงข้อมูลใหม่ด้านบน (กราฟเดิมยังอยู่ครบ ไม่ได้ลบ):
- **KPI สรุปด่วน**: สมาชิกทั้งหมด (active) + สมาชิกใหม่สัปดาห์นี้, คนรับเชื่อเดือนนี้/สัปดาห์นี้, % อภิบาลครบสัปดาห์นี้ (เทียบสัปดาห์ก่อน), จำนวน online ตอนนี้ + รออนุมัติ (LINE Login + กรอกคนรับเชื่อ) - **ระบบอภิบาล — ความครอบคลุมรายทีม**: % สมาชิกที่มีบันทึกเยี่ยม/ติดตามแล้วสัปดาห์นี้ แยกตามทีม (คำนวณจาก `nano_users` + `treat_m`) - **คนรับเชื่อล่าสุด**: 5 รายการล่าสุดจากตาราง `guest` - **การทำงานของฝ่ายงาน**: จำนวนบันทึกสัปดาห์นี้เทียบสัปดาห์ก่อนของ อภิบาล/พันธกิจบ้าน/E-Learning/ทะเบียนคนรับเชื่อ - **ความเคลื่อนไหวผู้ใช้งาน**: staff ใช้งานวันนี้, ผู้เยี่ยมชมสาธารณะวันนี้, หน้าที่ใช้บ่อยสุด (จาก Activity Log ที่มีอยู่แล้ว), จำนวนรออนุมัติ - **เปลี่ยนแปลงตั้งค่าล่าสุด**: ดึงจาก `configx_logs` (แสดงเฉพาะถ้ามีข้อมูล)
· ทุก query ที่พึ่งตารางซึ่งอาจยังไม่มี (`user_online_ping`, `configx_logs`, `ele_logs`, `nano_activity_log`, `nano_public_visit_daily`) เช็ค `table_exists()` ก่อนเสมอ ไม่งั้นแสดงเป็น 0/ว่าง แทนที่จะ error
· **แก้ security gap ที่เจอระหว่างทาง**: `staff.php` (controller ของหน้า Dashboard) เดิมไม่มีการเช็ค login เลย ใครก็เข้าดูได้แม้ไม่ login — ตอนนี้ Dashboard แสดงชื่อคนรับเชื่อจริงและข้อมูลสรุปคริสตจักร จึงเพิ่ม `aauth->isLogin()` guard เข้าไป
v1.0.2492026-09-17
Feat — บันทึก log การแก้ไขหน้า configx/homepage และ configx/online
· เพิ่มตาราง `configx_logs` (SQL: `application/sql/create_configx_logs.sql` — **ต้องรันเองบน production ก่อนถึงจะเริ่มเก็บ log**) เก็บ: หน้าไหน, ใครบันทึก (membercode+ชื่อจาก session), เมื่อไหร่, ค่าที่บันทึกทั้งหมด (JSON)
· ทั้งสองหน้าแสดง "ประวัติการบันทึก" ใต้ฟอร์ม ดึงย้อนหลัง 20 รายการล่าสุดผ่าน `configx/get_configx_logs`
· ถ้ายังไม่ได้รัน SQL สร้างตาราง ระบบจะ**ไม่บันทึก log แต่การบันทึกค่าจริงยังทำงานปกติ** (เช็ค `table_exists()` ก่อนเขียน/อ่าน log เสมอ กันไม่ให้ฟีเจอร์ log ไปทำให้การบันทึกค่าหลักพังถ้าตารางยังไม่มี)
v1.0.2482026-09-17
Fix — ป้องกันค่า "0" ในหน้าตั้งค่า configx/online (บั๊กเดียวกับ configx/homepage)
· `configx.php::save_config_online()` มีช่องโหว่แบบเดียวกับ `save_homepage()` — `$this->input->post('th_link')`/`'en_link'` ถูกใช้แบบดิบ ถ้า field หายไปจาก POST จะได้ `FALSE` แล้ว CI escape() เป็นเลข 0 ตอนเขียนลง DB
· แก้ให้ `trim((string)...)` ทุก field ก่อนเสมอ และเพิ่มตรวจสอบฝั่งเซิร์ฟเวอร์ (ห้ามว่าง) ให้ตรงกับฝั่ง JS
· แก้บั๊กเล็กที่เจอระหว่างทาง: `configx_online.php` เช็คผลบันทึกด้วย `if(res.flag="1")` (เครื่องหมาย `=` ตัวเดียว เป็นการ assign ไม่ใช่เทียบค่า) ทำให้เข้าเงื่อนไข "สำเร็จ" เสมอไม่ว่าจะสำเร็จจริงหรือไม่ — แก้เป็น `==`
v1.0.2472026-09-17
Fix — หน้าตั้งค่าคำเทศนาล่าสุด (configx/homepage) บันทึกเป็น "0" แทนข้อความจริง
· สาเหตุ: `configx.php::save_homepage()` เรียก `$this->input->post()` ตรงๆ โดยไม่ cast/validate — ถ้า field ไหนไม่ถูกส่งมาใน POST เลย (เช่น JS หา element ไม่เจอ หรือ request ไม่สมบูรณ์) `$this->input->post()` จะได้ค่า `FALSE` แล้ว CodeIgniter จะ `escape()` ค่า boolean FALSE เป็นเลข **0** ดิบๆ ตอนเขียนลง DB (ไม่ใช่ string ว่างเปล่า) ทำให้ `date_txt`/`title_sermon`/`bible_verse`/`sormon_by` ในตาราง `tlc_homepage` กลายเป็น "0" แล้วไปแสดงที่หน้าแรกเว็บ (ส่วน "Recent Video") ตรงๆ
· แก้ให้ทุก field ผ่าน `trim((string) ...)` ก่อนเสมอ ป้องกัน FALSE หลุดไปถึง DB layer และเพิ่มการตรวจสอบฝั่งเซิร์ฟเวอร์ (date_txt/title_sermon ห้ามว่าง) ให้ตรงกับที่ฝั่ง JS เช็คอยู่แล้ว — ป้องกันไม่ให้ข้อมูลเพี้ยนซ้ำอีกในอนาคต
· **ข้อมูลปัจจุบันในตาราง `tlc_homepage` ยังเป็น "0" ค้างอยู่** ต้องเข้าไปกรอกข้อมูลจริงใหม่ที่หน้า `configx/homepage` แล้วกดบันทึกอีกครั้งเพื่อแก้ข้อมูลที่แสดงบนหน้าแรก (แก้โค้ดอย่างเดียวไม่ทำให้ข้อมูลเก่าที่เพี้ยนไปแล้วกลับมาถูกต้องเอง)
v1.0.2462026-09-16
Style — เปลี่ยนชื่อแท็บ "รายการที่เพิ่งเพิ่ม" เป็น "รายการที่กรอกล่าสุด"
v1.0.2452026-09-16
Fix — แท็บ "รายการที่เพิ่งเพิ่ม" ฟ้อง "โหลดรายการไม่สำเร็จ" ทันทีที่แตะครั้งแรก
· สาเหตุ: แตะแท็บเร็วเกินไปก่อน `liff.getProfile()` จะโหลดเสร็จ ทำให้ `line_user_id` ยังว่างตอนยิง AJAX แรก — `guest.php` constructor ตกไป error ตอนเช็คสิทธิ์แบบเดิม (in_array บน null) กลายเป็น response ที่ไม่ใช่ JSON
· แก้ `load_recent_list()` ให้รอ/ลองใหม่ทุก 300ms จนกว่า `line_user_id` จะพร้อม (สูงสุด ~6 วิ) แทนที่จะยิง request ทันทีตอนยังไม่มีค่า — ระหว่างรอโชว์ "กำลังโหลด..." แทนข้อความ error
· แก้ `guest.php` constructor ให้กัน `in_array()` error ด้วย (เช็ค `is_array($group)` ก่อน) ป้องกัน endpoint อื่นๆ ในคอนโทรลเลอร์นี้เจอปัญหาเดียวกันถ้า session ไม่มีข้อมูล USERGROUP
v1.0.2442026-09-16
Fix — icon ปุ่มลบไม่ขึ้น (fa-trash ไม่มีอยู่ในชุด glyph ฟรี)
· `fa-trash` (แบบ solid, ไม่มี -alt) ไม่ได้รวมอยู่ใน glyph ของ Font Awesome Free ที่โปรเจคนี้โหลดอยู่ (มีแค่นิยาม CSS แต่ไม่มีรูปในไฟล์ font จริง) จึงว่างเปล่าไม่ขึ้นไอคอนเลย — เปลี่ยนเป็น `fa-trash-alt` ซึ่งเป็นไอคอนถังขยะตัวที่ใช้งานได้จริงในชุดฟรี
v1.0.2432026-09-16
Style — ปุ่มแก้ไข/ลบย้ายมาอยู่แถวเดียวกับชื่อในทับ "รายการที่เพิ่งเพิ่ม"
· จัดเป็น flex row: ชื่อ-ชื่อเล่นชิดซ้าย (ตัดด้วย ... ถ้ายาวเกิน) ปุ่มแก้ไข/ลบ (เหลือแต่ไอคอน) ชิดขวา ลดจาก 3 แถวเหลือ 2 แถวต่อรายการ
v1.0.2422026-09-16
Style — เพิ่มระยะห่างระหว่าง tab กับฟอร์มกรอกข้อมูล
· เพิ่ม margin-top ให้ `#tab_entry` ในหน้ากรอกคนรับเชื่อ (LIFF) ให้บรรทัด "ชื่อ สกุลผู้รับเชื่อ" ไม่ติดกับแท็บจนเกินไป

Copyright © 2021 truelifeinchristchurch.com

Page rendered in 0.0132 seconds

Environment: production

Server Time: 2026-09-24 15:40:00