static function fromNoticeInbox($user_id) { $ids = array(); $ni = new Notice_inbox(); $ni->user_id = $user_id; $ni->selectAdd(); $ni->selectAdd('notice_id'); $ni->orderBy('notice_id DESC'); $ni->limit(0, self::MAX_NOTICES); if ($ni->find()) { while ($ni->fetch()) { $ids[] = $ni->notice_id; } } $ni->free(); unset($ni); $inbox = new Inbox(); $inbox->user_id = $user_id; $inbox->pack($ids); $inbox->fake = true; return $inbox; }
} else { $id = null; } } $user = new User(); if (!empty($id)) { $user->whereAdd('id > ' . $id); } $cnt = $user->find(); while ($user->fetch()) { $inbox_entry = new Notice_inbox(); $inbox_entry->user_id = $user->id; $inbox_entry->orderBy('created DESC'); $inbox_entry->limit(1000, 1); $id = null; if ($inbox_entry->find(true)) { $id = $inbox_entry->notice_id; } $inbox_entry->free(); unset($inbox_entry); if (is_null($id)) { continue; } $start = microtime(true); $old_inbox = new Notice_inbox(); $cnt = $old_inbox->query('DELETE from notice_inbox WHERE user_id = ' . $user->id . ' AND notice_id < ' . $id); $old_inbox->free(); unset($old_inbox); print "Deleted {$cnt} notices for {$user->nickname} ({$user->id}).\n"; $finish = microtime(true); $delay = 3.0 * ($finish - $start);