/**
* Utility method to remove the oldest versions of an item, saving only the most recent versions.
*
* @param integer $maxVersions The maximum number of versions to save. All others will be deleted.
*
* @return boolean true on success, false on failure.
*
* @since 3.2
*/
public function deleteOldVersions($maxVersions)
{
$result = true;
// Get the list of version_id values we want to save
$db = $this->_db;
$itemId = $this->get('item_id');
$query = $db->getQuery(true);
$query->select($db->quoteName('version_id'))->from($db->quoteName('#__history'))->where($db->quoteName('item_id') . ' = :item_id')->where($db->quoteName('keep_forever') . ' != 1')->bind(':item_id', $itemId, ParameterType::STRING)->order($db->quoteName('save_date') . ' DESC ');
$query->setLimit((int) $maxVersions);
$db->setQuery($query);
$idsToSave = $db->loadColumn(0);
// Don't process delete query unless we have at least the maximum allowed versions
if (\count($idsToSave) === (int) $maxVersions) {
// Delete any rows not in our list and and not flagged to keep forever.
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__history'))->where($db->quoteName('item_id') . ' = :item_id')->whereNotIn($db->quoteName('version_id'), $idsToSave)->where($db->quoteName('keep_forever') . ' != 1')->bind(':item_id', $itemId, ParameterType::STRING);
$db->setQuery($query);
$result = (bool) $db->execute();
}
return $result;
}