You are here

function message_get_purgeable_by_type in Message 7

Find purgeable messages according to type and purge settings.

Parameters

$purge_limit: The maximal amount of messages to fetch. Decremented each time messages are fetched.

$message_type_name: Either a single message type name or an array of names.

$purge_settings: Array containing purging settings: 'quota' and 'days'.

Return value

array Messages of the given type(s) that should be purged according to the given settings.

1 call to message_get_purgeable_by_type()
message_cron in ./message.module
Implements hook_cron().

File

./message.module, line 596
API functions to manipulate messages.

Code

function message_get_purgeable_by_type(&$purge_limit, $message_type_name, $purge_settings) {
  if ($purge_limit <= 0) {
    return;
  }

  // Messages to be deleted.
  $purge_messages = array();

  // Base query for both purging methods.
  $base_query = new EntityFieldQuery();
  $base_query
    ->entityCondition('entity_type', 'message', '=')
    ->propertyCondition('type', $message_type_name, is_array($message_type_name) ? 'IN' : '=')
    ->propertyOrderBy('timestamp', 'DESC')
    ->propertyOrderBy('mid', 'DESC');

  // Purge according to quota definition.
  if (!empty($purge_settings['quota'])) {
    $quota_query = clone $base_query;
    $result = $quota_query
      ->range($purge_settings['quota'], $purge_limit)
      ->execute();
    if (!empty($result['message'])) {
      $purge_limit -= count($result['message']);
      $purge_messages += $result['message'];
    }
  }

  // Purge according to maximal age definition.
  if (!empty($purge_settings['days'])) {
    $age_query = clone $base_query;

    // Find messages older than current time - maximal age in days times
    // the seconds per day.
    $earlier_than = time() - $purge_settings['days'] * 86400;
    $result = $age_query
      ->propertyCondition('timestamp', $earlier_than, '<')
      ->range(0, $purge_limit)
      ->execute();
    if (!empty($result['message'])) {
      $purge_limit -= count($result['message']);
      $purge_messages += $result['message'];
    }
  }
  return $purge_messages;
}