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

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