ShareApi.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace App\Http\Api;
  3. use App\Models\GroupMember;
  4. use App\Models\Share;
  5. use App\Models\Article;
  6. use App\Models\Channel;
  7. use App\Models\Collection;
  8. use App\Http\Api\ChannelApi;
  9. class ShareApi{
  10. /**
  11. * 获取某用户的可见的协作资源
  12. * $res_type 见readme.md#资源类型 -1全部类型资源
  13. * ## 资源类型
  14. * 1 PCS 文档
  15. * 2 Channel 版本
  16. * 3 Article 文章
  17. * 4 Collection 文集
  18. * 5 版本片段
  19. * power 权限 10: 只读 20:编辑 30: 拥有者
  20. */
  21. public static function getResList($user_uid,$res_type=-1){
  22. # 找我加入的群
  23. $my_group = GroupMember::where("user_id",$user_uid)->select('group_id')->get();
  24. $userList[] = $user_uid;
  25. foreach ($my_group as $key => $value) {
  26. # code...
  27. $userList[]=$value["group_id"];
  28. }
  29. if($res_type==-1){
  30. #所有类型资源
  31. $Fetch =Share::whereIn("cooperator_id",$userList)->select(['res_id','res_type','power'])->get();
  32. }
  33. else{
  34. #指定类型资源
  35. $Fetch =Share::whereIn("cooperator_id",$userList)
  36. ->where('res_type',$res_type)
  37. ->select(['res_id','res_type','power'])->get();
  38. }
  39. $resOutput = array();
  40. foreach ($Fetch as $key => $value) {
  41. # 查重
  42. if(isset($resOutput[$value["res_id"]])){
  43. if($value["power"]>$resOutput[$value["res_id"]]["power"]){
  44. $resOutput[$value["res_id"]]["power"] = $value["power"];
  45. }
  46. }
  47. else{
  48. $resOutput[$value["res_id"]]= array("power"=> $value["power"],"type" => $value["res_type"]);
  49. }
  50. }
  51. $resList=array();
  52. foreach ($resOutput as $key => $value) {
  53. # code...
  54. $resList[]=array("res_id"=>$key,"res_type"=>(int)$value["type"],"power"=>(int)$value["power"]);
  55. }
  56. foreach ($resList as $key => $res) {
  57. # 获取资源标题 和所有者
  58. $resList[$key]["res_title"]="_unknown_";
  59. $resList[$key]["res_owner_id"]="_unknown_";
  60. $resList[$key]["type"]="_unknown_";
  61. $resList[$key]["status"]="0";
  62. $resList[$key]["lang"]="_unknown_";
  63. switch ($res["res_type"]) {
  64. case 1:
  65. # pcs 文档
  66. $resList[$key]["res_title"]="title";
  67. break;
  68. case 2:
  69. # channel
  70. $channelInfo = Channel::where('uid',$res["res_id"])->first();
  71. if($channelInfo){
  72. $resList[$key]["res_title"]=$channelInfo["name"];
  73. $resList[$key]["res_owner_id"]=$channelInfo["owner_uid"];
  74. $resList[$key]["type"]=$channelInfo["type"];
  75. $resList[$key]["status"]=$channelInfo["status"];
  76. $resList[$key]["lang"]=$channelInfo["lang"];
  77. }
  78. break;
  79. case 3:
  80. # 3 Article 文章
  81. $aInfo = Article::where('uid',$res["res_id"])->first();
  82. if($aInfo){
  83. $resList[$key]["res_title"]=$aInfo["title"];
  84. $resList[$key]["res_owner_id"]=$aInfo["owner"];
  85. $resList[$key]["status"]=$aInfo["status"];
  86. $resList[$key]["lang"]='';
  87. }
  88. break;
  89. case 4:
  90. # 4 Collection 文集
  91. $aInfo = Collection::where('uid',$res["res_id"])->first();
  92. if($aInfo){
  93. $resList[$key]["res_title"]=$aInfo["title"];
  94. $resList[$key]["res_owner_id"]=$aInfo["owner"];
  95. $resList[$key]["status"]=$aInfo["status"];
  96. $resList[$key]["lang"]=$aInfo["lang"];
  97. }
  98. break;
  99. case 5:
  100. # code...
  101. break;
  102. default:
  103. # code...
  104. break;
  105. }
  106. }
  107. return $resList;
  108. }
  109. /**
  110. * 获取对某个共享资源的权限
  111. */
  112. public static function getResPower($user_uid,$res_id,$res_type=0){
  113. if(empty($user_uid)){
  114. #未登录用户 没有共享资源
  115. return 0;
  116. }
  117. //查看是否为资源拥有者
  118. if($res_type!=0){
  119. switch ($res_type) {
  120. case 2:
  121. # channel
  122. $channel = ChannelApi::getById($res_id);
  123. if($channel){
  124. if($channel['studio_id'] === $user_uid){
  125. return 30;
  126. }
  127. }
  128. break;
  129. case 3:
  130. //Article
  131. $owner = Article::where('uid',$res_id)->value('owner');
  132. if($owner === $user_uid){
  133. return 30;
  134. }
  135. break;
  136. case 4:
  137. $owner = Collection::where('uid',$res_id)->value('owner');
  138. if($owner === $user_uid){
  139. return 30;
  140. }
  141. //文集
  142. break;
  143. }
  144. }
  145. # 找我加入的群
  146. $my_group = GroupMember::where("user_id",$user_uid)->select('group_id')->get();
  147. $userList[] = $user_uid;
  148. foreach ($my_group as $key => $value) {
  149. $userList[]=$value["group_id"];
  150. }
  151. $Fetch =Share::whereIn("cooperator_id",$userList)
  152. ->where('res_id',$res_id)
  153. ->select(['power'])->get();
  154. $power=0;
  155. foreach ($Fetch as $key => $value) {
  156. # code...
  157. if((int)$value["power"]>$power){
  158. $power = $value["power"];
  159. }
  160. }
  161. return $power;
  162. }
  163. }