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.

class_promotion.php 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. #declare(strict_types=1);
  3. $ENV = ENV::go();
  4. sleep(5);
  5. $GiB = 1024*1024*1024;
  6. $Criteria = [];
  7. # todo: Document on the wiki
  8. $Criteria[] = array(
  9. 'From' => USER,
  10. 'To' => MEMBER,
  11. 'MinUpload' => 10 * $GiB,
  12. 'MinRatio' => 0.8,
  13. 'MinUploads' => 0,
  14. 'MaxTime' => time_minus(3600 * 24 * 7 * 1)
  15. );
  16. $Criteria[] = array(
  17. 'From' => MEMBER,
  18. 'To' => POWER,
  19. 'MinUpload' => 100 * $GiB,
  20. 'MinRatio' => 1.2,
  21. 'MinUploads' => 1,
  22. 'MaxTime' => time_minus(3600 * 24 * 7 * 2)
  23. );
  24. $Criteria[] = array(
  25. 'From' => POWER,
  26. 'To' => ELITE,
  27. 'MinUpload' => 1000 * $GiB,
  28. 'MinRatio' => 1.5,
  29. 'MinUploads' => 10,
  30. 'MaxTime' => time_minus(3600 * 24 * 7 * 4)
  31. );
  32. $Criteria[] = array(
  33. 'From' => ELITE,
  34. 'To' => TORRENT_MASTER,
  35. 'MinUpload' => 5 * 1000 * $GiB,
  36. 'MinRatio' => 1.8,
  37. 'MinUploads' => 100,
  38. 'MaxTime' => time_minus(3600 * 24 * 7 * 8)
  39. );
  40. $Criteria[] = array(
  41. 'From' => TORRENT_MASTER,
  42. 'To' => POWER_TM,
  43. 'MinUpload' => 10 * 1000 * $GiB,
  44. 'MinRatio' => 2.0,
  45. 'MinUploads' => 500,
  46. 'MaxTime' => time_minus(3600 * 24 * 7 * 16),
  47. 'Extra' => '
  48. (
  49. SELECT COUNT(DISTINCT GroupID)
  50. FROM torrents
  51. WHERE UserID = users_main.ID
  52. ) >= 300'
  53. );
  54. foreach ($Criteria as $L) { // $L = Level
  55. $Query = "
  56. SELECT ID
  57. FROM users_main
  58. JOIN users_info ON users_main.ID = users_info.UserID
  59. WHERE PermissionID = ".$L['From']."
  60. AND Warned IS NULL
  61. AND Uploaded >= '$L[MinUpload]'
  62. AND (Uploaded / Downloaded >= '$L[MinRatio]' OR (Uploaded / Downloaded IS NULL))
  63. AND JoinDate < '$L[MaxTime]'
  64. AND (
  65. SELECT COUNT(ID)
  66. FROM torrents
  67. WHERE UserID = users_main.ID
  68. ) >= '$L[MinUploads]'
  69. AND Enabled = '1'";
  70. if (!empty($L['Extra'])) {
  71. $Query .= ' AND '.$L['Extra'];
  72. }
  73. $DB->query($Query);
  74. $UserIDs = $DB->collect('ID');
  75. if (count($UserIDs) > 0) {
  76. $DB->query("
  77. UPDATE users_main
  78. SET PermissionID = ".$L['To']."
  79. WHERE ID IN(".implode(',', $UserIDs).')');
  80. foreach ($UserIDs as $UserID) {
  81. $Cache->begin_transaction("user_info_$UserID");
  82. $Cache->update_row(false, array('PermissionID' => $L['To']));
  83. $Cache->commit_transaction(0);
  84. $Cache->delete_value("user_info_$UserID");
  85. $Cache->delete_value("user_info_heavy_$UserID");
  86. $Cache->delete_value("user_stats_$UserID");
  87. $Cache->delete_value("enabled_$UserID");
  88. $DB->query("
  89. UPDATE users_info
  90. SET AdminComment = CONCAT('".sqltime()." - Class changed to ".Users::make_class_string($L['To'])." by System\n\n', AdminComment)
  91. WHERE UserID = $UserID");
  92. Misc::send_pm($UserID, 0, 'You have been promoted to '.Users::make_class_string($L['To']), 'Congratulations on your promotion to '.Users::make_class_string($L['To'])."!\n\nTo read more about ".$ENV->SITE_NAME."'s user classes, read [url=".site_url()."wiki.php?action=article&amp;name=userclasses]this wiki article[/url].");
  93. }
  94. }
  95. // Demote users with less than the required uploads
  96. $Query = "
  97. SELECT ID
  98. FROM users_main
  99. JOIN users_info ON users_main.ID = users_info.UserID
  100. WHERE PermissionID = '$L[To]'
  101. AND ( Uploaded < '$L[MinUpload]'
  102. OR (
  103. SELECT COUNT(ID)
  104. FROM torrents
  105. WHERE UserID = users_main.ID
  106. ) < '$L[MinUploads]'";
  107. if (!empty($L['Extra'])) {
  108. $Query .= ' OR NOT '.$L['Extra'];
  109. }
  110. $Query .= "
  111. )
  112. AND Enabled = '1'";
  113. $DB->query($Query);
  114. $UserIDs = $DB->collect('ID');
  115. if (count($UserIDs) > 0) {
  116. $DB->query("
  117. UPDATE users_main
  118. SET PermissionID = ".$L['From']."
  119. WHERE ID IN(".implode(',', $UserIDs).')');
  120. foreach ($UserIDs as $UserID) {
  121. $Cache->begin_transaction("user_info_$UserID");
  122. $Cache->update_row(false, array('PermissionID' => $L['From']));
  123. $Cache->commit_transaction(0);
  124. $Cache->delete_value("user_info_$UserID");
  125. $Cache->delete_value("user_info_heavy_$UserID");
  126. $Cache->delete_value("user_stats_$UserID");
  127. $Cache->delete_value("enabled_$UserID");
  128. $DB->query("
  129. UPDATE users_info
  130. SET AdminComment = CONCAT('".sqltime()." - Class changed to ".Users::make_class_string($L['From'])." by System\n\n', AdminComment)
  131. WHERE UserID = $UserID");
  132. Misc::send_pm($UserID, 0, 'You have been demoted to '.Users::make_class_string($L['From']), "You now only qualify for the \"".Users::make_class_string($L['From'])."\" user class.\n\nTo read more about ".$ENV->SITE_NAME."'s user classes, read [url=".site_url()."wiki.php?action=article&amp;name=userclasses]this wiki article[/url].");
  133. }
  134. }
  135. }