You are here

function node_gallery_api_manage_items_form in Node Gallery 7

Displays the content for our "Manage Images" tab, which is a VBO view.

Parameters

array $form_state: Drupal $form_state array

array $gallery: A populated node gallery object.

Return value

array FAPI array

1 string reference to 'node_gallery_api_manage_items_form'
node_gallery_api_menu in ./node_gallery_api.module
Implements hook_menu().

File

./node_gallery_api.pages.inc, line 252
Node Gallery module.

Code

function node_gallery_api_manage_items_form($form, &$form_state, $gallery) {
  global $pager_page_array, $pager_total;
  $relationship_type = node_gallery_api_get_relationship_type($gallery->type);

  // We must set these globals, because we do not call pager_query.
  $element = 0;
  $pager_page_array = isset($_GET['page']) ? explode(',', $_GET['page']) : array();
  if (empty($pager_page_array[$element])) {
    $pager_page_array[$element] = 0;
  }
  $items_per_page = $relationship_type->settings['manage_items']['items_per_page'];
  $form = array(
    '#theme' => 'node_gallery_api_manage_items_form',
    '#cache' => TRUE,
  );
  $form['#description'] = t('Manage Images form.');
  $form['#thumb_imagecache'] = 'node-gallery-admin-thumbnail';
  $form['#gallery'] = $gallery;
  $form_state['programmed'] = FALSE;
  $form['#attached']['css'][] = drupal_get_path('module', 'node_gallery_api') . '/node_gallery_api.css';
  $items = array();
  if (isset($_SESSION['node_gallery_api_plupload_nids'][$gallery->nid])) {
    foreach ($_SESSION['node_gallery_api_plupload_nids'][$gallery->nid] as $nid) {
      $item = node_load($nid);
      if (!empty($relationship_type->filefield_name)) {
        $files = field_get_items('node', $item, $relationship_type->filefield_name);
        if (!empty($files)) {
          $item->node_gallery['item_file'] = $files[0];
          $item->node_gallery['item_file_url'] = file_create_url($files[0]['uri']);
        }
      }
      $items[] = $item;
    }

    // We trim the $images array to a max length to prevent
    // OOM's on the manage images form.
    // There's just no easy way to do paging for just one
    // visit to the manage images tab.
    drupal_set_message(t('Current display is filtered to show only images just uploaded.  Please refresh the page to display all images in the gallery.'), 'status');
    $length = min(variable_get('node_gallery_api_plupload_manage_images_limit', 100), count($items));
    $items = array_slice($items, 0, $length);
    $chunks = array_chunk($items, count($items));
    unset($_SESSION['node_gallery_api_plupload_nids'][$gallery->nid]);
  }
  else {

    // $images = node_gallery_api_get_item_nids($gallery->nid, TRUE, FALSE);
    $items = node_gallery_api_get_items($gallery, TRUE, FALSE);
    if (!empty($items)) {
      $chunks = array_chunk($items, $items_per_page);
      $items = $chunks[$pager_page_array[$element]];
    }
  }
  if (empty($items)) {
    return $form;
  }
  $pager_total[$element] = count($chunks);
  $enable_rotation = FALSE;
  if ($relationship_type->settings['manage_items']['enable_rotation'] && (image_get_toolkit() != 'gd' || function_exists("imagerotate"))) {
    $enable_rotation = TRUE;
  }
  if (!empty($items)) {
    $count = 0;
    $form['items']['#tree'] = TRUE;
    foreach ($items as $item) {
      $count++;
      if ($count % 50 == 0) {

        // Make sure we don't run out of memory by clearing the cache.
        // $item = node_load(NULL, NULL, TRUE);
      }

      // $item = node_load($nid);
      $options[$item->nid] = '';
      $form['items'][$item->nid]['item_file'] = array(
        '#type' => 'value',
        '#value' => !empty($item->node_gallery['item_file']) ? $item->node_gallery['item_file'] : '',
      );
      $form['items'][$item->nid]['item_file_url'] = array(
        '#type' => 'value',
        '#value' => !empty($item->node_gallery['item_file_url']) ? $item->node_gallery['item_file_url'] : '',
      );
      $form['items'][$item->nid]['remove'] = array(
        '#type' => 'checkbox',
        '#default_value' => FALSE,
      );
      if ($enable_rotation) {
        if (!empty($relationship_type->settings['manage_items']['rotation_radios'])) {
          $form['items'][$item->nid]['rotate'] = array(
            '#type' => 'radios',
            '#options' => array(
              0 => t('None'),
              90 => t('90° CW'),
              270 => t('90° CCW'),
              180 => t('180°'),
            ),
            '#default_value' => 0,
          );
        }
        else {
          $form['items'][$item->nid]['rotate'] = array(
            '#type' => 'hidden',
            '#default_value' => 0,
          );
        }
        if (!empty($relationship_type->settings['manage_items']['rotation_modal'])) {
          $form['items'][$item->nid]['rotate']['#suffix'] = l(t('rotate'), '', array(
            'fragment' => ' ',
            'attributes' => array(
              'class' => 'node-gallery-api-rotate-link',
              'rel' => image_style_url('node_gallery_api_admin_thumbnail', $item->{$relationship_type->filefield_name}[LANGUAGE_NONE][0]['uri']),
            ),
          ));
        }
      }
      $item_form_values = isset($form_state['values']['items'][$item->nid]['edit_form']) ? $form_state['values']['items'][$item->nid]['edit_form'] : array();
      $form['items'][$item->nid]['edit_form'] = node_gallery_api_item_edit_form($item_form_values, $item, $relationship_type, $form_state);
    }
  }
  $cover_nid = $gallery->node_gallery['cover_item'];
  $form['is_cover'] = array(
    '#type' => 'radios',
    '#default_value' => in_array($cover_nid, array_keys($options)) ? $cover_nid : NULL,
    '#options' => $options,
  );
  $form['pager'] = array(
    '#value' => theme('pager', array(
      'tags' => NULL,
      'element' => $element,
    )),
  );
  $form['gallery_nid'] = array(
    '#type' => 'value',
    '#value' => $gallery->nid,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
    '#weight' => 20,
    // Need this because this form is used in image upload ahah also.
    '#submit' => array(
      'node_gallery_api_manage_items_submit',
    ),
    '#validate' => array(
      'node_gallery_api_manage_items_validate',
    ),
  );

  // OG hook_form_alter's the image node form and mucks up the breadcrumbs.
  // Calling our function after we load the image forms fixes that.
  // node_gallery_api_set_user_breadcrumb($gallery->uid, $gallery);
  return $form;
}