You are here

function flexiform_webform_field_create_instance in Flexiform 7

Implements hook_field_create_instance().

When a field is added to a flexiform_webform submission bundle add it to that forms form_fields.

File

flexiform_webform/flexiform_webform.module, line 285
Module provides simple webform functionality.

Code

function flexiform_webform_field_create_instance($instance) {

  // Only act on fields added to the flexiform_submission entity.
  if ($instance['entity_type'] != 'flexiform_webform_submission') {
    return;
  }
  $forms = db_select('flexiform', 'f')
    ->fields('f', array(
    'form',
    'id',
  ))
    ->condition('base_entity', 'flexiform_webform_submission')
    ->condition('base_entity_bundle', $instance['bundle'])
    ->execute()
    ->fetchAllAssoc('id');
  $added_to = array();
  foreach ($forms as $form) {
    $flexiform = entity_load_single('flexiform', $form->form);

    // Only add to forms that use the flexiform form builder.
    if ($flexiform->builder != 'FlexiformBuilderFlexiform') {
      continue;
    }
    $settings = array(
      'element_name' => 'field:' . $instance['field_name'],
      'entity_namespace' => 'base_entity',
    );
    $element = FlexiformElement::createElement($flexiform, $settings);
    $flexiform
      ->addElement($element);
    $flexiform
      ->save();
    $added_to[] = l($flexiform->label, "admin/structure/flexiforms/manage/{$flexiform->form}/form-fields", array(
      'attributes' => array(
        'target' => '_blank',
      ),
    ));
  }
  if (!empty($added_to)) {
    $message = t('The field %field has been added to the following flexiforms:', array(
      '%field' => $instance['label'],
    ));
    $list = array(
      '#theme' => 'item_list',
      '#items' => $added_to,
    );
    $message .= drupal_render($list);
    drupal_set_message($message);
  }
}