+ while ($orphan = dba::fetch($r)) {
+ $last_id = $orphan["tid"];
+ dba::delete('term', array('oid' => $orphan["oid"]));
+ }
+ } else {
+ logger("No term orphans found");
+ }
+ dba::close($r);
+ logger("Done deleting ".$count." orphaned data from term table. Last ID: ".$last_id);
+
+ Config::set('system', 'dbclean-last-id-7', $last_id);
+
+ if ($count < $limit) {
+ Config::set('system', 'finished-dbclean-7', true);
+ }
+ } elseif ($stage == 8) {
+ if ($days <= 0) {
+ return;
+ }
+
+ $last_id = Config::get('system', 'dbclean-last-id-8', 0);
+
+ logger("Deleting expired threads. Last ID: ".$last_id);
+ $r = dba::p("SELECT `thread`.`iid` FROM `thread`
+ INNER JOIN `contact` ON `thread`.`contact-id` = `contact`.`id` AND NOT `notify_new_posts`
+ WHERE `thread`.`received` < UTC_TIMESTAMP() - INTERVAL ? DAY
+ AND NOT `thread`.`mention` AND NOT `thread`.`starred`
+ AND NOT `thread`.`wall` AND NOT `thread`.`origin`
+ AND `thread`.`uid` != 0 AND `thread`.`iid` >= ?
+ AND NOT `thread`.`iid` IN (SELECT `parent` FROM `item`
+ WHERE (`item`.`starred` OR (`item`.`resource-id` != '')
+ OR (`item`.`file` != '') OR (`item`.`event-id` != '')
+ OR (`item`.`attach` != '') OR `item`.`wall` OR `item`.`origin`)
+ AND `item`.`parent` = `thread`.`iid`)
+ ORDER BY `thread`.`iid` LIMIT 1000", $days, $last_id);
+ $count = dba::num_rows($r);
+ if ($count > 0) {
+ logger("found expired threads: ".$count);
+ while ($thread = dba::fetch($r)) {
+ $last_id = $thread["iid"];
+ dba::delete('thread', array('iid' => $thread["iid"]));