ArticleService.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Services;
  3. class ArticleService extends BaseService
  4. {
  5. private static $article;
  6. private static $valuables;
  7. public function __construct($article)
  8. {
  9. parent::__construct();
  10. self::$article = $article;
  11. $siteName = sysConfig('website_name');
  12. $siteUrl = sysConfig('website_url');
  13. $subscribe = auth()->user()->subscribe;
  14. $subUrl = route('sub', $subscribe->code);
  15. self::$valuables = [
  16. '{{siteName}}' => $siteName,
  17. '{{urlEndcodeSiteName}}' => urlencode($siteName),
  18. '{{urlEndcodeSiteUrl}}' => urlencode($siteUrl),
  19. '{{siteUrl}}' => $siteUrl,
  20. '{{subUrl}}' => $subUrl,
  21. '{{urlEncodeSubUrl}}' => urlencode($subUrl),
  22. '{{base64SubUrl}}' => base64url_encode($subUrl),
  23. ];
  24. }
  25. /**
  26. * @return mixed
  27. */
  28. public function getContent()
  29. {
  30. $content = self::$article->content;
  31. $this->formatAccessable($content);
  32. $this->formatValuables($content);
  33. return $content;
  34. }
  35. private function formatAccessable(&$body)
  36. {
  37. $noAccess = ! UserService::getInstance()->isActivePaying();
  38. if ($noAccess) {
  39. while ($this->getInBetween($body, '<!--access_mode_1 start-->', '<!--access_mode_1 end-->', true) !== '') {
  40. $accessArea = $this->getInBetween($body, '<!--access_mode_1 start-->', '<!--access_mode_1 end-->');
  41. if ($accessArea) {
  42. $body = strtr($body,
  43. [$accessArea => '<div class="user-no-access"><i class="icon wb-lock" aria-hidden="true"></i>'.__('You must have a valid subscription to view content in this area!').'</div>']);
  44. }
  45. }
  46. }
  47. while ($this->getInBetween($body, '<!--access_mode_2 start-->', '<!--access_mode_2 end-->', true) !== '') {
  48. $accessArea = $this->getInBetween($body, '<!--access_mode_2 start-->', '<!--access_mode_2 end-->');
  49. $hasAccessArea = $this->getInBetween($accessArea, '<!--access_mode_2 start-->', '<!--access_mode_2 else-->', true);
  50. $noAccessArea = $this->getInBetween($accessArea, '<!--access_mode_2 else-->', '<!--access_mode_2 end-->', true);
  51. $body = strtr($body, [$accessArea => $accessArea && $noAccess ? $noAccessArea : $hasAccessArea]);
  52. }
  53. }
  54. private function getInBetween($input, $start, $end, $bodyOnly = false): string
  55. {
  56. $substr = substr($input, strpos($input, $start) + strlen($start), strpos($input, $end) - strlen($input));
  57. return $bodyOnly ? $substr : $start.$substr.$end;
  58. }
  59. private function formatValuables(&$body)
  60. {
  61. $body = strtr($body, self::$valuables);
  62. }
  63. }