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

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