You are here

function resp_img_field_attach_view_alter in Responsive images and styles 7.2

Same name and namespace in other branches
  1. 8 resp_img.module \resp_img_field_attach_view_alter()

Implements hook_preprocess_field().

File

./resp_img.module, line 254

Code

function resp_img_field_attach_view_alter(&$output, $context) {
  $view = module_exists('views') ? views_get_current_view() : FALSE;
  foreach (element_children($output) as $field_name) {
    $element =& $output[$field_name];
    $vars = array();
    if (isset($element['#formatter'])) {
      if ($element['#formatter'] == 'image') {
        $vars['image_style'] = 'image_style';
        $vars['#formatter'] = 'picture';
        $vars['#theme'] = 'picture_formatter';
      }
      elseif ($element['#formatter'] == 'colorbox') {
        $vars['image_style'] = 'colorbox_node_style';
        $vars['#formatter'] = 'picture';
        $vars['#theme'] = 'colorbox_picture_formatter';
      }
      elseif ($element['#formatter'] == 'slideshow') {
        $vars['image_style'] = 'slideshow_image_style';
        $vars['#formatter'] = 'slideshow';
        $vars['#theme'] = 'field_slideshow';
      }
      if (!empty($vars)) {
        $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
        if ($view && isset($view->query->pager->display->handler->handlers['field'][$element['#field_name']])) {
          $settings = $view->query->pager->display->handler->handlers['field'][$element['#field_name']]->options['settings'];
        }
        elseif (isset($instance['display'][$context['view_mode']]['settings'][$vars['image_style']]) && !empty($instance['display'][$context['view_mode']]['settings'][$vars['image_style']])) {
          $settings = $instance['display'][$context['view_mode']]['settings'];
        }
        else {
          $settings = $instance['display']['default']['settings'];
        }
        if (isset($settings[$vars['image_style']]) && strpos($settings[$vars['image_style']], RESP_IMG_STYLE_PREFIX) !== FALSE) {
          $group_name = drupal_substr($settings[$vars['image_style']], drupal_strlen(RESP_IMG_STYLE_PREFIX));
          $breakpoint_styles = _resp_img_get_breakpoint_styles($group_name);
          if (!empty($breakpoint_styles)) {

            // Change the formatter so it uses ours.
            $element['#formatter'] = $vars['#formatter'];

            // Change the formatter on all items as well.
            $num_fields = $element['#formatter'] != 'slideshow' ? count($element['#items']) : 1;
            for ($delta = 0; $delta < $num_fields; $delta++) {
              $element[$delta]['#theme'] = $vars['#theme'];

              // Change the image style to the first in use.
              $reset = reset($breakpoint_styles['mapping']);
              $element[$delta]['#image_style'] = reset($reset);
              $element[$delta]['#breakpoints'] = $breakpoint_styles;
            }
          }
          else {
            watchdog('Responsive images', 'You have to map at least 1 style for ' . check_plain($group_name) . '.');
          }
        }
      }
    }
  }
}