Back to ContentHistory class

Method deleteOldVersions

public bool
deleteOldVersions
(mixed $maxVersions)
Utility method to remove the oldest versions of an item, saving only the most recent versions.
Parameters
  • int $maxVersions The maximum number of versions to save. All others will be deleted.
Returns
  • bool true on success, false on failure.
Since
  • 3.2

Method deleteOldVersions - Source code

/**
 * 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;
}