You are here

entityform_block.module in Entityform block 7

Render any entity form into a block.

File

entityform_block.module
View source
<?php

/**
 * @file
 * Render any entity form into a block.
 */

/**
 * Implements hook_block_info().
 */
function entityform_block_block_info() {
  $blocks = array();
  $types = variable_get('entityform_block_types');
  if (!empty($types)) {
    foreach ($types as $key => $type) {
      $blocks[$type] = array(
        'info' => ucfirst($type),
        'cache' => DRUPAL_NO_CACHE,
      );
    }
  }
  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function entityform_block_block_view($delta = '') {
  $types = variable_get('entityform_block_types');

  // Hide existing blocks if disabled
  if (entityform_block_exists($types, $delta)) {
    $entity_form = entityform_block_get_entity($delta);
    if ($entity_form && entityform_access('submit', $entity_form)) {
      $subject = $entity_form->label;
      $block = array();
      module_load_include('inc', 'entityform', 'entityform.admin');
      $block['subject'] = $subject;
      $form = entityform_form_wrapper(entityform_empty_load($delta), 'submit', 'embedded');
      $block['content'] = drupal_render($form);
      return $block;
    }
  }
}

/**
 * Implements hook_form_alter().
 *
 * Adds a checkbox to enable a block to the entity form edit form.
 */
function entityform_block_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'entityform_type_form') {
    $types = array();
    $types = variable_get('entityform_block_types');
    $current_type = $form['#entityform_type']->type;
    $form['data']['block_set'] = array(
      '#type' => 'fieldset',
      '#title' => t('Entity block settings'),
      '#collapsible' => TRUE,
      '#group' => 'additional_settings',
      '#weight' => 100,
    );
    if (!empty($types) && isset($current_type)) {
      $exists = entityform_block_exists($types, $current_type);
      if ($exists == TRUE) {
        $form['data']['block_set']['current_type'] = array(
          '#type' => 'hidden',
          '#value' => $current_type,
        );
      }
    }
    $form['data']['block_set']['enable_block'] = array(
      '#type' => 'checkbox',
      '#title' => t('Enable as a block'),
      '#description' => t('Create a block with this entity form?'),
      '#default_value' => !empty($exists) ? 1 : 0,
    );
    $form['#submit'][] = 'entityform_block_submit';
  }
}

/**
 * Custom submit function.
 */
function entityform_block_submit(&$form, &$form_state) {
  $types = array();
  $block_exists = FALSE;
  $types = variable_get('entityform_block_types', $types);
  $type = $form_state['values']['type'];
  $original_type = isset($form_state['values']['data']['current_type']) ? $form_state['values']['data']['current_type'] : FALSE;
  if (!empty($types)) {
    if (isset($original_type)) {
      if ($original_type !== $type) {
        $entity_name_has_changed = TRUE;
        $block_exists = entityform_block_exists($types, $original_type);
      }
      else {
        $block_exists = entityform_block_exists($types, $type);
      }
    }
  }
  if ($form_state['values']['data']['enable_block'] == 1) {
    $enabled = TRUE;
  }
  if (isset($enabled)) {

    // If the entityform block enabled but doesn't exist add to the array.
    if (!$block_exists) {
      $types[] = $type;
      drupal_set_message(t('Entityform block @title has been created', array(
        '@title' => $type,
      )));
    }
    else {
      if (isset($entity_name_has_changed)) {
        $key = array_search($original_type, $types);
        $types[$key] = $type;
        entityform_block_change_name($original_type, $type);
      }
    }

    // If it's not enabled but block exists.
  }
  elseif (!isset($enabled) && $block_exists) {
    $key = array_search($original_type, $types);
    unset($types[$key]);
    drupal_set_message(t('Entityform block @title has been disabled.', array(
      '@title' => $type,
    )));
  }
  variable_set('entityform_block_types', $types);
}

/**
 * Helper function to determine if the block is enabled
 * for a given entity form type.
 *
 * @param $types
 *   Array of enabled blocks for entityform types.
 *
 * @param $type
 *   Entityform type machine name used as a block delta. *
 *
 * @return
 *   True if the block is enabled for the given entityform type,
 *   False if not.
 */
function entityform_block_exists($types, $type) {
  if (in_array($type, $types)) {
    return TRUE;
  }
}

/**
 * Update block name if the entity form's machine readable name has changed.
 *
 * We're using block deltas instead of bid.
 */
function entityform_block_change_name($original_type, $new_type) {
  $query = db_update('block')
    ->fields(array(
    'delta' => $new_type,
  ))
    ->condition('delta', $original_type)
    ->execute();
}

/**
 * Using entity field query to retrieve the entity object.
 *
 * @param $type
 *   Entityform type.
 *
 * @return
 *   Returns entityform type entity object if true,
 *   FALSE if it doesn't exist.
 */
function entityform_block_get_entity($type) {
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'entityform_type')
    ->propertyCondition('type', $type);
  $result = $query
    ->execute();
  if (!empty($result)) {
    $id = key($result['entityform_type']);
    $entity_form = entity_load('entityform_type', array(
      $id,
    ));
    return $entity_form[$id];
  }
  else {
    return FALSE;
  }
}

/**
 * Implements hook_entity_type_delete().
 *
 * Deletes blocks if the entity type is deleted.
 */
function entityform_block_entity_delete($entity, $entity_type) {
  $type = $entity->type;
  if ($entity_type == "entityform_type") {
    $types = variable_get('entityform_block_types');
    if (entityform_block_exists($types, $type)) {
      $key = array_search($type, $types);
      unset($types[$key]);
      variable_set('entityform_block_types', $types);
    }
  }
}

Functions

Namesort descending Description
entityform_block_block_info Implements hook_block_info().
entityform_block_block_view Implements hook_block_view().
entityform_block_change_name Update block name if the entity form's machine readable name has changed.
entityform_block_entity_delete Implements hook_entity_type_delete().
entityform_block_exists Helper function to determine if the block is enabled for a given entity form type.
entityform_block_form_alter Implements hook_form_alter().
entityform_block_get_entity Using entity field query to retrieve the entity object.
entityform_block_submit Custom submit function.