| | <?php |
| | namespace app\admin\controller; |
| | use think\Db; |
| | use think\addons\AddonException; |
| | use think\addons\Service; |
| | use think\Cache; |
| | use think\Config; |
| | use think\Exception; |
| | use app\common\util\Dir; |
| |
|
| | class Addon extends Base |
| | { |
| | public function __construct() |
| | { |
| | parent::__construct(); |
| | } |
| |
|
| | public function index() |
| | { |
| | $param = input(); |
| |
|
| | $this->assign('title',lang('admin/addon/title')); |
| | return $this->fetch('admin@addon/index'); |
| | } |
| |
|
| | public function config() |
| | { |
| | $param = input(); |
| | $name = $param['name']; |
| | if(empty($name)){ |
| | return $this->error(lang('param_err')); |
| | } |
| |
|
| | if (!is_dir(ADDON_PATH . $name)) { |
| | return $this->error(lang('get_dir_err')); |
| | } |
| |
|
| | $info = get_addon_info($name); |
| | $config = get_addon_fullconfig($name); |
| | if (!$info){ |
| | return $this->error(lang('get_addon_info_err')); |
| | } |
| | if ($this->request->isPost()) { |
| | $params = $this->request->post("row/a"); |
| | if(empty($params)){ |
| | return $this->error(lang('param_err')); |
| | } |
| | foreach ($config as $k => &$v) { |
| | if (isset($params[$v['name']])) { |
| | if ($v['type'] == 'array') { |
| | $params[$v['name']] = is_array($params[$v['name']]) ? $params[$v['name']] : (array)json_decode($params[$v['name']], true); |
| | $value = $params[$v['name']]; |
| | } else { |
| | $value = is_array($params[$v['name']]) ? implode(',', $params[$v['name']]) : $params[$v['name']]; |
| | } |
| | $v['value'] = $value; |
| | } |
| | } |
| |
|
| | try { |
| | |
| | set_addon_fullconfig($name, $config); |
| | Service::refresh(); |
| | return $this->success(lang('save_ok')); |
| | } catch (Exception $e) { |
| | return $this->error($e->getMessage()); |
| | } |
| | } |
| |
|
| | $this->assign('info',$info); |
| | $this->assign('config',$config); |
| |
|
| | return $this->fetch('admin@addon/config'); |
| | } |
| |
|
| | public function info() |
| | { |
| |
|
| | } |
| |
|
| | public function downloaded() |
| | { |
| | $offset = (int)$this->request->get("offset"); |
| | $limit = (int)$this->request->get("limit"); |
| | $filter = $this->request->get("filter"); |
| | $search = $this->request->get("search"); |
| | $search = htmlspecialchars(strip_tags($search)); |
| | $key = $GLOBALS['config']['app']['cache_flag']. '_'. 'onlineaddons'; |
| | $onlineaddons = Cache::get($key); |
| | if (!is_array($onlineaddons)) { |
| | $onlineaddons = []; |
| | $response = mac_curl_get( "h"."t"."t"."p:/"."/a"."p"."i"."."."m"."a"."c"."c"."m"."s."."c"."o"."m"."/" . 'addon/index'); |
| | $json = !empty($response) ? json_decode($response, true) : []; |
| | if (!empty($json['rows'])) { |
| | foreach ($json['rows'] as $row) { |
| | $onlineaddons[$row['name']] = $row; |
| | } |
| | } |
| | Cache::set($key, $onlineaddons, 600); |
| | } |
| | $filter = (array)json_decode($filter, true); |
| | $addons = get_addon_list(); |
| | $list = []; |
| | foreach ($addons as $k => $v) { |
| | if ($search && stripos($v['name'], $search) === FALSE && stripos($v['intro'], $search) === FALSE) |
| | continue; |
| |
|
| | if (isset($onlineaddons[$v['name']])) { |
| | $v = array_merge($onlineaddons[$v['name']], $v); |
| | } else { |
| | if(!isset($v['category_id'])) { |
| | $v['category_id'] = 0; |
| | } |
| | if(!isset($v['flag'])) { |
| | $v['flag'] = ''; |
| | } |
| | if(!isset($v['banner'])) { |
| | $v['banner'] = ''; |
| | } |
| | if(!isset($v['image'])) { |
| | $v['image'] = ''; |
| | } |
| | if(!isset($v['donateimage'])) { |
| | $v['donateimage'] = ''; |
| | } |
| | if(!isset($v['demourl'])) { |
| | $v['demourl'] = ''; |
| | } |
| | if(!isset($v['price'])) { |
| | $v['price'] = '0.00'; |
| | } |
| | } |
| | $v['url'] = addon_url($v['name']); |
| | $v['createtime'] = filemtime(ADDON_PATH . $v['name']); |
| | $v['install'] = '1'; |
| | if ($filter && isset($filter['category_id']) && is_numeric($filter['category_id']) && $filter['category_id'] != $v['category_id']) { |
| | continue; |
| | } |
| | $list[] = $v; |
| | } |
| | $total = count($list); |
| | if ($limit) { |
| | $list = array_slice($list, $offset, $limit); |
| | } |
| | $result = array("total" => $total, "rows" => $list); |
| |
|
| | $callback = $this->request->get('callback') ? "jsonp" : "json"; |
| | return $callback($result); |
| | } |
| |
|
| | |
| | |
| | |
| | public function install() |
| | { |
| | $param = input(); |
| | $name = $param['name']; |
| | $force = (int)$param['force']; |
| | if (!$name) { |
| | return $this->error(lang('param_err')); |
| | } |
| | try { |
| | $uid = $this->request->post("uid"); |
| | $token = $this->request->post("token"); |
| | $version = $this->request->post("version"); |
| | $faversion = $this->request->post("faversion"); |
| | $extend = [ |
| | 'uid' => $uid, |
| | 'token' => $token, |
| | 'version' => $version, |
| | 'faversion' => $faversion |
| | ]; |
| | Service::install($name, $force, $extend); |
| | $info = get_addon_info($name); |
| | $info['config'] = get_addon_config($name) ? 1 : 0; |
| | $info['state'] = 1; |
| | return $this->success(lang('install_err')); |
| | } catch (AddonException $e) { |
| | return $this->result($e->getData(), $e->getCode(), $e->getMessage()); |
| | } catch (Exception $e) { |
| | return $this->error($e->getMessage(), $e->getCode()); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | public function uninstall() |
| | { |
| | $param = input(); |
| | $name = $param['name']; |
| | $force = (int)$param['force']; |
| | if (!$name) { |
| | return $this->error(lang('param_err')); |
| | } |
| | try { |
| | if( strpos($name,".")!==false || strpos($name,"/")!==false || strpos($name,"\\")!==false ) { |
| | $this->error(lang('admin/addon/path_err')); |
| | return; |
| | } |
| |
|
| |
|
| | Service::uninstall($name, $force); |
| | return $this->success(lang('uninstall_ok')); |
| | } catch (AddonException $e) { |
| | return $this->result($e->getData(), $e->getCode(), $e->getMessage()); |
| | } catch (Exception $e) { |
| | return $this->error($e->getMessage()); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | public function state() |
| | { |
| | $param = input(); |
| | $name = $param['name']; |
| | $action = $param['action']; |
| | $force = (int)$param['force']; |
| | if (!$name) { |
| | return $this->error(lang('param_err')); |
| | } |
| | try { |
| | $action = $action == 'enable' ? $action : 'disable'; |
| | |
| | Service::$action($name, $force); |
| | Cache::rm('__menu__'); |
| | return $this->success(lang('opt_ok')); |
| | } catch (AddonException $e) { |
| | return $this->result($e->getData(), $e->getCode(), $e->getMessage()); |
| | } catch (Exception $e) { |
| | return $this->error($e->getMessage()); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | public function local() |
| | { |
| | $param = input(); |
| | $validate = \think\Loader::validate('Token'); |
| | if(!$validate->check($param)){ |
| | return $this->error($validate->getError()); |
| | } |
| | echo 'closed';exit; |
| | $file = $this->request->file('file'); |
| | $addonTmpDir = RUNTIME_PATH . 'addons' . DS; |
| | if (!is_dir($addonTmpDir)) { |
| | @mkdir($addonTmpDir, 0755, true); |
| | } |
| | $info = $file->rule('uniqid')->validate(['size' => 10240000, 'ext' => 'zip'])->move($addonTmpDir); |
| | if ($info) { |
| | $tmpName = substr($info->getFilename(), 0, stripos($info->getFilename(), '.')); |
| | $tmpAddonDir = ADDON_PATH . $tmpName . DS; |
| | $tmpFile = $addonTmpDir . $info->getSaveName(); |
| | try { |
| | Service::unzip($tmpName); |
| | @unlink($tmpFile); |
| | $infoFile = $tmpAddonDir . 'info.ini'; |
| | if (!is_file($infoFile)) { |
| | throw new Exception(lang('admin/addon/lack_config_err')); |
| | } |
| |
|
| | $config = Config::parse($infoFile, '', $tmpName); |
| | $name = isset($config['name']) ? $config['name'] : ''; |
| | if (!$name) { |
| | throw new Exception(lang('admin/addon/name_empty_err')); |
| | } |
| |
|
| | $newAddonDir = ADDON_PATH . $name . DS; |
| | if (is_dir($newAddonDir)) { |
| | throw new Exception(lang('admin/addon/haved_err')); |
| | } |
| |
|
| | |
| | rename($tmpAddonDir, $newAddonDir); |
| | try { |
| | |
| | $info = get_addon_info($name); |
| | if ($info['state']) { |
| | $info['state'] = 0; |
| | set_addon_info($name, $info); |
| | } |
| |
|
| | |
| | $class = get_addon_class($name); |
| | if (class_exists($class)) { |
| | $addon = new $class(); |
| | $addon->install(); |
| | } |
| |
|
| | |
| | Service::importsql($name); |
| |
|
| | $info['config'] = get_addon_config($name) ? 1 : 0; |
| | return $this->success(lang('install_ok')); |
| | } catch (Exception $e) { |
| | if (Dir::delDir($newAddonDir) === false) { |
| |
|
| | } |
| | throw new Exception($e->getMessage()); |
| | } |
| | } catch (Exception $e) { |
| | @unlink($tmpFile); |
| | if (Dir::delDir($tmpAddonDir) === false) { |
| |
|
| | } |
| | return $this->error($e->getMessage()); |
| | } |
| | } else { |
| | |
| | return $this->error($file->getError()); |
| | } |
| | } |
| |
|
| | public function add() |
| | { |
| | return $this->fetch('admin@addon/add'); |
| | } |
| | |
| | |
| | |
| | public function upgrade() |
| | { |
| | $name = $this->request->post("name"); |
| | if (!$name) { |
| | return $this->error(lang('param_err')); |
| | } |
| | try { |
| | $uid = $this->request->post("uid"); |
| | $token = $this->request->post("token"); |
| | $version = $this->request->post("version"); |
| | $faversion = $this->request->post("faversion"); |
| | $extend = [ |
| | 'uid' => $uid, |
| | 'token' => $token, |
| | 'version' => $version, |
| | 'faversion' => $faversion |
| | ]; |
| | |
| | Service::upgrade($name, $extend); |
| | Cache::rm('__menu__'); |
| | return $this->success(lang('update_ok')); |
| | } catch (AddonException $e) { |
| | return $this->result($e->getData(), $e->getCode(), $e->getMessage()); |
| | } catch (Exception $e) { |
| | return $this->error($e->getMessage()); |
| | } |
| | } |
| |
|
| | } |
| |
|