You are here

function instagram_feeds_get_tasks in Instagram Feeds 7

Creates tasks for instagram_feeds_cron() and for batch operations.

Parameters

string $delta: Node nid for creating (if not exist) tasks for this settings. If not set all tasks will be created.

Return value

array An array with jobs.

2 calls to instagram_feeds_get_tasks()
instagram_feeds_cron in ./instagram_feeds.module
Implements hook_cron().
instagram_feeds_import_tab_form_submit in includes/instagram_feeds.pages.inc
Submit handler for instagram_feeds_import_tab_form().

File

./instagram_feeds.module, line 378

Code

function instagram_feeds_get_tasks($delta = NULL) {
  $job = array();
  $nids_to_delete = array();
  $images_to_delete = array();
  $existing = instagram_feeds_get_existing_feeds();
  $existing_urls = array_keys($existing);
  $must_have = instagram_feeds_get_all_conditions();
  $missed_imgs = variable_get('instagram_feeds_missed_imgs', array());
  if (is_null($delta)) {
    $must_have_urls = array_keys($must_have);
    $urls_to_delete = array_diff($existing_urls, $must_have_urls);
  }
  else {
    $must_have_urls = instagram_feeds_urls_from_feed($delta);
    $urls_to_delete = array();
  }
  $urls_to_create = array_diff($must_have_urls, $existing_urls);
  if (count($urls_to_delete)) {
    foreach ($urls_to_delete as $url_to_delete) {
      $nids_to_delete[] = $existing[$url_to_delete]->feed_nid;
    }
  }
  if (is_null($delta)) {
    $expiration_time = variable_get('instagram_feeds_items_expiration_time', 2592000);
    $limit_imgs_per_feed = variable_get('instagram_feeds_limit_imgs_per_feed', 0);
    if ($expiration_time || $limit_imgs_per_feed) {
      $feeds_nids = array();
      if (count($existing)) {
        foreach ($existing as $feed) {
          $feeds_nids[] = $feed->feed_nid;
        }
      }
      $images_to_delete = _instagram_feeds_get_images_to_delete($expiration_time, $feeds_nids);

      // Delete unnecessary images.
      if (count($images_to_delete)) {
        $items_to_delete_array = array_chunk($images_to_delete, 50);
        foreach ($items_to_delete_array as $items_to_delete_chunk) {
          $job[] = array(
            'type' => 'delete_items',
            'data' => $items_to_delete_chunk,
          );
        }
      }
    }
    $remove_unused_terms = variable_get('instagram_feeds_remove_unused_terms', min(array(
      1,
      max($expiration_time, $limit_imgs_per_feed),
    )));
    if (($expiration_time || $limit_imgs_per_feed) && $remove_unused_terms) {
      $terms_to_delete = _instagram_feeds_get_taxonomy_terms_to_delete();

      // Delete unnecessary terms.
      if (count($terms_to_delete)) {
        $items_to_delete_array = array_chunk($terms_to_delete, 50);
        foreach ($items_to_delete_array as $items_to_delete_chunk) {
          $job[] = array(
            'type' => 'delete_taxonomy_terms',
            'data' => $items_to_delete_chunk,
          );
        }
      }
    }
  }

  // Try to import missed images again.
  if (count($missed_imgs) && is_null($delta)) {
    foreach ($missed_imgs as $id => $feed) {
      $job[] = array(
        'type' => 'import_attempt_images',
        'data' => array(
          'items' => array_values($feed['items']),
          'id' => $id,
        ),
      );
    }
  }
  elseif (!is_null($delta) && isset($missed_imgs[INSTAGRAM_FEEDS_FEED_ID . '__' . $delta]['items'])) {
    $job[] = array(
      'type' => 'import_attempt_images',
      'data' => array(
        'items' => array_values($missed_imgs[INSTAGRAM_FEEDS_FEED_ID . '__' . $delta]['items']),
        'id' => INSTAGRAM_FEEDS_FEED_ID . '__' . $delta,
      ),
    );
  }

  // Delete unnecessary Feeds URLs.
  if (count($nids_to_delete)) {
    $job[] = array(
      'type' => 'delete_feeds_urls',
      'data' => $nids_to_delete,
    );
  }

  // Create the necessary URLs for importing images from Instagram.
  if (count($urls_to_create)) {
    foreach ($urls_to_create as $url_to_create) {
      $job[] = array(
        'type' => 'create_node',
        'data' => $must_have[$url_to_create],
      );
    }
  }

  // Manage Instagram blocks: delete unnecessary, create new Instagram blocks
  // if needed.
  $job[] = array(
    'type' => 'check_block_deltas',
    'data' => $delta,
  );
  return $job;
}