AnnController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Controllers\Admin;
  3. use App\Models\Ann;
  4. use App\Controllers\AdminController;
  5. use App\Utils\Telegram;
  6. use App\Services\Config;
  7. use App\Services\Mail;
  8. use App\Models\User;
  9. use Exception;
  10. use Ozdemir\Datatables\Datatables;
  11. use App\Utils\DatatablesHelper;
  12. class AnnController extends AdminController
  13. {
  14. public function index($request, $response, $args)
  15. {
  16. $table_config['total_column'] = array('op' => '操作', 'id' => 'ID',
  17. 'date' => '日期', 'content' => '内容');
  18. $table_config['default_show_column'] = array('op', 'id',
  19. 'date', 'content');
  20. $table_config['ajax_url'] = 'announcement/ajax';
  21. return $this->view()->assign('table_config', $table_config)->display('admin/announcement/index.tpl');
  22. }
  23. public function create($request, $response, $args)
  24. {
  25. return $this->view()->display('admin/announcement/create.tpl');
  26. }
  27. public function add($request, $response, $args)
  28. {
  29. $issend = $request->getParam('issend');
  30. $PushBear = $request->getParam('PushBear');
  31. $vip = $request->getParam('vip');
  32. $content = $request->getParam('content');
  33. $subject = Config::get('appName') . '-公告';
  34. if ($request->getParam('page') == 1) {
  35. $ann = new Ann();
  36. $ann->date = date('Y-m-d H:i:s');
  37. $ann->content = $content;
  38. $ann->markdown = $request->getParam('markdown');
  39. if (!$ann->save()) {
  40. $rs['ret'] = 0;
  41. $rs['msg'] = '添加失败';
  42. return $response->getBody()->write(json_encode($rs));
  43. }
  44. }
  45. if ($PushBear == 1) {
  46. $PushBear_sendkey = Config::get('PushBear_sendkey');
  47. $postdata = http_build_query(
  48. array(
  49. 'text' => $subject,
  50. 'desp' => $request->getParam('markdown'),
  51. 'sendkey' => $PushBear_sendkey
  52. )
  53. );
  54. file_get_contents('https://pushbear.ftqq.com/sub?' . $postdata, false);
  55. }
  56. if ($issend == 1) {
  57. $beginSend = ($request->getParam('page') - 1) * Config::get('sendPageLimit');
  58. $users = User::where('class', '>=', $vip)->skip($beginSend)->limit(Config::get('sendPageLimit'))->get();
  59. foreach ($users as $user) {
  60. $to = $user->email;
  61. if (!filter_var($to, FILTER_VALIDATE_EMAIL)) {
  62. continue;
  63. }
  64. $text = $content;
  65. try {
  66. Mail::send($to, $subject, 'news/warn.tpl', [
  67. 'user' => $user, 'text' => $text
  68. ], [
  69. ]);
  70. } catch (Exception $e) {
  71. continue;
  72. }
  73. }
  74. if (count($users) == Config::get('sendPageLimit')) {
  75. $rs['ret'] = 2;
  76. $rs['msg'] = $request->getParam('page') + 1;
  77. return $response->getBody()->write(json_encode($rs));
  78. }
  79. }
  80. Telegram::SendMarkdown('新公告:' . PHP_EOL . $request->getParam('markdown'));
  81. $rs['ret'] = 1;
  82. if ($issend == 1 && $PushBear == 1) {
  83. $rs['msg'] = '公告添加成功,邮件发送和PushBear推送成功';
  84. }
  85. if ($issend == 1 && $PushBear != 1) {
  86. $rs['msg'] = '公告添加成功,邮件发送成功';
  87. }
  88. if ($issend != 1 && $PushBear == 1) {
  89. $rs['msg'] = '公告添加成功,PushBear推送成功';
  90. }
  91. if ($issend != 1 && $PushBear != 1) {
  92. $rs['msg'] = '公告添加成功';
  93. }
  94. return $response->getBody()->write(json_encode($rs));
  95. }
  96. public function edit($request, $response, $args)
  97. {
  98. $id = $args['id'];
  99. $ann = Ann::find($id);
  100. return $this->view()->assign('ann', $ann)->display('admin/announcement/edit.tpl');
  101. }
  102. public function update($request, $response, $args)
  103. {
  104. $id = $args['id'];
  105. $ann = Ann::find($id);
  106. $ann->content = $request->getParam('content');
  107. $ann->markdown = $request->getParam('markdown');
  108. $ann->date = date('Y-m-d H:i:s');
  109. if (!$ann->save()) {
  110. $rs['ret'] = 0;
  111. $rs['msg'] = '修改失败';
  112. return $response->getBody()->write(json_encode($rs));
  113. }
  114. Telegram::SendMarkdown('公告更新:' . PHP_EOL . $request->getParam('markdown'));
  115. $rs['ret'] = 1;
  116. $rs['msg'] = '修改成功';
  117. return $response->getBody()->write(json_encode($rs));
  118. }
  119. public function delete($request, $response, $args)
  120. {
  121. $id = $request->getParam('id');
  122. $ann = Ann::find($id);
  123. if (!$ann->delete()) {
  124. $rs['ret'] = 0;
  125. $rs['msg'] = '删除失败';
  126. return $response->getBody()->write(json_encode($rs));
  127. }
  128. $rs['ret'] = 1;
  129. $rs['msg'] = '删除成功';
  130. return $response->getBody()->write(json_encode($rs));
  131. }
  132. public function ajax($request, $response, $args)
  133. {
  134. $datatables = new Datatables(new DatatablesHelper());
  135. $datatables->query('Select id as op,id,date,content from announcement');
  136. $datatables->edit('op', static function ($data) {
  137. return '<a class="btn btn-brand" href="/admin/announcement/' . $data['id'] . '/edit">编辑</a>
  138. <a class="btn btn-brand-accent" id="delete" value="' . $data['id'] . '" href="javascript:void(0);" onClick="delete_modal_show(\'' . $data['id'] . '\')">删除</a>';
  139. });
  140. $datatables->edit('DT_RowId', static function ($data) {
  141. return 'row_1_' . $data['id'];
  142. });
  143. $body = $response->getBody();
  144. $body->write($datatables->generate());
  145. }
  146. }