You are here

class FlexiformElementNodeAuthor in Flexiform 7

Class to add the node author field to a form.

Hierarchy

Expanded class hierarchy of FlexiformElementNodeAuthor

1 string reference to 'FlexiformElementNodeAuthor'
flexiform_flexiform_element_info in ./flexiform.flexiform.inc
Implements hook_flexiform_element_info().

File

includes/element/node_author.element.inc, line 10
Contains class for the Node author element.

View source
class FlexiformElementNodeAuthor extends FlexiformElement {

  /**
   * Return the form element for this FlexiformElement.
   */
  public function form($form, &$form_state, $entity, $language = LANGUAGE_NONE) {
    $parents = $form['#parents'];
    $parents[] = 'author';
    global $user;

    // If the node has the UID set then we load that user as the default,
    // otherwise use the global user.
    if (isset($entity->uid)) {
      $account = user_load($entity->uid);
    }
    else {
      if (!empty($this->settings['default_value']['use_current'])) {
        $account = $user;
      }
    }

    // Work out the default value.
    $default = '';
    if (!empty($this->settings['default_value']['default_value'])) {
      $default = $this->settings['default_value']['default_value'];
    }
    if (!empty($this->settings['default_value']['use_tokens'])) {
      $default = $this
        ->replaceCtoolsSubstitutions($default, $form['#flexiform_entities']);
    }
    $form[$this->element_namespace] = array(
      '#type' => 'textfield',
      '#parents' => $parents,
      '#title' => $this
        ->label(),
      '#autocomplete_path' => 'user/autocomplete',
      '#default_value' => !empty($account->name) ? $account->name : $default,
      '#maxlength' => 60,
      '#description' => t('Leave blank for %anonymous.', array(
        '%anonymous' => variable_get('anonymous', t('Anonymous')),
      )),
    );
    $form = parent::form($form, $form_state, $entity);
    return $form;
  }

  /**
   * Validate the form element.
   */
  public function formValidate($form, &$form_state, $entity, $language = LANGUAGE_NONE) {
    $author = $this
      ->formExtractValues($form, $form_state, $entity);
    $entity->name = $author;

    // Validate the "authored by" field.
    if (!empty($entity->name) && !($account = user_load_by_name($entity->name))) {

      // The use of empty() is mandatory in the context of usernames
      // as the empty string denotes the anonymous user. In case we
      // are dealing with an anonymous user we set the user ID to 0.
      form_set_error('name', t('The username %name does not exist.', array(
        '%name' => $entity->name,
      )));
    }
  }

  /**
   * Submit the form element.
   */
  public function formSubmit($form, &$form_state, $entity, $language = LANGUAGE_NONE) {
    $author = $this
      ->formExtractValues($form, $form_state, $entity);
    $entity->name = $author;

    // A user might assign the node author by entering a user name in the node
    // form, which we then need to translate to a user ID.
    if (isset($entity->name)) {
      if ($account = user_load_by_name($entity->name)) {
        $entity->uid = $account->uid;
      }
      else {
        $entity->uid = 0;
      }
    }
  }

  /**
   * Extract the submitted values for this form element.
   */
  public function formExtractValues($form, &$form_state, $entity) {
    $parents = $form['#parents'];
    $parents[] = $this
      ->getEntityNamespace();
    $parents[] = 'author';
    $author = drupal_array_get_nested_value($form_state['values'], $parents);
    return $author;
  }

  /**
   * {@inheritdoc}
   */
  public function configureForm($form, &$form_state, $flexiform) {
    $form = parent::configureForm($form, $form_state, $flexiform);
    $form['default_value'] = array(
      '#tree' => TRUE,
      '#type' => 'fieldset',
      '#title' => t('Default Value'),
      '#weight' => -5,
    );
    $form['default_value']['use_current'] = array(
      '#type' => 'checkbox',
      '#title' => t('Use the logged in user'),
      '#default_value' => !empty($this->settings['default_value']['use_current']),
    );
    $form['default_value']['default_value'] = array(
      '#type' => 'textfield',
      '#title' => $this
        ->label() ? $this
        ->label() : t('Default'),
      '#default_value' => !empty($this->settings['default_value']['default_value']) ? $this->settings['default_value']['default_value'] : '',
      '#maxlength' => 60,
    );
    $form['default_value']['use_tokens'] = array(
      '#type' => 'checkbox',
      '#title' => t('Use Tokens in Default Value'),
      '#default_value' => !empty($this->settings['default_value']['use_tokens']),
    );
    $form['default_value']['contexts'] = array(
      '#title' => t('Substitutions'),
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['default_value']['contexts']['contexts'] = $this
      ->getCtoolsSubstitutionsList();
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function configureFormSubmit($form, &$form_state, $flexiform) {
    $this->settings['default_value']['default_value'] = $form_state['values']['default_value']['default_value'];
    $this->settings['default_value']['use_tokens'] = $form_state['values']['default_value']['use_tokens'];
    $this->settings['default_value']['use_current'] = $form_state['values']['default_value']['use_current'];
    parent::configureFormSubmit($form, $form_state, $flexiform);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FlexiformElement::$bundle protected property The bundle this is on.
FlexiformElement::$element_namespace protected property The namespace of this element.
FlexiformElement::$entity_namespace protected property The entity namespace of the entity this element is acting on.
FlexiformElement::$entity_type protected property The entity type this field is on.
FlexiformElement::$flexiform protected property The flexiform entity this element is one.
FlexiformElement::$settings protected property The settings for this element.
FlexiformElement::$weight protected property The weight of this element.
FlexiformElement::configureFormValidate public function Validate the configure form for the element. 3
FlexiformElement::createElement public static function Create an element object.
FlexiformElement::formIsEmpty public function Work out if the submitted value constitutes empty. 1
FlexiformElement::getCtoolsContexts public function Get an array of ctools context for the flexiform.
FlexiformElement::getCtoolsSubstitutionsList public function Build a list of possible ctools substitutions.
FlexiformElement::getElement public static function Get an element object.
FlexiformElement::getElementNamespace public function Get the element namespace for this form element.
FlexiformElement::getEntityNamespace public function Get the entity namespace for this form element.
FlexiformElement::getEntityType public function Get the entity type for this element.
FlexiformElement::getSettings public function Get the settings.
FlexiformElement::getWeight public function Get the weight of this form element.
FlexiformElement::label public function Get the label for this form element. 2
FlexiformElement::makeElementNamespace public function Make namespace for the element. 1
FlexiformElement::name public function Get the name for this form element.
FlexiformElement::removeForm public function Build the remove form for the element.
FlexiformElement::removeFormSubmit public function Submit the remove form for the element.
FlexiformElement::removeFormValidate public function Validate the remove form for the element.
FlexiformElement::replaceCtoolsSubstitutions public function Replace ctools substitutions with their values.
FlexiformElement::setLabel public function Set the label for this form element. 1
FlexiformElement::setWeight public function Set the weight of this form element. 1
FlexiformElement::toSettingsArray public function Convert this object into a settings array. 5
FlexiformElement::type public function Get the type of this form element. 3
FlexiformElement::__construct public function Construct the class. 3
FlexiformElementNodeAuthor::configureForm public function Build the configure form for the element. Overrides FlexiformElement::configureForm
FlexiformElementNodeAuthor::configureFormSubmit public function Submit the configure form for the element. Overrides FlexiformElement::configureFormSubmit
FlexiformElementNodeAuthor::form public function Return the form element for this FlexiformElement. Overrides FlexiformElement::form
FlexiformElementNodeAuthor::formExtractValues public function Extract the submitted values for this form element. Overrides FlexiformElement::formExtractValues
FlexiformElementNodeAuthor::formSubmit public function Submit the form element. Overrides FlexiformElement::formSubmit
FlexiformElementNodeAuthor::formValidate public function Validate the form element. Overrides FlexiformElement::formValidate