1: <?php
2: /**
3: * @filesource Kotchasan/Config.php
4: *
5: * @copyright 2016 Goragod.com
6: * @license http://www.kotchasan.com/license/
7: *
8: * @see http://www.kotchasan.com/
9: */
10:
11: namespace Kotchasan;
12:
13: /**
14: * Class สำหรับการโหลด config
15: *
16: * @author Goragod Wiriya <admin@goragod.com>
17: *
18: * @since 1.0
19: */
20: class Config
21: {
22: /**
23: * กำหนดอายุของแคช (วินาที)
24: * 0 หมายถึงไม่มีการใช้งานแคช
25: *
26: * @var int
27: */
28: public $cache_expire = 0;
29: /**
30: * default charset
31: *
32: * @var string
33: */
34: public $char_set = 'UTF-8';
35: /**
36: * ชื่อของเมล์เซิร์ฟเวอร์ เช่น localhost หรือ smtp.gmail.com
37: *
38: * @var string
39: */
40: public $email_Host = 'localhost';
41: /**
42: * รหัสผ่าน mailserver
43: *
44: * @var string
45: */
46: public $email_Password = '';
47: /**
48: * หมายเลขพอร์ตของเมล์เซิร์ฟเวอร์ (ค่าปกติคือ 25, สำหรับ gmail ใช้ 465, 587 สำหรับ DirectAdmin)
49: *
50: * @var int
51: */
52: public $email_Port = 25;
53: /**
54: * กำหนดวิธีการตรวจสอบผู้ใช้สำหรับเมล์เซิร์ฟเวอร์
55: * ถ้ากำหนดเป็น true จะต้องระบุUser+Pasword ของ mailserver ด้วย
56: *
57: * @var bool
58: */
59: public $email_SMTPAuth = false;
60: /**
61: * โปรโตคอลการเข้ารหัส SSL สำหรับการส่งอีเมล เช่น ssl
62: *
63: * @var string
64: */
65: public $email_SMTPSecure = '';
66: /**
67: * ชื่อผู้ใช้ mailserver
68: *
69: * @var string
70: */
71: public $email_Username = '';
72: /**
73: * ระบุรหัสภาษาของอีเมลที่ส่ง เช่น tis-620
74: *
75: * @var string
76: */
77: public $email_charset = 'utf-8';
78: /**
79: * เลือกโปรแกรมที่ใช้ในการส่งอีเมลเป็น PHPMailer
80: *
81: * @var int
82: */
83: public $email_use_phpMailer = 1;
84: /**
85: * รายชื่อภาษาที่รองรับ
86: * ตามที่มีในโฟลเดอร์ language/
87: * เริ่มต้นคือ en (ภาษาอังกฤษ)
88: *
89: * @var array
90: */
91: public $languages = array('th');
92: /**
93: * รายชื่อฟิลด์จากตารางสมาชิก สำหรับตรวจสอบการ login
94: *
95: * @var array
96: */
97: public $login_fields = array('username');
98: /**
99: * ทีอยู่อีเมลใช้เป็นผู้ส่งจดหมาย สำหรับจดหมายที่ไม่ต้องการตอบกลับ เช่น no-reply@domain.tld
100: *
101: * @var string
102: */
103: public $noreply_email = '';
104: /**
105: * คีย์สำหรับการเข้ารหัสข้อความ
106: *
107: * @var string
108: */
109: public $password_key = '1234567890';
110: /**
111: * template ที่กำลังใช้งานอยู่ (ชื่อโฟลเดอร์)
112: *
113: * @var string
114: */
115: public $skin = 'default';
116: /**
117: * ตั้งค่าเขตเวลาของ Server ให้ตรงกันกับเวลาท้องถิ่น
118: * สำหรับ Server ที่อยู่ในประเทศไทยใช้ Asia/Bankok
119: *
120: * @var string
121: */
122: public $timezone = 'Asia/Bangkok';
123: /**
124: * คำอธิบายเกี่ยวกับเว็บไซต์
125: *
126: * @var string
127: */
128: public $web_description = 'PHP Framework พัฒนาโดยคนไทย';
129: /**
130: * ชื่อเว็บไซต์
131: *
132: * @var string
133: */
134: public $web_title = 'Kotchasan PHP Framework';
135: /**
136: * @var Singleton สำหรับเรียกใช้ class นี้เพียงครั้งเดียวเท่านั้น
137: */
138: private static $instance = null;
139:
140: /**
141: * เรียกใช้งาน Class แบบสามารถเรียกได้ครั้งเดียวเท่านั้น
142: *
143: * @return \static
144: */
145: public static function create()
146: {
147: if (null === self::$instance) {
148: self::$instance = new static();
149: }
150: return self::$instance;
151: }
152:
153: /**
154: * อ่านค่าตัวแปร และ แปลงผลลัพท์ตามชนิดของตัวแปรตามที่กำหนดโดย $default เช่น
155: * $default = 0 หรือ เลขจำนวนเต็ม ผลลัพท์จะถูกแปลงเป็น int
156: * $default = 0.0 หรือตัวเลขมีจุดทศนิยม จำนวนเงิน ผลลัพท์จะถูกแปลงเป็น double
157: * $default = true หรือ false ผลลัพท์จะถูกแปลงเป็น true หรือ false เท่านั้น
158: * คืนค่า ค่าตัวแปร $key ถ้าไม่พบคืนค่า $default
159: *
160: * @param string $key ชื่อตัวแปร
161: * @param mixed $default (option) ค่าเริ่มต้นหากไม่พบตัวแปร
162: *
163: * @return mixed
164: */
165: public function get($key, $default = '')
166: {
167: if (isset($this->{$key})) {
168: $result = $this->$key;
169: if (is_float($default)) {
170: // จำนวนเงิน เช่น 0.0
171: $result = (float) $result;
172: } elseif (is_int($default)) {
173: // เลขจำนวนเต็ม เช่น 0
174: $result = (int) $result;
175: } elseif (is_bool($default)) {
176: // true, false
177: $result = (bool) $result;
178: }
179: } else {
180: $result = $default;
181: }
182: return $result;
183: }
184:
185: /**
186: * โหลดไฟล์ config
187: *
188: * @param string $file ไฟล์ config (fullpath)
189: *
190: * @return object
191: */
192: public static function load($file)
193: {
194: $config = array();
195: if (is_file($file)) {
196: $config = include $file;
197: }
198: return (object) $config;
199: }
200:
201: /**
202: * บันทึกไฟล์ config ของโปรเจ็ค
203: * คืนค่า true ถ้าสำเร็จ
204: *
205: * @param array $config
206: * @param string $file ไฟล์ config (fullpath)
207: *
208: * @return bool
209: */
210: public static function save($config, $file)
211: {
212: $f = @fopen($file, 'wb');
213: if ($f !== false) {
214: if (!preg_match('/^.*\/([^\/]+)\.php?/', $file, $match)) {
215: $match[1] = 'config';
216: }
217: fwrite($f, '<'."?php\n/* $match[1].php */\nreturn ".var_export((array) $config, true).';');
218: fclose($f);
219: // หน่วงเวลาเล็กน้อย
220: sleep(1);
221: return true;
222: } else {
223: return false;
224: }
225: }
226:
227: /**
228: * เรียกใช้งาน Class แบบสามารถเรียกได้ครั้งเดียวเท่านั้น
229: *
230: * @return \static
231: */
232: protected function __construct()
233: {
234: if (is_file(ROOT_PATH.'settings/config.php')) {
235: $config = include ROOT_PATH.'settings/config.php';
236: if (is_array($config)) {
237: foreach ($config as $key => $value) {
238: $this->{$key} = $value;
239: }
240: }
241: }
242: if (ROOT_PATH != APP_PATH && is_file(APP_PATH.'settings/config.php')) {
243: $config = include APP_PATH.'settings/config.php';
244: if (is_array($config)) {
245: foreach ($config as $key => $value) {
246: $this->{$key} = $value;
247: }
248: }
249: }
250: }
251: }
252: