KnowledgeController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Http\Controllers\User;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\User;
  5. use App\Services\UserService;
  6. use Illuminate\Http\Request;
  7. use App\Models\Knowledge;
  8. class KnowledgeController extends Controller
  9. {
  10. public function fetch(Request $request)
  11. {
  12. if ($request->input('id')) {
  13. $knowledge = Knowledge::where('id', $request->input('id'))
  14. ->where('show', 1)
  15. ->first()
  16. ->toArray();
  17. if (!$knowledge) abort(500, __('user.knowledge.fetch.knowledge_not_exist'));
  18. $user = User::find($request->session()->get('id'));
  19. $userService = new UserService();
  20. if ($userService->isAvailable($user)) {
  21. $appleId = config('v2board.apple_id');
  22. $appleIdPassword = config('v2board.apple_id_password');
  23. } else {
  24. $appleId = __('user.knowledge.fetch.apple_id_must_be_plan');
  25. $appleIdPassword = __('user.knowledge.fetch.apple_id_must_be_plan');
  26. $this->formatAccessData($knowledge['body']);
  27. }
  28. $subscribeUrl = config('v2board.subscribe_url', config('v2board.app_url', env('APP_URL'))) . '/api/v1/client/subscribe?token=' . $user['token'];
  29. $knowledge['body'] = str_replace('{{siteName}}', config('v2board.app_name', 'V2Board'), $knowledge['body']);
  30. $knowledge['body'] = str_replace('{{appleId}}', $appleId, $knowledge['body']);
  31. $knowledge['body'] = str_replace('{{appleIdPassword}}', $appleIdPassword, $knowledge['body']);
  32. $knowledge['body'] = str_replace('{{subscribeUrl}}', $subscribeUrl, $knowledge['body']);
  33. $knowledge['body'] = str_replace('{{urlEncodeSubscribeUrl}}', urlencode($subscribeUrl), $knowledge['body']);
  34. $knowledge['body'] = str_replace(
  35. '{{safeBase64SubscribeUrl}}',
  36. str_replace(
  37. array('+', '/', '='),
  38. array('-', '_', ''),
  39. base64_encode($subscribeUrl)
  40. ),
  41. $knowledge['body']
  42. );
  43. return response([
  44. 'data' => $knowledge
  45. ]);
  46. }
  47. $knowledges = Knowledge::select(['id', 'category', 'title', 'updated_at'])
  48. ->where('language', $request->input('language'))
  49. ->where('show', 1)
  50. ->orderBy('sort', 'ASC')
  51. ->get()
  52. ->groupBy('category');
  53. return response([
  54. 'data' => $knowledges
  55. ]);
  56. }
  57. private function formatAccessData(&$body)
  58. {
  59. function getBetween($input, $start, $end){$substr = substr($input, strlen($start)+strpos($input, $start),(strlen($input) - strpos($input, $end))*(-1));return $substr;}
  60. $accessData = getBetween($body, '<!--access start-->', '<!--access end-->');
  61. if ($accessData) {
  62. $body = str_replace($accessData, '<div class="v2board-no-access">'. __('user.knowledge.formatAccessData.no_access') .'</div>', $body);
  63. }
  64. }
  65. }