Example #1
0
 /**
  * ฟังก์ชั่นอ่านค่าเวลาในรูป mktime
  *
  * @param int $mktime (optional)
  * @return int คืนค่าเวลาในรูป mktime ถ้าระบุ $mktime ฟังก์ชั่นจะคืนค่านี้ ถ้าไม่ระบุมา จะคืนค่าเวลาปัจจุบัน
  */
 protected static function _mktime($mktime = 0)
 {
     if (!isset(self::$mktime)) {
         self::$mktime = mktime(date("H") + \Core\Gcms::get('config', 'hour', 0));
     }
     return empty($mktime) ? self::$mktime : $mktime;
 }
Example #2
0
 /**
  * แปลง path เป็น query string ตามที่กำหนดโดย $url_rules
  *
  * @param string path เช่น /a/b/c.html
  * @param pointer $modules คืนค่า query string ที่ตัวแปรนี้
  */
 public static function parseRoutes($path, &$modules)
 {
     if (preg_match('/^\\/(.*)((\\.html?)|\\/)$/u', str_replace(BASE_PATH, '', $path), $match)) {
         $my_path = $match[1];
     } else {
         if (preg_match('/^\\/(.*)$/u', str_replace(BASE_PATH, '', $path), $match)) {
             $my_path = $match[1];
         }
     }
     if (isset($my_path)) {
         /**
          * กฏของ Router สำหรับการแยกหน้าเว็บไซต์
          */
         $config = array('/^(css|js).*?/' => array('', 'return'), '/^((sys\\-)?admin).*?/' => array('', 'user'), '/^([0-9a-z\\-]+)\\/([a-z]+)\\/([0-9]+)\\/([0-9]+)(\\/(.*))?$/' => array('', 'user', 'module', 'cat', 'id', '', 'document'), '/^([a-z]+)\\/([0-9]+)\\/([0-9]+)(\\/(.*))?$/' => array('', 'module', 'cat', 'id', '', 'document'), '/^([0-9a-z\\-]+)\\/([a-z]+)\\/([0-9]+)(\\/(.*))?$/' => array('', 'user', 'module', 'cat', '', 'document'), '/^([a-z]+)\\/([0-9]+)(\\/(.*))?$/' => array('', 'module', 'cat', '', 'document'), '/^([0-9a-z\\-]+)\\/([a-z]+)(\\/(.*))?$/' => array('', 'user', 'module', '', 'document'), '/^([a-z]+)(\\/(.*))?$/' => array('', 'module', '', 'document'));
         foreach (\Core\Gcms::get('router', 'route_rules', $config) as $patt => $items) {
             if (preg_match($patt, $my_path, $match)) {
                 foreach ($items as $i => $key) {
                     if (!empty($key) && isset($match[$i])) {
                         $modules[$key] = $match[$i];
                     }
                 }
                 break;
             }
         }
     }
 }
Example #3
0
 /**
  * สร้างไฟล์ CSS
  *
  * @param mixed $params
  */
 public function render($param = null)
 {
     // header
     foreach (\Core\Gcms::get('header') as $key => $value) {
         header("{$key}: {$value}");
     }
     // result
     echo preg_replace(array('/[\\r\\n\\t]/s', '/[\\s]{2,}/s', '/;}/'), array('', ' ', '}'), $param);
 }
Example #4
0
 /**
  * สร้างเมนูตามตำแหน่งของเมนู (parent)
  *
  * @return array รายการเมนูทั้งหมด
  */
 public function render()
 {
     $view = \Core\Gcms::createClass('Menu\\View');
     $result = array();
     foreach ($this->menu->items() as $parent => $items) {
         if ($parent != '') {
             $result[$parent] = $view->render($items);
         }
     }
     return $result;
 }
Example #5
0
 /**
  * inint Controller.
  *
  * @param array $modules
  */
 public function inint($modules = null)
 {
     // ถ้าไม่มีโมดูลเลือกหน้า home
     $modules['module'] = empty($modules['module']) ? 'home' : $modules['module'];
     // สร้าง View
     $view = \Core\Gcms::createClass('Site\\View');
     // สร้างเมนู
     $Menu = \Core\Gcms::createClass('Menu\\Controller');
     $view->set(array('MENU' => $Menu->inint($modules), 'TITLE' => 'Welcome to GCMS++', 'CONTENT' => $view->loadTemplate('', '', $modules['module'])));
     // โหลดไฟล์ index.html
     $template = $view->loadTemplate('', '', 'index');
     // output เป็น HTML
     $view->renderHTML($template);
 }
Example #6
0
 /**
  * ฟังก์ชั่นสร้าง URL จากโมดูล
  *
  * @param string $module URL ชื่อโมดูล
  * @param string $document (option)
  * @param int $catid (option) id ของหมวดหมู่ (default 0)
  * @param int $id (option) id ของข้อมูล (default 0)
  * @param string $query (option) query string อื่นๆ (default ค่าว่าง)
  * @param boolean $encode (option) true=เข้ารหัสด้วย rawurlencode ด้วย (default true)
  *
  * @return string URL ที่สร้าง
  */
 public static function createUrl($module, $document = '', $catid = 0, $id = 0, $query = '', $encode = true)
 {
     /**
      * กฏของ URL ใช้สำหรับการสร้างลิงค์
      */
     $config = array(0 => 'index.php?module={module}-{document}&cat={catid}&id={id}', 1 => '{module}/{catid}/{id}/{document}.html');
     $urls = \Core\Gcms::get('url', 'urls', $config);
     $patt = array();
     $replace = array();
     if (empty($document)) {
         $patt[] = '/[\\/-]{document}/';
         $replace[] = '';
     } else {
         $patt[] = '/{document}/';
         $replace[] = $encode ? rawurlencode($document) : $document;
     }
     $patt[] = '/{module}/';
     $replace[] = $encode ? rawurlencode($module) : $module;
     if (empty($catid)) {
         $patt[] = '/((cat={catid}&)|([\\/-]{catid}))/';
         $replace[] = '';
     } else {
         $patt[] = '/{catid}/';
         $replace[] = (int) $catid;
     }
     if (empty($id)) {
         $patt[] = '/(((&|\\?)id={id})|([\\/-]{id}))/';
         $replace[] = '';
     } else {
         $patt[] = '/{id}/';
         $replace[] = (int) $id;
     }
     $link = preg_replace($patt, $replace, $urls[\Core\Gcms::get('config', 'module_url', 0)]);
     if (!empty($query)) {
         $link = preg_match('/[\\?]/u', $link) ? $link . '&' . $query : $link . '?' . $query;
     }
     $obj = new static();
     $obj->curr_parse = false;
     $obj->curr_url = WEB_URL . '/' . $link;
     return $obj->curr_url;
 }
Example #7
0
 /**
  * อ่านโมดูลที่ต้องการ
  *
  * @param string $module
  */
 public function getModule($module)
 {
     $db = \Core\Gcms::Database();
     // วันนี้
     $date = \Core\Date::mktime_to_sql_date();
     // อ่านโมดูล ตามภาษา
     $sql = "SELECT M.`module`,I.`id`,D.`topic`,D.`description`,D.`keywords`,D.`detail`,I.`visited`";
     if (is_int($module)) {
         $sql .= " FROM `" . $db->prefix . \Core\Gcms::get('database', 'index') . "` AS I";
         $sql .= " INNER JOIN `" . $db->prefix . \Core\Gcms::get('database', 'modules') . "` AS M ON M.`id`=I.`module_id`";
         $sql .= " INNER JOIN `" . $db->prefix . \Core\Gcms::get('database', 'index_detail') . "` AS D ON D.`id`=I.`id` AND D.`module_id`=I.`module_id` AND D.`language`=I.`language`";
         $sql .= " WHERE I.`id`=" . (int) $module . " AND I.`index`='1' AND I.`published`='1' AND I.`published_date`<='{$date}' LIMIT 1";
     } else {
         $sql .= " FROM `" . $db->prefix . \Core\Gcms::get('database', 'index_detail') . "` AS D ";
         $sql .= " INNER JOIN `" . $db->prefix . \Core\Gcms::get('database', 'index') . "` AS I ON I.`id`=D.`id` AND I.`index`='1' AND I.`published`='1' AND I.`published_date`<='{$date}' AND I.`language`=D.`language`";
         $sql .= " INNER JOIN `" . $db->prefix . \Core\Gcms::get('database', 'modules') . "` AS M ON M.`id`=D.`module_id` AND M.`module`='{$module}'";
         $sql .= " WHERE D.`language` IN ('" . LANGUAGE . "','') LIMIT 1";
     }
     $search = $db->customQuery($sql);
     return sizeof($search) == 1 ? $search[0] : false;
 }
Example #8
0
 /**
  * Class สำหรับเชื่อมต่อกับ database.
  *
  * @param type $param
  *
  * @return resource Database resource
  */
 public function connect($param)
 {
     // parse the URL from the DSN string
     if (($dns = @parse_url($param)) === false) {
         \Core\Gcms::debug('Invalid DB connection string.');
     }
     $params = array('dbdriver' => strtolower($dns['scheme']), 'hostname' => isset($dns['host']) ? rawurldecode($dns['host']) : '', 'port' => isset($dns['port']) ? $dns['port'] : '', 'username' => isset($dns['user']) ? rawurldecode($dns['user']) : '', 'password' => isset($dns['pass']) ? rawurldecode($dns['pass']) : '', 'dbname' => isset($dns['path']) ? rawurldecode(substr($dns['path'], 1)) : '');
     if (isset($dsn['query'])) {
         parse_str($dsn['query'], $extra);
         foreach ($extra as $key => $val) {
             if (is_string($val) && in_array(strtoupper($val), array('TRUE', 'FALSE', 'NULL'))) {
                 $val = var_export($val, true);
             }
             $params[$key] = $val;
         }
     }
     // inint database class
     require_once ROOT_PATH . 'core/database/driver.php';
     if (!in_array($params['dbdriver'], array('mysqli')) && defined('PDO::ATTR_DRIVER_NAME')) {
         require_once ROOT_PATH . 'core/database/pdo_driver.php';
         // driver string
         $driver = 'PDO_driver';
     } elseif (is_file(ROOT_PATH . 'core/database/' . $params['dbdriver'] . '_driver.php')) {
         // โหลดจาก driver ที่กำหนด
         require_once ROOT_PATH . 'core/database/' . $params['dbdriver'] . '_driver.php';
         // driver string
         $driver = strtoupper($params['dbdriver']) . '_driver';
     } else {
         if (!empty($driver)) {
             \Core\Gcms::debug('You have not selected a database type to connect to.');
         }
         $driver = 'Driver';
     }
     // inint class
     $db = new $driver($params);
     // return class
     return $db;
 }
Example #9
0
 /**
  * inint Controller.
  *
  * @param array $modules
  */
 public function inint($modules = null)
 {
     // cache 1 month
     $expire = 2592000;
     \Core\Gcms::header(array('Content-type' => 'text/css; charset: UTF-8', 'Cache-Control' => 'max-age=' . $expire . ', must-revalidate, public', 'Expires' => gmdate('D, d M Y H:i:s', time() + $expire) . ' GMT', 'Last-Modified' => gmdate('D, d M Y H:i:s', time() - $expire) . ' GMT'));
     // โหลด css หลัก
     $data = preg_replace('/url\\(([\'"])?fonts\\//isu', "url(\\1" . WEB_URL . '/skin/fonts/', file_get_contents(ROOT_PATH . 'skin/fonts.css'));
     $data .= file_get_contents(ROOT_PATH . 'skin/gcss.css');
     // โหลดจาก template
     $template = str_replace(ROOT_PATH, '', \Core\Gcms::get('config', 'template_root'));
     $skin = 'skin/' . \Core\Gcms::get('config', 'skin');
     $data2 = file_get_contents(ROOT_PATH . $template . $skin . '/style.css');
     $data2 = preg_replace('/url\\(([\'"])?(img|fonts)\\//isu', "url(\\1" . WEB_URL . '/' . $skin . '/\\2/', $data2);
     // compress css
     $data = preg_replace(array('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '/\\s?([:;,>\\{\\}])\\s?/s'), array('', '\\1', ' '), $data . $data2);
     // ตัด > ใน ie ต่ำกว่า 7
     if (preg_match('|MSIE ([0-9].[0-9]{1,2})|', \Core\Gcms::get($_SERVER, 'HTTP_USER_AGENT'), $matched)) {
         if ((int) $matched[1] < 7) {
             $data = str_replace('>', ' ', $data);
         }
     }
     // render
     \Core\Gcms::createClass('Css\\View')->render($data);
 }
Example #10
0
 public function inint($modules = null)
 {
     // สร้างเมนู
     return \Core\Gcms::createClass('Menu\\View')->render($modules);
 }
Example #11
0
 /**
  * โหลด GCMS เพื่อประมวลผล
  */
 public function inint()
 {
     /**
      * โหลด config
      */
     $config = array();
     $config['hour'] = 0;
     $config['languages'][0] = 'th';
     $config['skin'] = '';
     $config['datas_folder'] = 'datas/';
     $config['template_root'] = APP_PATH;
     self::$CFG['config'] = new \Core\ListItem($config);
     self::$CFG['config']->loadFromFile(APP_PATH . 'settings/config.php');
     /**
      * display error
      */
     if (self::get('config', 'debug', true)) {
         // ขณะออกแบบ แสดง error และ warning ของ PHP
         ini_set('display_errors', 1);
         ini_set('display_startup_errors', 1);
         error_reporting(-1);
     } else {
         // ขณะใช้งานจริง
         error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);
     }
     /**
      * โฟลเดอร์สำหรับเก็บข้อมูลต่างๆ นับจาก root ของ server
      */
     define('DATA_FOLDER', self::get('config', 'datas_folder'));
     define('DATA_PATH', APP_PATH . DATA_FOLDER);
     define('DATA_URL', WEB_URL . '/' . DATA_FOLDER);
     /**
      * ภาษาที่เลือก
      */
     $languages = self::get('config', 'languages');
     $language = self::get('GET,SESSION,COOKIE', 'lang,gcms_language,gcms_language', $languages[0]);
     $language = is_file(DATA_PATH . "language/{$language}.php") ? $language : 'th';
     define('LANGUAGE', $language);
     /**
      * skin
      */
     $skin = \Core\Gcms::get('config', 'skin');
     $template_root = \Core\Gcms::get('config', 'template_root');
     $skin = is_file($template_root . 'skin/' . $skin . '/style.css') ? $skin : 'default';
     define('SKIN', "skin/{$skin}/");
     /**
      * return current instance
      */
     return self::$instance;
 }
Example #12
0
<?php

/*
 * projects/welcome/index.php.
 *
 * @author Goragod Wiriya <*****@*****.**>
 *
 * @link http://gcms.in.th/
 *
 * @copyright 2015 Goragod.com
 * @license http://gcms.in.th/license/
 */
// ตัวแปรที่จำเป็นสำหรับ Framework ใช้ระบุ root folder
define('APP_PATH', dirname(__FILE__) . '/');
// load GCMS
include APP_PATH . '../../core/load.php';
// inint GCMS Framework
\Core\Gcms::createWebApplication()->run();
Example #13
0
 /**
  * ประมวลผลคำสั่ง SQL สำหรับสอบถามข้อมูล คืนค่าผลลัพท์เป็นแอเรย์ของข้อมูลที่ตรงตามเงื่อนไข.
  *
  * @param string $sql query string
  *
  * @return array คืนค่าผลการทำงานเป็น record ของข้อมูลทั้งหมดที่ตรงตามเงื่อนไข ไม่พบข้อมูลคืนค่าเป็น array ว่างๆ
  */
 public function customQuery($sql)
 {
     $result = $this->_customQuery($sql);
     if ($result === false) {
         \Core\Gcms::debug($sql, $this->error_message);
         return array();
     } else {
         return $result;
     }
 }
Example #14
0
 /**
  * แสดงผล เป็น HTML.
  */
 public function renderHTML($template)
 {
     // default for template
     self::$datas['/{WEBTITLE}/'] = \Core\Gcms::get('config', 'web_title');
     self::$datas['/{WEBDESCRIPTION}/'] = \Core\Gcms::get('config', 'web_description');
     self::$datas['/{LANGUAGE}/'] = LANGUAGE;
     self::$datas['/{WEBURL}/'] = WEB_URL;
     self::$datas['/{SKIN}/'] = SKIN;
     self::$datas['/{ELAPSED}/'] = sprintf('%.3f', microtime(true) - BEGIN_TIME);
     self::$datas['/{USAGE}/'] = memory_get_usage(false) / 1024;
     // แทนที่ลงใน template
     echo \Core\Gcms::pregReplace(array_keys(self::$datas), array_values(self::$datas), $template);
 }
Example #15
0
 /**
  * inint Controller.
  *
  * @param array $modules
  */
 public function inint($modules = null)
 {
     $install_modules = array();
     $install_owners = array();
     $module_list = array();
     $site_model = \Core\Gcms::createClass('Site\\Model');
     $site_view = \Core\Gcms::createClass('Site\\View');
     $menu_controller = \Core\Gcms::createClass('Menu\\Controller');
     // เมนูที่ติดตั้ง
     foreach ($menu_controller->inint() as $item) {
         if (!empty($item['module']) && !isset($install_modules[$item['module']])) {
             $install_modules[$item['module']] = $item;
             $install_owners[$item['owner']][] = $item['module'];
         }
     }
     // โมดูลทั้งหมดที่ติดตั้ง
     foreach ($site_model->inint() as $item) {
         if (!isset($install_modules[$item['module']])) {
             $install_modules[$item['module']] = $item;
             $install_owners[$item['owner']][] = $item['module'];
         }
     }
     // รายชื่อโมดูลทั้งหมด
     $module_list = array_keys($install_modules);
     // รายการ home
     $home = $menu_controller->homeMenu();
     // ถ้าไม่มีโมดูล เลือกเมนูรายการแรก
     if (empty($modules['module'])) {
         if (!empty($home['menu_url'])) {
             $url = \Core\Gcms::createUrl($home['menu_url']);
             foreach ($url->get('query') as $k => $v) {
                 $modules[$k] = $v;
             }
             if (empty($modules['module'])) {
                 \Core\Router::parseRoutes($url->get('path'), $modules);
             }
         }
         if (empty($modules['module']) && !empty($home['module'])) {
             $modules['module'] = $home['module'];
         }
     }
     // ถ้าไม่มีโมดูลหรือ เลือกโมดูลแรกสุด
     if (empty($modules['module']) && !empty($module_list)) {
         $modules['module'] = $module_list[0];
     }
     if (empty($module_list) || !in_array($modules['module'], $module_list)) {
         // ไม่พบโมดูลที่เรียก 404
         $modules['module'] = '404';
     }
     // หน้าที่เรียก
     $page = $site_model->getModule($modules['module']);
     // โหลดเมนูใส่ template
     $site_view->set($menu_controller->render());
     // เนื้อหาทั่วไป
     $site_view->set(array('CONTENT' => $page['detail'], 'TITLE' => $page['topic'], 'DESCRIPTION' => $page['description'], 'KEYWORDS' => $page['keywords'], 'QURIES' => \Core\Gcms::database()->queryCount()));
     // widget+ภาษา
     $site_view->set(array('/{WIDGET_([A-Z]+)(([\\s_])(.*))?}/e' => '\\Core\\Gcms::getWidgets(array(1=>"$1",3=>"$3",4=>"$4"))', '/{(LNG_[A-Z0-9_]+)}/e' => '\\Core\\Language::get(array(1=>"$1"))'), FORMAT_PCRE);
     // โหลดไฟล์ index.html
     $template = $site_view->loadTemplate('', '', 'index');
     // output เป็น HTML
     $site_view->renderHTML($template);
 }