Commit 1b65f809 authored by András Czövek's avatar András Czövek
Browse files

Issue #2475157 CMS API for video search, pt2

parent 01e74ec2
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1096,7 +1096,11 @@ function brightcove_player_delete($player) {
 * @return array
 */
function _brightcove_load_my_clients($account = NULL) {
  $clients = entity_load('brightcove_client');
  // Load all brightcove_client entities.
  // We need $reset = TRUE otherwise we get no clients in an AJAX call.
  $clients = entity_load('brightcove_client', FALSE, [], TRUE);

  // Keep only the clients $account has access to.
  $clients = array_filter($clients, function ($client) use ($account) {
    return brightcove_client_access('use', $client, $account);
  });
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ function brightcove_field_browse($type) {
    ],
  ];

  return '<div class="brightcove-browse-table">' . drupal_render($content['filter_form']) . $content['pager'] . theme('brightcove_field_browse_items', ['items' => $content['items']]) . $content['pager'] . '</div>';
  return '<div class="brightcove-browse-table" id="brightcove-browse-table">' . drupal_render($content['filter_form']) . $content['pager'] . theme('brightcove_field_browse_items', ['items' => $content['items']]) . $content['pager'] . '</div>';
}

/**
+35 −21
Original line number Diff line number Diff line
@@ -1112,21 +1112,36 @@ function brightcove_field_theme($existing, $type, $theme, $path) {
 */
function brightcove_field_filter_form($form, &$form_state) {
  $clients = _brightcove_load_my_clients();
  $number_of_clients = count($clients);
  if ($number_of_clients > 1) {
    $client_options = [];
    foreach ($clients as $client) {
       $client_options[$client->bcid] = $client->label;
    }
  $_SESSION['brightcove_field_filter']['client'] = isset($_SESSION['brightcove_field_filter']['client']) ? $_SESSION['brightcove_field_filter']['client'] : $client->client_id;
    $_SESSION['brightcove_field_filter']['client'] = isset($_SESSION['brightcove_field_filter']['client']) ? $_SESSION['brightcove_field_filter']['client'] : $client->bcid;
    $form['client'] = [
      '#type' => 'select',
      '#options' => $client_options,
      '#default_value' => $_SESSION['brightcove_field_filter']['client'],
      '#required' => TRUE,
      '#title' => t('Client'),
      '#ajax' => [
      'wrapper' => 'browse-dialog',
        'wrapper' => 'brightcove-browse-table',
        'callback' => 'brightcove_field_client_select_ajax_callback',
      ],
    ];
  }
  elseif ($number_of_clients == 1) {
    $client = reset($clients);
    $_SESSION['brightcove_field_filter']['client'] = $client->bcid;
  }
  else {
    $form['warning'] = [
      '#markup' => t('To browse videos create some bricghtcove clients first.'),
    ];
    return $form;
  }

  $form['search'] = [
    '#type' => 'fieldset',
    '#title' => t('Filter videos'),
@@ -1152,7 +1167,7 @@ function brightcove_field_filter_form($form, &$form_state) {
    '#type' => 'radios',
    '#title' => t('Search in'),
    '#options' => ['everything' => t('Search in everything'), 'tags' => t('Tags: at least one of these')],
    '#default_value' => isset($_SESSION['brightcove_field_filter']['search']) ? $_SESSION['brightcove_field_filter']['search'] : 'name',
    '#default_value' => isset($_SESSION['brightcove_field_filter']['search']) ? $_SESSION['brightcove_field_filter']['search'] : 'everything',
    '#attributes' => [
      'class' => ['search-radio'],
    ],
@@ -1176,10 +1191,9 @@ function brightcove_field_filter_form($form, &$form_state) {
  return $form;
}

function brightcove_field_client_select_ajax_callback($form, $form_state) {
  $_SESSION['brightcove_field_filter']['client'] = $form_state['values']['client'];;

  return;
function brightcove_field_client_select_ajax_callback($form, &$form_state) {
  $_SESSION['brightcove_field_filter']['client'] = $form_state['values']['client'];
  return brightcove_field_browse('video');
}

/**
@@ -1190,13 +1204,13 @@ function brightcove_field_client_select_ajax_callback($form, $form_state) {
 * @see brightcove_field_browse().
 */
function brightcove_field_filter_form_submit($form, &$form_state) {

  $keywords = $form_state['values']['keywords'];
  $search = $form_state['values']['search'];

  // Reset the form if keywords are empty or reset button was clicked.
  if ((empty($keywords)) || $form_state['clicked_button']['#name'] == 'reset') {
    unset($_SESSION['brightcove_field_filter']);
    unset($_SESSION['brightcove_field_filter']['search']);
    unset($_SESSION['brightcove_field_filter']['keywords']);
    return;
  }

+4 −4
Original line number Diff line number Diff line
@@ -189,7 +189,8 @@ function _brightcove_field_video_browse() {
  $page = isset($_GET['page']) ? intval($_GET['page']) : '0';

  $params = [];
  if (isset($_SESSION['brightcove_field_filter'])) {
  $search = '';
  if (isset($_SESSION['brightcove_field_filter']['search'])) {
    switch ($_SESSION['brightcove_field_filter']['search']) {
      case 'tags':
        $params = ['tags' => $_SESSION['brightcove_field_filter']['keywords']];
@@ -222,7 +223,7 @@ function _brightcove_field_video_browse() {
    // If no cached data is available.
    if (!$content) {
      $client = brightcove_client_load($client_id);
      list($cms, $di) = _brightcove_create_classes($client);
      list($cms,) = _brightcove_create_classes($client);

      try {
        $result = $cms->listVideos($search);
@@ -276,7 +277,6 @@ function _brightcove_field_video_browse() {

  // The filter form should not be cached,
  // because it wouldn't invoke the submit handler in this case.
  $content['filter_form'] = drupal_get_form('brightcove_field_filter_form');;

  $content['filter_form'] = drupal_get_form('brightcove_field_filter_form');
  return $content;
}