/** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context */ public function log($level, $message, array $context = array()) { $patt = array('datetime' => date($this->options['dateFormat'], time()), 'level' => isset($this->logLevels[$level]) ? strtoupper($level) : 'UNKNOW', 'message' => $message, 'context' => empty($context) ? '' : json_encode($context)); $message = $this->options['logFormat']; foreach ($patt as $key => $value) { $message = str_replace('{' . $key . '}', $value, $message); } $message = "\n" . preg_replace('/[\\s\\n\\t\\r]+/', ' ', $message); if (File::makeDirectory($this->options['logFilePath'])) { // ไฟล์ log switch ($level) { case LogLevel::DEBUG: case LogLevel::INFO: case LogLevel::ALERT: $file = $this->options['logFilePath'] . date('Y-m-d') . '.' . $this->options['extension']; break; default: $file = $this->options['logFilePath'] . 'error_log.' . $this->options['extension']; break; } // save if (file_exists($file)) { $f = @fopen($file, 'a'); } else { $f = @fopen($file, 'w'); if ($f && $this->options['extension'] == 'php') { fwrite($f, '<' . '?php exit() ?' . '>'); } } if ($f) { fwrite($f, $message); fclose($f); } else { printf(Language::get('File %s cannot be created or is read-only.'), 'log'); } } else { printf(Language::get('Directory %s cannot be created or is read-only.'), 'logs/'); echo $message; } }
/** * class constructor * * @throws Exception */ public function __construct() { $this->cache_expire = self::$cfg->get('cache_expire', 0); if (!empty($this->cache_expire)) { // folder cache $dir = ROOT_PATH . DATA_FOLDER . 'cache/'; if (!File::makeDirectory($dir)) { throw new Exception('Folder ' . DATA_FOLDER . 'cache/ cannot be created.'); } $this->cache_dir = $dir; // clear old cache every day $d = is_file($dir . 'index.php') ? file_get_contents($dir . 'index.php') : 0; if ($d != date('d')) { $this->clear(); $f = @fopen($dir . 'index.php', 'wb'); if ($f === false) { throw new Exception('File ' . DATA_FOLDER . 'cache/index.php cannot be written.'); } else { fwrite($f, date('d')); fclose($f); } } } }
/** * บันทึก */ public function save(Request $request) { $ret = array(); // referer, session, member if ($request->initSession() && $request->isReferer() && ($login = Login::isMember())) { if ($login['email'] == 'demo') { $ret['alert'] = Language::get('Unable to complete the transaction'); } else { // รับค่าจากการ POST $save = array(); foreach ($request->getParsedBody() as $key => $value) { $k = str_replace('register_', '', $key); switch ($k) { case 'phone1': case 'phone2': case 'provinceID': case 'zipcode': $save[$k] = $request->post($key)->number(); break; case 'sex': $save['sex'] = $request->post('register_sex')->topic(); $save['subscrib'] = $request->post('register_subscrib')->toBoolean(); break; case 'displayname': case 'fname': case 'lname': case 'address1': case 'address2': case 'province': case 'country': $save[$k] = $request->post($key)->topic(); break; case 'website': $save[$k] = str_replace(array('http://', 'https://', 'ftp://'), array('', '', ''), $request->post($key)->url()); break; case 'subscrib': $save[$k] = $request->post($key)->toBoolean(); break; case 'birthday': $save[$k] = $request->post($key)->date(); break; case 'password': case 'repassword': ${$k} = $request->post($key)->text(); break; } } // ชื่อตาราง user $user_table = $this->getFullTableName('user'); // database connection $db = $this->db(); // ตรวจสอบค่าที่ส่งมา $user = $db->first($user_table, $request->post('register_id')->toInt()); if (!$user) { // ไม่พบสมาชิกที่แก้ไข $ret['alert'] = Language::get('not a registered user'); } else { $input = false; // ชื่อเล่น if (isset($save['displayname'])) { if (mb_strlen($save['displayname']) < 2) { $ret['ret_register_displayname'] = Language::get('Name for the show on the site at least 2 characters'); $input = !$input ? 'register_displayname' : $input; } elseif (in_array($save['displayname'], self::$cfg->member_reserv)) { $ret['ret_register_displayname'] = Language::get('Invalid name'); $input = !$input ? 'register_displayname' : $input; } else { // ตรวจสอบ displayname ซ้ำ $search = $db->first($user_table, array('displayname', $save['displayname'])); if ($search !== false && $user->id != $search->id) { $ret['ret_register_displayname'] = str_replace(':name', Language::get('Name'), Language::get('This :name is already registered')); $input = !$input ? 'register_displayname' : $input; } else { $ret['ret_register_displayname'] = ''; } } } // ชื่อ นามสกุล if (!empty($save['fname']) || !empty($save['lname'])) { $search = $db->first($user_table, array(array('fname', $save['fname']), array('lname', $save['lname']))); if ($search !== false && $user->id != $search->id) { $ret['ret_register_fname'] = str_replace(':name', Language::get('Name') . ' ' . Language::get('Surname'), Language::get('This :name is already registered')); $input = !$input ? 'register_fname' : $input; } else { $ret['ret_register_fname'] = ''; } } // โทรศัพท์ if (!empty($save['phone1'])) { if (!preg_match('/[0-9]{9,10}/', $save['phone1'])) { $ret['ret_register_phone1'] = str_replace(':name', Language::get('phone number'), Language::get('Invalid :name')); $input = !$input ? 'register_phone1' : $input; } else { // ตรวจสอบโทรศัพท์ $search = $db->first($user_table, array('phone1', $save['phone1'])); if ($search !== false && $user->id != $search->id) { $ret['ret_register_phone1'] = str_replace(':name', Language::get('phone number'), Language::get('This :name is already registered')); $input = !$input ? 'register_phone1' : $input; } else { $ret['ret_register_phone1'] = ''; } } } // แก้ไขรหัสผ่าน if ($user->fb == 0 && (!empty($password) || !empty($repassword))) { if (mb_strlen($password) < 4) { // รหัสผ่านต้องไม่น้อยกว่า 4 ตัวอักษร $ret['ret_register_password'] = Language::get('Passwords must be at least four characters'); $input = !$input ? 'register_password' : $input; } elseif ($repassword != $password) { // ถ้าต้องการเปลี่ยนรหัสผ่าน กรุณากรอกรหัสผ่านสองช่องให้ตรงกัน $ret['ret_register_repassword'] = Language::get('To change your password, enter your password to match the two inputs'); $input = !$input ? 'register_repassword' : $input; } else { // password ใหม่ถูกต้อง $save['password'] = md5($password . $user->email); $ret['ret_register_password'] = ''; $ret['ret_register_repassword'] = ''; } } // อัปโหลดไฟล์ foreach ($request->getUploadedFiles() as $item => $file) { if ($file->hasUploadFile()) { $item = str_replace('register_', '', $item); if (!File::makeDirectory(ROOT_PATH . self::$cfg->usericon_folder)) { // ไดเรคทอรี่ไม่สามารถสร้างได้ $ret['ret_register_' . $item] = sprintf(Language::get('Directory %s cannot be created or is read-only.'), self::$cfg->usericon_folder); $input = !$input ? 'ret_register_' . $item : $input; } else { if (!empty($user->icon)) { // ลบไฟล์เดิม @unlink(ROOT_PATH . self::$cfg->usericon_folder . $user->icon); } try { // อัปโหลด thumbnail $save['icon'] = $user->id . '.jpg'; $file->cropImage(self::$cfg->user_icon_typies, ROOT_PATH . self::$cfg->usericon_folder . $save['icon'], self::$cfg->user_icon_w, self::$cfg->user_icon_h); } catch (\Exception $exc) { // ไม่สามารถอัปโหลดได้ $ret['ret_register_' . $item] = Language::get($exc->getMessage()); $input = !$input ? 'ret_register_' . $item : $input; } } } } if (!empty($save)) { if (!$input) { // save $db->update($user_table, $user->id, $save); // เปลี่ยน password ที่ login ใหม่ if (!empty($save['password'])) { $_SESSION['login']['password'] = $password; } // คืนค่า $ret['alert'] = Language::get('Saved successfully'); $ret['location'] = 'index.php?module=editprofile&tab=' . $request->post('tab')->toString(); } else { // error $ret['input'] = $input; } } } } } else { $ret['alert'] = Language::get('Unable to complete the transaction'); } // คืนค่าเป็น JSON if (!empty($ret)) { echo json_encode($ret); } }
/** * บันทึก */ public function save(Request $request) { $ret = array(); // referer, session, member if ($request->initSession() && $request->isReferer() && ($login = Login::isMember())) { if ($login['email'] == 'demo' || !empty($login['fb'])) { $ret['alert'] = Language::get('Unable to complete the transaction'); } else { // รับค่าจากการ POST $save = array('email' => $request->post('register_email')->url(), 'displayname' => $request->post('register_displayname')->topic(), 'sex' => $request->post('register_sex')->topic(), 'website' => str_replace(array('http://', 'https://', 'ftp://'), array('', '', ''), $request->post('register_website')->url()), 'pname' => $request->post('register_pname')->topic(), 'fname' => $request->post('register_fname')->topic(), 'lname' => $request->post('register_lname')->topic(), 'company' => $request->post('register_company')->topic(), 'phone1' => $request->post('register_phone1')->number(), 'phone2' => $request->post('register_phone2')->number(), 'subscrib' => $request->post('register_subscrib')->toBoolean(), 'address1' => $request->post('register_address1')->topic(), 'address2' => $request->post('register_address2')->topic(), 'provinceID' => $request->post('register_provinceID')->number(), 'province' => $request->post('register_province')->topic(), 'zipcode' => $request->post('register_zipcode')->number(), 'country' => $request->post('register_country')->topic(), 'status' => $request->post('register_status')->toInt(), 'birthday' => $request->post('register_birthday')->date(), 'admin_access' => $request->post('register_admin_access')->toBoolean()); // ชื่อตาราง user $user_table = $this->getFullTableName('user'); // database connection $db = $this->db(); // ตรวจสอบค่าที่ส่งมา $id = $request->post('register_id')->toInt(); if ($id == 0) { // ใหม่ $user = (object) array('id' => 0, 'email' => '', 'fb' => 0); } else { // แก้ไข $user = $db->first($user_table, $id); } if (!$user) { // ไม่พบสมาชิกที่แก้ไข $ret['alert'] = Language::get('not a registered user'); } else { $isAdmin = Login::isAdmin(); // ไม่ใช่แอดมิน ใช้อีเมล์เดิมจากฐานข้อมูล if (!$isAdmin && $user->id > 0) { $save['email'] = $user->email; } // ตรวจสอบค่าที่ส่งมา $input = false; $requirePassword = false; // อีเมล์ if (empty($save['email'])) { $ret['ret_register_email'] = 'this'; $input = !$input ? 'register_email' : $input; } else { // ตรวจสอบอีเมล์ซ้ำ $search = $db->first($user_table, array('email', $save['email'])); if ($search !== false && $user->id != $search->id) { $ret['ret_register_email'] = str_replace(':name', Language::get('Email'), Language::get('This :name is already registered')); $input = !$input ? 'register_email' : $input; } else { $requirePassword = $user->email !== $save['email']; $ret['ret_register_email'] = ''; } } // ชื่อเรียก if (!empty($save['displayname'])) { // ตรวจสอบ ชื่อเรียก $search = $db->first($user_table, array('displayname', $save['displayname'])); if ($search !== false && $user->id != $search->id) { $ret['ret_register_displayname'] = str_replace(':name', Language::get('Name'), Language::get('This :name is already registered')); $input = !$input ? 'register_displayname' : $input; } else { $ret['ret_register_displayname'] = ''; } } // โทรศัพท์ if (!empty($save['phone1'])) { if (!preg_match('/[0-9]{9,10}/', $save['phone1'])) { $ret['ret_register_phone1'] = str_replace(':name', Language::get('phone number'), Language::get('Invalid :name')); $input = !$input ? 'register_phone1' : $input; } else { // ตรวจสอบโทรศัพท์ $search = $db->first($user_table, array('phone1', $save['phone1'])); if ($search !== false && $user->id != $search->id) { $ret['ret_register_phone1'] = str_replace(':name', Language::get('phone number'), Language::get('This :name is already registered')); $input = !$input ? 'register_phone1' : $input; } else { $ret['ret_register_phone1'] = ''; } } } // password $password = $request->post('register_password')->topic(); $repassword = $request->post('register_repassword')->topic(); if (!empty($password) || !empty($repassword)) { if (mb_strlen($password) < 4) { // รหัสผ่านต้องไม่น้อยกว่า 4 ตัวอักษร $ret['ret_register_password'] = '******'; $input = !$input ? 'register_password' : $input; } elseif ($repassword != $password) { // ถ้าต้องการเปลี่ยนรหัสผ่าน กรุณากรอกรหัสผ่านสองช่องให้ตรงกัน $ret['ret_register_repassword'] = '******'; $input = !$input ? 'register_repassword' : $input; } else { $ret['ret_register_password'] = ''; $ret['ret_register_repassword'] = ''; $save['password'] = md5($password . $save['email']); $requirePassword = false; } } // มีการเปลี่ยน email ต้องการรหัสผ่าน if (!$input && $requirePassword) { $ret['ret_register_password'] = '******'; $input = !$input ? 'register_password' : $input; } // อัปโหลดไฟล์ foreach ($request->getUploadedFiles() as $item => $file) { if ($file->hasUploadFile()) { if (!File::makeDirectory(ROOT_PATH . self::$cfg->usericon_folder)) { // ไดเรคทอรี่ไม่สามารถสร้างได้ $ret['ret_' . $item] = sprintf(Language::get('Directory %s cannot be created or is read-only.'), self::$cfg->usericon_folder); $input = !$input ? $item : $input; } else { if (!empty($user->icon)) { // ลบไฟล์เดิม @unlink(ROOT_PATH . self::$cfg->usericon_folder . $user->icon); } try { // อัปโหลด thumbnail $save['icon'] = $user->id . '.jpg'; $file->cropImage(self::$cfg->user_icon_typies, ROOT_PATH . self::$cfg->usericon_folder . $save['icon'], self::$cfg->user_icon_w, self::$cfg->user_icon_h); } catch (\Exception $exc) { // ไม่สามารถอัปโหลดได้ $ret['ret_' . $item] = Language::get($exc->getMessage()); $input = !$input ? $item : $input; } } } } if (!$input) { // ไม่ใช่แอดมิน if (!$isAdmin) { unset($save['status']); unset($save['point']); unset($save['admin_access']); } // social ห้ามแก้ไข if (!empty($user->fb)) { unset($save['email']); unset($save['password']); } if ($login['id'] == $id || $id == 1) { unset($save['admin_access']); } // บันทึก if ($id == 0) { // ใหม่ $id = $db->insert($user_table, $save); // ไปหน้ารายการสมาชิก $ret['location'] = $request->getUri()->postBack('index.php', array('module' => 'member', 'id' => null, 'page' => null)); } else { // แก้ไข $db->update($user_table, $id, $save); if ($login['id'] == $id) { // ตัวเอง if (isset($save['password'])) { if (isset($save['email'])) { $_SESSION['login']['email'] = $save['email']; } $_SESSION['login']['password'] = $password; } // reload หน้าเว็บ $ret['location'] = 'reload'; } else { // กลับไปหน้าก่อนหน้า $ret['location'] = $request->getUri()->postBack('index.php', array('id' => null)); } } // คืนค่า $ret['alert'] = Language::get('Saved successfully'); } else { // error $ret['input'] = $input; } } } } else { $ret['alert'] = Language::get('Unable to complete the transaction'); } // คืนค่าเป็น JSON if (!empty($ret)) { echo json_encode($ret); } }
/** * save config */ public function save() { $ret = array(); // referer, session, member if (self::$request->initSession() && self::$request->isReferer() && ($login = Login::isAdmin())) { if ($login['email'] == 'demo') { $ret['alert'] = Language::get('Unable to complete the transaction'); } else { // โหลด config $config = Config::load(ROOT_PATH . 'settings/config.php'); // รับค่าจากการ POST $save = array('delete_logo' => self::$request->post('delete_logo')->toBoolean(), 'delete_bg_image' => self::$request->post('delete_bg_image')->toBoolean(), 'bg_color' => self::$request->post('bg_color')->color()); // ตรวจสอบค่าที่ส่งมา $input = false; // อัปโหลดไฟล์ foreach (self::$request->getUploadedFiles() as $item => $file) { if ($save['delete_' . $item] == 1) { // ลบรูปภาพ if (isset($config->{$item}) && is_file(ROOT_PATH . DATA_FOLDER . 'image/' . $config->{$item})) { @unlink(ROOT_PATH . DATA_FOLDER . 'image/' . $config->{$item}); unset($config->{$item}); } } elseif ($file->hasUploadFile()) { // ชนิดของไฟล์ที่ยอมรับ $typies = $item == 'logo' ? array('jpg', 'gif', 'png', 'swf') : array('jpg', 'gif', 'png'); if (!$file->validFileExt($typies)) { // ชนิดของไฟล์ไม่รองรับ $ret['ret_' . $item] = Language::get('The type of file is invalid'); $input = !$input ? $item : $input; } elseif (!File::makeDirectory(ROOT_PATH . DATA_FOLDER . 'image/')) { // ไดเรคทอรี่ไม่สามารถสร้างได้ $ret['ret_' . $item] = sprintf(Language::get('Directory %s cannot be created or is read-only.'), DATA_FOLDER . 'image/'); $input = !$input ? $item : $input; } else { try { $ext = $file->getClientFileExt(); $file->moveTo(ROOT_PATH . DATA_FOLDER . 'image/' . $item . '.' . $ext); $config->{$item} = $item . '.' . $ext; } catch (\Exception $exc) { // ไม่สามารถอัปโหลดได้ $ret['ret_' . $item] = Language::get($exc->getMessage()); $input = !$input ? $item : $input; } } } } // bg_color if (empty($save['bg_color']) || !preg_match('/^\\#[0-9A-Fa-f]{4,6}$/', $save['bg_color'])) { unset($config->bg_color); } else { $config->bg_color = strtoupper($save['bg_color']); } if (!$input) { // save config if (Config::save($config, ROOT_PATH . 'settings/config.php')) { $ret['alert'] = Language::get('Saved successfully'); $ret['location'] = 'reload'; } else { $ret['alert'] = sprintf(Language::get('File %s cannot be created or is read-only.'), 'settings/config.php'); } } else { // คืนค่า input ที่ error $ret['input'] = $input; } } } else { $ret['alert'] = Language::get('Unable to complete the transaction'); } // คืนค่าเป็น JSON echo json_encode($ret); }
/** * form submit */ public function save() { $ret = array(); // referer, session, member if (self::$request->initSession() && self::$request->isReferer() && ($login = Login::isAdmin())) { if ($login['email'] == 'demo') { $ret['alert'] = Language::get('Unable to complete the transaction'); } else { // โหลด config $config = Config::load(ROOT_PATH . 'settings/config.php'); // ตรวจสอบค่าที่ส่งมา $input = false; // อัปโหลดไฟล์ foreach (self::$request->getUploadedFiles() as $item => $file) { if (self::$request->post('delete_' . $item)->toBoolean() == 1) { // ลบรูปภาพ if (is_file(ROOT_PATH . DATA_FOLDER . 'image/facebook_photo.jpg')) { @unlink(ROOT_PATH . DATA_FOLDER . 'image/facebook_photo.jpg'); } } elseif (!File::makeDirectory(ROOT_PATH . DATA_FOLDER . 'image/')) { // ไดเรคทอรี่ไม่สามารถสร้างได้ $ret['ret_' . $item] = sprintf(Language::get('Directory %s cannot be created or is read-only.'), DATA_FOLDER . 'image/'); $input = !$input ? $item : $input; } elseif ($file->hasUploadFile()) { // ตรวจสอบไฟล์อัปโหลด if (!$file->validFileExt(array('jpg'))) { $ret['ret_' . $item] = Language::get('The type of file is invalid'); $input = !$input ? $item : $input; } else { try { $file->moveTo(ROOT_PATH . DATA_FOLDER . 'image/' . $item . '.jpg'); } catch (\Exception $exc) { // ไม่สามารถอัปโหลดได้ $ret['ret_' . $item] = Language::get($exc->getMessage()); $input = !$input ? $item : $input; } } } } // other foreach (array('google_site_verification', 'google_profile', 'msvalidate', 'facebook_appId') as $item) { $value = self::$request->post($item)->text(); if (empty($value)) { unset($config->{$item}); } else { $config->{$item} = $value; } } if (!$input) { // save config if (Config::save($config, ROOT_PATH . 'settings/config.php')) { $ret['alert'] = Language::get('Saved successfully'); $ret['location'] = 'reload'; } else { $ret['alert'] = sprintf(Language::get('File %s cannot be created or is read-only.'), 'settings/config.php'); } } else { // คืนค่า input ที่ error $ret['input'] = $input; } } } else { $ret['alert'] = Language::get('Unable to complete the transaction'); } // คืนค่าเป็น JSON echo json_encode($ret); }
/** * Initial Counter & Useronline */ public static function init() { if (defined('MAIN_INIT')) { // วันนี้ $y = (int) date('Y'); $m = (int) date('m'); $d = (int) date('d'); // ตรวจสอบ ว่าเคยเยี่ยมชมหรือไม่ if (self::$request->cookie('counter_date')->toInt() != $d) { // เข้ามาครั้งแรกในวันนี้, บันทึก counter 1 วัน setCookie('counter_date', $d, time() + 3600 * 24, '/'); $new_visitor = true; } else { $new_visitor = false; } // โฟลเดอร์ของ counter $counter_dir = ROOT_PATH . DATA_FOLDER . 'counter'; // ตรวจสอบโฟลเดอร์ File::makeDirectory($counter_dir); // ตรวจสอบวันใหม่ $c = (int) @file_get_contents($counter_dir . '/index.php'); if ($d != $c) { $f = @fopen($counter_dir . '/index.php', 'wb'); if ($f) { fwrite($f, $d); fclose($f); } $f = @opendir($counter_dir); if ($f) { while (false !== ($text = readdir($f))) { if ($text != '.' && $text != '..') { if ($text != $y) { File::removeDirectory($counter_dir . "/{$text}"); } } } closedir($f); } } // ตรวจสอบ + สร้าง โฟลเดอร์ File::makeDirectory("{$counter_dir}/{$y}"); File::makeDirectory("{$counter_dir}/{$y}/{$m}"); // ip ปัจจุบัน $counter_ip = self::$request->getClientIp(); // session ปัจจุบัน $counter_ssid = session_id(); // วันนี้ $counter_day = date('Y-m-d'); // Model $model = new static(); $db = $model->db(); // อ่าน counter รายการล่าสุด $my_counter = $db->createQuery()->from('counter')->order('id DESC')->toArray()->first(); if (!$my_counter) { $my_counter = array('date' => '', 'counter' => 0); } if ($my_counter['date'] != $counter_day) { // วันใหม่ $my_counter['visited'] = 0; $my_counter['pages_view'] = 0; $my_counter['date'] = $counter_day; $new_day = true; // clear useronline $db->emptyTable($model->getFullTableName('useronline')); // clear visited_today $db->updateAll($model->getFullTableName('index'), array('visited_today' => 0)); } else { $new_day = false; } // บันทึกลง log $counter_log = "{$counter_dir}/{$y}/{$m}/{$d}.dat"; if (is_file($counter_log)) { // เปิดไฟล์เพื่อเขียนต่อ $f = @fopen($counter_log, 'ab'); } else { // สร้างไฟล์ log ใหม่ $f = @fopen($counter_log, 'wb'); } if ($f) { $data = $counter_ssid . chr(1) . $counter_ip . chr(1) . self::$request->server('HTTP_REFERER', '') . chr(1) . self::$request->server('HTTP_USER_AGENT', '') . chr(1) . date('H:i:s') . "\n"; fwrite($f, $data); fclose($f); } if ($new_visitor) { // ยังไม่เคยเยี่ยมชมในวันนี้ $my_counter['visited']++; $my_counter['counter']++; } $my_counter['pages_view']++; $my_counter['time'] = time(); if ($new_day) { unset($my_counter['id']); $db->insert($model->getFullTableName('counter'), $my_counter); } else { $db->update($model->getFullTableName('counter'), $my_counter['id'], $my_counter); } return $new_day; } else { // เรียก method โดยตรง new \Kotchasan\Http\NotFound('Do not call method directly'); } }