WbwSentenceController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Wbw;
  4. use App\Models\WbwBlock;
  5. use App\Models\Channel;
  6. use App\Models\CourseMember;
  7. use App\Models\Course;
  8. use Illuminate\Http\Request;
  9. use App\Http\Api\AuthApi;
  10. use App\Http\Api\ShareApi;
  11. use App\Http\Api\ChannelApi;
  12. use App\Http\Api\CourseApi;
  13. class WbwSentenceController extends Controller
  14. {
  15. /**
  16. * Display a listing of the resource.
  17. *
  18. * @return \Illuminate\Http\Response
  19. */
  20. public function index(Request $request)
  21. {
  22. //
  23. $channelsId = [];
  24. $result = [];
  25. $user = AuthApi::current($request);
  26. $user_uid = null;
  27. if($user){
  28. $user_uid = $user['user_uid'];
  29. }
  30. $sentId = $request->get('book').'-'.
  31. $request->get('para').'-'.
  32. $request->get('wordStart').'-'.
  33. $request->get('wordEnd');
  34. switch ($request->get('view')) {
  35. case 'course-answer':
  36. if($request->has('course')){
  37. $channelsId[] = Course::where('id',$request->get('course'))
  38. ->value('channel_id');
  39. }
  40. break;
  41. case 'sent-can-read':
  42. $channels = [];
  43. if($request->has('course')){
  44. $channels = CourseApi::getStudentChannels($request->get('course'));
  45. $channels[] = Course::where('id',$request->get('course'))
  46. ->value('channel_id');
  47. }else{
  48. $channels = ChannelApi::getCanReadByUser($user_uid);
  49. }
  50. if($request->has('exclude')){
  51. //移除无需查询的channel
  52. foreach ($channels as $key => $id) {
  53. if($id !== $request->get('exclude')){
  54. $channelsId[] = $id;
  55. }
  56. }
  57. }else if($request->has('channels')){
  58. //仅列出指定的channel
  59. $include = explode(',', $request->get('channels'));
  60. foreach ($channels as $key => $id) {
  61. if(in_array($id, $include)){
  62. $channelsId[] = $id;
  63. }
  64. }
  65. }else{
  66. $channelsId = $channels;
  67. }
  68. break;
  69. }
  70. $validBlocks = WbwSentenceController::getBlocksByChannels(
  71. $channelsId,
  72. $request->get('book'),
  73. $request->get('para'),
  74. $request->get('wordStart')
  75. );
  76. foreach ($validBlocks as $key => $blockId) {
  77. $channel = WbwBlock::where('uid',$blockId)->first();
  78. $corpus = new CorpusController;
  79. $props = $corpus->getSentTpl($sentId,[$channel->channel_uid],
  80. 'edit',true,
  81. 'react');
  82. $result[] = $props;
  83. }
  84. return $this->ok(['rows'=>$result,'count'=>count($result)]);
  85. }
  86. public static function getBlocksByChannels($channelsId,$book,$para,$wordId){
  87. $wbwBlocksId = WbwBlock::where('book_id',$book)
  88. ->where('paragraph',$para)
  89. ->whereIn('channel_uid',$channelsId)
  90. ->select('uid')
  91. ->get();
  92. $validBlocks = Wbw::whereIn('block_uid',$wbwBlocksId)
  93. ->where('book_id',$book)
  94. ->where('paragraph',$para)
  95. ->where('wid',$wordId)
  96. ->select('block_uid')
  97. ->groupBy('block_uid')
  98. ->get();
  99. $blocksId = [];
  100. foreach ($validBlocks as $key => $block) {
  101. $blocksId[] = $block->block_uid;
  102. }
  103. return $blocksId;
  104. }
  105. public static function getWbwIdByChannels($channelsId,$book,$para,$wordId){
  106. $validBlocks = WbwSentenceController::getBlocksByChannels($channelsId,$book,$para,$wordId);
  107. $wbwId = Wbw::whereIn('block_uid',$validBlocks)
  108. ->where('book_id',$book)
  109. ->where('paragraph',$para)
  110. ->where('wid',$wordId)
  111. ->select('uid')
  112. ->get();
  113. $id = [];
  114. foreach ($wbwId as $key => $value) {
  115. $id[] = $value->uid;
  116. }
  117. return $id;
  118. }
  119. /**
  120. * Store a newly created resource in storage.
  121. *
  122. * @param \Illuminate\Http\Request $request
  123. * @return \Illuminate\Http\Response
  124. */
  125. public function store(Request $request)
  126. {
  127. //
  128. }
  129. /**
  130. * Display the specified resource.
  131. *
  132. * @param \App\Models\Wbw $wbw
  133. * @return \Illuminate\Http\Response
  134. */
  135. public function show(Wbw $wbw)
  136. {
  137. //
  138. }
  139. /**
  140. * Update the specified resource in storage.
  141. *
  142. * @param \Illuminate\Http\Request $request
  143. * @param \App\Models\Wbw $wbw
  144. * @return \Illuminate\Http\Response
  145. */
  146. public function update(Request $request, Wbw $wbw)
  147. {
  148. //
  149. }
  150. /**
  151. * Remove the specified resource from storage.
  152. *
  153. * @param \App\Models\Wbw $wbw
  154. * @return \Illuminate\Http\Response
  155. */
  156. public function destroy(Wbw $wbw)
  157. {
  158. //
  159. }
  160. }