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.

179 lines
6.4 KiB

  1. <?php
  2. if (!defined('IN_DZZ')) {
  3. exit('Access Denied');
  4. }
  5. global $_G;
  6. Hook::listen('check_login');//检查是否登录,未登录跳转到登录界面
  7. $uid = $_G['uid'];
  8. $do = isset($_GET['do']) ? trim($_GET['do']) : '';
  9. if ($do == 'delsearchcat') {//删除搜索类型
  10. $catid = isset($_GET['id']) ? intval($_GET['id']) : '';
  11. if (C::t('resources_cat')->del_by_id($catid)) {
  12. exit(json_encode(array('success' => true, 'insertid' => $insert)));
  13. } else {
  14. exit(json_encode(array('error' => true)));
  15. }
  16. } elseif ($do == 'searchfile') {
  17. $catid = isset($_GET['id']) ? intval($_GET['id']) : '';
  18. $cats = C::t('resources_cat')->fetch_by_id($catid);
  19. $cattext = explode(',', $cats['ext']);
  20. $cattidarr = explode(',', $cats['tag']);
  21. $tagarr = C::t('tag')->fetch_tag_by_tid($cattidarr, 'explorer');
  22. } elseif ($do == 'filelist') {
  23. $perpage = isset($_GET['perpage']) ? intval($_GET['perpage']) : 100;//默认每页条数
  24. $page = empty($_GET['page']) ? 1 : intval($_GET['page']);//页码数
  25. $start = ($page - 1) * $perpage;//开始条数
  26. $total = 0;//总条数
  27. $disp = intval($_GET['disp']);
  28. $sid = empty($_GET['sid']) ? 0 : $_GET['sid'];//id
  29. $catid = intval(str_replace('cat-', '', $sid));
  30. $data = array();
  31. $limitsql = "limit $start,$perpage";
  32. $keyword = isset($_GET['keyword']) ? urldecode($_GET['keyword']) : '';
  33. $asc = isset($_GET['asc']) ? intval($_GET['asc']) : 1;
  34. $order = $asc > 0 ? 'ASC' : "DESC";
  35. switch ($disp) {
  36. case 0:
  37. $orderby = 'r.name';
  38. break;
  39. case 1:
  40. $orderby = 'r.size';
  41. break;
  42. case 2:
  43. $orderby = array('r.type', 'r.ext');
  44. break;
  45. case 3:
  46. $orderby = 'r.dateline';
  47. break;
  48. }
  49. $ordersql = '';
  50. if (is_array($orderby)) {
  51. foreach ($orderby as $key => $value) {
  52. $orderby[$key] = $value . ' ' . $order;
  53. }
  54. $ordersql = ' ORDER BY ' . implode(',', $orderby);
  55. } elseif ($orderby) {
  56. $ordersql = ' ORDER BY ' . $orderby . ' ' . $order;
  57. }
  58. $wheresql = ' where r.isdelete < 1';
  59. $param = array('resources', 'folder');
  60. $folderdata = array();
  61. $folderids = array();
  62. $cats = C::t('resources_cat')->fetch_by_id($catid);
  63. //如果接收到后缀名条件,则按指定后缀名搜索
  64. $exts = isset($_GET['exts']) ? getstr($_GET['exts']) : '';
  65. $tags = isset($_GET['tags']) ? getstr($_GET['tags']) : '';
  66. if ($exts) {
  67. $extarr = explode(',', str_replace('.', '', $exts));
  68. $wheresql .= " and r.ext IN (%n)";
  69. $param[] = $extarr;
  70. } else {
  71. if ($cats['ext']) {
  72. $extarr = explode(',', str_replace('.', '', $cats['ext']));
  73. $wheresql .= " and r.ext IN (%n)";
  74. $param[] = $extarr;
  75. } else {
  76. $wheresql .= " and 0 ";
  77. }
  78. }
  79. //如果接收到标签条件
  80. if ($tags) {
  81. $tagsarr = explode(',', $tags);
  82. // print_r($tagsarr);
  83. //查询标签表中有对应rid
  84. $rids = C::t('resources_tag')->fetch_rid_by_tid($tagsarr);
  85. /*print_r($rids);
  86. die;*/
  87. if (count($rids) < 1) {
  88. $wheresql .= " and 0";
  89. } else {
  90. $wheresql .= " and r.rid IN (%n)";
  91. $param[] = $rids;
  92. }
  93. } elseif ($cats['tag']) {
  94. $tagsarr = explode(',', $cats['tag']);
  95. //查询标签表中有对应rid
  96. $rids = C::t('resources_tag')->fetch_rid_in_tid($tagsarr);
  97. if (count($rids) < 1) {
  98. $wheresql .= " and 0";
  99. } else {
  100. $wheresql .= " and r.rid IN (%n)";
  101. $param[] = $rids;
  102. }
  103. }
  104. $explorer_setting = get_resources_some_setting();
  105. $orgids = C::t('organization')->fetch_all_orgid();//获取所有有管理权限的部门
  106. $powerarr = perm_binPerm::getPowerArr();
  107. $or = array();
  108. //用户自己的文件
  109. if ($explorer_setting['useronperm']) {
  110. $or[] = "(r.gid=0 and r.uid=%d)";
  111. $param[] = $_G['uid'];
  112. }
  113. //我管理的群组或部门的文件
  114. if ($orgids['orgids_admin']) {
  115. $or[] = "r.gid IN (%n)";
  116. $param[] = $orgids['orgids_admin'];
  117. }
  118. //我参与的群组的文件
  119. if ($orgids['orgids_member']) {
  120. $or[] = "(r.gid IN(%n) and ((f.perm_inherit & %d) OR (r.uid=%d and f.perm_inherit & %d)))";
  121. $param[] = $orgids['orgids_member'];
  122. $param[] = $powerarr['read2'];
  123. $param[] = $_G['uid'];
  124. $param[] = $powerarr['read1'];
  125. }
  126. if ($or) {
  127. $wheresql .= " and (" . implode(' OR ', $or) . ")";
  128. $data = array();
  129. $folderids = $folderdata = array();
  130. if ($total = DB::result_first("SELECT COUNT(*) FROM %t r LEFT JOIN %t f ON r.pfid=f.fid $wheresql", $param)) {
  131. foreach (DB::fetch_all("SELECT rid FROM %t r LEFT JOIN %t f ON r.pfid=f.fid $wheresql $ordersql $limitsql", $param) as $value) {
  132. if ($arr = C::t('resources')->fetch_by_rid($value['rid'])) {
  133. $data[$arr['rid']] = $arr;
  134. $folderids[$arr['pfid']] = $arr['pfid'];
  135. if ($arr['type'] == 'folder') $folderids[$arr['oid']] = $arr['oid'];
  136. }
  137. }
  138. //获取目录信息
  139. foreach ($folderids as $fid) {
  140. if ($folder = C::t('folder')->fetch_by_fid($fid)) $folderdata[$fid] = $folder;
  141. }
  142. }
  143. }
  144. $disp = isset($_GET['disp']) ? intval($_GET['disp']) : intval($cats['disp']);//文件排序
  145. $iconview = (isset($_GET['iconview']) ? intval($_GET['iconview']) : intval($cats['iconview']));//排列方式
  146. $total = $total ? $total : 0;
  147. if (!$json_data = json_encode($data)) $data = array();
  148. if (!$json_data = json_encode($folderdata)) $folderdata = array();
  149. //返回数据
  150. $return = array(
  151. 'sid' => $sid,
  152. 'total' => $total,
  153. 'data' => $data ? $data : array(),
  154. 'folderdata' => $folderdata ? $folderdata : array(),
  155. 'param' => array(
  156. 'disp' => $disp,
  157. 'view' => $iconview,
  158. 'page' => $page,
  159. 'perpage' => $perpage,
  160. 'bz' => $bz,
  161. 'total' => $total,
  162. 'asc' => $asc,
  163. 'keyword' => $keyword,
  164. 'tags' => $tags,
  165. 'exts' => $exts,
  166. 'localsearch' => $bz ? 1 : 0
  167. )
  168. );
  169. exit(json_encode($return));
  170. }
  171. include template('file_content');