public function calculateUpdateInterval() { $min = new Config(); $min->readKey('update-interval-min'); $max = new Config(); $max->readKey('update-interval-max'); $item = new Item(); foreach ((new Feed())->all() as $feed) { $itemCount = $item->count('id_feed = ?', [$feed->id]); $sth = $item->getPdo()->prepare('SELECT date FROM item WHERE id_feed = ? ORDER BY date DESC LIMIT ' . intval($itemCount / 3)); $sth->execute([$feed->id]); $lastDate = time(); $diffs = []; foreach ($sth->fetchAll(\PDO::FETCH_COLUMN) as $date) { if ($lastDate - $date > 0) { $diffs[] = $lastDate - $date; } $lastDate = $date; } if (empty($diffs)) { continue; } rsort($diffs); $medMin = floor($diffs[intval(round(count($diffs) / 2)) - 1]); if ($medMin < $min->value) { $medMin = $min->value; } else { if ($medMin > $max->value) { $medMin = $max->value; } } $feed->interval = $medMin; $feed->save(); } return true; }