2023-01-29 10:26:52 +08:00

138 lines
3.5 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | 小说系统 [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
namespace app\common\controller;
/**
* 插件类
* @author yangweijie <yangweijiester@gmail.com>
*/
class Addons extends Base {
public $info = array();
public $addon_path = '';
public $config_file = '';
public $custom_config = '';
public $admin_list = array();
public $custom_adminlist = '';
public $access_url = array();
public function _initialize() {
$mc = $this->getAddonsName();
$this->addon_path = ROOT_PATH . "/addons/{$mc}/";
if (is_file($this->addon_path . 'config.php')) {
$this->config_file = $this->addon_path . 'config.php';
}
}
public function template($template) {
$mc = $this->getAddonsName();
$ac = input('ac', '', 'trim,strtolower');
$parse_str = \think\Config::get('parse_str');
$parse_str['__ADDONROOT__'] = ROOT_PATH . "/addons/{$mc}";
\think\Config::set('parse_str', $parse_str);
if ($template) {
$template = $template;
} else {
$template = $mc . "/" . $ac;
}
$this->view->engine(
array('view_path' => "addons/" . $mc . "/view/")
);
echo $this->fetch($template);
}
final public function getAddonsName() {
$mc = input('mc', '', 'trim,strtolower');
if ($mc) {
return $mc;
} else {
$class = get_class($this);
return strtolower(substr($class, strrpos($class, '\\') + 1));
}
}
final public function checkInfo() {
$info_check_keys = array('name', 'title', 'description', 'status', 'author', 'version');
foreach ($info_check_keys as $value) {
if (!array_key_exists($value, $this->info)) {
return false;
}
}
return true;
}
public function getConfig() {
static $_config = array();
if (empty($name)) {
$name = $this->getAddonsName();
}
if (isset($_config[$name])) {
return $_config[$name];
}
$config = array();
$map['name'] = $name;
$map['status'] = 1;
$config = db('Addons')->where($map)->value('config');
if ($config) {
$config = json_decode($config, true);
} else {
$config = array();
$temp_arr = include $this->config_file;
foreach ($temp_arr as $key => $value) {
if ($value['type'] == 'group') {
foreach ($value['options'] as $gkey => $gvalue) {
foreach ($gvalue['options'] as $ikey => $ivalue) {
$config[$ikey] = $ivalue['value'];
}
}
} else {
$config[$key] = $value['value'];
}
}
}
$_config[$name] = $config;
return $config;
}
/**
* 获取插件所需的钩子是否存在,没有则新增
* @param string $str 钩子名称
* @param string $addons 插件名称
* @param string $addons 插件简介
*/
public function getisHook($str, $addons, $msg = '') {
$hook_mod = db('Hooks');
$where['name'] = $str;
$gethook = $hook_mod->where($where)->find();
if (!$gethook || empty($gethook) || !is_array($gethook)) {
$data['name'] = $str;
$data['description'] = $msg;
$data['type'] = 1;
$data['update_time'] = time();
$data['addons'] = $addons;
if (false !== $hook_mod->create($data)) {
$hook_mod->add();
}
}
}
/**
* 删除钩子
* @param string $hook 钩子名称
*/
public function deleteHook($hook) {
$model = db('hooks');
$condition = array(
'name' => $hook,
);
$model->where($condition)->delete();
}
}