/** * 强行删除某个插件 * * @access public * @param string $pluginName 插件名称 * @return void */ public static function removePlugin($pluginName) { try { /** 获取插件入口 */ list($pluginFileName, $className) = Typecho_Plugin::portal($pluginName, __TYPECHO_ROOT_DIR__ . '/' . __TYPECHO_PLUGIN_DIR__); /** 获取已启用插件 */ $plugins = Typecho_Plugin::export(); $activatedPlugins = $plugins['activated']; /** 载入插件 */ require_once $pluginFileName; /** 判断实例化是否成功 */ if (!isset($activatedPlugins[$pluginName]) || !class_exists($className) || !method_exists($className, 'deactivate')) { throw new Typecho_Widget_Exception(_t('无法禁用插件'), 500); } $result = call_user_func(array($className, 'deactivate')); } catch (Exception $e) { //nothing to do } $db = Typecho_Db::get(); try { Typecho_Plugin::deactivate($pluginName); $db->query($db->update('table.options')->rows(array('value' => serialize(Typecho_Plugin::export())))->where('name = ?', 'plugins')); } catch (Typecho_Plugin_Exception $e) { //nothing to do } $db->query($db->delete('table.options')->where('name = ?', 'plugin:' . $pluginName)); }
/** * 绑定动作 * * @access public * @return unknown */ public function execute() { $this->user->pass('administrator'); if (!isset($this->request->config)) { throw new Typecho_Widget_Exception(_t('插件不存在'), 404); } /** 获取插件入口 */ list($this->_pluginFileName, $this->_className) = Typecho_Plugin::portal($this->request->config, __TYPECHO_ROOT_DIR__ . '/' . __TYPECHO_PLUGIN_DIR__); $this->info = Typecho_Plugin::parseInfo($this->_pluginFileName); }
/** * 绑定动作 * * @access public */ public function execute() { $this->user->pass('administrator'); $config = $this->request->filter('slug')->config; if (empty($config)) { throw new Typecho_Widget_Exception(_t('插件不存在'), 404); } /** 获取插件入口 */ list($this->_pluginFileName, $this->_className) = Typecho_Plugin::portal($config, $this->options->pluginDir($config)); $this->info = Typecho_Plugin::parseInfo($this->_pluginFileName); }
/** * 更新个人设置 * * @access public * @return void */ public function updatePersonal() { /** 获取插件名称 */ $pluginName = $this->request->plugin; /** 获取已激活插件 */ $plugins = Typecho_Plugin::export(); $activatedPlugins = $plugins['activated']; /** 获取插件入口 */ list($pluginFileName, $className) = Typecho_Plugin::portal($this->request->plugin, __TYPECHO_ROOT_DIR__ . '/' . __TYPECHO_PLUGIN_DIR__); $info = Typecho_Plugin::parseInfo($pluginFileName); if (!$info['personalConfig'] || !isset($activatedPlugins[$pluginName])) { throw new Typecho_Widget_Exception(_t('无法配置插件'), 500); } $form = $this->personalForm($pluginName, $className, $pluginFileName, $group); $this->user->pass($group); /** 验证表单 */ if ($form->validate()) { $this->response->goBack(); } $settings = $form->getAllRequest(); unset($settings['do'], $settings['plugin']); $name = '_plugin:' . $pluginName; if (!$this->personalConfigHandle($className, $settings)) { if ($this->db->fetchObject($this->db->select(array('COUNT(*)' => 'num'))->from('table.options')->where('name = ? AND user = ?', $name, $this->user->uid))->num > 0) { $this->widget('Widget_Abstract_Options')->update(array('value' => serialize($settings)), $this->db->sql()->where('name = ? AND user = ?', $name, $this->user->uid)); } else { $this->widget('Widget_Abstract_Options')->insert(array('name' => $name, 'value' => serialize($settings), 'user' => $this->user->uid)); } } /** 提示信息 */ $this->widget('Widget_Notice')->set(_t("%s 设置已经保存", $info['title']), NULL, 'success'); /** 转向原页 */ $this->response->redirect(Typecho_Common::url('profile.php', $this->options->adminUrl)); }
/** * 用自有函数处理配置信息 * * @access public * @param string $pluginName 插件名称 * @param array $settings 配置值 * @param boolean $isInit 是否为初始化 * @return boolean */ public function configHandle($pluginName, array $settings, $isInit) { /** 获取插件入口 */ list($pluginFileName, $className) = Typecho_Plugin::portal($pluginName, __TYPECHO_ROOT_DIR__ . '/' . __TYPECHO_PLUGIN_DIR__); if (method_exists($className, 'configHandle')) { call_user_func(array($className, 'configHandle'), $settings, $isInit); return true; } return false; }
/** * 用自有函数处理配置信息 * * @access public * @param string $pluginName 插件名称 * @param array $settings 配置值 * @param boolean $isInit 是否为初始化 * @return boolean */ public function configHandle($pluginName, array $settings, $isInit) { /** 获取插件入口 */ list($pluginFileName, $className) = Typecho_Plugin::portal($pluginName, $this->options->pluginDir($pluginName)); if (method_exists($className, 'configHandle')) { call_user_func(array($className, 'configHandle'), $settings, $isInit); return true; } return false; }