/**
  * อ่านข้อมูลหมวดหมู่ที่เลือก และสามารถเผยแพร่ได้
  *
  * @param int $category_id
  * @param int $module_id
  * @return object|null ข้อมูลที่เลือก (Object) หรือ null หากไม่พบ
  */
 public static function get($category_id, $module_id)
 {
     if (is_int($category_id) && is_int($module_id)) {
         $model = new static();
         $query = $model->db()->createQuery()->select()->from('category')->where(array(array('category_id', $category_id), array('module_id', $module_id), array('published', '1')))->limit(1);
         foreach ($query->toArray()->execute() as $item) {
             $item['topic'] = Gcms::ser2Str($item, 'topic');
             $item['detail'] = Gcms::ser2Str($item, 'detail');
             $item['icon'] = Gcms::ser2Str($item, 'icon');
             return (object) ArrayTool::unserialize($item['config'], $item);
         }
     }
     return null;
 }
示例#2
0
 /**
  * แสดงผล
  *
  * @param object $index ข้อมูลโมดูล
  */
 public function render($index)
 {
     // template main.html, home/main.html
     $template = Template::create('', $index->module, 'main');
     // canonical
     $index->canonical = Gcms::createUrl($index->module);
     // add template
     $template->add(array('/{DETAIL}/' => Gcms::showDetail($index->detail, true, false), '/{TOPIC}/' => $index->topic, '/{MODULE}/' => $index->module));
     // detail
     $index->detail = $template->render();
     // breadcrumb ของหน้า
     Gcms::$view->addBreadcrumb($index->canonical, $index->topic, $index->description);
     return $index;
 }
 /**
  * แสดงผล
  *
  * @param object $index ข้อมูลโมดูล
  */
 public function render($index)
 {
     // รายการ
     $listitem = Grid::create('search', 'search', 'searchitem');
     foreach ($index->items as $item) {
         if ($item->index == 0 && $item->owner == 'document') {
             // document
             $uri1 = \Document\Index\Controller::url($item->module, $item->alias, $item->id);
             $uri2 = \Document\Index\Controller::url($item->module, $item->alias, $item->id, false);
         } elseif ($item->index == 0 && $item->owner == 'board') {
             // board
             $uri1 = \Board\Index\Controller::url($item->module, 0, $item->id);
             $uri2 = $uri1;
         } else {
             // other
             if (self::$cfg->module_url == 1) {
                 $uri1 = Gcms::createUrl($item->module, $item->alias);
                 $uri2 = Gcms::createUrl($item->module, $item->alias, 0, 0, '', false);
             } else {
                 $uri1 = Gcms::createUrl($item->module, '', 0, $item->id, '');
                 $uri2 = $uri1;
             }
         }
         $listitem->add(array('/{URL}/' => $uri1, '/{TOPIC}/' => $item->topic, '/{LINK}/' => $uri2, '/{DETAIL}/' => $item->description));
     }
     // template search/search.html
     $template = Template::create('search', 'search', 'search');
     // canonical
     $index->canonical = Gcms::createUrl($index->module);
     // current URL
     $uri = \Kotchasan\Http\Uri::createFromUri($index->canonical);
     if ($index->total > 0) {
         $list = Gcms::highlightSearch($listitem->render(), $index->q);
     } else {
         $list = $index->q == '' ? '' : '<div>' . Language::get('No results were found for') . ' <strong>' . $index->q . '</strong></div>';
         $list .= '<div><strong>' . Language::get('Search tips') . ' :</strong>' . Language::get('<ul><li>make sure that the spelling correct</li><li>try changing or new phrases. synonyms</li><li>try to identify a non-specific too</li><li>specific keywords to search the most concise</li></ul>') . '</div>';
     }
     // add template
     $template->add(array('/{LIST}/' => $list, '/{SPLITPAGE}/' => $uri->pagination($index->totalpage, $index->page), '/{SEARCH}/' => $index->q, '/{MODULE}/' => 'search', '/{RESULT}/' => $index->total == 0 ? '' : sprintf(Language::get('Search results <strong>%d - %d</strong> of about <strong>%d</strong> for <strong>%s</strong> (%s sec)'), $index->start + 1, $index->end, $index->total, $index->q, number_format(microtime(true) - REQUEST_TIME, 4))));
     $search = Language::get('Search');
     $index->detail = $template->render();
     $index->topic = ($index->q == '' ? '' : $index->q . ' - ') . $search;
     $index->description = $index->topic;
     $index->keywords = $index->topic;
     $index->menu = 'search';
     // breadcrumb ของหน้า
     Gcms::$view->addBreadcrumb($index->canonical, $search, $search);
     return $index;
 }
 /**
  * แสดงผล sitemap.xml
  *
  * @param Request $request
  */
 public function index(Request $request)
 {
     // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง
     define('MAIN_INIT', __FILE__);
     // create Response
     $response = new Response();
     // XML
     $content = '<' . '?xml version="1.0" encoding="UTF-8"?' . '>';
     $content .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"';
     $content .= ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
     $content .= ' xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9';
     $content .= ' http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
     // วันนี้
     $cdate = date('Y-m-d');
     // view
     $view = new \Index\Sitemap\View();
     // หน้าหลัก
     $content .= $view->render(WEB_URL . 'index.php', $cdate);
     // โมดูลที่ติดตั้งแล้ว
     $modules = array();
     $owners = array();
     foreach (\Index\Sitemap\Model::getModules() as $item) {
         $modules[$item->id] = $item->module;
         $owners[$item->owner][] = $item->id;
         $content .= $view->render(Gcms::createUrl($item->module, '', 0, 0, $item->language == '' ? '' : 'lang=' . $item->language), $cdate);
     }
     // modules
     $dir = ROOT_PATH . 'modules/';
     $f = @opendir($dir);
     if ($f) {
         while (false !== ($owner = readdir($f))) {
             if ($owner != '.' && $owner != '..' && $owner != 'index') {
                 if (is_file($dir . $owner . '/controllers/sitemap.php')) {
                     include $dir . $owner . '/controllers/sitemap.php';
                     foreach (createClass(ucfirst($owner) . '\\Sitemap\\Controller')->init($owners[$owner], $modules, $cdate) as $item) {
                         $content .= $view->render($item->url, $item->date);
                     }
                 }
             }
         }
         closedir($f);
     }
     $content .= '</urlset>';
     // send Response
     $response->withContent($content)->withHeader('Content-Type', 'application/xml; charset=UTF-8')->send();
 }
示例#5
0
 /**
  * แสดงผลหน้าหลักเว็บไซต์
  *
  * @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();
 }
 /**
  * อ่านรายชื่อโมดูลและไดเร็คทอรี่ของโมดูลทั้งหมดที่ติดตั้งไว้
  *
  * @return array คืนค่าไดเร็คทอรี่ของโมดูลทั้งหมดที่ติดตั้งไว้
  */
 public static function getInstalledModule()
 {
     $owners = array();
     // โมดูลที่ติดตั้ง
     $dir = ROOT_PATH . 'modules/';
     $f = @opendir($dir);
     if ($f) {
         while (false !== ($owner = readdir($f))) {
             if ($owner != '.' && $owner != '..') {
                 $owners[] = $owner;
                 Gcms::$install_owners[strtolower($owner)] = array();
             }
         }
         closedir($f);
     }
     // โหลดเมนูทั้งหมดเรียงตามลำดับเมนู (รายการแรกคือหน้า Home)
     Gcms::$menu = \Index\Menu\Controller::create();
     // โมดูลที่ติดตั้งแล้วจากเมนู
     foreach (Gcms::$menu->getMenus() as $item) {
         $module = $item->module;
         if (!empty($module) && !isset(Gcms::$install_modules[$module])) {
             Gcms::$install_modules[$module] = $item;
             Gcms::$install_owners[$item->owner][] = $module;
         }
     }
     // โหลดโมดูลทั้งหมด
     foreach (self::getModules() as $item) {
         $module = $item->module;
         if (!isset(Gcms::$install_modules[$module])) {
             Gcms::$install_modules[$module] = $item;
             Gcms::$install_owners[$item->owner][] = $module;
         }
     }
     // คืนค่าไดเร็คทอรี่ที่ติดตั้ง
     return $owners;
 }
示例#7
0
 /**
  * แสดงผล index.html
  *
  * @param Request $request
  */
 public function index(Request $request)
 {
     // ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง
     define('MAIN_INIT', __FILE__);
     // session cookie
     $request->initSession();
     // ตรวจสอบการ login
     Login::create();
     // กำหนด skin ให้กับ template
     self::$cfg->skin = $request->get('skin', self::$request->session('skin', self::$cfg->skin)->toString())->toString();
     self::$cfg->skin = is_file(ROOT_PATH . 'skin/' . self::$cfg->skin . '/style.css') ? self::$cfg->skin : 'bighead';
     $_SESSION['skin'] = self::$cfg->skin;
     Template::init(self::$cfg->skin);
     // ตรวจสอบหน้าที่จะแสดง
     if (!empty(self::$cfg->maintenance_mode) && !Login::isAdmin()) {
         Gcms::$view = new \Index\Maintenance\View();
     } elseif (!empty(self::$cfg->show_intro) && str_replace(array(BASE_PATH, '/'), '', $request->getUri()->getPath()) == '') {
         Gcms::$view = new \Index\Intro\View();
     } else {
         // counter และ useronline
         $new_day = \Index\Counter\Model::init();
         // View
         Gcms::$view = new \Gcms\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();
                 }
             }
             if ($new_day && is_file($dir . $owner . '/controllers/cron.php')) {
                 include $dir . $owner . '/controllers/cron.php';
                 $class = ucfirst($owner) . '\\Cron\\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');
         }
         // ตรวจสอบโมดูลที่เรียก
         $modules = \Index\Module\Controller::get($request->getQueryParams());
         if (!empty($modules)) {
             // โหลดโมดูลที่เรียก
             $page = createClass($modules->className)->{$modules->method}($request, $modules->module);
         }
         if (empty($page)) {
             // ไม่พบหน้าที่เรียก (index)
             $page = createClass('Index\\PageNotFound\\Controller')->init($request, 'index');
         }
         // title ของเว็บไซต์
         $web_title = strip_tags($page->topic);
         // meta tag
         $meta = array('generator' => '<meta name=generator content="GCMS AJAX CMS design by http://gcms.in.th">', 'og:title' => '<meta property="og:title" content="' . $web_title . '">', 'description' => '<meta name=description content="' . $page->description . '">', 'keywords' => '<meta name=keywords content="' . $page->keywords . '">', 'og:site_name' => '<meta property="og:site_name" content="' . $web_title . '">', 'og:type' => '<meta property="og:type" content="article">');
         // โมดูลแรกสุด ใส่ลงใน Javascript
         $module_list = array_keys(Gcms::$install_modules);
         $script = array('var FIRST_MODULE = "' . reset($module_list) . '";');
         // logo
         $image_logo = '';
         if (!empty(self::$cfg->logo) && is_file(ROOT_PATH . DATA_FOLDER . 'image/' . self::$cfg->logo)) {
             $image_src = WEB_URL . DATA_FOLDER . 'image/' . self::$cfg->logo;
             $info = getImageSize(ROOT_PATH . DATA_FOLDER . 'image/' . self::$cfg->logo);
             if ($info[0] > 0 || $info[1] > 0) {
                 $ext = explode('.', self::$cfg->logo);
                 if (strtolower(end($ext)) == 'swf') {
                     $script[] = '$G(window).Ready(function(){';
                     $script[] = 'if ($E("logo")) {';
                     $script[] = "new GMedia('logo_swf', '" . $image_src . "', {$info['0']}, {$info['1']}).write('logo');";
                     $script[] = '}';
                     $script[] = '});';
                 } else {
                     $image_logo = '<img src="' . $image_src . '" alt="{WEBTITLE}">';
                 }
             }
         }
         if (empty($page->image_src)) {
             if (is_file(ROOT_PATH . DATA_FOLDER . 'image/facebook_photo.jpg')) {
                 $page->image_src = WEB_URL . DATA_FOLDER . 'image/facebook_photo.jpg';
             }
         } elseif (!empty($image_src)) {
             $page->image_src = $image_src;
         }
         if (!empty($page->image_src)) {
             $meta['image_src'] = '<link rel=image_src href="' . $page->image_src . '">';
             $meta['og:image'] = '<meta property="og:image" content="' . $page->image_src . '">';
         }
         if (!empty(self::$cfg->facebook_appId)) {
             $meta['og:app_id'] = '<meta property="fb:app_id" content="' . self::$cfg->facebook_appId . '">';
         }
         if (isset($page->canonical)) {
             $meta['canonical'] = '<meta name=canonical content="' . $page->canonical . '">';
             $meta['og:url'] = '<meta property="og:url" content="' . $page->canonical . '">';
         }
         $meta['script'] = "<script>\n" . implode("\n", $script) . "\n</script>";
         Gcms::$view->setMetas($meta);
         // ภาษาที่ติดตั้ง
         $languages = Template::create('', '', 'language');
         foreach (self::$cfg->languages as $lng) {
             $languages->add(array('/{LNG}/' => $lng));
         }
         // เมนูหลัก
         Gcms::$view->setContents(Gcms::$menu->render(isset($page->menu) ? $page->menu : $page->module));
         // เนื้อหา
         Gcms::$view->setContents(array('/{CONTENT}/' => $page->detail, '/{TITLE}/' => $web_title, '/{LANGUAGES}/' => $languages->render(), '/{LOGO}/' => $image_logo));
     }
     // ส่งออก เป็น HTML
     $response = new Response();
     $response->withContent(Gcms::$view->renderHTML())->send();
 }
示例#8
0
 /**
  * ฟังก์ชั่น แปลงเป็นรายการเมนู
  *
  * @param array $item แอเรย์ข้อมูลเมนู
  * @param string $select (optional) เมนูที่ถูกเลือก
  * @param boolean $arrow (optional) true=แสดงลูกศรสำหรับเมนูที่มีเมนูย่อย (default false)
  * @return string คืนค่า HTML ของเมนู
  */
 public function getItem($item, $select = null, $arrow = false)
 {
     $c = array();
     if ($item->alias != '') {
         $c[] = $item->alias;
         if ($select === $item->alias) {
             $c[] = 'select';
         }
     } elseif ($item->module != '') {
         $c[] = $item->module;
         if ($select === $item->module) {
             $c[] = 'select';
         }
     }
     if (isset($item->published)) {
         if ($item->published != 1) {
             if (Login::isMember()) {
                 if ($item->published == '3') {
                     $c[] = 'hidden';
                 }
             } else {
                 if ($item->published == '2') {
                     $c[] = 'hidden';
                 }
             }
         }
     }
     $c = sizeof($c) == 0 ? '' : ' class="' . implode(' ', $c) . '"';
     if ($item->index_id > 0 || $item->menu_url != '') {
         $a = $item->menu_target == '' ? '' : ' target=' . $item->menu_target;
         $a .= $item->accesskey == '' ? '' : ' accesskey=' . $item->accesskey;
         if ($item->index_id > 0) {
             $a .= ' href="' . Gcms::createUrl($item->module) . '"';
         } elseif ($item->menu_url != '') {
             $a .= ' href="' . $item->menu_url . '"';
         } else {
             $a .= ' tabindex=0';
         }
     } else {
         $a = ' tabindex=0';
     }
     $menu_text = $item->menu_text;
     $b = $item->menu_tooltip == '' ? $menu_text : $item->menu_tooltip;
     if ($b != '') {
         $a .= ' title="' . $b . '"';
     }
     if ($arrow) {
         return '<li' . $c . '><a class=menu-arrow' . $a . '><span>' . (empty($menu_text) ? '&nbsp;' : htmlspecialchars_decode($menu_text)) . '</span></a>';
     } else {
         return '<li' . $c . '><a' . $a . '><span>' . (empty($menu_text) ? '&nbsp;' : htmlspecialchars_decode($menu_text)) . '</span></a>';
     }
 }
 /**
  * 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);
     }
 }
示例#10
0
 /**
  * ฟังก์ชั่นตรวจสอบ alias ซ้ำ
  */
 public static function alias()
 {
     // referer
     if (self::$request->isReferer()) {
         $id = self::$request->post('id')->toInt();
         $value = Gcms::aliasName(self::$request->post('val')->toString());
         // Model
         $model = new static();
         // ค้นหาชื่อเรื่องซ้ำ
         $search = $model->db()->first($model->getFullTableName('index'), array('alias', $value));
         if ($search && ($id == 0 || $id != $search->id)) {
             echo str_replace(':name', Language::get('Alias'), Language::get('This :name already exist'));
         }
     }
 }
 /**
  * action ของตารางหมวดหมู่
  */
 public function action()
 {
     // referer, session, member
     if (self::$request->initSession() && self::$request->isReferer() && ($login = Login::isAdmin())) {
         if ($login['email'] == 'demo') {
             echo Language::get('Unable to complete the transaction');
         } else {
             // รับค่าจากการ POST
             $id = self::$request->post('id')->toString();
             $value = self::$request->post('value')->toInt();
             if (preg_match('/^category_([0-9]+)$/', $id, $match)) {
                 $action = 'category';
                 $module_id = (int) $match[1];
             } else {
                 $action = self::$request->post('action')->toString();
                 $module_id = self::$request->post('mid')->toInt();
             }
             // ตรวจสอบโมดูล
             $index = false;
             if (!empty($module_id)) {
                 $index = \Index\Module\Model::getModule($module_id);
             }
             if ($action === 'category') {
                 // อ่านข้อมูลหมวดหมู่ตอนเขียนบทความ
                 $category = $this->db()->first($this->getFullTableName('category'), array(array('category_id', (int) $value), array('module_id', (int) $index->id)));
                 if ($category) {
                     $config = @unserialize($category->config);
                     if (!is_array($config)) {
                         $config = array('can_reply' => 0);
                     }
                     $ret = array('can_reply' => empty($config['can_reply']) ? 0 : 1, 'published' => empty($category->published) ? 0 : 1);
                     // คืนค่าเป็น JSON
                     echo json_encode($ret);
                 }
             } elseif ($index && Gcms::canConfig($login, $index, 'can_config')) {
                 if ($action === 'delete' && preg_match('/^[0-9,]+$/', $id)) {
                     // ลบหมวด
                     $query = $this->db()->createQuery()->select('id', 'icon')->from('category')->where(array(array('id', explode(',', $id)), array('module_id', $index->id)))->toArray();
                     $ids = array();
                     foreach ($query->execute() as $item) {
                         $ids[] = $item['id'];
                         foreach (ArrayTool::unserialize($item['icon']) as $icon) {
                             @unlink(ROOT_PATH . DATA_FOLDER . $item['owner'] . '/' . $icon);
                         }
                     }
                     if (!empty($ids)) {
                         // ลบหมวดหมู่
                         $this->db()->createQuery()->delete('category', array(array('id', $ids), array('module_id', $index->id)))->execute();
                     }
                 } else {
                     $category = $this->db()->first($this->getFullTableName('category'), array(array('id', (int) $id), array('module_id', (int) $index->id)));
                     if ($category) {
                         if ($action === 'categoryid') {
                             // แก้ไข category_id หน้ารายการหมวดหมู่
                             // ค้นหาหมวดหมู่ซ้ำ
                             $search = $this->db()->createQuery()->from('category')->where(array(array('module_id', (int) $index->id), array('category_id', $value)))->first('id');
                             if ($search) {
                                 // มี category_id อยู่ก่อนแล้วคืนค่ารายการเดิม
                                 $ret['categoryid_' . $index->id . '_' . $category->id] = $category->category_id;
                             } else {
                                 // save
                                 $this->db()->createQuery()->update('category')->set(array('category_id' => $value))->where((int) $category->id)->execute();
                                 // คืนค่ารายการใหม่
                                 $ret['categoryid_' . $index->id . '_' . $category->id] = $value;
                             }
                         } elseif ($action === 'published' || $action === 'can_reply') {
                             // เผยแพร่, การแสดงความคิดเห็น
                             if ($action === 'can_reply') {
                                 $config = @unserialize($category->config);
                                 if (!is_array($config)) {
                                     $config = array();
                                 }
                                 $config['can_reply'] = empty($config['can_reply']) ? 1 : 0;
                                 $save = array('config' => serialize($config));
                                 // คืนค่า
                                 $ret['elem'] = 'can_reply_' . $category->id;
                                 $lng = Language::get('REPLIES');
                                 $ret['title'] = $lng[$config['can_reply']];
                                 $ret['class'] = 'icon-reply reply' . $config['can_reply'];
                             } else {
                                 $save = array('published' => $category->published == 1 ? 0 : 1);
                                 // คืนค่า
                                 $ret['elem'] = 'published_' . $category->id;
                                 $lng = Language::get('PUBLISHEDS');
                                 $ret['title'] = $lng[$save['published']];
                                 $ret['class'] = 'icon-published' . $save['published'];
                             }
                             $this->db()->update($this->getFullTableName('category'), $category->id, $save);
                         }
                         // คืนค่าเป็น JSON
                         echo json_encode($ret);
                     }
                 }
             }
         }
     } else {
         echo Language::get('Unable to complete the transaction');
     }
 }