ChannelApi.php 5.5 KB

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