You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

183 lines
6.8 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: a
  5. * Date: 2017/8/29
  6. * Time: 10:43
  7. */
  8. if (!defined('IN_DZZ')) {
  9. exit('Access Denied');
  10. }
  11. define('CURRENT_PATH', 'dzz/system');
  12. $do = empty($_GET['do']) ? '' : $_GET['do'];
  13. $uid = isset($_GET['uid']) ? intval($_GET['uid']) : $_G['uid'];
  14. if ($do == 'filelist') {
  15. $perpage = isset($_GET['perpage']) ? intval($_GET['perpage']) : 100;//默认每页条数
  16. $page = empty($_GET['page']) ? 1 : intval($_GET['page']);//页码数
  17. $start = ($page - 1) * $perpage;//开始条数
  18. $total = 0;//总条数
  19. $disp = isset($_GET['disp']) ? intval($_GET['disp']) : 3;
  20. $sid = empty($_GET['sid']) ? 0 : $_GET['sid'];//id
  21. $bz = empty($_GET['bz']) ? '' : urldecode($_GET['bz']);
  22. $path = rawurldecode($_GET['path']);
  23. if (!$path) $path = $bz;
  24. $marker = empty($_GET['marker']) ? '' : trim($_GET['marker']);
  25. $data = array();
  26. if ($_G['uid'] && $bz && $bz !== 'dzz') {//云盘查询
  27. $bzinfo=IO::getCloud($bz);
  28. if (!$bzinfo) {
  29. exit(json_encode(array('error' => lang('cloud_no_info'))));
  30. }
  31. if($bzinfo['available']<1) {
  32. exit(json_encode(array('error' => lang('cloud_no_available'))));
  33. }
  34. $asc = intval($_GET['asc']);
  35. list($prex, $id) = explode('-', $sid);
  36. $disp = intval($_GET['disp']) ? intval($_GET['disp']) : 0;//文件排序
  37. $order = $asc > 0 ? 'asc' : "desc";
  38. switch ($_GET['disp']) {
  39. case 0:
  40. $by = 'name';
  41. break;
  42. case 1:
  43. $by = 'size';
  44. break;
  45. case 2 :
  46. $by = array('type', 'ext');
  47. break;
  48. case 3:
  49. $by = 'dateline';
  50. break;
  51. }
  52. $limit = $start . '-' . ($start + $perpage);
  53. if (strpos($bz, 'ALIOSS') === 0 || strpos($bz, 'JSS') === 0 || strpos($bz, 'qiniu') === 0) {
  54. $order = $marker;
  55. $limit = $perpage;
  56. } elseif (strpos($bz, 'OneDrive') === 0) {
  57. $limit = $perpage;
  58. $force = $marker;
  59. }
  60. $folder = IO::getMeta($path);
  61. $perm=perm_check::checkperm('read', $folder);
  62. if (!$perm) {
  63. exit(json_encode(array('error' => lang('no_privilege'))));
  64. }
  65. if ($folder['error']) {
  66. exit(json_encode(array('error' => $folder['error'])));
  67. }
  68. $icosdata = IO::listFiles($path, $by, $order, $limit, $force);
  69. if ($icosdata['error']) {
  70. exit(json_encode(array('error' => $icosdata['error'])));
  71. }
  72. $folderdata = array();
  73. $ignore = 0;
  74. $folder['disp'] = $disp;
  75. $folder['iconview'] = $_GET['iconview'];
  76. $folderdata[$folder['rid']] = IO::getFolderByIcosdata($folder);
  77. foreach ($icosdata as $key => $value) {
  78. if ($value['error']) {
  79. $ignore++;
  80. continue;
  81. }
  82. if (strpos($bz, 'ftp') === false) {
  83. if (trim($value['path'], '/') == trim($path, '/')) {
  84. $ignore++;
  85. continue;
  86. }
  87. }
  88. $data[$key] = $value;
  89. }
  90. } else {
  91. list($prex, $id) = explode('-', $sid);
  92. if ($prex == 'f') {
  93. $arr = array();
  94. //查询当前文件夹信息
  95. if ($folder = C::t('folder')->fetch_by_fid($id)) {
  96. if ($folder['gid']) {
  97. $uid = $_G['uid'];
  98. $gid = $folder['gid'];
  99. //群组信息
  100. if (!$group = C::t('organization')->fetch($gid)) {
  101. $mqx = '1';
  102. }
  103. //获取群组成员权限
  104. $perm = C::t('organization_admin')->chk_memberperm($gid, $uid);
  105. //判断群组是否开启,如果未开启(共享目录)并且不是管理员不能访问
  106. if (!$group['diron'] && !$perm) {
  107. $mqx = '1';
  108. }
  109. //判断是否有权限访问群组,如果不是管理员权限(主要针对系统管理员和上级管理员),并且非成员
  110. if (!$perm && !C::t('organization')->ismember($gid, $uid, false)) {
  111. $mqx = '1';
  112. }
  113. }
  114. if (!$folder['fid']) {
  115. $mqx = '1';
  116. }
  117. if (!$mqx) {
  118. $folder['disp'] = $disp = intval($_GET['disp']) ? intval($_GET['disp']) : intval($folder['disp']);//文件排序
  119. $folder['iconview'] = (isset($_GET['iconview']) ? intval($_GET['iconview']) : intval($folder['iconview']));//排列方式
  120. $keyword = isset($_GET['keyword']) ? urldecode($_GET['keyword']) : '';
  121. $conditions = array();
  122. if ($keyword) {
  123. $conditions['name'] = array($keyword, 'like', 'and');
  124. }
  125. $asc = isset($_GET['asc']) ? intval($_GET['asc']) : 1;
  126. $order = $asc > 0 ? 'ASC' : "DESC";
  127. switch ($disp) {
  128. case 0:
  129. $orderby = 'name';
  130. break;
  131. case 1:
  132. $orderby = 'size';
  133. break;
  134. case 2:
  135. $orderby = array('type', 'ext');
  136. break;
  137. case 3:
  138. $orderby = 'dateline';
  139. break;
  140. }
  141. $folder['perm'] = perm_check::getPerm($folder['fid']);//获取文件权限
  142. $data = C::t('resources')->fetch_all_by_pfid($folder['fid'], $conditions, $perpage, $orderby, $order, $start, false, false, true);//查询文件信息
  143. $folderdata[$folder['fid']] = $folder;//文件夹信息
  144. }
  145. }
  146. }
  147. }
  148. if (count($data) >= $perpage) {
  149. $total = $start + $perpage * 2 - 1;
  150. } else {
  151. $total = $start + count($data);
  152. }
  153. //$total=$count;//总条数
  154. if (!$json_data = json_encode($data)) $data = array();
  155. if (!$json_data = json_encode($folderdata)) $folderdata = array();
  156. //返回数据
  157. $return = array(
  158. 'sid' => $sid,
  159. 'total' => $total,
  160. 'data' => $data ? $data : array(),
  161. 'folderdata' => $folderdata ? $folderdata : array(),
  162. 'param' => array(
  163. 'disp' => $folder['disp'],
  164. 'view' => $folder['iconview'],
  165. 'page' => $page,
  166. 'perpage' => $perpage,
  167. 'bz' => $bz,
  168. 'total' => $total,
  169. 'asc' => $asc,
  170. 'keyword' => $keyword,
  171. 'localsearch' => $bz ? 1 : 0
  172. )
  173. );
  174. exit(json_encode($return));
  175. }