You are here

function media_browser_plus_media_filter in Media Browser Plus 7

Same name and namespace in other branches
  1. 7.2 includes/media_browser_plus.pages.inc \media_browser_plus_media_filter()

@todo Document what this function does.

1 string reference to 'media_browser_plus_media_filter'
media_browser_plus_menu in ./media_browser_plus.module
Implements hook_menu().

File

includes/media_browser_plus.pages.inc, line 113
Common pages for the media browser plus module.

Code

function media_browser_plus_media_filter() {
  $form = array();
  $path = drupal_get_path('module', 'media_browser_plus');
  $form['#attached']['js'][] = $path . '/js/media_browser_plus.filter.js';
  $form['#attached']['css'][] = $path . '/css/media_browser_plus.filter.css';

  // Getting the media folders for filter selection
  $folders = _media_browser_plus_folder_list();

  // Setting default filter selections - overwritten when a filter is active.
  $selected_types = array_keys(media_type_get_types());
  $selected_folders = array_keys($folders);

  // Apply filter settings.
  if (isset($_SESSION['media-filter'])) {
    if (count($_SESSION['media-filter']['type'])) {
      $selected_types = explode(',', $_SESSION['media-filter']['type']);
    }
    if (count($_SESSION['media-filter']['field_folder'])) {
      $selected_folders = $_SESSION['media-filter']['field_folder'];
    }
  }

  // Check for tags.
  $field_tags = '';
  if (isset($_SESSION['media-filter']['field_tags']) && count($_SESSION['media-filter']['field_tags'])) {

    // Use name buffer array to be able to nicely implode with clean comma
    // seperation.
    $names = array();
    foreach ($_SESSION['media-filter']['field_tags'] as $tid) {
      $term = taxonomy_term_load($tid);
      $names[] = $term->name;
    }
    $field_tags = implode(', ', $names);
  }

  // Get media types.
  $types = media_type_get_types();
  $media_types = array();

  // User labels as display and value for backend.
  foreach ($types as $value => $type) {
    $access = TRUE;
    foreach (module_implements('media_type_access') as $module) {
      $access = module_invoke($module, 'media_type_access', $type);
      if ($access === FALSE) {
        break;
      }
      else {
        $access = TRUE;
      }
    }
    if ($access) {
      $media_types[$value] = $type->label;
    }
  }
  $close = 0;
  if (isset($_SESSION['media-filter-autoclose'])) {
    $close = (int) $_SESSION['media-filter-autoclose'];
  }
  $settings['media_browser_plus'] = array(
    'autoclose' => $close,
  );

  // Reset otherwise it always auto closes.
  unset($_SESSION['media-filter-autoclose']);

  // Attach settings.
  $form['#attached']['js'][] = array(
    'type' => 'setting',
    'data' => $settings,
  );
  $form['filter'] = array(
    '#type' => 'fieldset',
    '#title' => isset($_SESSION['media-filter']) ? t('Show only items where') : t('Create Filter'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
    '#weight' => -10,
    '#prefix' => '<div id="media-preview-wrapper">',
    '#suffix' => '</div>',
    '#attributes' => array(
      'id' => 'media-filter',
    ),
    'column_one' => array(
      '#type' => 'container',
      '#prefix' => '<div style="float:left; padding-right: 20px;">',
      '#suffix' => '</div>',
      '#attributes' => array(),
      'filename' => array(
        '#type' => 'textfield',
        '#title' => t('Title'),
        '#maxlength' => 125,
        '#size' => 40,
        '#value' => isset($_SESSION['media-filter']['filename']) ? $_SESSION['media-filter']['filename'] : '',
        '#required' => FALSE,
      ),
      'field_tags' => array(
        '#attributes' => array(
          'id' => 'media-field-tags-filter',
        ),
        '#type' => 'textfield',
        '#value' => $field_tags,
        '#field_name' => 'field_tags',
        '#columns' => array(
          'tid',
        ),
        '#title' => t('Tags'),
        '#size' => 40,
        '#description' => t('Enter a comma-separated list of words to filter your media.'),
        '#required' => FALSE,
        '#delta' => 0,
        '#language' => LANGUAGE_NONE,
        '#type' => 'textfield',
        '#autocomplete_path' => 'taxonomy/autocomplete/field_tags',
        '#element_validate' => array(
          'media_browser_plus_prepare_taxonomy_autocomplete_validate',
          'taxonomy_autocomplete_validate',
        ),
      ),
      'prevent_autoclose' => array(
        '#type' => 'checkbox',
        '#weight' => 10,
        '#attributes' => array(
          'id' => array(
            'media-filter-autoclose',
          ),
        ),
        '#title' => t('prevent window from closing after form submit'),
        '#default_value' => isset($_SESSION['media-filter']['prevent_autoclose']) ? (int) $_SESSION['media-filter']['prevent_autoclose'] : 0,
      ),
    ),
    'column_two' => array(
      '#type' => 'container',
      '#prefix' => '<div style="float:left; padding-right: 20px;">',
      '#suffix' => '</div>',
      '#attributes' => array(),
      'criterias' => array(
        '#type' => 'container',
        '#attributes' => array(),
        'media_type' => array(
          '#type' => 'select',
          '#title' => t('Media Type'),
          '#multiple' => TRUE,
          '#options' => $media_types,
          '#default_value' => $selected_types,
          '#weight' => 5,
          '#required' => FALSE,
          '#attributes' => array(
            'class' => array(
              'media-filter-select',
            ),
          ),
          '#prefix' => '<div style="float:left; padding-right: 20px;">',
          '#suffix' => '</div>',
        ),
        'field_folder' => array(
          '#type' => 'select',
          '#title' => t('Media Folder'),
          '#multiple' => TRUE,
          '#required' => FALSE,
          '#options' => $folders,
          '#default_value' => $selected_folders,
          '#weight' => 6,
          '#attributes' => array(
            'class' => array(
              'media-filter-select',
            ),
          ),
          '#prefix' => '<div style="float:left; padding-right: 20px;">',
          '#suffix' => '</div>',
        ),
        'include_subfolders' => array(
          '#type' => 'checkbox',
          '#weight' => 10,
          '#attributes' => array(
            'class' => array(
              'media-filter',
            ),
          ),
          '#title' => t('include subfolders of selected folders'),
          '#default_value' => isset($_SESSION['media-filter']['include_subfolders']) ? $_SESSION['media-filter']['include_subfolders'] : 0,
        ),
      ),
    ),
    'column_three' => array(
      '#type' => 'container',
      '#prefix' => '<div style="float:left; padding-right: 20px;">',
      '#suffix' => '</div>',
      '#attributes' => array(),
      'submit' => array(
        '#type' => 'submit',
        '#value' => isset($_SESSION['media-filter']) ? t('Update Filter') : t('Create Filter'),
        '#submit' => array(
          'media_browser_plus_media_filter_submit',
        ),
        '#limit_validation_errors' => array(),
        '#validate' => array(
          'media_browser_plus_media_filter_validate',
        ),
        '#prefix' => '<div>',
        '#suffix' => '</div>',
      ),
    ),
  );
  if (isset($_SESSION['media-filter'])) {
    $form['filter']['column_three']['clear'] = array(
      '#type' => 'submit',
      '#value' => t('Reset Filter'),
      '#submit' => array(
        'media_browser_plus_media_filter_clear',
      ),
      '#limit_validation_errors' => array(),
      '#validate' => array(
        'media_browser_plus_media_filter_validate',
      ),
      '#prefix' => '<div>',
      '#suffix' => '</div>',
    );
  }
  return $form;
}