You are here

public function KalturaHelpers::filterOutUpToDateEntries in Kaltura 7.3

Filters up-to-date entries of specific timestamp.

Parameters

int $timestamp: Timestamp to check.

Return value

array Entry IDs that need to be updated.

Throws

\Exception If number of entries was changed remotely while fetching entries.

File

kaltura_client/kaltura_helpers.php, line 586

Class

KalturaHelpers
Class KalturaHelpers.

Code

public function filterOutUpToDateEntries($timestamp) {
  $client = $this
    ->getKalturaClient(TRUE);
  $filter = new KalturaMediaEntryFilter();
  $filter->orderBy = KalturaMediaEntryOrderBy::CREATED_AT_ASC;
  $filter->updatedAtGreaterThanOrEqual = $timestamp;
  $filter->updatedAtLessThanOrEqual = $timestamp;
  $pager = new KalturaFilterPager();
  $pager->pageSize = 100;
  $entry_ids = array();
  $total = NULL;
  while (TRUE) {
    ++$pager->pageIndex;
    $result = $client->media
      ->listAction($filter, $pager);
    if (!isset($total)) {
      $total = $result->totalCount;
    }
    elseif ($result->totalCount != $total) {
      throw new Exception(t('Number of entries was changed remotely.'));
    }
    if (empty($result->objects)) {
      break;
    }
    foreach ($result->objects as $entry) {
      $entry_ids[] = $entry->id;
    }
    if (count($entry_ids) == $total) {
      break;
    }
  }
  if ($entry_ids) {
    $query = new EntityFieldQuery();
    $result = $query
      ->entityCondition('entity_type', 'kaltura_entry')
      ->propertyCondition('kaltura_entryid', $entry_ids)
      ->propertyCondition('kaltura_updated_date', $timestamp)
      ->execute();
    if (!empty($result['kaltura_entry'])) {
      $entities = entity_load('kaltura_entry', array_keys($result['kaltura_entry']));
      $up_to_date = array();
      foreach ($entities as $entity) {
        $up_to_date[] = $entity->kaltura_entryid;
      }
      $entry_ids = array_diff($entry_ids, $up_to_date);
    }
  }
  return $entry_ids;
}