You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

88 lines
3.0 KiB

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
* Typecho Blog Platform
*
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
* @version $Id$
*/
/**
* 执行模块
*
* @package Widget
*/
class Widget_Do extends Typecho_Widget
{
/**
* 路由映射
*
* @access private
* @var array
*/
private $_map = array(
'ajax' => 'Widget_Ajax',
'login' => 'Widget_Login',
'logout' => 'Widget_Logout',
'register' => 'Widget_Register',
'upgrade' => 'Widget_Upgrade',
'upload' => 'Widget_Upload',
'service' => 'Widget_Service',
'xmlrpc' => 'Widget_XmlRpc',
'comments-edit' => 'Widget_Comments_Edit',
'contents-page-edit' => 'Widget_Contents_Page_Edit',
'contents-post-edit' => 'Widget_Contents_Post_Edit',
'contents-attachment-edit' => 'Widget_Contents_Attachment_Edit',
'metas-category-edit' => 'Widget_Metas_Category_Edit',
'metas-tag-edit' => 'Widget_Metas_Tag_Edit',
'options-discussion' => 'Widget_Options_Discussion',
'options-general' => 'Widget_Options_General',
'options-permalink' => 'Widget_Options_Permalink',
'options-reading' => 'Widget_Options_Reading',
'plugins-edit' => 'Widget_Plugins_Edit',
'themes-edit' => 'Widget_Themes_Edit',
'users-edit' => 'Widget_Users_Edit',
'users-profile' => 'Widget_Users_Profile'
);
/**
* 入口函数,初始化路由器
*
* @access public
* @return void
* @throws Typecho_Widget_Exception
*/
public function execute()
{
/** 验证路由地址 **/
$action = $this->request->action;
//兼容老版本
if (empty($action)) {
$widget = trim($this->request->widget, '/');
$objectName = 'Widget_' . str_replace('/', '_', $widget);
if (Typecho_Common::isAvailableClass($objectName)) {
$widgetName = $objectName;
}
} else {
/** 判断是否为plugin */
$actionTable = array_merge($this->_map, unserialize($this->widget('Widget_Options')->actionTable));
if (isset($actionTable[$action])) {
$widgetName = $actionTable[$action];
}
}
if (isset($widgetName) && class_exists($widgetName)) {
$reflectionWidget = new ReflectionClass($widgetName);
if ($reflectionWidget->implementsInterface('Widget_Interface_Do')) {
$this->widget($widgetName)->action();
return;
}
}
throw new Typecho_Widget_Exception(_t('请求的地址不存在'), 404);
}
}