You are here

class BeanInlineEntityFormController in Bean (for Drupal 7) 7

@file Defines the inline entity form controller for Nodes.

Hierarchy

Expanded class hierarchy of BeanInlineEntityFormController

1 string reference to 'BeanInlineEntityFormController'
bean_entity_info in ./bean.module
Implements hook_entity_info().

File

includes/bean.inline_entity_form.inc, line 8
Defines the inline entity form controller for Nodes.

View source
class BeanInlineEntityFormController extends EntityInlineEntityFormController {

  /**
   * Overrides EntityInlineEntityFormController::labels().
   */
  public function labels() {
    $labels = array(
      'singular' => t('block'),
      'plural' => t('blocks'),
    );
    return $labels;
  }

  /**
   * Overrides EntityInlineEntityFormController::tableFields().
   */
  public function tableFields($bundles) {
    $fields = array();
    $fields['label'] = array(
      'type' => 'property',
      'label' => t('Label'),
      'weight' => 1,
    );
    return $fields;
  }

  /**
   * Overrides EntityInlineEntityFormController::defaultSettings().
   */
  public function defaultSettings() {
    $defaults = parent::defaultSettings();
    $defaults['parent_sync_label'] = FALSE;
    $defaults['parent_sync_title'] = FALSE;
    return $defaults;
  }

  /**
   * Overrides EntityInlineEntityFormController::settingsForm().
   */
  public function settingsForm($field, $instance) {
    $form = parent::settingsForm($field, $instance);
    $form['parent_sync_label'] = array(
      '#type' => 'checkbox',
      '#title' => t('Auto set the block label to the parent @entity entity label', array(
        '@entity' => $instance['entity_type'],
      )),
      '#description' => t('This will hide the label input field and set the label to the @entity entity label.', array(
        '@entity' => $instance['entity_type'],
      )),
      '#default_value' => $this->settings['parent_sync_label'],
    );
    $form['parent_sync_title'] = array(
      '#type' => 'checkbox',
      '#title' => t('Auto set the block title to the parent @entity entity label', array(
        '@entity' => $instance['entity_type'],
      )),
      '#description' => t('This will hide the title input field and set the title to the @entity entity label.', array(
        '@entity' => $instance['entity_type'],
      )),
      '#default_value' => $this->settings['parent_sync_title'],
    );
    return $form;
  }

  /**
   * Overrides EntityInlineEntityFormController::entityForm().
   */
  public function entityForm($entity_form, &$form_state) {
    $bean = $entity_form['#entity'];
    $type = bean_type_load($bean->type);
    $extra_fields = field_info_extra_fields('bean', $bean->type, 'form');
    if (!isset($bean->label)) {
      $bean->label = NULL;
    }
    $entity_form['label'] = array(
      '#type' => 'textfield',
      '#title' => t('@type Label', array(
        '@type' => check_plain($type
          ->getLabel()),
      )),
      '#required' => TRUE,
      '#default_value' => $bean->label,
      '#maxlength' => 255,
      // Check if extra fields define a weight.
      '#weight' => !empty($extra_fields['label']) ? $extra_fields['label']['weight'] : -5,
    );
    $entity_form['title'] = array(
      '#type' => 'textfield',
      '#title' => t('@type Title', array(
        '@type' => check_plain($type
          ->getLabel()),
      )),
      '#default_value' => $bean->title,
      '#maxlength' => 255,
      // Check if extra fields define a weight.
      '#weight' => !empty($extra_fields['title']) ? $extra_fields['title']['weight'] : -5,
    );
    $entity_form['revision'] = array(
      '#weight' => 10,
    );
    if (isset($bean->is_new)) {
      $entity_form['revision']['#access'] = FALSE;
    }
    ctools_include('dependent');
    ctools_add_js('dependent');
    $entity_form['revision']['is_new_revision'] = array(
      '#type' => 'checkbox',
      '#title' => t('Create new revision'),
      '#default_value' => 1,
      '#id' => 'edit-revision',
    );
    if (isset($bean->is_new)) {
      $entity_form['default_revision'] = array(
        '#type' => 'value',
        '#value' => TRUE,
      );
    }
    else {
      $entity_form['revision']['default_revision'] = array(
        '#type' => 'checkbox',
        '#title' => t('Set Revision as default'),
        '#default_value' => $bean
          ->isDefaultRevision(),
        '#states' => array(
          // Hide if the option above is disabled, to avoid potential dataloss.
          'invisible' => array(
            ':input[name="is_new_revision"]' => array(
              'checked' => FALSE,
            ),
          ),
        ),
      );
    }
    $entity_form['revision']['log'] = array(
      '#type' => 'textarea',
      '#title' => t('Log message'),
      '#description' => t('Provide an explanation of the changes you are making. This will help other authors understand your motivations.'),
      '#dependency' => array(
        'edit-revision' => array(
          1,
        ),
      ),
      '#default_value' => '',
    );

    // The view mode.
    if (user_access('edit bean view mode')) {
      $bean_info = $bean
        ->entityInfo();
      foreach ($bean_info['view modes'] as $view_mode_name => $data) {
        $view_modes[$view_mode_name] = $data['label'];
      }
      $entity_form['view_mode'] = array(
        '#title' => t('View Mode'),
        '#description' => t('Edit the view mode of the Bean'),
        '#default_value' => $bean->view_mode,
        '#type' => 'select',
        '#required' => TRUE,
        '#options' => $view_modes,
        // Check if extra fields define a weight.
        '#weight' => !empty($extra_fields['view_mode']) ? $extra_fields['view_mode']['weight'] : -8,
      );
    }
    else {
      $entity_form['view_mode'] = array(
        '#type' => 'value',
        '#value' => $bean->view_mode,
      );
    }

    // Get the Bean type form
    $entity_form += $bean
      ->getForm($entity_form, $form_state);

    // Hide the title field if it is auto-generated.
    if ($this->settings['parent_sync_label']) {
      $entity_form['label']['#required'] = FALSE;
      $entity_form['label']['#access'] = FALSE;
    }

    // Hide the title field if it is auto-generated.
    if ($this->settings['parent_sync_title']) {
      $entity_form['title']['#required'] = FALSE;
      $entity_form['title']['#access'] = FALSE;

      // Hide the replacement field added by the Title module as well.
      if (module_exists('title')) {
        $title_field = title_field_replacement_info('bean', 'title');
        if ($title_field) {
          $title_field_name = $title_field['field']['field_name'];
          if (isset($entity_form[$title_field_name])) {
            $entity_form[$title_field_name]['#access'] = FALSE;
            $entity_form[$title_field_name]['#required'] = FALSE;
          }
        }
      }
    }
    return parent::entityForm($entity_form, $form_state);
  }

  /**
   * Overrides EntityInlineEntityFormController::entityFormSubmit().
   */
  public function entityFormSubmit(&$entity_form, &$form_state) {
    if (isset($form_state['redirect'])) {
      $before = $form_state['redirect'];
    }

    // The parents array tells us exactly what part of the form was
    // submitted. We're going to mock out a subsection of $form_state to
    // pass to bean_form_submit instead of the whole thing.
    $parents = $entity_form['#parents'];
    $ief_form_state['bean'] = $entity_form['#entity'];
    $ief_form_state['values'] = $form_state['values'];
    foreach ($parents as $parent) {
      $ief_form_state['values'] = $ief_form_state['values'][$parent];
    }

    // Get lables to set temporary label and title.
    $display_labels = $this
      ->labels();

    // Set label since it will be auto generated based on the parent entity.
    if (empty($ief_form_state['bean']->label) && $this->settings['parent_sync_label']) {
      $ief_form_state['values']['label'] = $display_labels['singular'];
    }

    // Set title since it will be auto generated based on the parent entity.
    if (empty($ief_form_state['bean']->title) && $this->settings['parent_sync_title']) {
      $ief_form_state['values']['title'] = $display_labels['singular'];
    }

    // Load bean.pages.inc so we can call bean_form_submit
    module_load_include('inc', 'bean', 'includes/bean.pages');

    // Saves initial bean via bean_form_submit().
    bean_form_submit($entity_form, $ief_form_state);

    // Undo the redirect set by bean_form_submit().
    if (isset($form_state['redirect'])) {
      if (isset($before)) {
        $form_state['redirect'] = $before;
      }
      else {
        unset($form_state['redirect']);
      }
    }
  }

  /**
   * Overrides EntityInlineEntityFormController::save().
   */
  public function save($entity, $context) {
    if ($this->settings['parent_sync_label'] || $this->settings['parent_sync_title']) {
      $parent_label = entity_label($context['parent_entity_type'], $context['parent_entity']);

      // Set label to the parent label.
      if ($this->settings['parent_sync_label']) {
        $entity->label = $parent_label;
      }

      // Set title to the parent label.
      if ($this->settings['parent_sync_title']) {
        $entity->title = $parent_label;
      }
    }
    bean_save($entity);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BeanInlineEntityFormController::defaultSettings public function Overrides EntityInlineEntityFormController::defaultSettings(). Overrides EntityInlineEntityFormController::defaultSettings
BeanInlineEntityFormController::entityForm public function Overrides EntityInlineEntityFormController::entityForm(). Overrides EntityInlineEntityFormController::entityForm
BeanInlineEntityFormController::entityFormSubmit public function Overrides EntityInlineEntityFormController::entityFormSubmit(). Overrides EntityInlineEntityFormController::entityFormSubmit
BeanInlineEntityFormController::labels public function Overrides EntityInlineEntityFormController::labels(). Overrides EntityInlineEntityFormController::labels
BeanInlineEntityFormController::save public function Overrides EntityInlineEntityFormController::save(). Overrides EntityInlineEntityFormController::save
BeanInlineEntityFormController::settingsForm public function Overrides EntityInlineEntityFormController::settingsForm(). Overrides EntityInlineEntityFormController::settingsForm
BeanInlineEntityFormController::tableFields public function Overrides EntityInlineEntityFormController::tableFields(). Overrides EntityInlineEntityFormController::tableFields
EntityInlineEntityFormController::$entityType protected property
EntityInlineEntityFormController::$settings public property
EntityInlineEntityFormController::createClone public function Creates a clone of the given entity. 2
EntityInlineEntityFormController::css public function Returns an array of css filepaths for the current entity type, keyed by theme name. 1
EntityInlineEntityFormController::defaultLabels public function Returns the default entity type labels. 2
EntityInlineEntityFormController::delete public function Delete permanently saved entities. 1
EntityInlineEntityFormController::entityFormValidate public function Validates the entity form. 2
EntityInlineEntityFormController::entityType public function Returns the entity type managed by this controller.
EntityInlineEntityFormController::getSetting public function Returns a setting value.
EntityInlineEntityFormController::removeForm public function Returns the remove form to be shown through the IEF widget. 1
EntityInlineEntityFormController::removeFormSubmit public function Handles the submission of a remove form. Decides what should happen to the entity after the removal confirmation.
EntityInlineEntityFormController::__construct public function 1