You are here

entityqueue_export_ui.inc in Entityqueue 7

Plugin definition for CTools Export UI integration.

File

plugins/ctools/export_ui/entityqueue_export_ui.inc
View source
<?php

/**
 * @file
 * Plugin definition for CTools Export UI integration.
 */

/**
 * Implements HOOK_PLUGIN_ctools_export_ui().
 */
function entityqueue_entityqueue_export_ui_ctools_export_ui() {
  return array(
    'schema' => 'entityqueue_queue',
    'access' => 'manipulate entityqueues',
    'create access' => 'administer entityqueue',
    'delete access' => 'administer entityqueue',
    // Add our custom operations.
    'allowed operations' => array(
      'subqueues' => array(
        'title' => t('View subqueues'),
      ),
      'edit subqueue' => array(
        'title' => t('Edit items'),
      ),
    ),
    'menu' => array(
      'menu item' => 'entityqueue',
      'menu title' => 'Entity queues',
      'menu description' => 'Manage orderable queues of content.',
      // Add entityqueue specific menu callbacks.
      'items' => array(
        'subqueues' => array(
          'path' => 'list/%ctools_export_ui/subqueues',
          'title' => 'Subqueues',
          'page callback' => 'ctools_export_ui_switcher_page',
          'page arguments' => array(
            'entityqueue_export_ui',
            'subqueues',
            4,
          ),
          'load arguments' => array(
            'entityqueue_export_ui',
          ),
          'access callback' => 'entityqueue_queue_access',
          'access arguments' => array(
            'view',
            4,
          ),
          'type' => MENU_CALLBACK,
        ),
        'add subqueue' => array(
          'path' => 'list/%ctools_export_ui/subqueues/add',
          'title' => 'Add subqueue',
          'page callback' => 'ctools_export_ui_switcher_page',
          'page arguments' => array(
            'entityqueue_export_ui',
            'subqueue_add',
            4,
          ),
          'load arguments' => array(
            'entityqueue_export_ui',
          ),
          'access callback' => 'entityqueue_queue_access',
          'access arguments' => array(
            'create',
            4,
          ),
          'type' => MENU_LOCAL_ACTION,
        ),
        'edit subqueue callback' => array(
          'path' => 'list/%ctools_export_ui/subqueues/%entityqueue_subqueue',
          'page callback' => 'ctools_export_ui_switcher_page',
          'page arguments' => array(
            'entityqueue_export_ui',
            'subqueue_edit',
            4,
            6,
          ),
          'load arguments' => array(
            'entityqueue_export_ui',
          ),
          'access callback' => 'entityqueue_queue_access',
          'access arguments' => array(
            'update',
            4,
          ),
          'type' => MENU_CALLBACK,
        ),
        'edit subqueue' => array(
          'path' => 'list/%ctools_export_ui/subqueues/%entityqueue_subqueue/edit',
          'title' => 'Edit subqueue',
          'page callback' => 'ctools_export_ui_switcher_page',
          'page arguments' => array(
            'entityqueue_export_ui',
            'subqueue_edit',
            4,
            6,
          ),
          'load arguments' => array(
            'entityqueue_export_ui',
          ),
          'access callback' => 'entityqueue_queue_access',
          'access arguments' => array(
            'update',
            4,
          ),
          'type' => MENU_DEFAULT_LOCAL_TASK,
          'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
        ),
        'delete subqueue' => array(
          'path' => 'list/%ctools_export_ui/subqueues/%entityqueue_subqueue/delete',
          'title' => 'Delete subqueue',
          'type' => MENU_CALLBACK,
          'page callback' => 'ctools_export_ui_switcher_page',
          'page arguments' => array(
            'entityqueue_export_ui',
            'subqueue_delete',
            4,
            6,
          ),
          'load arguments' => array(
            'entityqueue_export_ui',
          ),
          'access callback' => 'entityqueue_access',
          'access arguments' => array(
            'delete',
            6,
            NULL,
            'entityqueue_subqueue',
          ),
        ),
      ),
    ),
    // Add our custom page titles.
    'strings' => array(
      'title' => array(
        'subqueues' => t('Subqueues of %title'),
      ),
    ),
    'title singular' => t('queue'),
    'title singular proper' => t('Queue'),
    'title plural' => t('queues'),
    'title plural proper' => t('Queues'),
    'form' => array(
      'settings' => 'entityqueue_export_ui_form',
      'validate' => 'entityqueue_export_ui_form_validate',
    ),
    'handler' => array(
      'class' => 'entityqueue_export_ui',
      'parent' => 'ctools_export_ui',
    ),
  );
}
$plugin = entityqueue_entityqueue_export_ui_ctools_export_ui();

/**
 * Form to edit the settings of a queue.
 */
function entityqueue_export_ui_form(&$form, &$form_state) {
  global $user;
  if (!user_access('administer entityqueue', $user)) {
    drupal_access_denied();
    drupal_exit();
  }
  _entityqueue_set_breadcrumb();
  ctools_include('plugins');
  $queue =& $form_state['item'];

  // We definitely need a queue label :)
  $form['info']['label']['#required'] = TRUE;
  $handlers = array();
  foreach (ctools_get_plugins('entityqueue', 'handler') as $name => $plugin) {
    $handlers[$name] = $plugin['title'];
  }
  $form['handler'] = array(
    '#title' => t('Handler'),
    '#type' => 'select',
    '#options' => $handlers,
    '#default_value' => !$queue->is_new ? $queue->handler : 'simple',
    '#required' => TRUE,
    '#disabled' => $queue->is_new ? FALSE : TRUE,
  );

  // Get valid target entity types.
  $entity_info = entity_get_info();
  unset($entity_info['entityqueue_subqueue']);
  $entity_types = array();
  foreach ($entity_info as $entity_type => $info) {
    $entity_types[$entity_type] = $info['label'];
  }
  $form['target_type'] = array(
    '#title' => t('Entity type'),
    '#type' => 'select',
    '#options' => $entity_types,
    '#default_value' => $queue->target_type,
    '#required' => TRUE,
    '#disabled' => $queue->is_new ? FALSE : TRUE,
    '#ajax' => array(
      'callback' => 'entityqueue_export_ui_target_type_callback',
      'wrapper' => 'entityqueue-target-bundles',
    ),
  );
  $form['settings'] = array(
    '#type' => 'vertical_tabs',
    '#tree' => TRUE,
  );
  $target_type = !empty($form_state['values']['target_type']) ? $form_state['values']['target_type'] : $queue->target_type;
  $bundles = array();
  foreach ($entity_info[$target_type]['bundles'] as $bundle_name => $bundle_info) {
    $bundles[$bundle_name] = $bundle_info['label'];
  }
  $form['settings']['entityreference_field'] = array(
    '#type' => 'fieldset',
    '#title' => t('Entity reference field settings'),
    '#collapsible' => TRUE,
  );
  $form['settings']['entityreference_field']['target_bundles'] = array(
    '#type' => 'checkboxes',
    '#title' => $target_type == 'node' ? t('Content types') : t('Bundles'),
    '#prefix' => '<div id="entityqueue-target-bundles">',
    '#suffix' => '</div>',
    '#options' => $bundles,
    '#default_value' => !empty($queue->settings['target_bundles']) ? $queue->settings['target_bundles'] : array(),
    '#multiple' => TRUE,
    '#description' => t('The bundles of the entity type that can be referenced. Optional, leave empty for all bundles.'),
  );
  $form['settings']['properties'] = array(
    '#type' => 'fieldset',
    '#title' => t('Queue properties'),
    '#collapsible' => TRUE,
  );
  $form['settings']['properties']['size'] = array(
    '#type' => 'item',
    '#attributes' => array(
      'class' => array(
        'container-inline',
      ),
    ),
    '#title' => t('Queue limits'),
  );
  $form['settings']['properties']['size']['min_size'] = array(
    '#type' => 'textfield',
    '#size' => 3,
    '#attributes' => array(
      'style' => 'width: auto;',
    ),
    '#default_value' => isset($queue->settings['min_size']) ? $queue->settings['min_size'] : 0,
    '#field_prefix' => t('Restrict this queue to a minimum of'),
    '#field_suffix' => t('items'),
    '#parents' => array(
      'settings',
      'properties',
      'min_size',
    ),
  );
  $form['settings']['properties']['size']['max_size'] = array(
    '#type' => 'textfield',
    '#size' => 3,
    '#attributes' => array(
      'style' => 'width: auto;',
    ),
    '#default_value' => isset($queue->settings['max_size']) ? $queue->settings['max_size'] : 0,
    '#field_prefix' => t('and a maximum of'),
    '#field_suffix' => t('items.'),
    '#parents' => array(
      'settings',
      'properties',
      'max_size',
    ),
  );
  $form['settings']['properties']['act_as_queue'] = array(
    '#type' => 'checkbox',
    '#title' => t('Remove items exceeding maximum limit'),
    '#default_value' => isset($queue->settings['act_as_queue']) ? $queue->settings['act_as_queue'] : 0,
    '#return_value' => 1,
    '#description' => t('When enabled, adding more than the maximum number of items will remove extra items from the queue.'),
    '#states' => array(
      'invisible' => array(
        ':input[name="settings[properties][max_size]"]' => array(
          'value' => 0,
        ),
      ),
    ),
  );
}

/**
 * Selects just the target bundles dropdown to be returned for re-rendering.
 *
 * @return array
 *  A renderable array representing the target bundles dropdown.
 */
function entityqueue_export_ui_target_type_callback($form, $form_state) {
  return $form['settings']['entityreference_field']['target_bundles'];
}

/**
 * Validate callback for the preset edit form.
 */
function entityqueue_export_ui_form_validate(&$form, &$form_state) {

  // Move the queue settings values up a level.
  $queue_settings = element_children($form['settings']);
  foreach ($queue_settings as $form_element) {
    if (isset($form_state['values']['settings'][$form_element]) && is_array($form_state['values']['settings'][$form_element])) {
      $form_state['values']['settings'] += (array) $form_state['values']['settings'][$form_element];
      unset($form_state['values']['settings'][$form_element]);
    }
  }
  unset($form_state['values']['settings']['settings__active_tab']);

  // Clean-up target_bundles values a bit.
  if (isset($form_state['values']['settings'])) {
    $form_state['values']['settings']['target_bundles'] = array_filter($form_state['values']['settings']['target_bundles']);
  }
}

Functions

Namesort descending Description
entityqueue_entityqueue_export_ui_ctools_export_ui Implements HOOK_PLUGIN_ctools_export_ui().
entityqueue_export_ui_form Form to edit the settings of a queue.
entityqueue_export_ui_form_validate Validate callback for the preset edit form.
entityqueue_export_ui_target_type_callback Selects just the target bundles dropdown to be returned for re-rendering.