You are here

function imageinfo_cache_get_image_styles_in_views in Imageinfo Cache 7.3

Given a field name, will return image styles used in views for that field.

Parameters

string $field_name: Name of a field containing images.

bool $view_links: (optional) If TRUE return links to the views that use image styles. Default is FALSE.

bool $use_cache: (optional) Use the database cache. Default is TRUE.

Return value

array An array image style names.

2 calls to imageinfo_cache_get_image_styles_in_views()
imageinfo_cache_admin_settings_form in ./imageinfo_cache.admin.inc
Form builder; Configure advagg settings.
imageinfo_cache_get_styles_in_use in ./imageinfo_cache.inc
Generates all in use presets given a field instance and a file uri.
1 string reference to 'imageinfo_cache_get_image_styles_in_views'
imageinfo_cache_views_invalidate_cache in ./imageinfo_cache.module
Implements hook_views_invalidate_cache().

File

./imageinfo_cache.inc, line 230
Imageinfo Cache module. Helper functions.

Code

function imageinfo_cache_get_image_styles_in_views($field_name, $view_links = FALSE, $use_cache = TRUE) {
  $image_styles_in_views =& drupal_static(__FUNCTION__);

  // Do nothing is the views module is missing.
  if (!module_exists('views')) {
    return array();
  }

  // Lookup info.
  if (!isset($image_styles_in_views)) {
    $cache = cache_get('imageinfo_cache_get_image_styles_in_views');
    if (!empty($cache->data) && $use_cache) {
      $image_styles_in_views = $cache->data;
    }
    else {
      foreach (views_get_enabled_views() as $view) {
        foreach ($view->display as $display) {

          // Skip if no fields.
          if (empty($display->display_options['fields'])) {
            continue;
          }
          foreach ($display->display_options['fields'] as $view_field_name => $field_info) {

            // Skip if field is missing needed info.
            if (empty($field_info['settings']['image_style']) && empty($field_info['settings']['file_view_mode']) && empty($field_info['view_mode'])) {
              continue;
            }

            // Handle rendered fields by looking at relationships.
            if (strpos($view_field_name, 'rendered') === 0) {
              if (!empty($display->display_options['relationships'])) {
                $fields_with_images = imageinfo_cache_get_fields_with_images();
                $changed = FALSE;
                foreach ($display->display_options['relationships'] as $values) {
                  if (!empty($values['label']) && !empty($fields_with_images[$values['label']])) {
                    $view_field_name = $values['label'];
                    $changed = TRUE;
                    break;
                  }
                }
                if (empty($changed)) {
                  break;
                }
              }
            }
            $added = FALSE;

            // Core image style.
            if (!empty($field_info['settings']['image_style'])) {
              $image_styles_in_views[$view_field_name][] = $field_info['settings']['image_style'];
              $added = TRUE;
            }

            // Newer Lightbox.
            if (!empty($field_info['settings']['lightbox_style'])) {
              $image_styles_in_views[$view_field_name][] = $field_info['settings']['lightbox_style'];
              $added = TRUE;
            }

            // Older Lightbox.
            if (!empty($field_info['type']) && substr_count($field_info['type'], '__') == 3 && strpos($field_info['type'], 'lightbox2__') === 0) {
              $pieces = explode('__', $field_info['type']);
              $image_styles_in_views[$view_field_name][] = $pieces[2];
              $image_styles_in_views[$view_field_name][] = $pieces[3];
              $added = TRUE;
            }

            // File entities.
            if (!empty($field_info['settings']['file_view_mode'])) {
              $file_view_mode = imageinfo_cache_get_presets_in_file_view_mode($field_info['settings']['file_view_mode']);
              foreach ($file_view_mode as $style_in_view) {
                $image_styles_in_views[$view_field_name][] = $style_in_view;
                $added = TRUE;
              }
            }

            // File entities.
            if (!empty($field_info['view_mode'])) {
              $view_mode = imageinfo_cache_get_presets_in_file_view_mode($field_info['view_mode']);
              foreach ($view_mode as $style_in_view) {
                $image_styles_in_views[$view_field_name][] = $style_in_view;
                $added = TRUE;
              }
            }
            if ($added) {
              if (empty($image_styles_in_views[$view_field_name]['#views'])) {
                $image_styles_in_views[$view_field_name]['#views'] = l($view->human_name . ' - ' . $display->display_title, 'admin/structure/views/view/' . $view->name . '/edit/' . $display->id);
              }
              else {
                $image_styles_in_views[$view_field_name]['#views'] .= ', ' . l($view->human_name . ' - ' . $display->display_title, 'admin/structure/views/view/' . $view->name . '/edit/' . $display->id);
              }
            }
          }
        }
      }

      // Diff arrays to see if this value is different from the cached value.
      if (!empty($cache->data)) {
        $a = imageinfo_cache_array_diff_assoc_recursive($cache->data, $image_styles_in_views);
        $b = imageinfo_cache_array_diff_assoc_recursive($image_styles_in_views, $cache->data);
      }
      if (empty($cache->data) || !empty($a) || !empty($b)) {
        cache_set('imageinfo_cache_get_image_styles_in_views', $image_styles_in_views, 'cache', CACHE_TEMPORARY);
      }
    }
  }

  // Return list.
  if ($view_links) {
    $return = '';
  }
  else {
    $return = array();
  }
  if (isset($image_styles_in_views[$field_name])) {
    if (!empty($image_styles_in_views[$field_name]['#views']) && $view_links) {
      $return = $image_styles_in_views[$field_name]['#views'];
    }
    elseif (!$view_links) {
      $copy = $image_styles_in_views[$field_name];
      unset($copy['#views']);
      $return = array_unique($copy);
    }
  }
  return $return;
}