/**
  * แสดงผลหน้าหลักเว็บไซต์
  *
  * @param Request $request
  */
 public function index(Request $request)
 {
     // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง
     define('MAIN_INIT', __FILE__);
     // session cookie
     $request->initSession();
     // ตรวจสอบการ login
     Login::create();
     // กำหนด skin ให้กับ template
     Template::init($request->get('skin', self::$cfg->skin)->toString());
     // backend
     Gcms::$view = new \Kotchasan\View();
     if ($login = Login::adminAccess()) {
         // โหลดโมดูลที่ติดตั้งแล้ว
         \Index\Index\Model::installedmodules();
         // Controller หลัก
         $main = new \Index\Main\Controller();
     } else {
         // forgot or login
         if ($request->request('action')->toString() === 'forgot') {
             $main = new \Index\Forgot\Controller();
         } else {
             $main = new \Index\Login\Controller();
         }
     }
     $languages = array();
     $uri = $request->getUri();
     foreach (array_merge(self::$cfg->languages, Language::installedLanguage()) as $i => $item) {
         $languages[$item] = '<a id=lang_' . $item . ' href="' . $uri->withParams(array('lang' => $item), true) . '" title="{LNG_Language} ' . strtoupper($item) . '" style="background-image:url(' . WEB_URL . 'language/' . $item . '.gif)" tabindex=1>&nbsp;</a>';
     }
     // เนื้อหา
     Gcms::$view->setContents(array('/{MAIN}/' => $main->execute($request), '/{VERSION}/' => self::$cfg->version, '/{LANGUAGES}/' => implode('', $languages), '/{TITLE}/' => $main->title() . ' (Admin)', '/{BACKURL(\\?([a-zA-Z0-9=&\\-_@\\.]+))?}/e' => '\\Kotchasan\\View::back'));
     if ($login) {
         $name = trim($login['fname'] . ' ' . $login['lname']);
         Gcms::$view->setContents(array('/{LOGINID}/' => $login['id'], '/{LOGINNAME}/' => empty($name) ? $login['email'] : $name, '/{STATUS}/' => $login['status'], '/{MENUS}/' => \Index\Menu\View::render()));
     }
     // ส่งออก เป็น HTML
     $response = new Response();
     $response->withContent(Gcms::$view->renderHTML())->send();
 }
 /**
  * ฟังก์ชั่นส่งอีเมล์
  */
 public function save()
 {
     $ret = array();
     // referer, session, member
     if (self::$request->initSession() && self::$request->isSafe() && ($login = Login::adminAccess())) {
         if ($login['email'] == 'demo') {
             $ret['alert'] = Language::get('Unable to complete the transaction');
         } else {
             // รับค่าจากการ POST
             $save = array('reciever' => self::$request->post('reciever')->toString(), 'from' => self::$request->post('from')->toString(), 'subject' => self::$request->post('subject')->topic(), 'detail' => self::$request->post('detail')->toString());
             // ตรวจสอบค่าที่ส่งมา
             $input = false;
             // reciever
             if (!empty($save['reciever'])) {
                 foreach (explode(',', $save['reciever']) as $item) {
                     if (!Validator::email($item)) {
                         if (!$input) {
                             $input = 'reciever';
                             break;
                         }
                     }
                 }
             } else {
                 $ret['reciever'] = '';
             }
             // subject
             if (empty($save['subject'])) {
                 $input = !$input ? 'subject' : $input;
             } else {
                 $ret['ret_subject'] = '';
             }
             // from
             if (Login::isAdmin()) {
                 if ($save['from'] == self::$cfg->noreply_email) {
                     $save['from'] = self::$cfg->noreply_email . '<' . strip_tags(self::$cfg->web_title) . '>';
                 } else {
                     $user = $this->db()->createQuery()->from('user')->where(array('email', $save['from']))->first('email', 'displayname');
                     if ($user) {
                         $save['from'] = $user->email . (empty($user->displayname) ? '' : '<' . $user->displayname . '>');
                     } else {
                         // ไม่พบผู้ส่ง ให้ส่งโดยตัวเอง
                         $save['from'] = $login['email'];
                     }
                 }
             } else {
                 // ไม่ใช่แอดมิน ผู้ส่งเป็นตัวเองเท่านั้น
                 $save['from'] = $login['email'];
             }
             // detail
             $patt = array('/^(&nbsp;|\\s){0,}<br[\\s\\/]+?>(&nbsp;|\\s){0,}$/iu' => '', '/<\\?(.*?)\\?>/su' => '', '@<script[^>]*?>.*?</script>@siu' => '');
             $save['detail'] = trim(preg_replace(array_keys($patt), array_values($patt), $save['detail']));
             if (!$input) {
                 $err = Email::send($save['reciever'], $save['from'], $save['subject'], $save['detail']);
                 if (empty($err)) {
                     // ส่งอีเมล์สำเร็จ
                     $ret['alert'] = Language::get('Your message was sent successfully');
                     $ret['location'] = self::$request->getUri()->postBack('index.php', array('id' => 0));
                 } else {
                     // ข้อผิดพลาดการส่งอีเมล์
                     $ret['alert'] = $err;
                 }
                 // clear
                 self::$request->removeToken();
             } else {
                 // คืนค่า input ตัวแรกที่ error
                 $ret['input'] = $input;
             }
         }
     } else {
         $ret['alert'] = Language::get('Unable to complete the transaction');
     }
     // คืนค่าเป็น JSON
     echo json_encode($ret);
 }