ChannelApi.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace App\Http\Api;
  3. use App\Models\Channel;
  4. use Illuminate\Support\Str;
  5. use Illuminate\Support\Facades\Log;
  6. class ChannelApi
  7. {
  8. public static function getById($id)
  9. {
  10. if (!Str::isUuid($id)) {
  11. return false;
  12. }
  13. $channel = Channel::where("uid", $id)->first();
  14. if ($channel) {
  15. return [
  16. 'id' => $id,
  17. 'name' => $channel['name'],
  18. 'type' => $channel['type'],
  19. 'lang' => $channel['lang'],
  20. 'studio_id' => $channel['owner_uid'],
  21. ];
  22. } else {
  23. return false;
  24. }
  25. }
  26. public static function getCanReadByUser($userUuid = null)
  27. {
  28. #获取 user 在某章节 所有有权限的 channel 列表
  29. $channelId = [];
  30. //我自己的
  31. if ($userUuid) {
  32. $my = Channel::select('uid')->where('owner_uid', $userUuid)->get();
  33. foreach ($my as $key => $value) {
  34. $channelId[$value->uid] = $value->uid;
  35. }
  36. //获取共享channel
  37. $allSharedChannels = ShareApi::getResList($userUuid, 2);
  38. foreach ($allSharedChannels as $key => $value) {
  39. $channelId[$value['res_id']] = $value['res_id'];
  40. }
  41. }
  42. //获取全网公开的channel
  43. $my = Channel::select('uid')->where('status', 30)->get();
  44. foreach ($my as $key => $value) {
  45. $channelId[$value->uid] = $value->uid;
  46. }
  47. $output = array();
  48. foreach ($channelId as $key => $value) {
  49. $output[] = $key;
  50. }
  51. return $output;
  52. }
  53. public static function getCanEditByUser($userUuid = null)
  54. {
  55. #获取 user 在某章节 所有有权限的 channel 列表
  56. $channelId = [];
  57. //我自己的
  58. if ($userUuid) {
  59. $my = Channel::select('uid')->where('owner_uid', $userUuid)->get();
  60. foreach ($my as $key => $value) {
  61. $channelId[$value->uid] = $value->uid;
  62. }
  63. //获取共享channel
  64. $allSharedChannels = ShareApi::getResList($userUuid, 2);
  65. foreach ($allSharedChannels as $key => $value) {
  66. if ($value['power'] >= 20) {
  67. $channelId[$value['res_id']] = $value['res_id'];
  68. }
  69. }
  70. }
  71. $output = array();
  72. foreach ($channelId as $key => $value) {
  73. $output[] = $key;
  74. }
  75. return $output;
  76. }
  77. public static function userCanRead($userUid, $channelUid)
  78. {
  79. $channels = ChannelApi::getCanReadByUser($userUid);
  80. return in_array($channelUid, $channels);
  81. }
  82. public static function userCanEdit($userUid, $channelUid)
  83. {
  84. $channels = ChannelApi::getCanEditByUser($userUid);
  85. return in_array($channelUid, $channels);
  86. }
  87. public static function canManageByUser($channelId, $userUuid)
  88. {
  89. $isOwner = Channel::where('owner_uid', $userUuid)
  90. ->where('uid', $channelId)->exists();
  91. return $isOwner;
  92. }
  93. public static function getSysChannel($channel_name, $fallback = "")
  94. {
  95. $channel = Channel::where('name', $channel_name)
  96. ->where('owner_uid', config("mint.admin.root_uuid"))
  97. ->first();
  98. if (!$channel) {
  99. if (!empty($fallback)) {
  100. $channel = Channel::where('name', $fallback)
  101. ->where('owner_uid', config("mint.admin.root_uuid"))
  102. ->first();
  103. if (!$channel) {
  104. return false;
  105. } else {
  106. return $channel->uid;
  107. }
  108. }
  109. return false;
  110. } else {
  111. return $channel->uid;
  112. }
  113. }
  114. /**
  115. * 获取某个studio 的某个语言的自定义书的channel
  116. * 如果没有,建立
  117. */
  118. public static function userBookGetOrCreate($studioId, $lang, $status)
  119. {
  120. $channelName = '_user_book_' . $lang;
  121. $channel = Channel::where('owner_uid', $studioId)
  122. ->where('name', $channelName)->first();
  123. if ($channel) {
  124. return $channel->uid;
  125. }
  126. $channelUuid = Str::uuid();
  127. $channel = new Channel;
  128. $channel->id = app('snowflake')->id();
  129. $channel->uid = $channelUuid;
  130. $channel->owner_uid = $studioId;
  131. $channel->name = $channelName;
  132. $channel->type = 'original';
  133. $channel->lang = $lang;
  134. $channel->editor_id = 0;
  135. $channel->is_system = true;
  136. $channel->create_time = time() * 1000;
  137. $channel->modify_time = time() * 1000;
  138. $channel->status = $status;
  139. $saveOk = $channel->save();
  140. if ($saveOk) {
  141. Log::debug('copy user book : create channel success name=' . $channelName);
  142. return $channel->uid;
  143. } else {
  144. Log::error('copy user book : create channel fail.', ['channel' => $channelName, 'studioId' => $studioId]);
  145. return false;
  146. }
  147. }
  148. }