annotate sites/all/modules/flexslider/flexslider_fields/flexslider_fields.module @ 2:b74b41bb73f0

-- Google analytics module
author danieleb <danielebarchiesi@me.com>
date Thu, 22 Aug 2013 17:22:54 +0100
parents
children
rev   line source
danielebarchiesi@2 1 <?php
danielebarchiesi@2 2
danielebarchiesi@2 3 /**
danielebarchiesi@2 4 * @file
danielebarchiesi@2 5 * Adds fields integration with FlexSlider
danielebarchiesi@2 6 *
danielebarchiesi@2 7 * @author jepedo
danielebarchiesi@2 8 * @author Mathew Winstone <mwinstone@coldfrontlabs.ca>
danielebarchiesi@2 9 */
danielebarchiesi@2 10
danielebarchiesi@2 11 /**
danielebarchiesi@2 12 * Implements hook_field_formatter_info().
danielebarchiesi@2 13 *
danielebarchiesi@2 14 * Adds the flexslider format option within the manage display form of
danielebarchiesi@2 15 * of an image field.
danielebarchiesi@2 16 */
danielebarchiesi@2 17 function flexslider_fields_field_formatter_info() {
danielebarchiesi@2 18 return array(
danielebarchiesi@2 19 'flexslider' => array(
danielebarchiesi@2 20 'label' => t('flexslider'),
danielebarchiesi@2 21 'field types' => array('image', 'media'),
danielebarchiesi@2 22 'settings' => array(
danielebarchiesi@2 23 'optionset' => 'default',
danielebarchiesi@2 24 'caption' => FALSE,
danielebarchiesi@2 25 ),
danielebarchiesi@2 26 ),
danielebarchiesi@2 27 );
danielebarchiesi@2 28 }
danielebarchiesi@2 29
danielebarchiesi@2 30 /**
danielebarchiesi@2 31 * Implements hook_field_formatter_settings_form().
danielebarchiesi@2 32 *
danielebarchiesi@2 33 * Provides display settings form within the manage display page of
danielebarchiesi@2 34 * an image field with formatter flexslider.
danielebarchiesi@2 35 */
danielebarchiesi@2 36 function flexslider_fields_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
danielebarchiesi@2 37 $display = $instance['display'][$view_mode];
danielebarchiesi@2 38 $settings = $display['settings'];
danielebarchiesi@2 39
danielebarchiesi@2 40 $form = array();
danielebarchiesi@2 41
danielebarchiesi@2 42 // Show select box for the option set
danielebarchiesi@2 43 $optionsets = array();
danielebarchiesi@2 44 ctools_include('export');
danielebarchiesi@2 45 foreach (flexslider_optionset_load_all() as $name => $optionset) {
danielebarchiesi@2 46 $optionsets[$name] = check_plain($optionset->title);
danielebarchiesi@2 47 }
danielebarchiesi@2 48
danielebarchiesi@2 49 $form['optionset'] = array(
danielebarchiesi@2 50 '#title' => t('Option set'),
danielebarchiesi@2 51 '#type' => 'select',
danielebarchiesi@2 52 '#options' => $optionsets,
danielebarchiesi@2 53 '#default_value' => $settings['optionset'],
danielebarchiesi@2 54 );
danielebarchiesi@2 55
danielebarchiesi@2 56 // If the image field doesn't have the Title field enabled, tell the user.
danielebarchiesi@2 57 if ($instance['settings']['title_field'] == FALSE) {
danielebarchiesi@2 58 $form['caption'] = array(
danielebarchiesi@2 59 '#title' => t('Use image title as the caption'),
danielebarchiesi@2 60 '#type' => 'checkbox',
danielebarchiesi@2 61 '#disabled' => TRUE,
danielebarchiesi@2 62 '#description' => t('You need to <a href="@url">enable the Title field</a> for this image field to be able use it as a caption.', array('@url' => url('admin/structure/types/manage/' . $instance['bundle'] . '/fields/' . $instance['field_name'], array('fragment' => 'edit-instance-settings-title-field', 'query' => array('destination' => 'admin/structure/types/manage/' . $instance['bundle'] . '/display'))))),
danielebarchiesi@2 63 );
danielebarchiesi@2 64 }
danielebarchiesi@2 65 else {
danielebarchiesi@2 66 $form['caption'] = array(
danielebarchiesi@2 67 '#title' => t('Use image title as the caption'),
danielebarchiesi@2 68 '#type' => 'checkbox',
danielebarchiesi@2 69 '#default_value' => $settings['caption'],
danielebarchiesi@2 70 );
danielebarchiesi@2 71 }
danielebarchiesi@2 72
danielebarchiesi@2 73 return $form;
danielebarchiesi@2 74 }
danielebarchiesi@2 75
danielebarchiesi@2 76 /**
danielebarchiesi@2 77 * Implements hook_field_formatter_settings_summary().
danielebarchiesi@2 78 *
danielebarchiesi@2 79 * Displays the summary of the set options of a flexslider formatted image field
danielebarchiesi@2 80 */
danielebarchiesi@2 81 function flexslider_fields_field_formatter_settings_summary($field, $instance, $view_mode) {
danielebarchiesi@2 82 $display = $instance['display'][$view_mode];
danielebarchiesi@2 83 $settings = $display['settings'];
danielebarchiesi@2 84
danielebarchiesi@2 85 $summary = array();
danielebarchiesi@2 86
danielebarchiesi@2 87 // Load option set
danielebarchiesi@2 88 ctools_include('export');
danielebarchiesi@2 89 if (!empty($settings['optionset'])) {
danielebarchiesi@2 90 $o = flexslider_optionset_load($settings['optionset']);
danielebarchiesi@2 91 if ($o !== NULL) {
danielebarchiesi@2 92 $optionset = $o;
danielebarchiesi@2 93 }
danielebarchiesi@2 94 }
danielebarchiesi@2 95
danielebarchiesi@2 96 // Build settings summary
danielebarchiesi@2 97 $optionset = isset($optionset) ? $optionset->title : t('Default settings');
danielebarchiesi@2 98 $summary[] = t('Option set: %optionset', array('%optionset' => $optionset));
danielebarchiesi@2 99
danielebarchiesi@2 100 return implode('<br />', $summary);
danielebarchiesi@2 101 }
danielebarchiesi@2 102
danielebarchiesi@2 103 /**
danielebarchiesi@2 104 * Implements hook_field_formatter_view().
danielebarchiesi@2 105 *
danielebarchiesi@2 106 * Prepares a renderable array of images and adds the neccessary JS and CSS
danielebarchiesi@2 107 */
danielebarchiesi@2 108 function flexslider_fields_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
danielebarchiesi@2 109 if ($field['type'] == 'media') {
danielebarchiesi@2 110 $image_items = array();
danielebarchiesi@2 111 foreach ($items as $item) {
danielebarchiesi@2 112 if ($item['file']->type == 'image') {
danielebarchiesi@2 113 $file = (array) $item['file'];
danielebarchiesi@2 114 $file += array('alt' => '', 'title' => '');
danielebarchiesi@2 115 $image_items[] = $file;
danielebarchiesi@2 116 }
danielebarchiesi@2 117 }
danielebarchiesi@2 118 $items = $image_items;
danielebarchiesi@2 119 }
danielebarchiesi@2 120
danielebarchiesi@2 121 $element = array();
danielebarchiesi@2 122 if (count($items) > 0) {
danielebarchiesi@2 123 $element[] = array(
danielebarchiesi@2 124 '#theme' => 'flexslider',
danielebarchiesi@2 125 '#items' => $items,
danielebarchiesi@2 126 '#settings' => $display['settings'],
danielebarchiesi@2 127 );
danielebarchiesi@2 128 }
danielebarchiesi@2 129
danielebarchiesi@2 130 return $element;
danielebarchiesi@2 131 }