/** * มาจากการเรียกด้วย Ajax * * @param Request $request */ public function index(Request $request) { // ตรวจสอบ Referer if ($request->initSession() && $request->isReferer()) { // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง define('MAIN_INIT', __FILE__); // กำหนด skin ให้กับ template Template::init(self::$cfg->skin); // ค่าจาก POST $query_string = $request->getParsedBody(); // เรียก Class ที่กำหนด if (!empty($query_string['class']) && preg_match('/^[a-zA-Z0-9]+$/', $query_string['method']) && method_exists($query_string['class'], $query_string['method'])) { $method = $query_string['method']; createClass($query_string['class'])->{$method}($request->withQueryParams($query_string)); } } }
/** * บันทึก */ 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); } }
/** * GLoader * * @param Request $request */ public function index(Request $request) { // ตรวจสอบ Referer if ($request->initSession() && $request->isReferer()) { // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง define('MAIN_INIT', __FILE__); // ตรวจสอบการ login Login::create(); // กำหนด skin ให้กับ template Template::init(self::$cfg->skin); // counter และ useronline \Index\Counter\Model::init(); // View Gcms::$view = new \Index\Loader\View(); // โมดูลที่ติดตั้ง $dir = ROOT_PATH . 'modules/'; // โหลดโมดูลทั้งหมด foreach (\Index\Module\Model::getInstalledModule() as $owner) { if (is_file($dir . $owner . '/controllers/init.php')) { include $dir . $owner . '/controllers/init.php'; $class = ucfirst($owner) . '\\Init\\Controller'; if (method_exists($class, 'init')) { createClass($class)->init(); } } } // โหลด Init ของ Widgets $dir = ROOT_PATH . 'Widgets/'; $f = @opendir($dir); if ($f) { while (false !== ($text = readdir($f))) { if ($text != "." && $text != "..") { if (is_dir($dir . $text)) { if (is_file($dir . $text . '/Controllers/Init.php')) { include $dir . $text . '/Controllers/Init.php'; $class = 'Widgets\\' . ucfirst($text) . '\\Controllers\\Init'; if (method_exists($class, 'init')) { createClass($class)->init(); } } } } } closedir($f); } // หน้า home มาจากเมนูรายการแรก $home = Gcms::$menu->homeMenu(); if ($home) { $home->canonical = WEB_URL . 'index.php'; // breadcrumb หน้า home Gcms::$view->addBreadcrumb($home->canonical, $home->menu_text, $home->menu_tooltip, 'icon-home'); } // ตรวจสอบโมดูลที่เรียก $posts = $request->getParsedBody(); $modules = \Index\Module\Controller::get($posts); if (!empty($modules)) { // โหลดโมดูลที่เรียก $page = createClass($modules->className)->{$modules->method}($request->withQueryParams($posts), $modules->module); } if (empty($page)) { // ไม่พบหน้าที่เรียก (index) $page = createClass('Index\\PageNotFound\\Controller')->init($request, 'index'); } // output เป็น HTML $ret = array('db_elapsed' => round(microtime(true) - REQUEST_TIME, 4), 'db_quries' => \Kotchasan\Database\Driver::queryCount()); foreach ($page as $key => $value) { $ret[$key] = $value; } if (empty($ret['menu'])) { $ret['menu'] = $ret['module']; } $ret['detail'] = Gcms::$view->renderHTML($page->detail); echo json_encode($ret); } }
/** * บันทึก */ public function save(Request $request) { $ret = array(); // referer, session if ($request->initSession() && $request->isReferer()) { $antispam = new Antispam($request->post('register_antispamid')->toString()); if (!$antispam->valid($request->post('register_antispam')->toString())) { // Antispam ไม่ถูกต้อง $ret['ret_register_antispam'] = 'this'; $ret['input'] = 'register_antispam'; } else { // รับค่าจากการ POST $save = array(); foreach ($request->getParsedBody() as $key => $value) { $k = str_replace('register_', '', $key); switch ($k) { case 'email': $save['email'] = $request->post($key)->username(); break; case 'phone1': case 'idcard': $save[$k] = $request->post($key)->number(); break; case 'invite': $save[$k] = $request->post($key)->toInt(); break; case 'password': case 'repassword': case 'accept': case 'next': ${$k} = $request->post($key)->toString(); break; } } if ($accept === '1') { // ชื่อตาราง user $user_table = $this->getFullTableName('user'); // database connection $db = $this->db(); // ตรวจสอบค่าที่ส่งมา $input = false; // อีเมล์ if (empty($save['email'])) { $ret['ret_register_email'] = 'this'; $input = !$input ? 'register_email' : $input; } elseif (!Validator::email($save['email'])) { $ret['ret_register_email'] = str_replace(':name', Language::get('Email'), Language::get('Invalid :name')); $input = !$input ? 'register_email' : $input; } else { // ตรวจสอบอีเมล์ซ้ำ $search = $db->first($user_table, array('email', $save['email'])); if ($search !== false) { $ret['ret_register_email'] = str_replace(':name', Language::get('Email'), Language::get('This :name is already registered')); $input = !$input ? 'register_email' : $input; } else { $ret['ret_register_email'] = ''; } } // password 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 { $save['password'] = md5($password . $save['email']); $ret['ret_register_password'] = ''; $ret['ret_register_repassword'] = ''; } // phone1 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) { $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'] = ''; } } } elseif (self::$cfg->member_phone == 2) { $ret['ret_register_phone1'] = 'this'; $input = !$input ? 'register_phone1' : $input; } // idcard if (!empty($save['idcard'])) { if (!Validator::idCard($save['idcard'])) { $ret['ret_register_idcard'] = str_replace(':name', Language::get('Identification number'), Language::get('Invalid :name')); $input = !$input ? 'register_idcard' : $input; } else { // ตรวจสอบ idcard ซ้ำ $search = $db->first($user_table, array('idcard', $save['idcard'])); if ($search !== false) { $ret['ret_register_idcard'] = str_replace(':name', Language::get('Identification number'), Language::get('This :name is already registered')); $input = !$input ? 'register_idcard' : $input; } else { $ret['ret_register_idcard'] = ''; } } } elseif (self::$cfg->member_idcard == 2) { $ret['ret_idcard'] = 'this'; $input = !$input ? 'idcard' : $input; } // invite if (isset($save['invite'])) { $ret['ret_invite'] = ''; if (!empty($save['invite'])) { $search = $db->first($user_table, $save['invite']); if ($search === false) { $ret['ret_register_invite'] = str_replace(':name', Language::get('Invitation code'), Language::get('Invalid :name')); $input = !$input ? 'register_invite' : $input; } } } if (!$input) { $save['create_date'] = time(); $save['subscrib'] = 1; $save['status'] = 0; list($displayname, $domain) = explode('@', $save['email']); $save['displayname'] = $displayname; $a = 1; while (true) { if (false === $db->first($user_table, array('displayname', $save['displayname']))) { break; } else { $a++; $save['displayname'] = $displayname . $a; } } // รหัสยืนยัน $save['activatecode'] = empty(self::$cfg->user_activate) ? '' : Text::rndname(32); // บันทึกลงฐานข้อมูล $save['id'] = $db->insert($user_table, $save); // ส่งอีเมล์ $replace = array('/%EMAIL%/' => $save['email'], '/%PASSWORD%/' => $password, '/%ID%/' => $save['activatecode']); Email::send(empty(self::$cfg->user_activate) ? 2 : 1, 'member', $replace, $save['email']); if (empty(self::$cfg->user_activate)) { // login $save['password'] = $password; $_SESSION['login'] = $save; // แสดงข้อความตอบรับการสมัครสมาชิก $ret['alert'] = str_replace(':email', $save['email'], Language::get('Registration information sent to :email complete. We will take you to edit your profile')); // ถ้าไม่มีการกำหนดหน้าถัดไปมา ไปแก้ไขข้อมูลส่วนตัว $ret['location'] = isset($next) ? $next : WEB_URL . 'index.php?module=editprofile'; } else { // แสดงข้อความตอบรับการสมัครสมาชิก $ret['alert'] = str_replace(':email', $save['email'], Language::get('Register successfully, We have sent complete registration information to :email')); // ถ้าไม่มีการกำหนดหน้าถัดไปมา กลับไปหน้าหลักเว็บไซต์ $ret['location'] = isset($next) ? $next : WEB_URL . 'index.php'; } // clear antispam $antispam->delete(); } else { $ret['input'] = $input; } } } } // คืนค่าเป็น JSON if (!empty($ret)) { echo json_encode($ret); } }