Packet.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
  10. // +----------------------------------------------------------------------
  11. namespace app\admin\controller;
  12. use app\common\builder\ZBuilder;
  13. use app\admin\model\Packet as PacketModel;
  14. /**
  15. * 数据包控制器
  16. * @package app\admin\controller
  17. */
  18. class Packet extends Admin
  19. {
  20. /**
  21. * 首页
  22. * @param string $group 分组
  23. * @author 蔡伟明 <314013107@qq.com>
  24. * @return mixed
  25. */
  26. public function index($group = 'local')
  27. {
  28. // 配置分组信息
  29. $list_group = ['local' => '本地数据包'];
  30. $tab_list = [];
  31. foreach ($list_group as $key => $value) {
  32. $tab_list[$key]['title'] = $value;
  33. $tab_list[$key]['url'] = url('index', ['group' => $key]);
  34. }
  35. $PacketModel = new PacketModel;
  36. $data_list = $PacketModel->getAll();
  37. foreach ($data_list as &$value) {
  38. if (isset($value['author_url']) && !empty($value['author_url'])) {
  39. $value['author'] = '<a href="'. $value['author_url']. '" target="_blank">'. $value['author'] .'</a>';
  40. }
  41. }
  42. if ($data_list === false) {
  43. $this->error($PacketModel->getError());
  44. }
  45. // 自定义按钮
  46. $btn_install = [
  47. 'title' => '安装',
  48. 'icon' => 'fa fa-fw fa-sign-in',
  49. 'class' => 'btn btn-xs btn-default ajax-get confirm',
  50. 'href' => url('install', ['name' => '__id__'])
  51. ];
  52. $btn_uninstall = [
  53. 'title' => '卸载',
  54. 'icon' => 'fa fa-fw fa-sign-out',
  55. 'class' => 'btn btn-xs btn-default ajax-get confirm',
  56. 'href' => url('uninstall', ['name' => '__id__'])
  57. ];
  58. $btn_install_all = [
  59. 'title' => '安装',
  60. 'icon' => 'fa fa-fw fa-sign-in',
  61. 'class' => 'btn btn-primary ajax-post confirm',
  62. 'href' => url('install')
  63. ];
  64. $btn_uninstall_all = [
  65. 'title' => '卸载',
  66. 'icon' => 'fa fa-fw fa-sign-out',
  67. 'class' => 'btn btn-danger ajax-post confirm',
  68. 'href' => url('uninstall')
  69. ];
  70. switch ($group) {
  71. case 'local':
  72. // 使用ZBuilder快速创建数据表格
  73. return ZBuilder::make('table')
  74. ->setPageTitle('数据包管理') // 设置页面标题
  75. ->setPrimaryKey('name')
  76. ->setTabNav($tab_list, $group) // 设置tab分页
  77. ->addColumns([ // 批量添加数据列
  78. ['name', '名称'],
  79. ['title', '标题'],
  80. ['author', '作者'],
  81. ['version', '版本号'],
  82. ['status', '是否安装', 'yesno'],
  83. ['right_button', '操作', 'btn']
  84. ])
  85. ->addTopButton('custom', $btn_install_all)
  86. ->addTopButton('custom', $btn_uninstall_all)
  87. ->addRightButton('custom', $btn_install) // 添加右侧按钮
  88. ->addRightButton('custom', $btn_uninstall) // 添加右侧按钮
  89. ->setRowList($data_list) // 设置表格数据
  90. ->fetch(); // 渲染模板
  91. break;
  92. case 'online':
  93. return '<h2>正在制作中...</h2>';
  94. break;
  95. }
  96. }
  97. /**
  98. * 安装
  99. * @param string $name 数据包名
  100. * @author 蔡伟明 <314013107@qq.com>
  101. * @return mixed
  102. */
  103. public function install($name = '')
  104. {
  105. $names = $name != '' ? (array)$name : $this->request->param('ids/a');
  106. foreach ($names as $name) {
  107. $result = PacketModel::install($name);
  108. if ($result === true) {
  109. if (!PacketModel::where('name', $name)->find()) {
  110. $data = PacketModel::getInfoFromFile($name);
  111. $data['status'] = 1;
  112. $data['tables'] = json_encode($data['tables']);
  113. PacketModel::create($data);
  114. }
  115. } else {
  116. $this->error('安装失败:'. $result);
  117. }
  118. }
  119. // 记录行为
  120. $packet_titles = PacketModel::where('name', 'in', $names)->column('title');
  121. action_log('packet_install', 'admin_packet', 0, UID, implode('、', $packet_titles));
  122. $this->success('安装成功');
  123. }
  124. /**
  125. * 卸载
  126. * @param string $name 数据包名
  127. * @author 蔡伟明 <314013107@qq.com>
  128. */
  129. public function uninstall($name = '')
  130. {
  131. $names = $name != '' ? (array)$name : $this->request->param('ids/a');
  132. // 记录行为
  133. $packet_titles = PacketModel::where('name', 'in', $names)->column('title');
  134. action_log('packet_uninstall', 'admin_packet', 0, UID, implode('、', $packet_titles));
  135. foreach ($names as $name) {
  136. PacketModel::uninstall($name);
  137. }
  138. $this->success('卸载成功');
  139. }
  140. }