PageRenderTime 35ms CodeModel.GetById 8ms RepoModel.GetById 0ms app.codeStats 0ms

/include/cleanup.php

https://bitbucket.org/nexea/x00n
PHP | 211 lines | 176 code | 27 blank | 8 comment | 38 complexity | ad46790d4ee8dcef8fd279ebff2ebef4 MD5 | raw file
Possible License(s): GPL-2.0
  1. <?
  2. require_once("bittorrent.php");
  3. function docleanup() {
  4. global $torrent_dir, $signup_timeout, $max_dead_torrent_time, $autoclean_interval;
  5. set_time_limit(0);
  6. ignore_user_abort(1);
  7. do {
  8. $res = mysql_query("SELECT id FROM torrents");
  9. $ar = array();
  10. while ($row = mysql_fetch_array($res)) {
  11. $id = $row[0];
  12. $ar[$id] = 1;
  13. }
  14. if (!count($ar))
  15. break;
  16. $dp = @opendir($torrent_dir);
  17. if (!$dp)
  18. break;
  19. $ar2 = array();
  20. while (($file = readdir($dp)) !== false) {
  21. if (!preg_match('/^(\d+)\.torrent$/', $file, $m))
  22. continue;
  23. $id = $m[1];
  24. $ar2[$id] = 1;
  25. if (isset($ar[$id]) && $ar[$id])
  26. continue;
  27. $ff = $torrent_dir . "/$file";
  28. unlink($ff);
  29. }
  30. closedir($dp);
  31. if (!count($ar2))
  32. break;
  33. $delids = array();
  34. foreach (array_keys($ar) as $k) {
  35. if (isset($ar2[$k]) && $ar2[$k])
  36. continue;
  37. $delids[] = $k;
  38. unset($ar[$k]);
  39. }
  40. if (count($delids))
  41. mysql_query("DELETE FROM torrents WHERE id IN (" . join(",", $delids) . ")");
  42. $res = mysql_query("SELECT torrent FROM peers GROUP BY torrent");
  43. $delids = array();
  44. while ($row = mysql_fetch_array($res)) {
  45. $id = $row[0];
  46. if (isset($ar[$id]) && $ar[$id])
  47. continue;
  48. $delids[] = $id;
  49. }
  50. if (count($delids))
  51. mysql_query("DELETE FROM peers WHERE torrent IN (" . join(",", $delids) . ")");
  52. $res = mysql_query("SELECT torrent FROM files GROUP BY torrent");
  53. $delids = array();
  54. while ($row = mysql_fetch_array($res)) {
  55. $id = $row[0];
  56. if ($ar[$id])
  57. continue;
  58. $delids[] = $id;
  59. }
  60. if (count($delids))
  61. mysql_query("DELETE FROM files WHERE torrent IN (" . join(",", $delids) . ")");
  62. } while (0);
  63. $deadtime = deadtime();
  64. mysql_query("DELETE FROM peers WHERE last_action < FROM_UNIXTIME($deadtime)");
  65. $deadtime -= $max_dead_torrent_time;
  66. mysql_query("UPDATE torrents SET visible='no' WHERE visible='yes' AND last_action < FROM_UNIXTIME($deadtime)");
  67. $deadtime = time() - $signup_timeout;
  68. mysql_query("DELETE FROM users WHERE status = 'pending' AND added < FROM_UNIXTIME($deadtime) AND last_login < FROM_UNIXTIME($deadtime) AND last_access < FROM_UNIXTIME($deadtime)");
  69. $torrents = array();
  70. $res = mysql_query("SELECT torrent, seeder, COUNT(*) AS c FROM peers GROUP BY torrent, seeder");
  71. while ($row = mysql_fetch_assoc($res)) {
  72. if ($row["seeder"] == "yes")
  73. $key = "seeders";
  74. else
  75. $key = "leechers";
  76. $torrents[$row["torrent"]][$key] = $row["c"];
  77. }
  78. $res = mysql_query("SELECT torrent, COUNT(*) AS c FROM comments GROUP BY torrent");
  79. while ($row = mysql_fetch_assoc($res)) {
  80. $torrents[$row["torrent"]]["comments"] = $row["c"];
  81. }
  82. $fields = explode(":", "comments:leechers:seeders");
  83. $res = mysql_query("SELECT id, seeders, leechers, comments FROM torrents");
  84. while ($row = mysql_fetch_assoc($res)) {
  85. $id = $row["id"];
  86. $torr = $torrents[$id];
  87. foreach ($fields as $field) {
  88. if (!isset($torr[$field]))
  89. $torr[$field] = 0;
  90. }
  91. $update = array();
  92. foreach ($fields as $field) {
  93. if ($torr[$field] != $row[$field])
  94. $update[] = "$field = " . $torr[$field];
  95. }
  96. if (count($update))
  97. mysql_query("UPDATE torrents SET " . implode(",", $update) . " WHERE id = $id");
  98. }
  99. //delete inactive user accounts
  100. $secs = 42*86400;
  101. $dt = sqlesc(get_date_time(gmtime() - $secs));
  102. $maxclass = UC_POWER_USER;
  103. mysql_query("DELETE FROM users WHERE status='confirmed' AND class <= $maxclass AND last_access < $dt");
  104. // lock topics where last post was made more than x days ago
  105. $secs = 7*86400;
  106. $res = mysql_query("SELECT topics.id FROM topics JOIN posts ON topics.lastpost = posts.id AND topics.sticky = 'no' WHERE " . gmtime() . " - UNIX_TIMESTAMP(posts.added) > $secs") or mysql_error();
  107. while ($arr = mysql_fetch_assoc($res))
  108. mysql_query("UPDATE topics SET locked='yes' WHERE id=$arr[id]") or mysql_error();
  109. //remove expired warnings
  110. $res = mysql_query("SELECT id FROM users WHERE warned='yes' AND warneduntil < NOW() AND warneduntil <> '0000-00-00 00:00:00'") or mysql_error();
  111. if (mysql_num_rows($res) > 0)
  112. {
  113. $dt = sqlesc(get_date_time());
  114. $msg = sqlesc("Your warning has been removed. Please keep in your best behaviour from now on.\n");
  115. while ($arr = mysql_fetch_assoc($res))
  116. {
  117. mysql_query("UPDATE users SET warned = 'no', warneduntil = '0000-00-00 00:00:00' WHERE id = $arr[id]") or mysql_error();
  118. mysql_query("INSERT INTO messages (sender, receiver, added, msg, poster) VALUES(0, $arr[id], $dt, $msg, 0)") or mysql_error();
  119. }
  120. }
  121. // promote power users
  122. $limit = 25*1024*1024*1024;
  123. $minratio = 1.05;
  124. $maxdt = sqlesc(get_date_time(gmtime() - 86400*28));
  125. $res = mysql_query("SELECT id FROM users WHERE class = 0 AND uploaded >= $limit AND uploaded / downloaded >= $minratio AND added < $maxdt") or mysql_error();
  126. if (mysql_num_rows($res) > 0)
  127. {
  128. $dt = sqlesc(get_date_time());
  129. $msg = sqlesc("Congratulations, you have been auto-promoted to [b]Power User[/b]. :)\nYou can now download dox over 1 meg and view torrent NFOs.\n");
  130. while ($arr = mysql_fetch_assoc($res))
  131. {
  132. mysql_query("UPDATE users SET class = 1 WHERE id = $arr[id]") or mysql_error();
  133. mysql_query("INSERT INTO messages (sender, receiver, added, msg, poster) VALUES(0, $arr[id], $dt, $msg, 0)") or mysql_error();
  134. }
  135. }
  136. // demote power users
  137. $minratio = 0.95;
  138. $res = mysql_query("SELECT id FROM users WHERE class = 1 AND uploaded / downloaded < $minratio") or mysql_error();
  139. if (mysql_num_rows($res) > 0)
  140. {
  141. $dt = sqlesc(get_date_time());
  142. $msg = sqlesc("You have been auto-demoted from [b]Power User[/b] to [b]User[/b] because your share ratio has dropped below $minratio.\n");
  143. while ($arr = mysql_fetch_assoc($res))
  144. {
  145. mysql_query("UPDATE users SET class = 0 WHERE id = $arr[id]") or mysql_error();
  146. mysql_query("INSERT INTO messages (sender, receiver, added, msg, poster) VALUES(0, $arr[id], $dt, $msg, 0)") or mysql_error();
  147. }
  148. }
  149. // Update stats
  150. $seeders = get_row_count("peers", "WHERE seeder='yes'");
  151. $leechers = get_row_count("peers", "WHERE seeder='no'");
  152. mysql_query("UPDATE avps SET value_u=$seeders WHERE arg='seeders'") or mysql_error();
  153. mysql_query("UPDATE avps SET value_u=$leechers WHERE arg='leechers'") or mysql_error();
  154. // update forum post/topic count
  155. $forums = mysql_query("select id from forums");
  156. while ($forum = mysql_fetch_assoc($forums))
  157. {
  158. $postcount = 0;
  159. $topiccount = 0;
  160. $topics = mysql_query("select id from topics where forumid=$forum[id]");
  161. while ($topic = mysql_fetch_assoc($topics))
  162. {
  163. $res = mysql_query("select count(*) from posts where topicid=$topic[id]");
  164. $arr = mysql_fetch_row($res);
  165. $postcount += $arr[0];
  166. ++$topiccount;
  167. }
  168. mysql_query("update forums set postcount=$postcount, topiccount=$topiccount where id=$forum[id]");
  169. }
  170. // delete old torrents
  171. $days = 28;
  172. $dt = sqlesc(get_date_time(gmtime() - ($days * 86400)));
  173. $res = mysql_query("SELECT id, name FROM torrents WHERE added < $dt");
  174. while ($arr = mysql_fetch_assoc($res))
  175. {
  176. @unlink("$torrent_dir/$arr[id].torrent");
  177. mysql_query("DELETE FROM torrents WHERE id=$arr[id]");
  178. mysql_query("DELETE FROM peers WHERE torrent=$arr[id]");
  179. mysql_query("DELETE FROM comments WHERE torrent=$arr[id]");
  180. mysql_query("DELETE FROM files WHERE torrent=$arr[id]");
  181. write_log("Torrent $arr[id] ($arr[name]) was deleted by system (older than $days days)");
  182. }
  183. }
  184. ?>