BioTorrents.de’s version of Gazelle
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.

linkedfunctions.php 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. function link_users($UserID, $TargetID)
  3. {
  4. global $DB, $LoggedUser;
  5. authorize();
  6. if (!check_perms('users_mod')) {
  7. error(403);
  8. }
  9. if (!is_number($UserID) || !is_number($TargetID)) {
  10. error(403);
  11. }
  12. if ($UserID == $TargetID) {
  13. return;
  14. }
  15. $DB->query("
  16. SELECT 1
  17. FROM users_main
  18. WHERE ID IN ($UserID, $TargetID)");
  19. if ($DB->record_count() !== 2) {
  20. error(403);
  21. }
  22. $DB->query("
  23. SELECT GroupID
  24. FROM users_dupes
  25. WHERE UserID = $TargetID");
  26. list($TargetGroupID) = $DB->next_record();
  27. $DB->query("
  28. SELECT u.GroupID, d.Comments
  29. FROM users_dupes AS u
  30. JOIN dupe_groups AS d ON d.ID = u.GroupID
  31. WHERE UserID = $UserID");
  32. list($UserGroupID, $Comments) = $DB->next_record();
  33. $UserInfo = Users::user_info($UserID);
  34. $TargetInfo = Users::user_info($TargetID);
  35. if (!$UserInfo || !$TargetInfo) {
  36. return;
  37. }
  38. if ($TargetGroupID) {
  39. if ($TargetGroupID == $UserGroupID) {
  40. return;
  41. }
  42. if ($UserGroupID) {
  43. $DB->query("
  44. UPDATE users_dupes
  45. SET GroupID = $TargetGroupID
  46. WHERE GroupID = $UserGroupID");
  47. $DB->query("
  48. UPDATE dupe_groups
  49. SET Comments = CONCAT('".db_string($Comments)."\n\n',Comments)
  50. WHERE ID = $TargetGroupID");
  51. $DB->query("DELETE FROM dupe_groups WHERE ID = $UserGroupID");
  52. $GroupID = $UserGroupID;
  53. } else {
  54. $DB->query("INSERT INTO users_dupes (UserID, GroupID) VALUES ($UserID, $TargetGroupID)");
  55. $GroupID = $TargetGroupID;
  56. }
  57. } elseif ($UserGroupID) {
  58. $DB->query("INSERT INTO users_dupes (UserID, GroupID) VALUES ($TargetID, $UserGroupID)");
  59. $GroupID = $UserGroupID;
  60. } else {
  61. $DB->query("INSERT INTO dupe_groups () VALUES ()");
  62. $GroupID = $DB->inserted_id();
  63. $DB->query("INSERT INTO users_dupes (UserID, GroupID) VALUES ($TargetID, $GroupID)");
  64. $DB->query("INSERT INTO users_dupes (UserID, GroupID) VALUES ($UserID, $GroupID)");
  65. }
  66. $AdminComment = sqltime()." - Linked accounts updated: [user]".$UserInfo['Username']."[/user] and [user]".$TargetInfo['Username']."[/user] linked by ".$LoggedUser['Username'];
  67. $DB->query("
  68. UPDATE users_info AS i
  69. JOIN users_dupes AS d ON d.UserID = i.UserID
  70. SET i.AdminComment = CONCAT('".db_string($AdminComment)."\n\n', i.AdminComment)
  71. WHERE d.GroupID = $GroupID");
  72. }
  73. function unlink_user($UserID)
  74. {
  75. global $DB, $LoggedUser;
  76. authorize();
  77. if (!check_perms('users_mod')) {
  78. error(403);
  79. }
  80. if (!is_number($UserID)) {
  81. error(403);
  82. }
  83. $UserInfo = Users::user_info($UserID);
  84. if ($UserInfo === false) {
  85. return;
  86. }
  87. $AdminComment = sqltime()." - Linked accounts updated: [user]".$UserInfo['Username']."[/user] unlinked by ".$LoggedUser['Username'];
  88. $DB->query("
  89. UPDATE users_info AS i
  90. JOIN users_dupes AS d1 ON d1.UserID = i.UserID
  91. JOIN users_dupes AS d2 ON d2.GroupID = d1.GroupID
  92. SET i.AdminComment = CONCAT('".db_string($AdminComment)."\n\n', i.AdminComment)
  93. WHERE d2.UserID = $UserID");
  94. $DB->query("DELETE FROM users_dupes WHERE UserID = '$UserID'");
  95. $DB->query("
  96. DELETE g.*
  97. FROM dupe_groups AS g
  98. LEFT JOIN users_dupes AS u ON u.GroupID = g.ID
  99. WHERE u.GroupID IS NULL");
  100. }
  101. function delete_dupegroup($GroupID)
  102. {
  103. global $DB;
  104. authorize();
  105. if (!check_perms('users_mod')) {
  106. error(403);
  107. }
  108. if (!is_number($GroupID)) {
  109. error(403);
  110. }
  111. $DB->query("DELETE FROM dupe_groups WHERE ID = '$GroupID'");
  112. }
  113. function dupe_comments($GroupID, $Comments)
  114. {
  115. global $DB, $LoggedUser;
  116. authorize();
  117. if (!check_perms('users_mod')) {
  118. error(403);
  119. }
  120. if (!is_number($GroupID)) {
  121. error(403);
  122. }
  123. $DB->query("
  124. SELECT SHA1(Comments) AS CommentHash
  125. FROM dupe_groups
  126. WHERE ID = $GroupID");
  127. list($OldCommentHash) = $DB->next_record();
  128. if ($OldCommentHash != sha1($Comments)) {
  129. $AdminComment = sqltime()." - Linked accounts updated: Comments updated by ".$LoggedUser['Username'];
  130. if ($_POST['form_comment_hash'] == $OldCommentHash) {
  131. $DB->query("
  132. UPDATE dupe_groups
  133. SET Comments = '".db_string($Comments)."'
  134. WHERE ID = '$GroupID'");
  135. } else {
  136. $DB->query("
  137. UPDATE dupe_groups
  138. SET Comments = CONCAT('".db_string($Comments)."\n\n',Comments)
  139. WHERE ID = '$GroupID'");
  140. }
  141. $DB->query("
  142. UPDATE users_info AS i
  143. JOIN users_dupes AS d ON d.UserID = i.UserID
  144. SET i.AdminComment = CONCAT('".db_string($AdminComment)."\n\n', i.AdminComment)
  145. WHERE d.GroupID = $GroupID");
  146. }
  147. }
  148. function user_dupes_table($UserID)
  149. {
  150. global $DB, $LoggedUser;
  151. if (!check_perms('users_mod')) {
  152. error(403);
  153. }
  154. # todo: Strict equality in is_number() breaks admin view
  155. if (!is_number($UserID)) {
  156. error(403);
  157. }
  158. $DB->query("
  159. SELECT d.ID, d.Comments, SHA1(d.Comments) AS CommentHash
  160. FROM dupe_groups AS d
  161. JOIN users_dupes AS u ON u.GroupID = d.ID
  162. WHERE u.UserID = $UserID");
  163. if (list($GroupID, $Comments, $CommentHash) = $DB->next_record()) {
  164. $DB->query("
  165. SELECT m.ID
  166. FROM users_main AS m
  167. JOIN users_dupes AS d ON m.ID = d.UserID
  168. WHERE d.GroupID = $GroupID
  169. ORDER BY m.ID ASC");
  170. $DupeCount = $DB->record_count();
  171. $Dupes = $DB->to_array();
  172. } else {
  173. $DupeCount = 0;
  174. $Dupes = [];
  175. } ?>
  176. <form class="manage_form" name="user" method="post" id="linkedform" action="">
  177. <input type="hidden" name="action" value="dupes" />
  178. <input type="hidden" name="dupeaction" value="update" />
  179. <input type="hidden" name="userid" value="<?=$UserID?>" />
  180. <input type="hidden" id="auth" name="auth"
  181. value="<?=$LoggedUser['AuthKey']?>" />
  182. <input type="hidden" id="form_comment_hash" name="form_comment_hash"
  183. value="<?=$CommentHash?>" />
  184. <div class="box" id="l_a_box">
  185. <div class="head">
  186. Linked Accounts (<?=max($DupeCount - 1, 0)?>) <span
  187. class="float_right"><a data-toggle-target=".linkedaccounts" class="brackets">Toggle</a></span>
  188. </div>
  189. <table width="100%" class="layout hidden linkedaccounts">
  190. <?=($DupeCount ? "<tr>\n" : '')?>
  191. <?php
  192. $i = 0;
  193. foreach ($Dupes as $Dupe) {
  194. $i++;
  195. list($DupeID) = $Dupe;
  196. $DupeInfo = Users::user_info($DupeID); ?>
  197. <td align="left"><?=Users::format_username($DupeID, true, true, true, true)?>
  198. <a href="user.php?action=dupes&amp;dupeaction=remove&amp;auth=<?=$LoggedUser['AuthKey']?>&amp;userid=<?=$UserID?>&amp;removeid=<?=$DupeID?>"
  199. onclick="return confirm('Are you sure you wish to remove <?=$DupeInfo['Username']?> from this group?');"
  200. class="brackets tooltip" title="Remove linked account">X</a>
  201. </td>
  202. <?php
  203. if ($i == 4) {
  204. $i = 0;
  205. echo "\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n";
  206. }
  207. }
  208. if ($DupeCount) {
  209. if ($i !== 0) {
  210. for ($j = $i; $j < 4; $j++) {
  211. echo "\t\t\t\t\t\t<td>&nbsp;</td>\n";
  212. }
  213. } ?>
  214. </tr>
  215. <?php
  216. } ?>
  217. <tr>
  218. <td colspan="5" align="left" style="border-top: thin solid;"><strong>Comments:</strong></td>
  219. </tr>
  220. <tr>
  221. <td colspan="5" align="left">
  222. <div id="dupecomments"
  223. class="<?=($DupeCount ? '' : 'hidden')?>">
  224. <?=Text::full_format($Comments); ?>
  225. </div>
  226. <div id="editdupecomments"
  227. class="<?=($DupeCount ? 'hidden' : '')?>">
  228. <textarea name="dupecomments" onkeyup="resize('dupecommentsbox');" id="dupecommentsbox" cols="65" rows="5"
  229. style="width: 98%;"><?=display_str($Comments)?></textarea>
  230. </div>
  231. <span class="float_right"><a href="#"
  232. onclick="$('#dupecomments').gtoggle(); $('#editdupecomments').gtoggle(); resize('dupecommentsbox'); return false;"
  233. class="brackets">Edit linked account comments</a></span>
  234. </td>
  235. </tr>
  236. </table>
  237. <div class="pad hidden linkedaccounts">
  238. <label for="target">Link this user with: </label>
  239. <input type="text" name="target" id="target" />
  240. <input type="submit" value="Update" id="submitlink" />
  241. </div>
  242. </div>
  243. </form>
  244. <?php
  245. }