Meeting Room Booking System

Meeting Room Booking System

เนื่องจากที่ทำงานมีห้องเยอะมาก แล้วต้องมีการจองไว้ให้ลูกค้าเข้ามาใช้
ปัจจุบันใช้เป็นไฟล์ excel (ไฟล์ออฟฟิศสารพัดประโยชน์)
เพิ่มลบกันกระหน่ำ ระบายสีกันให้พรึ่ด
แล้วต้องแชร์ไฟล์กัน แย่งกันเปิดวุ่นวายมาก
ใช้งานไม่ค่อยสะดวกเท่าไหร่ แถมแฮงบ่อยอีกต่างหาก

เลยจะลองเปลี่ยนเป็น web base ดูบ้าง
ไปหาดูโปรเจ็คใน SourceForge.net ค้นว่า “room booking”
ก็เจออยู่หลายตัว แต่ตัวที่น่าสนใจที่สุดก็คืออันนี้
Meeting Room Booking System (MRBS)
ล่าสุดเป็นเวอร์ชั่น 1.2.3 ออกมาได้เกือบปีนึงแล้ว
เห็นว่าเป็น php คิดว่าน่าจะแก้ไขปรับปรุงได้ง่ายและเร็วที่สุด
และที่สำคัญ จำนวนดาวน์โหลดมันเยอะดี แปลว่าค่อนข้างเป็นที่นิยม
ของเค้าคงดีจริง ก็เลยเอาปลอดภัยไว้ก่อน

วิธีติดตั้งก็ไม่ยาก ผู้พัฒนาเค้าเขียนเอกสารประกอบมาค่อนข้างละเอียด
ก็ทำตามนั้นได้เลย

อันดับแรกก็แตก zip file ลงไปวางไว้บน web server
ผมทำเป็น virtual host เลยต้องไปแก้ httpd.conf ของ Apache นิดหน่อย
เซิร์ฟเวอร์เดียววางมันซะเจ็ดแปดเวบ อาศัย user น้อย มันคงไม่ล่ม

ต่อไปก็สร้าง db ใน mySql ขึ้นมาก้อนนึง ตั้งชื่อว่า mrbs
เอา script ที่เค้าให้มา (tables.my.sql) รันไปปื้ดนึง ก็ได้ table มาเรียบร้อย
เค้ามี sample-data.sql มาให้ด้วย ดีมากเลย ไม่ต้องคิดเอง
(ถ้าใครใช้ PostgreSql ก็ใช้สคริปต์ในไฟล์ tables.pg.sql แทน)

แค่นี้ก็เสร็จเรียบร้อย ถ้าไม่มีอะไรผิดพลาด ก็ใส่ url ตามโดเมนที่เราตั้งไว้
มันควรจะแสดงผลออกมาได้คล้ายๆ ในรูปข้างบน

จากนั้นก็จะปรับแต่งอะไรก็ตามสะดวก

เริ่มที่ไฟล์ config.inc.php อ่านไปแก้ไปได้เลย
มีรายละเอียดและตัวอย่างให้ชัดเจน
ส่วนมากเป็นพวกค่าคงที่ทั้งหลาย ส่วนของ db ถ้าใช้ mySql อยู่แล้วก็ไม่ต้องแก้อะไร
ส่วนพวกตัวแปร $mrbs_admin
$mrbs_admin_email
$mrbs_company
ก็แก้เอาตามความต้องการ

ต่อไปเรื่อง user ถ้าตามค่า default ของโปรแกรม ตรง $auth[“type”] = “config”;
เป็นการเขียน user/pwd ลงไปแบบ hard code ใน config.inc.php
ถ้าไม่ซีเรียสอะไร วิธีนี้ก็สะดวกดี แต่ไม่ค่อยปลอดภัย
จะเห็นว่าเค้าใส่ user/pwd มาให้แล้ว 3 user คือ
administrator/secret
alice/a
bob/b

ถ้าอ่านในไฟล์ AUTHENTICATION จะทราบว่า
user จะมี 3 level คือ
Unknown user
Authenticated user
Administrator

ถ้าเป็น unknow ก็ดูได้หมดว่าห้องไหนใครจอง แต่แก้ไขไม่ได้
authen ก็จะดูได้หมด แต่แก้ได้เฉพาะของตัวเอง
admin ก็ทำได้ทุกอย่างตามระเบียบ

โปรแกรมทำไว้ค่อนข้างดี ทำให้ยืดหยุ่นในการเลือกใช้ระบบ log in มาก
นอกจากจะ hard code ตรงๆ แล้วก็ยังไปลิงค์ใช้กับระบบ user/pwd อื่นได้
อาทิ db, external db, pop3, imap, ldap ฯลฯ

ผมเลือกตามหลักสากลนิยมคือ db ก็จัดการแก้
$auth[“type”] เปลี่ยนจาก “config” เป็น “db” ซะ
แล้วก็ log in เข้าไปด้วย administrator/secret ก่อน
กดเข้าไปที่ลิงค์ User list ระบบจะสร้างตาราง users ให้เราสามารถ add user เข้าไปได้
ให้ add user administrator เป็นคนแรก จากนั้นก็ตามใจเลยครับ
แล้วกลับไป comment ที่บรรทัด $auth[“user”] ใน config.inc.php ให้หมด
เราก็จะใช้ user/pwd จาก db อย่างเดียว

กลับมาดูที่หน้าตาโปรแกรม จะเห็นว่าช่วงเวลาที่กำหนดมาให้เป็นช่วงละ 30 นาที
ตั้งแต่ 7 โมงเช้าถึง 1 ทุ่ม ถ้าอยากได้มากน้อยกว่านี้ก็ไปแก้ที่ config.inc.php ที่ตัวแปร
$resolution = 1800; อันนี้เท่ากับ 30 นาที
$morningstarts = 7; เริ่ม 7 โมงเช้า
$eveningends = 19; สิ้นสุดที่ 1 ทุ่ม

ต่อไปมาดูที่ระบบภาษา โปรแกรมเตรียมภาษาและคำแปลมาให้มากมาย
และแน่นอน ภาษาไทย…มันจะไม่มี!!!
ค่าเริ่มต้นมันจะไปที่ lang.en คือภาษาอังกฤษ เราก็จัดการ copy lang.en เป็น lang.th ซะ
แล้วก็ปรับปรุงแก้ไข lang.th ตามใจชอบเลย แปลให้มันตรงๆ ก็แล้วกัน
แล้วกลับไปแก้ที่ config.inc.php ตรง
$default_language_tokens แก้จาก “en” เป็น “th”
$disable_automatic_language_changing แก้จาก 0 เป็น 1

เป็นอันเสร็จพิธี ต่อไปก็เหลือการทดลองใช้งานให้คล่องก็เรียบร้อย…

อัพเดท (12 Aug. 2008): ช่วงนี้มีคน google เข้ามาเจอหน้านี้บ่อย
แล้วมีปัญหาในการใช้งาน มาโพสถามผม ซึ่งต้องขออภัยจริงๆ ที่หลายๆ กรณีผมช่วยตอบ
หรือแก้ปัญหาให้ไม่ได้ เนื่องจากบล็อกนี้ผมเขียนขึ้นเป็นบันทึกช่วยจำของตัวเองเมื่อกว่า 2 ปีก่อน
ซึ่งทำตามวิธีของตัวเอง สภาพแวดล้อมของตัวเอง ซึ่งถ้าใครอ่านแล้วทำตามได้ก็ยินดีด้วยครับ
ส่วนถ้าติดปัญหา ผมก็จนปัญญาเหมือนกันครับ
วิธีที่ดีที่สุดคือ RTFM

Green Day : Bullet in a Bible

Bullet in a Bible American Idiot

พอดีเพิ่งได้ของที่สั่งจาก eBay ปกมันสีสวยดี เอามาวางคู่กับอัลบั้มต้นฉบับแล้วยิ่งชอบเข้าไปใหญ่
ของบ้านเราที่ยังเห็นหลงเหลืออยู่ที่ร้าน CD Warehouse
ก็เป็น CD+VCD แต่อยากได้ CD+DVD มากกว่า เลยต้องไปหาใน eBay
สุดท้ายก็ได้จากคนขายในสิงคโปร์นี่เอง เลยต่อค่าส่งไปได้เล็กน้อย

เปิดดูเปิดฟังไปแล้วก็โอเค แต่ไม่ค่อยชอบภาพที่มันสวิงสวายมากไปนิด
ชอบภาพสวยๆ นิ่งๆ แบบ The Corrs Unplugged มากกว่า (ก็มันคนละแนวนี่เนาะ)
เสียงยอมรับได้ สิ่งที่ดีที่สุดของแผ่นนี้ก็คือบรรยากาศระหว่างการแสดง
และบทสัมภาษณ์แฟนเพลงก่อนเริ่มงาน ดูสนุกดี

ชุดนี้ (Americon Idiot) บิลลี่โจมันแต่งเพลงได้เจ็บแสบดี ฟังแล้วก็ชอบไปหมด
เป็นอัลบั้มที่ฟังบ่อยที่สุด ยิ่งฟังยิ่งมันส์ ยิ่งฟังยี่งเพราะ (ขนาดนั้น)
แต่เนื้อเพลงในปกซีดีอ่านยากหน่อย ลายมือมันแย่พอๆ กับไดอารี่ของโน้ต อุดม
เพ่งอ่านมากๆ อาจตาบอดได้

ปกติฟังเพลงค่อนข้างสะเปะสะปะ แต่จะชอบซื้อของแท้เฉพาะชุดที่แถม DVD หรือ VCD
ที่ชอบที่สุดก็คือชุดรวมฮิต Lest We Forget: the Best of Marilyn Manson
อันนั้นแถม DVD รวม MV ทุกเพลงที่เคยมีมาเลย เสียดายไม่มี subtitle ให้
ล่าสุดก็รวมฮิต Truly Madly Completely ของ Savage Garden แถม MV เหมือนกัน

แต่กับศิลปินที่ชอบมากหน่อยไม่มีแผ่นแถมก็กัดฟันซื้อ อย่างของเจ๊มะดัน Madonna,
แก๊งพี่หน้าอ้วน Keane, แล้วก็เพลงเพราะๆ ของครอบครัว the Corrs
อาศัยเพลงเพราะ ปกสวย ก็เก็บได้เลย

ช่วงนี้มีคอนเสิร์ตศิลปินต่างประเทศเยอะ ป้าดา Daren Hayes ก็เพิ่งจะมา
สิ้นเดือนก็จะมีถั่วตาดำ Black Eyed Peas พอเดือนหน้าแก๊งพี่หน้าอ้วน Keane ก็มาอีก
แล้วเห็นว่าปลายปีก็จะมีร็อบบี้ วิลเลี่ยม อยากดูไปหมด แต่ไม่มีเวลา (เปลืองตังค์ด้วย)

แต่ถ้า Green Day มานี่ว่าจะเอาซะหน่อย วงนี้ว่างเว้นจากบ้านเราไปเป็นสิบปีแล้ว
ถ้ามาอีกงวดนี้มีฮอลถล่ม…

แอปเปิ้ลบอกว่า “แม็คบุ๊คไม่ใช่แลปท็อป”

ไปเจอจาก บล็อกของคุณ bact’ เลยตามไปดูที่ AppleDefects
ใครยังไม่เคยเห็น MacBook ก็คลิกไปดูได้เลย
ที่ บล็อกคุณ Tee มีรูปเทียบกับ iBook ให้ดูด้วย
ใช้บริการเค้าอีกแล้ว หลังจาก PHP bahtText
(เจอของดีต้องติดตามไว้ครับ)

ผมไปลูบๆ คลำๆ ตัวจริงของ MacBook มาแล้ว ยอมรับว่ามันหน้าตาดี
ชอบคีย์บอร์ด จอไวด์สกรีนด้วย แจ่มมาก
แต่ไม่ชอบที่มันเป็นจอแบบมันแวบ รู้สึกมันสะท้อนแสงจัดไปหน่อย
พอไปอ่านที่ว่า MacBook is NOT a Laptop แล้วก็ได้ทีเลย
แพงก็แพง แถมมีปัญหาเรื่องความร้อนอีก ดีนะที่ไม่ซื้อมาใช้ ;-P

หลักๆ ก็คือผู้ใช้ทั่วไปคอมเพลนไปที่แอปเปิ้ลว่า MacBook มันร้อนเป็นบ้า
เค้าเลยให้คำตอบมาว่า…

เอาตามสำนวนคุณ bact’ เลยดีกว่า ผมชอบน่ะ เค้าว่างี้

.. ก็ MacBook มันเป็น “โน๊ตบุ๊ค” (สมุดจด) นี่คะ
ไม่ใช่ “แลปท็อป” (บนตัก) ไผใช้ให้สู (เสร่อ) เอาไปวางบนตักล่ะคะ ? ..

เค้าก็ตอบอ้างอิงตามคู่มือผลิตภัณฑ์เลยนะ ซึ่งมันก็เขียนว่างั้นจริงๆ (-_-“)

อย่างนี้ iBook ของผม ก็เป็นได้ทั้งโน๊ตบุ๊คกับแลปท๊อปเลยสิ
เพราะยังวางบนตัก ตั้งบนโต๊ะ หรือนอนทำงานบนเตียงก็ยังได้ (อย่าคิดลึก)
ดีจัง ได้ใช้ของดีมีประสิทธิภาพแบบ 2 in 1 [/^_^]/

CSS page-break-before

จดไว้เดี๋ยวลืม

ความต้องการคือ สั่งพิมพ์จากหน้าเวบ แล้วให้มันแบ่งหน้าให้ตรงจุดที่เราต้องการให้ขึ้นหน้าใหม่
คุ้นๆ ว่า CSS มันมีพร็อพเพอตี้ตัวนึง เลยไปหาดูใน W3C
แล้วก็เจอตัวอย่าง เค้าใช้แบบนี้

ในแท็ก style ก็สร้างคลาสสำหรับ div ขั้นมาคลาสนึง
สมมุติตั้งว่า pageBreak ก็จะเป็นแบบนี้

<style>
    div.pageBreak { page-break-before: always; }
</style>

เวลาจะใช้ ก็ใส่แท็ก div ตรงที่จะให้ขึ้นหน้าใหม่เวลาสั่งพิมพ์

<div class="pageBreak"></div>

ง่ายๆ แค่นี้แหละ
ลองทดสอบดู

<html><head>
<style>
    div.pageBreak { page-break-before: always; }
</style>
</head>
<body>
xxxxx
<div class="pageBreak"></div>
yyyyy
<div class="pageBreak"></div>
zzzzz
</body>
</html>

เรียบร้อย…เปิดดูแล้วกด Print Preview…x, y, z พิมพ์แยกกัน 3 หน้าถูกต้อง

ที่จริงในตัวอย่างเค้าเขียนแท็ก div แบบนี้
<div class="pageBreak" />
ซึ่งปรากฏว่าบน IE มันแสดงผลถูกจริง แต่พอใช้ Firefox แล้วเจ๊ง
y กับ z มันอยู่หน้าเดียวกันเฉยไม่ยอมแยก ก็เลยต้องเขียน <div></div> อย่างที่เห็น
เพื่อให้ใช้ได้ทั้งสองบราวเซอร์หลักๆ นี่ก่อน
(ดูเหมือนจิ้งจอกไฟยังไม่ซัพพอร์ตการย่อปิดแท็กที่ควรมีอิลิเมนท์
เลยเขียนแบบในตัวอย่างไม่ได้)

วันนี้เอาแค่นี้ก่อน ^_^

PHP bahtText

bahtText เป็นฟังค์ชั่นยอดนิยมในข้อสอบเข้าทำงานของหลายๆ ที่
คนที่ใช้ Excel บ่อยๆ คงรู้ดีว่ามีประโยชน์แค่ไหน
จะว่าไปมันก็ไม่ใช่ของยากเย็นอะไรนัก เคยเขียนใช้ตอนทำ VB6 อยู่พักนึง

คราวนี้ต้องเอามาใช้ในงานประจำที่ทำอยู่ ซึ่งหน้านั้นมันเป็น php
จะมานั่งเขียนเองก็จะไม่ใช่ยอดนักเขียนโปรแกรม 😛
เคยได้ยินมั้ยครับ Good programmers copy, Great programmers steal. ^_^
(อย่าเอาไปอ้างอิงนะ เดี๋ยวโดนด่า)

php มันฮอตฮิตในบ้านเราอยู่แล้ว google เลยช่วยได้เสมอ
ที่สุดแล้วก็เจอสวรรค์ครับ ค้นด้วยคำเดียวกับชื่อหัวข้อนี้แหละ
เลยได้พบ blog ดีๆ อีกที่นึง ก็คือ Created By Tee
เป็นผลงานของคุณ Piti Ongmongkolkul
(ไม่กล้าเปลี่ยนเป็นไทย กลัวสะกดนามสกุลเค้าผิด)

วิธีใช้ก็สุดจะง่าย แค่ include ไฟล์ bahtText.php ที่เค้าทำไว้
แล้วก็เรียกใช้ฟังค์ชั่น bahtText(‘ตัวเลข’); ได้เลย
ลองดูแล้ว ข้อจำกัดเดียวที่เจอก็คือไม่อนุญาตให้ใส่ตัวเลขในรูปแบบมีจุลภาค (x,xxx)
เวลาจะใช้ก็จัดฟอร์แมทให้มันไม่มีลูกน้ำซะก่อนก็พอ

ดูต้นฉบับได้ที่ php bahtText เลยครับ
เค้าเขียนไว้ละเอียดดี งานนี้เลยไม่ต้อง re-invent the wheel 🙂

***UPDATE 21 July, 2006***

มีอีกเวอร์ชั่นนึงมาให้ดูครับ คุณอานนท์ ทองเต็ม ส่งโค้ดมาให้ช่วยแจก
แก้ปัญหาเรื่องจุลภาคมาให้ด้วย ไฟล์เล็กดีครับ
วิธีใช้เหมือนกัน แต่ชื่อฟังค์ชั่นต่างกันนิดหน่อยตรงที่เป็นตัวเล็กหมด เป็น bahttext(‘ตัวเลข’)
ลองเอาไปใช้กันได้ครับ ถ้ามี bug ก็แจ้งไปที่ hypermale(at)hotmail(dot)com ได้เลย