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.

389 lines
18 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. $gid = isset($_GET['gid']) ? $_GET['gid'] : '';
  9. //群组信息
  10. if (!$group = C::t('organization')->fetch($gid)) {
  11. showmessage(lang('no_group'), dreferer());
  12. }
  13. //获取群组成员权限
  14. $perm = C::t('organization_admin')->chk_memberperm($gid, $uid);
  15. //判断群组是否开启,如果未开启(共享目录)并且不是管理员不能访问
  16. if (!$group['diron'] && !$perm) {
  17. showmessage(lang('no_privilege'), dreferer());
  18. }
  19. //判断是否有权限访问群组,如果不是管理员权限(主要针对系统管理员和上级管理员),并且非成员
  20. if (!$perm && !C::t('organization')->ismember($gid, $uid, false)) {
  21. showmessage(lang('no_privilege'), dreferer());
  22. }
  23. $perms = get_permsarray();//获取所有权限
  24. $explorer_setting = get_resources_some_setting();
  25. if ($group['type'] == 1 && !$explorer_setting['grouponperm']) {
  26. showmessage(lang('no_privilege'), dreferer());
  27. }
  28. if ($group['type'] == 0 && !$explorer_setting['orgonperm']) {
  29. showmessage(lang('no_privilege'), dreferer());
  30. }
  31. $contenterrormsg = '';
  32. if (!$group['syatemon']) {
  33. showmessage(lang('no_group_by_system'), dreferer());
  34. }
  35. if (!$group['manageon'] && $perm < 1) {
  36. showmessage(lang('no_privilege'), dreferer());
  37. }
  38. if (!$group['available']) {
  39. $contenterrormsg = lang('group_no_file_by_system');
  40. } else {
  41. if (!$group['diron'] && !$perm) {
  42. $contenterrormsg = ($group['type'] > 0) ? lang('group_no_file_by_manage') : lang('group_no_file_by_system');
  43. }
  44. }
  45. $allowvisit = array('file', 'group_ajax', 'right_popbox', 'delete_group');
  46. $do = isset($_GET['do']) ? trim($_GET['do']) : 'file';
  47. if ($do == 'delete_group') {
  48. if ($group['type'] == 0 && $_G['adminid'] != 1) {
  49. exit(json_encode(array('error' => lang('no_privilage'))));
  50. }
  51. if ($group['type'] == 1 && $perm < 2) {
  52. exit(json_encode(array('error' => lang('no_privilage'))));
  53. }
  54. $return = C::t('organization')->delete_by_orgid($gid);
  55. if (isset($return['error'])) {
  56. exit(json_encode(array('error' => $return['error'])));
  57. } else {
  58. exit(json_encode(array('success' => true)));
  59. }
  60. } elseif ($do == 'file') {
  61. $fid = isset($_GET['fid']) ? intval($_GET['fid']) : '';
  62. if (!$fid) $fid = $group['fid'];
  63. $folderinfo = C::t('folder')->fetch_folderinfo_by_fid($fid);
  64. $folderpatharr = getpath($folderinfo['path']);
  65. $folderpathstr = implode('\\', $folderpatharr);
  66. //统计打开次数,如果当前文件夹在resources表无数据,则记录其文件夹id对应数据
  67. if ($rid = C::t('resources')->fetch_rid_by_fid($fid)) {
  68. $rid = C::t('resources')->fetch_rid_by_fid($fid);
  69. $setarr = array(
  70. 'uid' => $uid,
  71. 'views' => 1,
  72. 'opendateline' => TIMESTAMP,
  73. 'fid' => $fid
  74. );
  75. C::t('resources_statis')->add_statis_by_rid($rid, $setarr);
  76. } else {
  77. $setarr = array(
  78. 'uid' => $uid,
  79. 'views' => 1,
  80. 'opendateline' => TIMESTAMP,
  81. );
  82. C::t('resources_statis')->add_statis_by_fid($fid, $setarr);
  83. }
  84. } elseif ($do == 'group_ajax') {
  85. $operation = isset($_GET['operation']) ? trim($_GET['operation']) : '';
  86. if ($operation == 'addgroupuser') {//添加群组成员
  87. $gid = isset($_GET['gid']) ? intval($_GET['gid']) : '';
  88. if (!$perm || !$group['type']) {
  89. return array('error' => lang('no_privilege'));
  90. }
  91. //添加或修改用户时
  92. if (submitcheck('selectsubmit')) {
  93. $uidarr = explode(',', trim($_GET['uids']));
  94. $uids = array();
  95. $userarr = array();
  96. foreach ($uidarr as $v) {
  97. $uids[] = preg_replace('/uid_/', '', $v);
  98. }
  99. $type = intval($_GET['type']) ? 1 : 0;
  100. //获取群组原用户数据
  101. $olduids = C::t('organization_user')->fetch_uids_by_orgid($gid);
  102. //获取管理员数据
  103. $adminer = C::t('organization_admin')->fetch_uids_by_orgid($gid);
  104. $getuserids = array_merge($olduids, $uids);
  105. //获取用户数据
  106. foreach (DB::fetch_all("select username,uid from %t where uid in(%n)", array('user', $getuserids)) as $v) {
  107. $userarr[$v['uid']] = $v['username'];
  108. }
  109. //删除用户
  110. $removeuser = array();
  111. $insertuser = array();
  112. foreach ($olduids as $v) {
  113. if (!in_array($v, $uids) && ($uid != $v || ($uid == $v && $_G['adminid'] == 1))) {
  114. $removeuser[] = $v;
  115. }
  116. }
  117. $delusers = array();
  118. //判断删除用户权限并删除用户
  119. if (count($removeuser) > 0) {
  120. foreach ($removeuser as $k => $v) {
  121. $uperm = C::t('organization_admin')->chk_memberperm($gid, $v);
  122. //如果是系统管理员
  123. if ($_G['adminid'] == 1) {
  124. if (($group['type'] == 1 && $uperm > 1 && $_G['uid'] != $v)) {
  125. unset($removeuser[$k]);
  126. continue;
  127. } else {
  128. $delusers[$v] = $userarr[$v];
  129. }
  130. } else {
  131. //如果操作对象是管理员,并且操作的是群组当前用户不是创建人或者机构,不允许操作
  132. if (in_array($v, $adminer) && (($group['type'] == 1 && $perm < 2) || $group['type'] == 0)) {
  133. unset($removeuser[$k]);
  134. continue;
  135. } else {
  136. $delusers[$v] = $userarr[$v];
  137. }
  138. }
  139. }
  140. }
  141. $appid = C::t('app_market')->fetch_appid_by_mod('{dzzscript}?mod=' . MOD_NAME, 2);
  142. if (count($removeuser) > 0) {
  143. foreach (C::t('organization_user')->delete_by_uid_orgid($removeuser, $gid) as $v) {
  144. if ($v['uid'] != getglobal('uid')) {
  145. $notevars = array(
  146. 'from_id' => $appid,
  147. 'from_idtype' => 'app',
  148. // 'url' => getglobal('siteurl') . '/#group&gid='.$orgid,
  149. 'author' => getglobal('username'),
  150. 'authorid' => getglobal('uid'),
  151. 'dataline' => dgmdate(TIMESTAMP),
  152. 'fname' => getstr($group['orgname'], 31),
  153. );
  154. $action = 'explorer_user_remove';
  155. $ntype = 'explorer_user_remove_' . $gid;
  156. dzz_notification::notification_add($v['uid'], $ntype, $action, $notevars, 1, 'dzz/explorer');
  157. }
  158. }
  159. //增加事件
  160. $eventdata = array('username' => getglobal('username'), 'uid' => getglobal('uid'), 'orgname' => $group['orgname'], 'delusers' => implode(',', $delusers));
  161. C::t('resources_event')->addevent_by_pfid($group['fid'], 'delete_group_user', 'deleteuser', $eventdata, $gid, '', $group['orgname']);
  162. }
  163. //新添加用户
  164. $insertuserdata = array();
  165. $insertusername = array();
  166. foreach ($uids as $v) {
  167. if (!in_array($v, $olduids) && !empty($v)) {
  168. $insertuser[] = $v;
  169. $insertusername[] = $userarr[$v];
  170. $insertuserdata[] = array('uid' => $v, 'username' => $userarr[$v], 'ufirst' => new_strsubstr(ucfirst($userarr[$v]), 1, ''));
  171. }
  172. }
  173. //添加用户
  174. if (count($insertuser) > 0) {
  175. $permtitle = lang('explorer_gropuperm');
  176. foreach (C::t('organization_user')->insert_by_orgid($gid, $insertuser) as $iu) {
  177. //发送通知
  178. if ($iu != getglobal('uid')) {
  179. $notevars = array(
  180. 'from_id' => $appid,
  181. 'from_idtype' => 'app',
  182. 'url' => getglobal('siteurl') . MOD_URL . '#group&gid=' . $gid,
  183. 'author' => getglobal('username'),
  184. 'authorid' => getglobal('uid'),
  185. 'dataline' => dgmdate(TIMESTAMP),
  186. 'fname' => getstr($group['orgname'], 31),
  187. 'permtitle' => $permtitle[0]
  188. );
  189. $action = 'explorer_user_add';
  190. $ntype = 'explorer_user_add_' . $gid;
  191. dzz_notification::notification_add($iu, $ntype, $action, $notevars, 1, 'dzz/explorer');
  192. }
  193. }
  194. $insertuserdata = C::t('resources_event')->result_events_has_avatarstatusinfo($insertuser, $insertuserdata);
  195. //增加事件
  196. $eventdata = array('username' => getglobal('username'), 'uid' => getglobal('uid'), 'orgname' => $group['orgname'], 'insertusers' => implode(',', $insertusername));
  197. C::t('resources_event')->addevent_by_pfid($group['fid'], 'add_group_user', 'adduser', $eventdata, $gid, '', $group['orgname']);
  198. }
  199. if ($type == 1) {
  200. exit(json_encode(array('success' => true, 'insertuser' => $insertuserdata, 'delusers' => $delusers, 'adminid' => ($_G['adminid'] == 1) ? 1 : 0, 'perm' => $perm, 'grouptype' => $group['type'])));
  201. } else {
  202. exit(json_encode(array('success' => true, 'fid' => $group['fid'])));
  203. }
  204. }
  205. } elseif ($operation == 'groupsetting') {
  206. $gid = $_GET['gid'];
  207. if (!$perm || !$group['type']) {
  208. return array('error' => lang('no_privilege'));
  209. }
  210. if (isset($_GET['setsubmit'])) {
  211. $arr = $_GET['arr'];
  212. if ($arr['diron']) {
  213. $arr['diron'] = 1;
  214. } else {
  215. $arr['diron'] = 0;
  216. }
  217. $return = C::t('organization')->update_by_orgid($gid, $arr);
  218. if ($return['error']) {
  219. showTips(array('error' => $return['error']), 'json');
  220. } else {
  221. showTips(array('success' => true), 'json');
  222. }
  223. } else {
  224. //$group = C::t('organization')->fetch($gid);
  225. $grouppatharr = getpath($groupinfo['path']);
  226. $grouppathstr = implode('\\', $grouppatharr);
  227. }
  228. } elseif ($operation == 'getAtData') {
  229. $gid = isset($_GET['gid']) ? intval($_GET['gid']) : '';
  230. $fid = isset($_GET['fid']) ? intval($_GET['fid']) : '';
  231. $keyword = isset($_GET['term']) ? trim($_GET['term']) : '';
  232. if (!$fid) {
  233. $rid = isset($_GET['rid']) ? trim($_GET['rid']) : '';
  234. $fileinfo = C::t('resources')->fetch_info_by_rid($rid);
  235. if ($fileinfo['type'] == 'folder') {
  236. $fid = $fileinfo['oid'];
  237. } else {
  238. $fid = $fileinfo['pfid'];
  239. }
  240. }
  241. $perm = DB::result_first("select perm_inherit from %t where fid = %d", array('folder', $fid));
  242. $powerarr = perm_binPerm::getPowerArr();
  243. $uids = array();
  244. if ($perm & $powerarr['read2']) {
  245. $members = C::t('organization_user')->fetch_parentadminer_andchild_uid_by_orgid($gid, true);
  246. $uids = $members['all'];
  247. } else {
  248. $members = C::t('organization_user')->fetch_parentadminer_andchild_uid_by_orgid($gid, false);
  249. $uids = $members['adminer'];
  250. }
  251. $params = array('user', $uids);
  252. $sql_user = 'where uid in(%n) ';
  253. if ($keyword) {
  254. $sql_user .= ' and username like %s';
  255. $params[] = '%' . $keyword . '%';
  256. }
  257. $list = array();
  258. foreach (DB::fetch_all("select uid,username from %t $sql_user", $params) as $value) {
  259. if ($value['uid'] == $uid) continue;
  260. $list[] = array('name' => $value['username'],
  261. 'searchkey' => pinyin::encode($value['username'], 'all') . $value['username'],
  262. 'id' => 'u' . $value['uid'],
  263. 'title' => $value['username'] . ':' . 'u' . $value['uid'],
  264. 'avatar' => avatar_block($value['uid'])
  265. );
  266. }
  267. exit(json_encode($list));
  268. }
  269. include template('group_ajax');
  270. exit();
  271. } elseif ($do == 'right_popbox') {
  272. $uuid = $_GET['uid'];
  273. //成员相关信息
  274. $userinfos = DB::fetch_first("select u.username, u.uid from %t u where u.uid = %d", array('user', $uuid));
  275. $uperm = DB::fetch_first("select admintype from %t where uid = %d and orgid = %d", array('organization_admin', $uuid, $gid));
  276. $userinfos['perm'] = (isset($uperm['admintype'])) ? $uperm['admintype'] : 0;
  277. $allowoperation = array('setmemberperm', 'deletemember');
  278. if ($operation && !in_array($operation, $allowoperation)) {
  279. showmessage(lang('explorer_do_failed'), dreferer());
  280. }
  281. $operation = isset($_GET['operation']) ? trim($_GET['operation']) : '';
  282. if ($operation && !in_array($operation, $allowoperation)) {
  283. showmessage(lang('explorer_do_failed'), dreferer());
  284. }
  285. if ($operation == 'setmemberperm') {
  286. $guid = isset($_GET['guid']) ? intval($_GET['guid']) : '';
  287. $perm = isset($_GET['perm']) ? intval($_GET['perm']) : '';
  288. $appid = C::t('app_market')->fetch_appid_by_mod('{dzzscript}?mod=' . MOD_NAME, 2);
  289. $return = C::t('organization_user')->set_admin_by_giduid($guid, $gid, $perm);
  290. if ($return['success']) {
  291. $appid = C::t('app_market')->fetch_appid_by_mod('{dzzscript}?mod=' . MOD_NAME, 2);
  292. $permtitle = lang('explorer_gropuperm');
  293. if ($guid != getglobal('uid')) {
  294. $notevars = array(
  295. 'from_id' => $appid,
  296. 'from_idtype' => 'app',
  297. 'url' => $_G['siteurl'] . MOD_URL . '/#group&gid=' . $gid,
  298. 'author' => getglobal('username'),
  299. 'authorid' => getglobal('uid'),
  300. 'dataline' => dgmdate(TIMESTAMP),
  301. 'fname' => getstr($group['orgname'], 31),
  302. 'permtitle' => $permtitle[$perm],
  303. );
  304. $action = 'explorer_user_change';
  305. $type = 'explorer_user_change_' . $gid;
  306. dzz_notification::notification_add($guid, $type, $action, $notevars, 1, 'dzz/explorer');
  307. if ($return['olduser']) {
  308. $notevars = array(
  309. 'from_id' => $appid,
  310. 'from_idtype' => 'app',
  311. 'url' => $_G['siteurl'] . MOD_URL . '#group&gid=' . $gid,
  312. 'author' => getglobal('username'),
  313. 'authorid' => getglobal('uid'),
  314. 'dataline' => dgmdate(TIMESTAMP),
  315. 'fname' => getstr($group['orgname'], 31),
  316. 'permtitle' => $permtitle[0],
  317. );
  318. $action = 'explorer_user_change';
  319. $type = 'explorer_user_change_' . $gid;
  320. dzz_notification::notification_add($return['olduser']['uid'], $type, $action, $notevars, 1, 'dzz/explorer');
  321. }
  322. }
  323. if ($perm == 2) {
  324. $body_data = array('username' => getglobal('username'), 'oldusername' => $return['olduser']['username'], 'groupname' => $group['orgname'], 'newusername' => $return['member']);
  325. $event_body = 'change_creater';
  326. } else {
  327. $body_data = array('username' => getglobal('username'), 'groupname' => $group['orgname'], 'permname' => $permtitle[$perm], 'member' => $return['member']);
  328. $event_body = 'update_member_perm';
  329. }
  330. C::t('resources_event')->addevent_by_pfid($group['fid'], $event_body, 'update_perm', $body_data, $gid, '', $group['orgname']);//记录事件
  331. }
  332. exit(json_encode($return));
  333. } elseif ($operation == 'deletemember') {
  334. $guid = isset($_GET['uids']) ? $_GET['uids'] : '';
  335. $deluids = C::t('organization_user')->delete_by_uid_orgid($guid, $gid, 1);
  336. if ($deluids) {
  337. $appid = C::t('app_market')->fetch_appid_by_mod('{dzzscript}?mod=explorer', 2);
  338. foreach ($deluids as $v) {
  339. if ($v['uid'] != getglobal('uid')) {
  340. $notevars = array(
  341. 'from_id' => $appid,
  342. 'from_idtype' => 'app',
  343. // 'url' => getglobal('siteurl') . '/#group&gid='.$orgid,
  344. 'author' => getglobal('username'),
  345. 'authorid' => getglobal('uid'),
  346. 'dataline' => dgmdate(TIMESTAMP),
  347. 'fname' => getstr($group['orgname'], 31),
  348. );
  349. $action = 'explorer_user_remove';
  350. $type = 'explorer_user_remove_' . $gid;
  351. dzz_notification::notification_add($v['uid'], $type, $action, $notevars, 1, 'dzz/explorer');
  352. }
  353. }
  354. $deluserarr = array();
  355. foreach (DB::fetch_all("select username from %t where uid in(%n)", array('user', $deluids)) as $v) {
  356. $deluserarr[] = $v['username'];
  357. }
  358. //增加事件
  359. $eventdata = array('username' => getglobal('username'), 'uid' => getglobal('uid'), 'orgname' => $group['orgname'], 'delusers' => implode(',', $deluserarr));
  360. C::t('resources_event')->addevent_by_pfid($group['fid'], 'delete_group_user', 'deleteuser', $eventdata, $gid, '', $group['orgname']);
  361. }
  362. exit(json_encode(array('success' => true, 'uids' => $deluids)));
  363. } else {
  364. include template('template_right_popbox');
  365. }
  366. exit();
  367. }
  368. include template('mydocument_content');
  369. exit();