<?php namespace Phpcmf\Control;
/**
 * https://www.besyun.com
 * BESCMS
 * 本代码基于MIT开源协议，协议规定此处版权信息不可去除
 * 本文件是框架系统文件，二次开发时不可以修改本文件
 **/

// 生成静态
class Html extends \Phpcmf\Home\Module {

	private $is_html;

	// 首页动作
	public function _index_page() {

        ob_start();
		\Phpcmf\Service::V()->assign([
            'is_cms' => 1,
			'indexc' => 1,
            'fix_html_now_url' => defined('IS_MOBILE') && IS_MOBILE ? SITE_MURL : SITE_URL,
		]);
        \Phpcmf\Service::V()->assign($this->_index_seo());
		\Phpcmf\Service::V()->display('index.html');
        $html = ob_get_clean();

        // 开启过首页静态时
        if ($this->site_info[SITE_ID]['SITE_INDEX_HTML'] && !defined('SC_HTML_FILE')) {
            if (IS_CLIENT) {
                // 自定义终端
                $file = dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', IS_CLIENT.'/index.html') : WEBPATH.IS_CLIENT.'/index.html';
                $rt = file_put_contents($file, $html);
                !$rt && CI_DEBUG && log_message('error', '首页终端（'.IS_CLIENT.'）生成失败：'.$file);
            } elseif (defined('IS_MOBILE') && IS_MOBILE) {
                // 移动端，当移动端独立域名情况下才生成静态
                if (defined('SITE_IS_MOBILE_HTML') && SITE_IS_MOBILE_HTML && SITE_MURL == dr_now_url()) {
                    $mfile = dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', SITE_MOBILE_DIR.'/index.html') : WEBPATH.SITE_MOBILE_DIR.'/index.html';
                    $mobile = file_put_contents($mfile, $html);
                    !$mobile && CI_DEBUG && log_message('error', '首页移动端生成失败：'.$mfile);
                }
            } else {
                // pc
                $file = dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', 'index.html') : WEBPATH.'index.html';
                $pc = file_put_contents($file, $html);
                !$pc && CI_DEBUG && log_message('error', '首页PC端首页生成失败：'.$file);
            }
        }

        echo $html;
	}

	// 首页显示
	public function index() {

	    if (IS_POST) {
	        $this->_json(0, '禁止提交，请检查提交地址是否有误');
        }


        // 挂钩点 网站首页时
        \Phpcmf\Hooks::trigger_callback('cms_index');
        
        \Phpcmf\Service::L('Router')->is_redirect_url(dr_url_prefix('/'), 1);

        $this->_index_page();
	}



	// 生成静态
	public function html() {

		// 判断权限
		if (!dr_html_auth()) {
            $this->_json(0, '权限验证超时，请重新执行生成');
        }

        // 标识变量
        !defined('SC_HTML_FILE') && define('SC_HTML_FILE', 1);

        // 开启ob函数
        ob_start();
		$this->is_html = 1;
        \Phpcmf\Service::V()->init('pc');
        \Phpcmf\Service::V()->assign([
            'fix_html_now_url' => SITE_URL, // 修复静态下的当前url变量
        ]);
		$this->_index_page();
		$html = ob_get_clean();
		$file = dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', 'index.html') : WEBPATH.'index.html';
		$pc = file_put_contents($file, $html, LOCK_EX);
        !$pc && CI_DEBUG && log_message('error', '首页PC端首页生成失败：'.$file);

        if (SITE_MURL != SITE_URL) {
            // 开启ob函数
            ob_start();
            $this->is_html = 1;
            \Phpcmf\Service::V()->init('mobile');
            \Phpcmf\Service::V()->assign([
                'fix_html_now_url' => SITE_MURL, // 修复静态下的当前url变量
            ]);
            $this->_index_page();
            $html = ob_get_clean();
            $mfile = dr_is_app('chtml') ? \Phpcmf\Service::L('html', 'chtml')->get_webpath(SITE_ID, 'site', SITE_MOBILE_DIR.'/index.html') : WEBPATH.SITE_MOBILE_DIR.'/index.html';
            $mobile = file_put_contents($mfile, $html, LOCK_EX);
            !$mobile && CI_DEBUG && log_message('error', '首页移动端生成失败：'.$mfile);
        } else {
            CI_DEBUG && log_message('error', '首页移动端生成失败：移动端未绑定域名');
        }

		$this->_json(1, dr_lang('电脑端 （%s），移动端 （%s）', dr_format_file_size($pc), dr_format_file_size($mobile)));
	}

    private function _index_seo() {

        $seo = [
            'meta_title' => \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_TITLE'),
            'meta_keywords' => \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_KEYWORDS'),
            'meta_description' => \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_DESCRIPTION')
        ];

        if (IS_CLIENT) {
            // 终端模式下
            $cdata = \Phpcmf\Service::R(WRITEPATH.'config/app_client_seo_'.SITE_ID.'.php');
            if ($cdata && isset($cdata[IS_CLIENT]) && $cdata[IS_CLIENT]) {
                $seo = [
                    'meta_title' => $cdata[IS_CLIENT]['SITE_TITLE'],
                    'meta_keywords' => $cdata[IS_CLIENT]['SITE_KEYWORDS'],
                    'meta_description' => $cdata[IS_CLIENT]['SITE_DESCRIPTION']
                ];
            }
        }

        !$seo['meta_title'] && $seo['meta_title'] = SITE_NAME;

        if ($seo['meta_title'] && strpos($seo['meta_title'], '{page}') !== false) {
            $page = max(1, intval($_GET['page']));
            if ($page > 1) {
                $seo['meta_title'] = str_replace(array('[', ']'), '', $seo['meta_title']);
                $seo['meta_title'] = str_replace('{join}', SITE_SEOJOIN, $seo['meta_title']);
                $seo['meta_title'] = str_replace('{page}', $page, $seo['meta_title']);
            } else {
                $seo['meta_title'] = preg_replace('/\[.+\]/U', '', $seo['meta_title']);
            }
        }

        return \Phpcmf\Service::L('Seo')->get_seo_value([], $seo);
    }

	// 生成栏目
	public function category() {
		parent::_Category_Html();
	}

	// 生成内容
	public function show() {
		parent::_Show_Html();
	}

	// 生成栏目单页
	public function categoryfile() {
		parent::_Category_Html_File();
	}

	// 生成内容单页
	public function showfile() {
		parent::_Show_Html_File();
	}

}
