You are here

function menu_fields_add_fields_entity_fields in Menu Item Fields 7

Add the menu fields entity to the given form.

1 call to menu_fields_add_fields_entity_fields()
menu_fields_form_menu_edit_item_alter in ./menu_fields.module
Implements hook_form_ID_alter().

File

./menu_fields.module, line 599
Main file contain hooks/functions.

Code

function menu_fields_add_fields_entity_fields($menu_name, $mlid, &$form, &$form_state) {

  // Create bundle name for the given menu name.
  $bundle_name = menu_fields_create_machine_name($menu_name);

  // Check is this field selected for menu fields.
  $selected_menus = menu_fields_enabled_menus();

  // Check is this menu selected for fieldable.
  if (in_array($menu_name, $selected_menus)) {
    $form['#submit'][] = 'menu_fields_form_menu_edit_fields_submit';

    // Load entity id for this menu link.
    $query = new EntityFieldQuery();
    $query
      ->entityCondition('entity_type', 'menu_fields')
      ->propertyCondition('mlid', $mlid)
      ->propertyCondition('menu_name', $bundle_name);
    $result = $query
      ->execute();

    // Is no entity found, create a new one.
    if (empty($result)) {
      $entity = entity_create('menu_fields', array(
        'menu_name' => $bundle_name,
        'mlid' => $mlid,
      ));
    }
    else {
      $entity_nid = array_keys($result['menu_fields']);
      $entity = entity_load('menu_fields', $entity_nid);
      $entity = reset($entity);
    }

    // Set the correct parents for the attached field values,
    // because they are added to a fieldset.
    $form['menu_fields'] = array(
      '#type' => 'fieldset',
      '#title' => t('Menu Fields'),
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
      '#tree' => TRUE,
    );

    // Enable/disable fields for the menu item.
    $form['menu_fields']['enabled'] = array(
      '#type' => 'checkbox',
      '#title' => t('Enable fields for this menu link'),
      '#default_value' => !empty($entity->id) ? TRUE : FALSE,
    );

    // Add menu fields.
    $form['menu_fields']['fields'] = array(
      '#type' => 'container',
      '#states' => array(
        'visible' => array(
          ':input[name="menu_fields[enabled]"]' => array(
            'checked' => TRUE,
          ),
        ),
      ),
    );

    // Get the language code.
    $langcode = NULL;
    if (function_exists('entity_language')) {
      $langcode = entity_language('menu_fields', $entity);
    }

    // Add entity fields.
    field_attach_form('menu_fields', $entity, $form['menu_fields']['fields'], $form_state, $langcode);

    // Add entity to form.
    $form['menu_fields']['entity'] = array(
      '#type' => 'value',
      '#value' => $entity,
    );
  }
}