Files
EasySoft-ZenTaoPMS/framework/router.class.php
T

203 lines
7.0 KiB
PHP
Executable File

<?php
/**
* 此文件包括ZenTaoPHP框架的三个类:router, config, lang。
* The router, config and lang class file of ZenTaoPHP framework.
*
* The author disclaims copyright to this source code. In place of
* a legal notice, here is a blessing:
*
* May you do good and not evil.
* May you find forgiveness for yourself and forgive others.
* May you share freely, never taking more than you give.
*/
/**
* router类。
* The router class.
*
* @package framework
*/
include dirname(__FILE__) . '/base/router.class.php';
class router extends baseRouter
{
/**
* 加载语言文件,返回全局$lang对象。
* Load lang and return it as the global lang object.
*
* @param string $moduleName the module name
* @param string $appName the app name
* @access public
* @return bool|object the lang object or false.
*/
public function loadLang($moduleName, $appName = '')
{
global $lang;
if(!is_object($lang)) $lang = new language();
/* Set productCommon and projectCommon for flow. */
if($moduleName == 'common')
{
$productProject = false;
if($this->dbh and !empty($this->config->db->name))
{
global $config;
if(!isset($config->global)) $config->global = new stdclass();
$flow = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='common' AND `key`='flow'")->fetch();
$config->global->flow = $flow ? $flow->value : 'full';
try
{
$productProject = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='custom' AND `key`='productProject'")->fetch();
}
catch (PDOException $exception)
{
$repairCode = '|1034|1035|1194|1195|1459|';
$errorInfo = $exception->errorInfo;
$errorCode = $errorInfo[1];
$errorMsg = $errorInfo[2];
$message = $exception->getMessage();
if(strpos($repairCode, "|$errorCode|") !== false or ($errorCode == '1016' and strpos($errorMsg, 'errno: 145') !== false) or strpos($message, 'repair') !== false)
{
if(isset($config->framework->autoRepairTable) and $config->framework->autoRepairTable)
{
header("location: " . $config->webRoot . 'checktable.php');
exit;
}
}
}
}
$productCommon = $projectCommon = 0;
if($productProject)
{
$productProject = $productProject->value;
list($productCommon, $projectCommon) = explode('_', $productProject);
}
$lang->productCommon = isset($this->config->productCommonList[$this->clientLang][(int)$productCommon]) ? $this->config->productCommonList[$this->clientLang][(int)$productCommon] : $this->config->productCommonList['zh-cn'][0];
$lang->projectCommon = isset($this->config->projectCommonList[$this->clientLang][(int)$projectCommon]) ? $this->config->projectCommonList[$this->clientLang][(int)$projectCommon] : $this->config->projectCommonList['zh-cn'][0];
}
parent::loadLang($moduleName, $appName);
/* Merge from the db lang. */
if($moduleName != 'common' and isset($lang->db->custom[$moduleName]))
{
foreach($lang->db->custom[$moduleName] as $section => $fields)
{
if(isset($lang->{$moduleName}->{$section}['']))
{
$nullKey = '';
$nullValue = $lang->{$moduleName}->{$section}[$nullKey];
}
elseif(isset($lang->{$moduleName}->{$section}[0]))
{
$nullKey = 0;
$nullValue = $lang->{$moduleName}->{$section}[0];
}
unset($lang->{$moduleName}->{$section});
if(isset($nullKey))$lang->{$moduleName}->{$section}[$nullKey] = $nullValue;
foreach($fields as $key => $value) $lang->{$moduleName}->{$section}[$key] = $value;
unset($nullKey);
unset($nullValue);
}
}
return $lang;
}
/**
* Save error info.
*
* @param int $level
* @param string $message
* @param string $file
* @param int $line
* @access public
* @return void
*/
public function saveError($level, $message, $file, $line)
{
$fatalLevel[E_ERROR] = E_ERROR;
$fatalLevel[E_PARSE] = E_PARSE;
$fatalLevel[E_CORE_ERROR] = E_CORE_ERROR;
$fatalLevel[E_USER_ERROR] = E_USER_ERROR;
if(isset($fatalLevel[$level])) $this->config->debug = true;
parent::saveError($level, $message, $file, $line);
}
/**
* Alias load module config.
*
* @param string $moduleName
* @param string $appName
* @access public
* @return void
*/
public function loadConfig($moduleName, $appName = '')
{
return parent::loadModuleConfig($moduleName, $appName);
}
/**
* Export config.
*
* @access public
* @return void
*/
public function exportConfig()
{
ob_start();
parent::exportConfig();
$view = ob_get_contents();
ob_end_clean();
$view = json_decode($view);
$view->rand = $this->session->random;
$this->session->set('rand', $this->session->random);
echo json_encode($view);
}
/**
* PATH_INFO方式解析,获取$URI和$viewType。
* Parse PATH_INFO, get the $URI and $viewType.
*
* @access public
* @return void
*/
public function parsePathInfo()
{
parent::parsePathInfo();
if($this->get->display == 'card') $this->viewType = 'xhtml';
}
/**
* GET请求方式解析,获取$URI和$viewType。
* Parse GET, get $URI and $viewType.
*
* @access public
* @return void
*/
public function parseGET()
{
parent::parseGET();
if($this->get->display == 'card') $this->viewType = 'xhtml';
}
/**
* 合并请求的参数和默认参数,这样就可以省略已经有默认值的参数了。
* Merge the params passed in and the default params. Thus the params which have default values needn't pass value, just like a function.
*
* @param array $defaultParams the default params defined by the method.
* @param array $passedParams the params passed in through url.
* @access public
* @return array the merged params.
*/
public function mergeParams($defaultParams, $passedParams)
{
unset($passedParams['display']);
return parent::mergeParams($defaultParams, $passedParams);
}
}