/**
  * Useronline
  *
  * @param array $query_string
  */
 public function index(Request $request)
 {
     // ตรวจสอบ Referer
     if ($request->initSession() && $request->isReferer()) {
         // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง
         define('MAIN_INIT', __FILE__);
         // เวลาปัจจุบัน
         $time = time();
         // sesssion ปัจจุบัน
         $session_id = session_id();
         // เวลาหมดอายุ
         $validtime = $time - self::$cfg->counter_gap;
         // ตาราง useronline
         $useronline = $this->getFullTableName('useronline');
         // ลบคนที่หมดเวลาและตัวเอง
         $this->db()->delete($useronline, array(array('time', '<', $validtime), array('session', $session_id)), 0, 'OR');
         // เพิ่มตัวเอง
         $save = array('time' => $time, 'session' => $session_id, 'ip' => $request->getClientIp());
         $login = Login::isMember();
         if ($login) {
             $save['member_id'] = (int) $login['id'];
             $save['displayname'] = $login['displayname'] == '' ? $login['email'] : $login['displayname'];
         }
         $this->db()->insert($useronline, $save);
         // คืนค่า user online
         $ret = array('time' => $time);
         // โหลด useronline ของ module
         $dir = ROOT_PATH . 'modules/';
         $f = @opendir($dir);
         if ($f) {
             while (false !== ($text = readdir($f))) {
                 if ($text != "." && $text != "..") {
                     if (is_dir($dir . $text)) {
                         if (is_file($dir . $text . '/controllers/useronline.php')) {
                             include $dir . $text . '/controllers/useronline.php';
                             $class = ucfirst($text) . '\\Useronline\\Controller';
                             if (method_exists($class, 'index')) {
                                 $ret = createClass($class)->index($ret);
                             }
                         }
                     }
                 }
             }
             closedir($f);
         }
         // คืนค่า JSON
         echo json_encode($ret);
     }
 }
 public function chklogin(Request $request)
 {
     $data = $request->post('data')->toString();
     if (!empty($data) && $request->initSession() && $request->isSafe()) {
         // สุ่มรหัสผ่านใหม่
         $login_password = Text::rndname(6);
         // ข้อมูลที่ส่งมา
         $facebook_data = array();
         foreach (explode('&', $data) as $item) {
             list($k, $v) = explode('=', $item);
             if ($k === 'gender') {
                 $facebook_data['sex'] = $v === 'male' ? 'm' : 'f';
             } elseif ($k === 'link') {
                 $facebook_data['website'] = str_replace(array('http://', 'https://', 'www.'), '', $v);
             } elseif ($k === 'first_name') {
                 $facebook_data['fname'] = $v;
                 $facebook_data['displayname'] = $v;
             } elseif ($k === 'last_name') {
                 $facebook_data['lname'] = $v;
             } elseif ($k === 'email') {
                 $facebook_data['email'] = $v;
             } elseif ($k === 'id') {
                 $fb_id = $v;
             } elseif ($k === 'birthday' && preg_match('/^([0-9]+)[\\/\\-]([0-9]+)[\\/\\-]([0-9]+)$/', $v, $match)) {
                 $facebook_data['birthday'] = "{$match['3']}-{$match['1']}-{$match['2']}";
             }
         }
         // ไม่มีอีเมล์ ใช้ id ของ Facebook
         if (empty($facebook_data['email'])) {
             $facebook_data['email'] = $fb_id;
         }
         // db
         $db = $this->db();
         // table
         $user_table = $this->getFullTableName('user');
         // ตรวจสอบสมาชิกกับ db
         $search = $db->createQuery()->from('user')->where(array('email', $facebook_data['email']), array('displayname', $facebook_data['displayname']), 'OR')->toArray()->first('id', 'email', 'visited', 'fb', 'website');
         if ($search === false) {
             // ยังไม่เคยลงทะเบียน, ลงทะเบียนใหม่
             $facebook_data['id'] = $db->getNextId($this->getTableName('user'));
             $facebook_data['fb'] = 1;
             $facebook_data['subscrib'] = 1;
             $facebook_data['visited'] = 0;
             $facebook_data['ip'] = $request->getClientIp();
             $facebook_data['password'] = md5($login_password . $facebook_data['email']);
             $facebook_data['lastvisited'] = time();
             $facebook_data['create_date'] = $facebook_data['lastvisited'];
             $facebook_data['icon'] = $facebook_data['id'] . '.jpg';
             $facebook_data['country'] = 'TH';
             $db->insert($user_table, $facebook_data);
         } elseif ($search['fb'] == 1) {
             // facebook เคยเยี่ยมชมแล้ว อัปเดทการเยี่ยมชม
             $facebook_data['visited'] = $search['visited'] + 1;
             $facebook_data['lastvisited'] = time();
             $facebook_data['ip'] = $request->getClientIp();
             $facebook_data['password'] = md5($login_password . $search['email']);
             $db->update($user_table, $search['id'], $facebook_data);
         } else {
             // ไม่สามารถ login ได้ เนื่องจากมี email อยู่ก่อนแล้ว
             $facebook_data = false;
             $ret['alert'] = str_replace(':name', Language::get('User'), Language::get('This :name is already registered'));
             $ret['isMember'] = 0;
         }
         if (is_array($facebook_data)) {
             // อัปเดท icon สมาชิก
             $data = @file_get_contents('https://graph.facebook.com/' . $fb_id . '/picture');
             if ($data) {
                 $f = @fopen(ROOT_PATH . self::$cfg->usericon_folder . $facebook_data['icon'], 'wb');
                 if ($f) {
                     fwrite($f, $data);
                     fclose($f);
                 }
             }
             // login
             $facebook_data['password'] = $login_password;
             $_SESSION['login'] = $facebook_data;
             // clear
             $request->removeToken();
             // reload
             $ret['isMember'] = 1;
             $u = $request->post('u')->toString();
             if (preg_match('/module=(do)?login/', $u) || preg_match('/(do)?login\\.html/', $u)) {
                 $ret['location'] = 'back';
             } else {
                 $ret['location'] = 'reload';
             }
         }
         // คืนค่าเป็น json
         echo json_encode($ret);
     }
 }