Plugins.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace app\controller\admin;
  3. use app\service\admin\PluginsServiceFacade;
  4. use laytp\controller\Backend;
  5. use laytp\library\Http;
  6. use think\facade\Config;
  7. /**
  8. * 插件管理
  9. */
  10. class Plugins extends Backend
  11. {
  12. /**
  13. * files模型对象
  14. * @var \app\model\Files
  15. */
  16. protected $model;
  17. public $hasSoftDel = 1;//是否拥有软删除功能
  18. // 获取laytp官网定义的插件分类列表
  19. public function category()
  20. {
  21. $url = Config::get('plugin.apiUrl') . '/plugins/category';
  22. $data = json_decode(Http::get($url), true)['data'];
  23. return $this->success('获取成功', $data);
  24. }
  25. // 查看
  26. public function index()
  27. {
  28. $params['page'] = $this->request->param('page', 1);
  29. $params['limit'] = $this->request->param('limit', 10);
  30. $params['category_id'] = $this->request->param('category_id', 0);
  31. $url = Config::get('plugin.apiUrl') . '/plugins/index';
  32. $data = json_decode(Http::get($url, $params), true)['data'];
  33. $installed = Config::get('plugin.installed');
  34. foreach ($data['data'] as $k => $datum) {
  35. if ($installed && in_array($datum['alias'], $installed)) {
  36. $data['data'][$k]['installed'] = 1;
  37. $pluginInfo = PluginsServiceFacade::getPluginInfo($datum['alias']);
  38. if (isset($pluginInfo['version'])) {
  39. $version = $pluginInfo['version'];
  40. } else {
  41. $version = '1.0.0';
  42. }
  43. $data['data'][$k]['version'] = $version;
  44. } else {
  45. $data['data'][$k]['installed'] = 2;
  46. }
  47. }
  48. return $this->success('获取成功', $data);
  49. }
  50. // 离线安装 - 所有的离线安装都是覆盖安装
  51. public function offLineInstall()
  52. {
  53. if (PluginsServiceFacade::offLineInstall()) {
  54. return $this->success('安装成功');
  55. } else {
  56. return $this->error(PluginsServiceFacade::getError());
  57. }
  58. }
  59. // 卸载
  60. public function uninstall()
  61. {
  62. $plugin = $this->request->param('plugin');
  63. $info = PluginsServiceFacade::getPluginInfo($plugin);
  64. if (PluginsServiceFacade::unInstall($plugin)) {
  65. $pluginConf = Config::get('plugin');
  66. foreach($pluginConf['installed'] as $k=>$installed){
  67. if($installed === $plugin) unset($pluginConf['installed'][$k]);
  68. }
  69. $pluginConf['installed'] = array_unique($pluginConf['installed']);
  70. sort($pluginConf['installed']);
  71. if(isset($info['is_editor']) && $info['is_editor']){
  72. foreach($pluginConf['installedEditor'] as $k=>$installedEditor){
  73. if($installedEditor === $plugin) unset($pluginConf['installedEditor'][$k]);
  74. }
  75. $pluginConf['installedEditor'] = array_unique($pluginConf['installedEditor']);
  76. sort($pluginConf['installedEditor']);
  77. // 如果根目录下有相应的html文件,将文件内容进行替换
  78. $htmlFile = root_path() . 'public/admin/' . $plugin . '.html';
  79. if(is_file($htmlFile)){
  80. file_put_contents($htmlFile, '<p style="color:blue">请先到插件市场安装' . $plugin . '编辑器。</p>
  81. <p style="color:red">注意:安装或卸载编辑器后,需要清空浏览器缓存才能生效</p>');
  82. }
  83. }
  84. return $this->success($plugin . '插件卸载成功', [
  85. 'pluginConf' => $pluginConf,
  86. 'info' => $info
  87. ]);
  88. } else {
  89. return $this->error(PluginsServiceFacade::getError());
  90. }
  91. }
  92. // 安装
  93. public function install()
  94. {
  95. $plugin = $this->request->param('plugin');
  96. $laytpGwToken = $this->request->param('laytpGwToken');
  97. if (PluginsServiceFacade::install($plugin, $laytpGwToken)) {
  98. // 如果是文件存储,插件安装信息,刚安装完成马上要取出来,取出来的不会是最新的文件内容
  99. $pluginConf = Config::get('plugin');
  100. $pluginConf['installed'][] = $plugin;
  101. $pluginConf['installed'] = array_unique($pluginConf['installed']);
  102. sort($pluginConf['installed']);
  103. $info = PluginsServiceFacade::getPluginInfo($plugin);
  104. if(isset($info['is_editor']) && $info['is_editor']){
  105. $pluginConf['installedEditor'][] = $plugin;
  106. $pluginConf['installedEditor'] = array_unique($pluginConf['installedEditor']);
  107. sort($pluginConf['installedEditor']);
  108. }
  109. return $this->success($plugin . '插件安装成功', [
  110. 'pluginConf' => $pluginConf
  111. ]);
  112. } else {
  113. $error = PluginsServiceFacade::getError();
  114. return $this->error($error['msg'], $error['code']);
  115. }
  116. }
  117. }