PageRenderTime 111ms CodeModel.GetById 39ms RepoModel.GetById 0ms app.codeStats 0ms

/includes/usercp_zebra.php

http://github.com/MightyGorgon/icy_phoenix
PHP | 239 lines | 181 code | 30 blank | 28 comment | 25 complexity | 0e87bc0edc85a94cd768fc8ff5ff7f74 MD5 | raw file
Possible License(s): AGPL-1.0
  1. <?php
  2. /**
  3. *
  4. * @package Icy Phoenix
  5. * @version $Id$
  6. * @copyright (c) 2008 Icy Phoenix
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. if (!defined('IN_ICYPHOENIX'))
  11. {
  12. die('Hacking attempt');
  13. exit;
  14. }
  15. /*
  16. if ($config['allow_zebra'] == false)
  17. {
  18. message_die(GENERAL_MESSAGE, $lang['Not_Auth_View']);
  19. }
  20. */
  21. $zmode = 'friends';
  22. $zmode_types = array('friends', 'foes');
  23. $zmode = request_var('zmode', 'friends');
  24. $zmode = check_var_value($zmode, $zmode_types);
  25. // Forced to friends...
  26. $zmode = 'friends';
  27. if (isset($_POST['submit']))
  28. {
  29. $data = array();
  30. $error = array();
  31. $updated = false;
  32. $var_ary = array(
  33. 'usernames' => array(0),
  34. 'add' => '',
  35. );
  36. foreach ($var_ary as $var => $default)
  37. {
  38. $data[$var] = request_var($var, $default, true);
  39. }
  40. if (!empty($data['add']) || sizeof($data['usernames']))
  41. {
  42. if ($data['add'])
  43. {
  44. $data['add'] = array_map('trim', explode("\n", $data['add']));
  45. // Do these name/s exist on a list already? If so, ignore ... we could be
  46. // 'nice' and automatically handle names added to one list present on
  47. // the other (by removing the existing one) ... but I have a feeling this
  48. // may lead to complaints
  49. $sql = 'SELECT z.*, u.username
  50. FROM ' . ZEBRA_TABLE . ' z, ' . USERS_TABLE . ' u
  51. WHERE z.user_id = ' . $user->data['user_id'] . '
  52. AND u.user_id = z.zebra_id';
  53. $result = $db->sql_query($sql);
  54. $friends = array();
  55. $foes = array();
  56. while ($row = $db->sql_fetchrow($result))
  57. {
  58. if ($row['friend'])
  59. {
  60. $friends[] = $row['user_id'];
  61. }
  62. else
  63. {
  64. $foes[] = $row['user_id'];
  65. }
  66. }
  67. $db->sql_freeresult($result);
  68. // remove friends from the username array
  69. $n = sizeof($data['add']);
  70. $data['add'] = array_diff($data['add'], $friends);
  71. // remove foes from the username array
  72. $n = sizeof($data['add']);
  73. $data['add'] = array_diff($data['add'], $foes);
  74. // remove the user himself from the username array
  75. $n = sizeof($data['add']);
  76. $data['add'] = array_diff($data['add'], array($user->data['username']));
  77. unset($friends, $foes, $n);
  78. if (sizeof($data['add']))
  79. {
  80. $users_to_add = '';
  81. foreach ($data['add'] as $user_tmp)
  82. {
  83. $username_tmp = phpbb_clean_username($user_tmp);
  84. //$users_to_add .= (($users_to_add == '') ? '' : ', ') . "'" . $db->sql_escape($username_tmp) . "'";
  85. $users_to_add .= (($users_to_add == '') ? '' : ', ') . "'" . $db->sql_escape(utf8_clean_string($username_tmp)) . "'";
  86. }
  87. //$users_to_add = implode('\',\'', $data['add']);
  88. $sql = "SELECT user_id, user_level
  89. FROM " . USERS_TABLE . "
  90. WHERE username_clean IN (" . $users_to_add . ")
  91. AND user_active = 1";
  92. //die($sql);
  93. $result = $db->sql_query($sql);
  94. $user_id_ary = array();
  95. $user_id_level = array();
  96. while ($row = $db->sql_fetchrow($result))
  97. {
  98. if ($row['user_id'] != ANONYMOUS)
  99. {
  100. $user_id_ary[$row['user_id']] = $row['user_id'];
  101. $user_id_level[$row['user_id']] = $row['user_level'];
  102. }
  103. }
  104. $db->sql_freeresult($result);
  105. if (sizeof($user_id_ary))
  106. {
  107. // Remove users from foe list if they are admins or moderators
  108. if ($zmode == 'foes')
  109. {
  110. $perms = array();
  111. foreach ($user_id_ary as $user_tmp)
  112. {
  113. if ($user_id_level[$row['user_id']] > 0)
  114. {
  115. $perms[] = array_merge($perms, $user_tmp);
  116. }
  117. }
  118. $perms = array_unique($perms);
  119. // This may not be right ... it may yield true when perms equate to deny
  120. $user_id_ary = array_diff($user_id_ary, $perms);
  121. unset($perms);
  122. }
  123. if (sizeof($user_id_ary))
  124. {
  125. $friend_foe_mode = ($zmode == 'friends') ? true : false;
  126. user_friend_foe_add($user_id_ary, $friend_foe_mode);
  127. $updated = true;
  128. }
  129. unset($user_id_ary);
  130. }
  131. }
  132. }
  133. elseif (sizeof($data['usernames']))
  134. {
  135. // Force integer values
  136. $data['usernames'] = array_map('intval', $data['usernames']);
  137. $friend_foe_mode = ($zmode == 'friends') ? true : false;
  138. user_friend_foe_remove($data['usernames'], $friend_foe_mode);
  139. $updated = true;
  140. }
  141. $db->clear_cache('zebra_users_');
  142. if ($updated)
  143. {
  144. $redirect_url = append_sid(append_sid(CMS_PAGE_PROFILE . '?mode=zebra&amp;zmode=' . $zmode));
  145. meta_refresh(3, $redirect_url);
  146. message_die(GENERAL_MESSAGE, (($zmode == 'friends') ? $lang['FRIENDS_UPDATED'] : $lang['FOES_UPDATED']));
  147. }
  148. else
  149. {
  150. message_die(GENERAL_ERROR, (($zmode == 'friends') ? $lang['FRIENDS_UPDATE_ERROR'] : $lang['FOES_UPDATE_ERROR']));
  151. }
  152. }
  153. }
  154. $sql_and = ($zmode == 'foes') ? 'z.foe = 1' : 'z.friend = 1';
  155. $sql = "SELECT z.*, u.username
  156. FROM " . ZEBRA_TABLE . " z, " . USERS_TABLE . " u
  157. WHERE z.user_id = '" . $user->data['user_id'] . "'
  158. AND " . $sql_and . "
  159. AND u.user_id = z.zebra_id
  160. ORDER BY u.username ASC";
  161. $result = $db->sql_query($sql);
  162. $username_count = 0;
  163. $s_username_options = '';
  164. while ($row = $db->sql_fetchrow($result))
  165. {
  166. $s_username_options .= '<option value="' . $row['zebra_id'] . '">' . htmlspecialchars($row['username']) . '</option>';
  167. $username_count++;
  168. }
  169. $db->sql_freeresult($result);
  170. $link_name = $lang['UCP_ZEBRA_FRIENDS'];
  171. $nav_server_url = create_server_url();
  172. $breadcrumbs['address'] = $lang['Nav_Separator'] . '<a href="' . $nav_server_url . append_sid(CMS_PAGE_PROFILE_MAIN) . '"' . (!empty($link_name) ? '' : ' class="nav-current"') . '>' . $lang['Profile'] . '</a>' . (!empty($link_name) ? ($lang['Nav_Separator'] . '<a class="nav-current" href="#">' . $link_name . '</a>') : '');
  173. if ($username_count > 0)
  174. {
  175. $template->assign_block_vars('friends', array());
  176. }
  177. else
  178. {
  179. $template->assign_block_vars('no_friends', array());
  180. }
  181. $template->assign_vars(array(
  182. 'L_TITLE' => $lang['UCP_ZEBRA'],
  183. 'L_SUBMIT' => $lang['Submit'],
  184. 'L_RESET' => $lang['Reset'],
  185. 'L_SELECT' => $lang['Select'],
  186. 'L_REMOVE_SELECTED' => $lang['Remove_selected'],
  187. 'L_ADD_MEMBER' => $lang['Add_member'],
  188. 'L_ADD_FOES' => $lang['ADD_FOES'],
  189. 'L_ADD_FOES_EXPLAIN' => $lang['ADD_FOES_EXPLAIN'],
  190. 'L_FOES' => $lang['FOES'],
  191. 'L_FOES_EXPLAIN' => $lang['FOES_EXPLAIN'],
  192. 'L_YOUR_FOES' => $lang['YOUR_FOES'],
  193. 'L_YOUR_FOES_EXPLAIN' => $lang['YOUR_FOES_EXPLAIN'],
  194. 'L_NO_FOES' => $lang['NO_FOES'],
  195. 'L_ADD_FRIENDS' => $lang['ADD_FRIENDS'],
  196. 'L_ADD_FRIENDS_EXPLAIN' => $lang['ADD_FRIENDS_EXPLAIN'],
  197. 'L_FRIENDS' => $lang['FRIENDS'],
  198. 'L_FRIENDS_EXPLAIN' => $lang['FRIENDS_EXPLAIN'],
  199. 'L_YOUR_FRIENDS' => $lang['YOUR_FRIENDS'],
  200. 'L_YOUR_FRIENDS_EXPLAIN' => $lang['YOUR_FRIENDS_EXPLAIN'],
  201. 'L_NO_FRIENDS' => $lang['NO_FRIENDS'],
  202. 'U_SEARCH_USER' => append_sid(CMS_PAGE_SEARCH . '?mode=searchuser'),
  203. 'S_USERNAME_OPTIONS' => $s_username_options,
  204. 'S_PROFILE_ACTION' => append_sid(CMS_PAGE_PROFILE . '?mode=zebra&amp;zmode=' . $zmode),
  205. 'S_HIDDEN_FIELDS' => ''
  206. )
  207. );
  208. full_page_generation('profile_friends_mng_body.tpl', $lang['UCP_ZEBRA_FRIENDS'], '', '');
  209. ?>