protected function getFieldDefault(NodeInterface $node, $entityType, $bundle, $fieldName, Context $context)
 {
     /* @var $node ViewNode */
     $entityType = $node->getEntityType();
     $bundle = $node->getBundle();
     $default = array('type' => 'hidden', 'label' => 'hidden', 'settings' => array());
     if (!($field = field_info_field($fieldName))) {
         // @todo Should we warn? This is surely an extra field.
         return $default;
     }
     if (!($field = field_info_field_types($field['type']))) {
         $context->logError("%s: %s field type does not exist", $node->getPath(), $field['types']);
         return $default;
     }
     $formatter = null;
     if (!empty($field['default_formatter'])) {
         $formatter = $field['default_formatter'];
         if (!field_info_formatter_types($formatter)) {
             $context->logWarning(sprintf("%s: field %s defines non existing default formatter: %s", $node->getPath(), $fieldName, $formatter));
             $formatter = null;
         }
     }
     if ($formatter) {
         $default = array('type' => $formatter, 'label' => 'hidden', 'settings' => field_info_formatter_settings($formatter));
     }
     return $default;
 }
 /**
  * Set formatter type and update defaults accordingly.
  *
  * @see _field_write_instance().
  */
 public function setFormatter($view_mode, $formatter_name, $settings = array())
 {
     $this->display[$view_mode] = $settings;
     $display =& $this->display[$view_mode];
     $display += array('label' => 'above', 'type' => $formatter_name, 'settings' => array());
     if ($formatter_name != 'hidden') {
         $formatter_type = \field_info_formatter_types($display['type']);
         $display['module'] = $formatter_type['module'];
         $display['settings'] += \field_info_formatter_settings($display['type']);
     }
 }
 /**
  * Constructor for the Add to cart form. Provide $nid as the id of the
  * product display node. Other optional arguments are product reference field
  * name, view mode of the product display node and language of the product
  * display node. If optional arguments are not provided, their default values
  * are assumed, which are "field_product", "default" and "en" respectively.
  *
  * @param int $nid
  *   Product display node id.
  */
 public function __construct($nid)
 {
     $args = func_get_args();
     array_shift($args);
     $field_name = array_shift($args);
     $view_mode = array_shift($args);
     $language = array_shift($args);
     if (is_null($field_name)) {
         $field_name = 'field_product';
     }
     if (is_null($view_mode)) {
         $view_mode = 'default';
     }
     if (is_null($language)) {
         $language = 'en';
     }
     $node = node_load($nid);
     $instance = field_info_instance('node', $field_name, $node->type);
     $display = field_get_display($instance, $view_mode, $node);
     $settings = array_merge(field_info_formatter_settings($display['type']), $display['settings']);
     $field_product = field_get_items('node', $node, $field_name);
     $product_id = $field_product[0]['product_id'];
     $products = commerce_product_load_multiple(array($product_id));
     $type = !empty($settings['line_item_type']) ? $settings['line_item_type'] : 'product';
     $line_item = commerce_product_line_item_new(commerce_product_reference_default_product($products), $settings['default_quantity'], 0, array(), $type);
     $line_item->data['context']['product_ids'] = array_keys($products);
     $line_item->data['context']['add_to_cart_combine'] = !empty($settings['combine']);
     $line_item->data['context']['show_single_product_attributes'] = !empty($settings['show_single_product_attributes']);
     $cart_context = array('entity_type' => 'node', 'entity_id' => $nid, 'display' => 'default', 'language' => $language);
     $cart_context['class_prefix'] = $cart_context['entity_type'] . '-' . $nid;
     $cart_context['view_mode'] = $cart_context['entity_type'] . '_' . $view_mode;
     $entity_uri = entity_uri($cart_context['entity_type'], $node);
     $arguments = array('form_id' => commerce_cart_add_to_cart_form_id(array($product_id)), 'line_item' => $line_item, 'show_quantity' => $settings['show_quantity']);
     // Add the display path and referencing entity data to the line item.
     if (!empty($entity_uri['path'])) {
         $arguments['line_item']->data['context']['display_path'] = $entity_uri['path'];
     }
     $arguments['line_item']->data['context']['entity'] = array('entity_type' => $cart_context['entity_type'], 'entity_id' => $cart_context['entity_id'], 'product_reference_field_name' => $field_name);
     // Update the product_ids variable to point to the entity data if we're
     // referencing multiple products.
     if (count($arguments['line_item']->data['context']['product_ids']) > 1) {
         $arguments['line_item']->data['context']['product_ids'] = 'entity';
     }
     parent::__construct($arguments['form_id'], $arguments['line_item'], $arguments['show_quantity'], $cart_context);
     $this->cart_context = $cart_context;
     $this->arguments = $arguments;
 }
Esempio n. 4
0
 /**
  * Get the settings used by the block display.
  */
 public function getBlockDisplaySettings()
 {
     $settings = variable_get(self::BLOCK_WIDGET_SETTINGS_KEY, NULL);
     if ($settings == NULL && $this->getBlockDisplayType() != self::WIDGET_TYPE_DISABLED) {
         $settings = field_info_formatter_settings($this->getBlockDisplayType());
     }
     return $settings;
 }
Esempio n. 5
0
 function options_form(&$form, &$form_state)
 {
     parent::options_form($form, $form_state);
     module_load_include('inc', 'views', 'modules/field/views_handler_field_field');
     $subfield = $this->field_info;
     $formatters = _field_view_formatter_options($subfield['type']);
     $column_names = array_keys($subfield['columns']);
     // If this is a multiple value field, add its options.
     if ($this->multiple) {
         $this->multiple_options_form($form, $form_state);
     }
     // No need to ask the user anything if the field has only one column.
     if (count($subfield['columns']) == 1) {
         $form['click_sort_column'] = array('#type' => 'value', '#value' => isset($column_names[0]) ? $column_names[0] : '');
     } else {
         $form['click_sort_column'] = array('#type' => 'select', '#title' => t('Column used for click sorting'), '#options' => drupal_map_assoc($column_names), '#default_value' => $this->options['click_sort_column'], '#description' => t('Used by Style: Table to determine the actual column to click sort the field on. The default is usually fine.'), '#fieldset' => 'more');
     }
     $form['type'] = array('#type' => 'select', '#title' => t('Formatter'), '#options' => $formatters, '#default_value' => $this->options['type'], '#ajax' => array('path' => views_ui_build_form_url($form_state)), '#submit' => array('views_ui_config_item_form_submit_temporary'), '#executes_submit_callback' => TRUE);
     $form['field_api_classes'] = array('#title' => t('Use field template'), '#type' => 'checkbox', '#default_value' => $this->options['field_api_classes'], '#description' => t('If checked, field api classes will be added using field.tpl.php (or equivalent). This is not recommended unless your CSS depends upon these classes. If not checked, template will not be used.'), '#fieldset' => 'style_settings', '#weight' => 20);
     if ($this->multiple) {
         $form['field_api_classes']['#description'] .= ' ' . t('Checking this option will cause the group Display Type and Separator values to be ignored.');
     }
     // Get the currently selected formatter.
     $format = $this->options['type'];
     $formatter = field_info_formatter_types($format);
     $settings = $this->options['settings'] + field_info_formatter_settings($format);
     // Provide an instance array for hook_field_formatter_settings_form().
     ctools_include('fields');
     $this->instance = ctools_fields_fake_field_instance($this->definition['subfield_name'], '_custom', $formatter, $settings);
     // Store the settings in a '_custom' view mode.
     $this->instance['display']['_custom'] = array('type' => $format, 'settings' => $settings);
     // Get the settings form.
     $settings_form = array('#value' => array());
     $function = $formatter['module'] . '_field_formatter_settings_form';
     if (function_exists($function)) {
         $settings_form = $function($subfield, $this->instance, '_custom', $form, $form_state);
     }
     $form['settings'] = $settings_form;
 }