Просмотр файла admin/admin_ug_auth.php

Размер файла: 29.65Kb
  1. <?php
  2. /***************************************************************************
  3. * mides.ru
  4. * -------------------
  5. ***************************************************************************/
  6. define('IN_PHPBB', 1);
  7.  
  8. if( !empty($setmodules) )
  9. {
  10. $filename = basename(__FILE__);
  11. $module['Users']['Permissions'] = $filename . "?mode=user";
  12. $module['Groups']['Permissions'] = $filename . "?mode=group";
  13. return;
  14. }
  15.  
  16. $no_page_header = TRUE;
  17.  
  18. $phpbb_root_path = "./../";
  19. require($phpbb_root_path . 'extension.inc');
  20. require('./pagestart.' . $phpEx);
  21.  
  22. $params = array('mode' => 'mode', 'user_id' => POST_USERS_URL, 'group_id' => POST_GROUPS_URL, 'adv' => 'adv');
  23.  
  24. while( list($var, $param) = @each($params) )
  25. {
  26. if ( !empty($HTTP_POST_VARS[$param]) || !empty($HTTP_GET_VARS[$param]) )
  27. {
  28. $$var = ( !empty($HTTP_POST_VARS[$param]) ) ? $HTTP_POST_VARS[$param] : $HTTP_GET_VARS[$param];
  29. }
  30. else
  31. {
  32. $$var = "";
  33. }
  34. }
  35.  
  36. $user_id = intval($user_id);
  37. $group_id = intval($group_id);
  38. $adv = intval($adv);
  39. $mode = htmlspecialchars($mode);
  40.  
  41. $forum_auth_fields = array('auth_view', 'auth_read', 'auth_post', 'auth_reply', 'auth_edit', 'auth_delete', 'auth_sticky', 'auth_announce', 'auth_vote', 'auth_pollcreate');
  42.  
  43. $auth_field_match = array(
  44. 'auth_view' => AUTH_VIEW,
  45. 'auth_read' => AUTH_READ,
  46. 'auth_post' => AUTH_POST,
  47. 'auth_reply' => AUTH_REPLY,
  48. 'auth_edit' => AUTH_EDIT,
  49. 'auth_delete' => AUTH_DELETE,
  50. 'auth_sticky' => AUTH_STICKY,
  51. 'auth_announce' => AUTH_ANNOUNCE,
  52. 'auth_vote' => AUTH_VOTE,
  53. 'auth_pollcreate' => AUTH_POLLCREATE);
  54.  
  55. $field_names = array(
  56. 'auth_view' => $lang['View'],
  57. 'auth_read' => $lang['Read'],
  58. 'auth_post' => $lang['Post'],
  59. 'auth_reply' => $lang['Reply'],
  60. 'auth_edit' => $lang['Edit'],
  61. 'auth_delete' => $lang['Delete'],
  62. 'auth_sticky' => $lang['Sticky'],
  63. 'auth_announce' => $lang['Announce'],
  64. 'auth_vote' => $lang['Vote'],
  65. 'auth_pollcreate' => $lang['Pollcreate']);
  66.  
  67. attach_setup_usergroup_auth($forum_auth_fields, $auth_field_match, $field_names);
  68.  
  69. function check_auth($type, $key, $u_access, $is_admin)
  70. {
  71. $auth_user = 0;
  72.  
  73. if( count($u_access) )
  74. {
  75. for($j = 0; $j < count($u_access); $j++)
  76. {
  77. $result = 0;
  78. switch($type)
  79. {
  80. case AUTH_ACL:
  81. $result = $u_access[$j][$key];
  82.  
  83. case AUTH_MOD:
  84. $result = $result || $u_access[$j]['auth_mod'];
  85.  
  86. case AUTH_ADMIN:
  87. $result = $result || $is_admin;
  88. break;
  89. }
  90.  
  91. $auth_user = $auth_user || $result;
  92. }
  93. }
  94. else
  95. {
  96. $auth_user = $is_admin;
  97. }
  98.  
  99. return $auth_user;
  100. }
  101.  
  102. if ( isset($HTTP_POST_VARS['submit']) && ( ( $mode == 'user' && $user_id ) || ( $mode == 'group' && $group_id ) ) )
  103. {
  104. $user_level = '';
  105. if ( $mode == 'user' )
  106. {
  107.  
  108. $sql = "SELECT g.group_id, u.user_level
  109. FROM " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u, " . GROUPS_TABLE . " g
  110. WHERE u.user_id = $user_id
  111. AND ug.user_id = u.user_id
  112. AND g.group_id = ug.group_id
  113. AND g.group_single_user = " . TRUE;
  114. if ( !($result = $db->sql_query($sql)) )
  115. {
  116. message_die(GENERAL_ERROR, 'Could not select info from user/user_group table', '', __LINE__, __FILE__, $sql);
  117. }
  118.  
  119. $row = $db->sql_fetchrow($result);
  120.  
  121. $group_id = $row['group_id'];
  122. $user_level = $row['user_level'];
  123.  
  124. $db->sql_freeresult($result);
  125. }
  126.  
  127. if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'admin' && $user_level != ADMIN )
  128. {
  129.  
  130. if ( $userdata['user_id'] != $user_id )
  131. {
  132. $sql = "UPDATE " . USERS_TABLE . "
  133. SET user_level = " . ADMIN . "
  134. WHERE user_id = $user_id";
  135. if ( !($result = $db->sql_query($sql)) )
  136. {
  137. message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
  138. }
  139.  
  140. $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
  141. WHERE group_id = $group_id
  142. AND auth_mod = 0";
  143. if ( !($result = $db->sql_query($sql)) )
  144. {
  145. message_die(GENERAL_ERROR, "Couldn't delete auth access info", "", __LINE__, __FILE__, $sql);
  146. }
  147.  
  148. $sql = "UPDATE " . AUTH_ACCESS_TABLE . "
  149. SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0
  150. WHERE group_id = $group_id";
  151. if ( !($result = $db->sql_query($sql)) )
  152. {
  153. message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql);
  154. }
  155. }
  156.  
  157. $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($lang['Click_return_userauth'], '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');
  158. message_die(GENERAL_MESSAGE, $message);
  159. }
  160. else
  161. {
  162. if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'user' && $user_level == ADMIN )
  163. {
  164.  
  165. if ( $userdata['user_id'] != $user_id )
  166. {
  167. $sql = "UPDATE " . AUTH_ACCESS_TABLE . "
  168. SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0
  169. WHERE group_id = $group_id";
  170. if ( !($result = $db->sql_query($sql)) )
  171. {
  172. message_die(GENERAL_ERROR, 'Could not update auth access', '', __LINE__, __FILE__, $sql);
  173. }
  174.  
  175. $sql = "UPDATE " . USERS_TABLE . "
  176. SET user_level = " . USER . "
  177. WHERE user_id = $user_id";
  178. if ( !($result = $db->sql_query($sql)) )
  179. {
  180. message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
  181. }
  182. }
  183.  
  184. $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($lang['Click_return_userauth'], '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');
  185. }
  186. else
  187. {
  188. $change_mod_list = ( isset($HTTP_POST_VARS['moderator']) ) ? $HTTP_POST_VARS['moderator'] : array();
  189.  
  190. if ( empty($adv) )
  191. {
  192. $sql = "SELECT f.*
  193. FROM " . FORUMS_TABLE . " f, " . CATEGORIES_TABLE . " c
  194. WHERE f.cat_id = c.cat_id
  195. ORDER BY c.cat_order, f.forum_order ASC";
  196. if ( !($result = $db->sql_query($sql)) )
  197. {
  198. message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
  199. }
  200.  
  201. $forum_access = $forum_auth_level_fields = array();
  202. while( $row = $db->sql_fetchrow($result) )
  203. {
  204. $forum_access[] = $row;
  205. }
  206. $db->sql_freeresult($result);
  207.  
  208. for($i = 0; $i < count($forum_access); $i++)
  209. {
  210. $forum_id = $forum_access[$i]['forum_id'];
  211.  
  212. for($j = 0; $j < count($forum_auth_fields); $j++)
  213. {
  214. $forum_auth_level_fields[$forum_id][$forum_auth_fields[$j]] = $forum_access[$i][$forum_auth_fields[$j]] == AUTH_ACL;
  215. }
  216. }
  217.  
  218. while( list($forum_id, $value) = @each($HTTP_POST_VARS['private']) )
  219. {
  220. while( list($auth_field, $exists) = @each($forum_auth_level_fields[$forum_id]) )
  221. {
  222. if ($exists)
  223. {
  224. $change_acl_list[$forum_id][$auth_field] = $value;
  225. }
  226. }
  227. }
  228. }
  229. else
  230. {
  231. $change_acl_list = array();
  232. for($j = 0; $j < count($forum_auth_fields); $j++)
  233. {
  234. $auth_field = $forum_auth_fields[$j];
  235.  
  236. while( list($forum_id, $value) = @each($HTTP_POST_VARS['private_' . $auth_field]) )
  237. {
  238. $change_acl_list[$forum_id][$auth_field] = $value;
  239. }
  240. }
  241. }
  242.  
  243. $sql = 'SELECT f.*
  244. FROM ' . FORUMS_TABLE . ' f, ' . CATEGORIES_TABLE . ' c
  245. WHERE f.cat_id = c.cat_id
  246. ORDER BY c.cat_order, f.forum_order';
  247. if ( !($result = $db->sql_query($sql)) )
  248. {
  249. message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
  250. }
  251.  
  252. $forum_access = array();
  253. while( $row = $db->sql_fetchrow($result) )
  254. {
  255. $forum_access[] = $row;
  256. }
  257. $db->sql_freeresult($result);
  258.  
  259. $sql = ( $mode == 'user' ) ? "SELECT aa.* FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = " . TRUE : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id";
  260. if ( !($result = $db->sql_query($sql)) )
  261. {
  262. message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
  263. }
  264.  
  265. $auth_access = array();
  266. while( $row = $db->sql_fetchrow($result) )
  267. {
  268. $auth_access[$row['forum_id']] = $row;
  269. }
  270. $db->sql_freeresult($result);
  271.  
  272. $forum_auth_action = array();
  273. $update_acl_status = array();
  274. $update_mod_status = array();
  275.  
  276. for($i = 0; $i < count($forum_access); $i++)
  277. {
  278. $forum_id = $forum_access[$i]['forum_id'];
  279.  
  280. if (
  281. ( isset($auth_access[$forum_id]['auth_mod']) && $change_mod_list[$forum_id] != $auth_access[$forum_id]['auth_mod'] ) ||
  282. ( !isset($auth_access[$forum_id]['auth_mod']) && !empty($change_mod_list[$forum_id]) )
  283. )
  284. {
  285. $update_mod_status[$forum_id] = $change_mod_list[$forum_id];
  286.  
  287. if ( !$update_mod_status[$forum_id] )
  288. {
  289. $forum_auth_action[$forum_id] = 'delete';
  290. }
  291. else if ( !isset($auth_access[$forum_id]['auth_mod']) )
  292. {
  293. $forum_auth_action[$forum_id] = 'insert';
  294. }
  295. else
  296. {
  297. $forum_auth_action[$forum_id] = 'update';
  298. }
  299. }
  300.  
  301. for($j = 0; $j < count($forum_auth_fields); $j++)
  302. {
  303. $auth_field = $forum_auth_fields[$j];
  304.  
  305. if( $forum_access[$i][$auth_field] == AUTH_ACL && isset($change_acl_list[$forum_id][$auth_field]) )
  306. {
  307. if ( ( empty($auth_access[$forum_id]['auth_mod']) &&
  308. ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] != $auth_access[$forum_id][$auth_field] ) ||
  309. ( !isset($auth_access[$forum_id][$auth_field]) && !empty($change_acl_list[$forum_id][$auth_field]) ) ) ||
  310. !empty($update_mod_status[$forum_id])
  311. )
  312. {
  313. $update_acl_status[$forum_id][$auth_field] = ( !empty($update_mod_status[$forum_id]) ) ? 0 : $change_acl_list[$forum_id][$auth_field];
  314.  
  315. if ( isset($auth_access[$forum_id][$auth_field]) && empty($update_acl_status[$forum_id][$auth_field]) && $forum_auth_action[$forum_id] != 'insert' && $forum_auth_action[$forum_id] != 'update' )
  316. {
  317. $forum_auth_action[$forum_id] = 'delete';
  318. }
  319. else if ( !isset($auth_access[$forum_id][$auth_field]) && !( $forum_auth_action[$forum_id] == 'delete' && empty($update_acl_status[$forum_id][$auth_field]) ) )
  320. {
  321. $forum_auth_action[$forum_id] = 'insert';
  322. }
  323. else if ( isset($auth_access[$forum_id][$auth_field]) && !empty($update_acl_status[$forum_id][$auth_field]) )
  324. {
  325. $forum_auth_action[$forum_id] = 'update';
  326. }
  327. }
  328. else if ( ( empty($auth_access[$forum_id]['auth_mod']) &&
  329. ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] == $auth_access[$forum_id][$auth_field] ) ) && $forum_auth_action[$forum_id] == 'delete' )
  330. {
  331. $forum_auth_action[$forum_id] = 'update';
  332. }
  333. }
  334. }
  335. }
  336.  
  337. $delete_sql = '';
  338. while( list($forum_id, $action) = @each($forum_auth_action) )
  339. {
  340. if ( $action == 'delete' )
  341. {
  342. $delete_sql .= ( ( $delete_sql != '' ) ? ', ' : '' ) . $forum_id;
  343. }
  344. else
  345. {
  346. if ( $action == 'insert' )
  347. {
  348. $sql_field = '';
  349. $sql_value = '';
  350. while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) )
  351. {
  352. $sql_field .= ( ( $sql_field != '' ) ? ', ' : '' ) . $auth_type;
  353. $sql_value .= ( ( $sql_value != '' ) ? ', ' : '' ) . $value;
  354. }
  355. $sql_field .= ( ( $sql_field != '' ) ? ', ' : '' ) . 'auth_mod';
  356. $sql_value .= ( ( $sql_value != '' ) ? ', ' : '' ) . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]);
  357.  
  358. $sql = "INSERT INTO " . AUTH_ACCESS_TABLE . " (forum_id, group_id, $sql_field)
  359. VALUES ($forum_id, $group_id, $sql_value)";
  360. }
  361. else
  362. {
  363. $sql_values = '';
  364. while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) )
  365. {
  366. $sql_values .= ( ( $sql_values != '' ) ? ', ' : '' ) . $auth_type . ' = ' . $value;
  367. }
  368. $sql_values .= ( ( $sql_values != '' ) ? ', ' : '' ) . 'auth_mod = ' . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]);
  369.  
  370. $sql = "UPDATE " . AUTH_ACCESS_TABLE . "
  371. SET $sql_values
  372. WHERE group_id = $group_id
  373. AND forum_id = $forum_id";
  374. }
  375. if( !($result = $db->sql_query($sql)) )
  376. {
  377. message_die(GENERAL_ERROR, "Couldn't update private forum permissions", "", __LINE__, __FILE__, $sql);
  378. }
  379. }
  380. }
  381.  
  382. if ( $delete_sql != '' )
  383. {
  384. $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
  385. WHERE group_id = $group_id
  386. AND forum_id IN ($delete_sql)";
  387. if( !($result = $db->sql_query($sql)) )
  388. {
  389. message_die(GENERAL_ERROR, "Couldn't delete permission entries", "", __LINE__, __FILE__, $sql);
  390. }
  391. }
  392.  
  393. $l_auth_return = ( $mode == 'user' ) ? $lang['Click_return_userauth'] : $lang['Click_return_groupauth'];
  394. $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($l_auth_return, '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');
  395. }
  396.  
  397. $sql = "SELECT u.user_id
  398. FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u
  399. WHERE ug.group_id = aa.group_id
  400. AND u.user_id = ug.user_id
  401. AND ug.user_pending = 0
  402. AND u.user_level NOT IN (" . MOD . ", " . ADMIN . ")
  403. GROUP BY u.user_id
  404. HAVING SUM(aa.auth_mod) > 0";
  405. if ( !($result = $db->sql_query($sql)) )
  406. {
  407. message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
  408. }
  409.  
  410. $set_mod = '';
  411. while( $row = $db->sql_fetchrow($result) )
  412. {
  413. $set_mod .= ( ( $set_mod != '' ) ? ', ' : '' ) . $row['user_id'];
  414. }
  415. $db->sql_freeresult($result);
  416.  
  417. $sql = "SELECT u.user_id
  418. FROM ( ( " . USERS_TABLE . " u
  419. LEFT JOIN " . USER_GROUP_TABLE . " ug ON ug.user_id = u.user_id )
  420. LEFT JOIN " . AUTH_ACCESS_TABLE . " aa ON aa.group_id = ug.group_id )
  421. WHERE u.user_level NOT IN (" . USER . ", " . ADMIN . ")
  422. GROUP BY u.user_id
  423. HAVING SUM(aa.auth_mod) = 0";
  424.  
  425. if ( !($result = $db->sql_query($sql)) )
  426. {
  427. message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
  428. }
  429.  
  430. $unset_mod = "";
  431. while( $row = $db->sql_fetchrow($result) )
  432. {
  433. $unset_mod .= ( ( $unset_mod != '' ) ? ', ' : '' ) . $row['user_id'];
  434. }
  435. $db->sql_freeresult($result);
  436.  
  437. if ( $set_mod != '' )
  438. {
  439. $sql = "UPDATE " . USERS_TABLE . "
  440. SET user_level = " . MOD . "
  441. WHERE user_id IN ($set_mod)";
  442. if( !($result = $db->sql_query($sql)) )
  443. {
  444. message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql);
  445. }
  446. }
  447.  
  448. if ( $unset_mod != '' )
  449. {
  450. $sql = "UPDATE " . USERS_TABLE . "
  451. SET user_level = " . USER . "
  452. WHERE user_id IN ($unset_mod)";
  453. if( !($result = $db->sql_query($sql)) )
  454. {
  455. message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql);
  456. }
  457. }
  458.  
  459. $sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . "
  460. WHERE group_id = $group_id";
  461. $result = $db->sql_query($sql);
  462.  
  463. $group_user = array();
  464. while ($row = $db->sql_fetchrow($result))
  465. {
  466. $group_user[$row['user_id']] = $row['user_id'];
  467. }
  468. $db->sql_freeresult($result);
  469.  
  470. $sql = "SELECT ug.user_id, COUNT(auth_mod) AS is_auth_mod
  471. FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug
  472. WHERE ug.user_id IN (" . implode(', ', $group_user) . ")
  473. AND aa.group_id = ug.group_id
  474. AND aa.auth_mod = 1
  475. GROUP BY ug.user_id";
  476. if ( !($result = $db->sql_query($sql)) )
  477. {
  478. message_die(GENERAL_ERROR, 'Could not obtain moderator status', '', __LINE__, __FILE__, $sql);
  479. }
  480.  
  481. while ($row = $db->sql_fetchrow($result))
  482. {
  483. if ($row['is_auth_mod'])
  484. {
  485. unset($group_user[$row['user_id']]);
  486. }
  487. }
  488. $db->sql_freeresult($result);
  489.  
  490. if (sizeof($group_user))
  491. {
  492. $sql = "UPDATE " . USERS_TABLE . "
  493. SET user_level = " . USER . "
  494. WHERE user_id IN (" . implode(', ', $group_user) . ") AND user_level = " . MOD;
  495. if ( !($result = $db->sql_query($sql)) )
  496. {
  497. message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
  498. }
  499. }
  500.  
  501. message_die(GENERAL_MESSAGE, $message);
  502. }
  503. }
  504. else if ( ( $mode == 'user' && ( isset($HTTP_POST_VARS['username']) || $user_id ) ) || ( $mode == 'group' && $group_id ) )
  505. {
  506. if ( isset($HTTP_POST_VARS['username']) )
  507. {
  508. $this_userdata = get_userdata($HTTP_POST_VARS['username'], true);
  509. if ( !is_array($this_userdata) )
  510. {
  511. message_die(GENERAL_MESSAGE, $lang['No_such_user']);
  512. }
  513. $user_id = $this_userdata['user_id'];
  514. }
  515.  
  516. $sql = "SELECT f.*
  517. FROM " . FORUMS_TABLE . " f, " . CATEGORIES_TABLE . " c
  518. WHERE f.cat_id = c.cat_id
  519. ORDER BY c.cat_order, f.forum_order ASC";
  520. if ( !($result = $db->sql_query($sql)) )
  521. {
  522. message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
  523. }
  524.  
  525. $forum_access = array();
  526. while( $row = $db->sql_fetchrow($result) )
  527. {
  528. $forum_access[] = $row;
  529. }
  530. $db->sql_freeresult($result);
  531.  
  532. if( empty($adv) )
  533. {
  534. for($i = 0; $i < count($forum_access); $i++)
  535. {
  536. $forum_id = $forum_access[$i]['forum_id'];
  537.  
  538. $forum_auth_level[$forum_id] = AUTH_ALL;
  539.  
  540. for($j = 0; $j < count($forum_auth_fields); $j++)
  541. {
  542. $forum_access[$i][$forum_auth_fields[$j]] . ' :: ';
  543. if ( $forum_access[$i][$forum_auth_fields[$j]] == AUTH_ACL )
  544. {
  545. $forum_auth_level[$forum_id] = AUTH_ACL;
  546. $forum_auth_level_fields[$forum_id][] = $forum_auth_fields[$j];
  547. }
  548. }
  549. }
  550. }
  551.  
  552. $sql = "SELECT u.user_id, u.username, u.user_level, g.group_id, g.group_name, g.group_single_user, ug.user_pending FROM " . USERS_TABLE . " u, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE ";
  553. $sql .= ( $mode == 'user' ) ? "u.user_id = $user_id AND ug.user_id = u.user_id AND g.group_id = ug.group_id" : "g.group_id = $group_id AND ug.group_id = g.group_id AND u.user_id = ug.user_id";
  554. if ( !($result = $db->sql_query($sql)) )
  555. {
  556. message_die(GENERAL_ERROR, "Couldn't obtain user/group information", "", __LINE__, __FILE__, $sql);
  557. }
  558. $ug_info = array();
  559. while( $row = $db->sql_fetchrow($result) )
  560. {
  561. $ug_info[] = $row;
  562. }
  563. $db->sql_freeresult($result);
  564.  
  565. $sql = ( $mode == 'user' ) ? "SELECT aa.*, g.group_single_user FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = 1" : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id";
  566. if ( !($result = $db->sql_query($sql)) )
  567. {
  568. message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
  569. }
  570.  
  571. $auth_access = array();
  572. $auth_access_count = array();
  573. while( $row = $db->sql_fetchrow($result) )
  574. {
  575. $auth_access[$row['forum_id']][] = $row;
  576. $auth_access_count[$row['forum_id']]++;
  577. }
  578. $db->sql_freeresult($result);
  579.  
  580. $is_admin = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == ADMIN && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0;
  581.  
  582. for($i = 0; $i < count($forum_access); $i++)
  583. {
  584. $forum_id = $forum_access[$i]['forum_id'];
  585.  
  586. unset($prev_acl_setting);
  587. for($j = 0; $j < count($forum_auth_fields); $j++)
  588. {
  589. $key = $forum_auth_fields[$j];
  590. $value = $forum_access[$i][$key];
  591.  
  592. switch( $value )
  593. {
  594. case AUTH_ALL:
  595. case AUTH_REG:
  596. $auth_ug[$forum_id][$key] = 1;
  597. break;
  598.  
  599. case AUTH_ACL:
  600. $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_ACL, $key, $auth_access[$forum_id], $is_admin) : 0;
  601. $auth_field_acl[$forum_id][$key] = $auth_ug[$forum_id][$key];
  602.  
  603. if ( isset($prev_acl_setting) )
  604. {
  605. if ( $prev_acl_setting != $auth_ug[$forum_id][$key] && empty($adv) )
  606. {
  607. $adv = 1;
  608. }
  609. }
  610.  
  611. $prev_acl_setting = $auth_ug[$forum_id][$key];
  612.  
  613. break;
  614.  
  615. case AUTH_MOD:
  616. $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, $key, $auth_access[$forum_id], $is_admin) : 0;
  617. break;
  618.  
  619. case AUTH_ADMIN:
  620. $auth_ug[$forum_id][$key] = $is_admin;
  621. break;
  622.  
  623. default:
  624. $auth_ug[$forum_id][$key] = 0;
  625. break;
  626. }
  627. }
  628.  
  629. $auth_ug[$forum_id]['auth_mod'] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, 'auth_mod', $auth_access[$forum_id], 0) : 0;
  630. }
  631. $i = 0;
  632. @reset($auth_ug);
  633. while( list($forum_id, $user_ary) = @each($auth_ug) )
  634. {
  635. if ( empty($adv) )
  636. {
  637. if ( $forum_auth_level[$forum_id] == AUTH_ACL )
  638. {
  639. $allowed = 1;
  640.  
  641. for($j = 0; $j < count($forum_auth_level_fields[$forum_id]); $j++)
  642. {
  643. if ( !$auth_ug[$forum_id][$forum_auth_level_fields[$forum_id][$j]] )
  644. {
  645. $allowed = 0;
  646. }
  647. }
  648.  
  649. $optionlist_acl = '<select name="private[' . $forum_id . ']">';
  650.  
  651. if ( $is_admin || $user_ary['auth_mod'] )
  652. {
  653. $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option>';
  654. }
  655. else if ( $allowed )
  656. {
  657. $optionlist_acl .= '<option value="1" selected="selected">' . $lang['Allowed_Access'] . '</option><option value="0">'. $lang['Disallowed_Access'] . '</option>';
  658. }
  659. else
  660. {
  661. $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option><option value="0" selected="selected">' . $lang['Disallowed_Access'] . '</option>';
  662. }
  663.  
  664. $optionlist_acl .= '</select>';
  665. }
  666. else
  667. {
  668. $optionlist_acl = 'не доступно';
  669. }
  670. }
  671. else
  672. {
  673. for($j = 0; $j < count($forum_access); $j++)
  674. {
  675. if ( $forum_access[$j]['forum_id'] == $forum_id )
  676. {
  677. for($k = 0; $k < count($forum_auth_fields); $k++)
  678. {
  679. $field_name = $forum_auth_fields[$k];
  680.  
  681. if( $forum_access[$j][$field_name] == AUTH_ACL )
  682. {
  683. $optionlist_acl_adv[$forum_id][$k] = '<select name="private_' . $field_name . '[' . $forum_id . ']">';
  684.  
  685. if( isset($auth_field_acl[$forum_id][$field_name]) && !($is_admin || $user_ary['auth_mod']) )
  686. {
  687. if( !$auth_field_acl[$forum_id][$field_name] )
  688. {
  689. $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>';
  690. }
  691. else
  692. {
  693. $optionlist_acl_adv[$forum_id][$k] .= '<option value="1" selected="selected">' . $lang['ON'] . '</option><option value="0">' . $lang['OFF'] . '</option>';
  694. }
  695. }
  696. else
  697. {
  698. if( $is_admin || $user_ary['auth_mod'] )
  699. {
  700. $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option>';
  701. }
  702. else
  703. {
  704. $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>';
  705. }
  706. }
  707.  
  708. $optionlist_acl_adv[$forum_id][$k] .= '</select>';
  709.  
  710. }
  711. else
  712. {
  713. $optionlist_acl_adv[$forum_id][$k] = 'не доступно';
  714. }
  715. }
  716. }
  717. }
  718. }
  719.  
  720. $optionlist_mod = '<select name="moderator[' . $forum_id . ']">';
  721. $optionlist_mod .= ( $user_ary['auth_mod'] ) ? '<option value="1" selected="selected">' . $lang['Is_Moderator'] . '</option><option value="0">' . $lang['Not_Moderator'] . '</option>' : '<option value="1">' . $lang['Is_Moderator'] . '</option><option value="0" selected="selected">' . $lang['Not_Moderator'] . '</option>';
  722. $optionlist_mod .= '</select>';
  723.  
  724. $row_class = ( !( $i % 2 ) ) ? 'row_easy' : 'row_hard';
  725.  
  726. $template->assign_block_vars('forums', array(
  727. 'ROW_CLASS' => $row_class,
  728. 'FORUM_NAME' => $forum_access[$i]['forum_name'],
  729.  
  730. 'U_FORUM_AUTH' => append_sid("admin_forumauth.$phpEx?f=" . $forum_access[$i]['forum_id']),
  731.  
  732. 'S_MOD_SELECT' => $optionlist_mod)
  733. );
  734.  
  735. $s_column_span = 2;
  736.  
  737.  
  738. $i++;
  739. }
  740. // @reset($auth_user);
  741. if ( $mode == 'user' )
  742. {
  743. $t_username = $ug_info[0]['username'];
  744. $s_user_type = ( $is_admin ) ? '<select name="userlevel"><option value="admin" selected="selected">' . $lang['Auth_Admin'] . '</option><option value="user">' . $lang['Auth_User'] . '</option></select>' : '<select name="userlevel"><option value="admin">' . $lang['Auth_Admin'] . '</option><option value="user" selected="selected">' . $lang['Auth_User'] . '</option></select>';
  745. }
  746. else
  747. {
  748. $t_groupname = $ug_info[0]['group_name'];
  749. }
  750.  
  751. $name = array();
  752. $id = array();
  753. for($i = 0; $i < count($ug_info); $i++)
  754. {
  755. if( ( $mode == 'user' && !$ug_info[$i]['group_single_user'] ) || $mode == 'group' )
  756. {
  757. $name[] = ( $mode == 'user' ) ? $ug_info[$i]['group_name'] : $ug_info[$i]['username'];
  758. $id[] = ( $mode == 'user' ) ? intval($ug_info[$i]['group_id']) : intval($ug_info[$i]['user_id']);
  759. }
  760. }
  761.  
  762. $t_usergroup_list = $t_pending_list = '';
  763. if( count($name) )
  764. {
  765. for($i = 0; $i < count($ug_info); $i++)
  766. {
  767. $ug = ( $mode == 'user' ) ? 'group&amp;' . POST_GROUPS_URL : 'user&amp;' . POST_USERS_URL;
  768.  
  769. if (!$ug_info[$i]['user_pending'])
  770. {
  771. $t_usergroup_list .= ( ( $t_usergroup_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
  772. }
  773. else
  774. {
  775. $t_pending_list .= ( ( $t_pending_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
  776. }
  777. }
  778. }
  779.  
  780. $t_usergroup_list = ($t_usergroup_list == '') ? $lang['None'] : $t_usergroup_list;
  781. $t_pending_list = ($t_pending_list == '') ? $lang['None'] : $t_pending_list;
  782.  
  783. include('./page_header_admin.'.$phpEx);
  784.  
  785. $template->set_filenames(array(
  786. "body" => 'admin/auth_ug_body.tpl')
  787. );
  788.  
  789. $u_ug_switch = ( $mode == 'user' ) ? POST_USERS_URL . "=" . $user_id : POST_GROUPS_URL . "=" . $group_id;
  790.  
  791. $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="adv" value="' . $adv . '" />';
  792. $s_hidden_fields .= ( $mode == 'user' ) ? '<input type="hidden" name="' . POST_USERS_URL . '" value="' . $user_id . '" />' : '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
  793.  
  794. if ( $mode == 'user' )
  795. {
  796. $template->assign_block_vars('switch_user_auth', array());
  797.  
  798. $template->assign_vars(array(
  799. 'USERNAME' => $t_username,
  800. 'USER_LEVEL' => $lang['User_Level'] . " : " . $s_user_type,
  801. 'USER_GROUP_MEMBERSHIPS' => $lang['Group_memberships'] . ' : ' . $t_usergroup_list)
  802. );
  803. }
  804. else
  805. {
  806. $template->assign_block_vars("switch_group_auth", array());
  807.  
  808. $template->assign_vars(array(
  809. 'USERNAME' => $t_groupname,
  810. 'GROUP_MEMBERSHIP' => $lang['Usergroup_members'] . ' : ' . $t_usergroup_list . '<br />' . $lang['Pending_members'] . ' : ' . $t_pending_list)
  811. );
  812. }
  813.  
  814. $template->assign_vars(array(
  815. 'L_USER_OR_GROUPNAME' => ( $mode == 'user' ) ? $lang['Username'] : $lang['Group_name'],
  816.  
  817. 'L_AUTH_TITLE' => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'],
  818. 'L_AUTH_EXPLAIN' => ( $mode == 'user' ) ? 'Здесь вы можете изменить права доступа и статус модератора для отдельных пользователей. Не забывайте, что при изменении прав пользователя, права доступа для сообщества могут давать пользователю возможность входа в разделы форума и т.п. Вы будете предупреждены в этом случае' : 'Здесь вы можете изменить права доступа и статус модератора для каждого сообщества пользователей. Не забывайте, что при изменении прав доступа сообществ, права доступа для отдельных пользователей могут давать пользователю воможность входа в разделы форума и т.п. Вы будете предупреждены в этом случае',
  819. 'L_MODERATOR_STATUS' => $lang['Moderator_status'],
  820. 'L_PERMISSIONS' => $lang['Permissions'],
  821. 'L_SUBMIT' => $lang['Submit'],
  822. 'L_RESET' => $lang['Reset'],
  823. 'L_FORUM' => $lang['Forum'],
  824.  
  825. 'U_USER_OR_GROUP' => append_sid("admin_ug_auth.$phpEx"),
  826.  
  827. 'S_COLUMN_SPAN' => $s_column_span,
  828. 'S_AUTH_ACTION' => append_sid("admin_ug_auth.$phpEx"),
  829. 'S_HIDDEN_FIELDS' => $s_hidden_fields)
  830. );
  831. }
  832. else
  833. {
  834.  
  835. include('./page_header_admin.'.$phpEx);
  836.  
  837. $template->set_filenames(array(
  838. 'body' => ( $mode == 'user' ) ? 'admin/user_select_body.tpl' : 'admin/auth_select_body.tpl')
  839. );
  840.  
  841. if ( $mode == 'user' )
  842. {
  843. $template->assign_vars(array(
  844. 'L_FIND_USERNAME' => $lang['Find_username'],
  845.  
  846. 'U_SEARCH_USER' => append_sid("../search.$phpEx?mode=searchuser"))
  847. );
  848. }
  849. else
  850. {
  851. $sql = "SELECT group_id, group_name
  852. FROM " . GROUPS_TABLE . "
  853. WHERE group_single_user <> " . TRUE;
  854. if ( !($result = $db->sql_query($sql)) )
  855. {
  856. message_die(GENERAL_ERROR, "Couldn't get group list", "", __LINE__, __FILE__, $sql);
  857. }
  858.  
  859. if ( $row = $db->sql_fetchrow($result) )
  860. {
  861. $select_list = '<select name="' . POST_GROUPS_URL . '">';
  862. do
  863. {
  864. $select_list .= '<option value="' . $row['group_id'] . '">' . $row['group_name'] . '</option>';
  865. }
  866. while ( $row = $db->sql_fetchrow($result) );
  867. $select_list .= '</select>';
  868. }
  869.  
  870. $template->assign_vars(array(
  871. 'S_AUTH_SELECT' => $select_list)
  872. );
  873. }
  874.  
  875. $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
  876.  
  877. $l_type = ( $mode == 'user' ) ? 'USER' : 'AUTH';
  878.  
  879. $template->assign_vars(array(
  880. 'L_' . $l_type . '_TITLE' => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'],
  881. 'L_' . $l_type . '_EXPLAIN' => ( $mode == 'user' ) ? $lang['User_auth_explain'] : $lang['Group_auth_explain'],
  882. 'L_' . $l_type . '_SELECT' => ( $mode == 'user' ) ? $lang['Select_a_User'] : $lang['Select_a_Group'],
  883. 'L_LOOK_UP' => ( $mode == 'user' ) ? $lang['Look_up_User'] : $lang['Look_up_Group'],
  884.  
  885. 'S_HIDDEN_FIELDS' => $s_hidden_fields,
  886. 'S_' . $l_type . '_ACTION' => append_sid("admin_ug_auth.$phpEx"))
  887. );
  888.  
  889. }
  890.  
  891. $template->pparse('body');
  892.  
  893. include('./page_footer_admin.'.$phpEx);
  894.  
  895. ?>