function _brightcove_field_playlist_widget_form in Brightcove Video Connect 7.7
Same name and namespace in other branches
- 7.3 brightcove_field/brightcove_field.playlist.inc \_brightcove_field_playlist_widget_form()
- 7.4 brightcove_field/brightcove_field.playlist.inc \_brightcove_field_playlist_widget_form()
- 7.5 brightcove_field/brightcove_field.playlist.inc \_brightcove_field_playlist_widget_form()
- 7.6 brightcove_field.playlist.inc \_brightcove_field_playlist_widget_form()
Helper function to return the playlist widget form.
1 call to _brightcove_field_playlist_widget_form()
- brightcove_field_widget_form in ./
brightcove.module - Implements hook_field_widget_form().
File
- ./
brightcove_field.playlist.inc, line 11 - Holds all of the video field related methods.
Code
function _brightcove_field_playlist_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, &$element) {
$entity_type = $element['#entity_type'];
$entity_info = entity_get_info($entity_type);
$eid = isset($form['#entity']->{$entity_info['entity keys']['id']}) ? $form['#entity']->{$entity_info['entity keys']['id']} : NULL;
// Select the client.
$ajax_wrapper_id = "bc-playlist-{$field['field_name']}-{$delta}-ajax-wrapper";
$element['#prefix'] = "<div id='{$ajax_wrapper_id}'>";
$element['#suffix'] = '</div>';
module_load_include('inc', 'brightcove', 'brightcove.client');
$element['bcid'] = brightcove_client_select_element();
switch ($element['bcid']['#type']) {
case 'select':
$element['bcid']['#default_value'] = isset($items[$delta]['bcid']) ? $items[$delta]['bcid'] : $element['bcid']['#default_value'];
$element['bcid']['#ajax'] = [
'wrapper' => $ajax_wrapper_id,
'callback' => 'brightcove_field_playlist_client_ajax_callback',
];
$element['bcid']['#ajax_id'] = 'bcid';
$bcid = $element['bcid']['#default_value'];
if (isset($form_state['values'][$field['field_name']][$langcode][$delta]['bcid'])) {
$bcid = $form_state['values'][$field['field_name']][$langcode][$delta]['bcid'];
}
elseif (isset($form_state['input'][$field['field_name']][$langcode][$delta]['bcid'])) {
$bcid = $form_state['input'][$field['field_name']][$langcode][$delta]['bcid'];
}
elseif (isset($items[$delta]['bcid'])) {
$bcid = $items[$delta]['bcid'];
if ($bcid === "0" && !empty($items[$delta]['brightcove_id'])) {
$bcid = variable_get('brightcove_client_default');
}
}
$element['bcid']['#default_value'] = $bcid;
break;
case 'value':
$bcid = $element['bcid']['#value'];
break;
default:
return $element;
}
// Load client.
$client = brightcove_client_load($bcid);
if (!$client) {
return $element;
}
$element['previous_client'] = [
'#type' => 'value',
'#value' => $bcid,
];
if (isset($form_state['values'][$field['field_name']][$langcode][$delta]['previous_client']) && $form_state['values'][$field['field_name']][$langcode][$delta]['previous_client'] !== $bcid) {
$form_state['input'][$field['field_name']][$langcode][$delta]['brightcove_id'] = '';
$form_state['values'][$field['field_name']][$langcode][$delta]['brightcove_id'] = '';
}
// Set field title.
$element['brightcove_id_title'] = [
'#type' => 'item',
'#title' => $element['#title'],
];
$items_total = _brightcove_playlist_items_total($client);
if (isset($form_state['triggering_element']['#ajax_id']) && $form_state['triggering_element']['#ajax_id'] == 'bcid') {
$form_state['input'][$field['field_name']][$langcode][$delta]['brightcove_id_current_page'] = 0;
}
// Get the current page.
if (isset($form_state['input'][$field['field_name']][$langcode][$delta]['brightcove_id_current_page'])) {
$page = $form_state['input'][$field['field_name']][$langcode][$delta]['brightcove_id_current_page'];
}
else {
$page = 0;
}
// Page back.
if (isset($form_state['triggering_element']['#ajax_id']) && $form_state['triggering_element']['#ajax_id'] == 'bc_pager_prev' && $form_state['triggering_element']['#delta'] == $delta) {
$page = $page > 0 ? $page - 1 : 0;
}
// Page forward.
if (isset($form_state['triggering_element']['#ajax_id']) && $form_state['triggering_element']['#ajax_id'] == 'bc_pager_next' && $form_state['triggering_element']['#delta'] == $delta) {
$page++;
}
if (isset($form['#node']->{$field['field_name']}[$langcode][$delta]) && isset($form['#node_edit_form']) && $form['#node_edit_form'] && !isset($form_state['triggering_element'])) {
// Find the and set value.
$brightcove_id = $form['#node']->{$field['field_name']}[$langcode][$delta]['brightcove_id'];
// Have to page through the list.
do {
$playlist_options = [
'0' => [
'id' => 'Remove Playlist',
'title' => 'Remove Playlist',
],
] + _brightcove_field_get_playlists($client, $page);
$page++;
} while (!in_array($brightcove_id, array_keys($playlist_options)) && !empty($playlist_options));
if (empty($playlist_options)) {
// Give back the first page if value not found.
$page = 0;
$playlist_options = [
'0' => [
'id' => 'No Playlist selected',
'title' => 'No Playlist selected',
],
] + _brightcove_field_get_playlists($client, $page);
}
else {
// The be on the current page we have to remove one because the do ... while
// counts +1;
$page = $page > 0 ? $page - 1 : 0;
}
}
else {
$playlist_options = [
'0' => [
'id' => 'No Playlist selected',
'title' => 'No Playlist selected',
],
] + _brightcove_field_get_playlists($client, $page);
}
$player_list = [];
brightcove_try(function () use (&$player_list, $client) {
$player_list = brightcove_player_list($client->bcid);
});
if (empty($form_state['values']['field_brightcove_playlist'][LANGUAGE_NONE][$delta]['player'])) {
$selected = isset($items[$delta]['player']) ? $items[$delta]['player'] : brightcove_get_default_player($client->bcid);
}
else {
$selected = isset($form_state['values']['field_brightcove_playlist'][LANGUAGE_NONE][$delta]['player']) ? $form_state['values']['field_brightcove_playlist'][LANGUAGE_NONE][$delta]['player'] : key($player_list);
}
$element['player'] = [
'#type' => 'select',
'#title' => t('Player'),
'#options' => $player_list,
'#default_value' => $selected,
'#ajax' => [
'callback' => 'ajax_dependent_dropdown',
'wrapper' => 'playlist-embed-replace-' . $delta,
],
];
$element['embed'] = [
'#type' => 'select',
'#title' => t('Child player'),
'#prefix' => '<div id="playlist-embed-replace-' . $delta . '">',
'#suffix' => '</div>',
'#options' => brightcove_embed_list($selected, $client),
'#default_value' => isset($items[$delta]['embed']) ? $items[$delta]['embed'] : 'default',
];
$element['player_customization'] = [
'#type' => 'fieldset',
'#title' => t('NEW CHILD PLAYER'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => t('See the <a href="https://support.brightcove.com/guide-embed-apis">Embed APIs Guide</a> to decide when child players (Embed APIs) should be used.<br />NOTE: Any unsaved settings on this page will be lost when creating a new child player.'),
];
$element['player_customization']['link_to_config'] = [
'#prefix' => '<div id="playlist-link-replace-' . $delta . '"><br />',
'#suffix' => '</div>',
'#markup' => l('Create child player', '/admin/config/media/brightcove/players/' . $bcid . '/' . $selected . '/add-embed', [
'query' => $eid ? [
'destination' => "{$entity_type}/{$eid}/edit",
] : [],
'attributes' => [
'class' => 'button',
],
]),
];
$max_items = variable_get('brightcove_pager_max_items', 20);
$offset = $max_items * $page;
$element['brightcove_id_current_page'] = [
'#type' => 'hidden',
'#value' => $page,
];
$element['brightcove_id'] = [
'#type' => 'tableselect',
'#header' => [
'id' => t('ID'),
'title' => t('Title'),
],
'#default_value' => isset($items[$delta]['brightcove_id']) ? $items[$delta]['brightcove_id'] : BRIGHTCOVE_BCID_NONE,
'#options' => $playlist_options,
'#multiple' => FALSE,
];
$element['brightcove_id_pager'] = [
'#type' => 'container',
];
// Previous button.
$element['brightcove_id_pager']['pager']['previous_button'] = [
'#value' => t('Previous'),
'#ajax_id' => 'bc_pager_prev',
];
if ($page == 0) {
$element['brightcove_id_pager']['pager']['previous_button']['#disabled'] = TRUE;
}
else {
$element['brightcove_id_pager']['pager']['previous_button']['#disabled'] = FALSE;
}
// Next button.
$element['brightcove_id_pager']['pager']['next_button'] = [
'#value' => t('Next'),
'#ajax_id' => 'bc_pager_next',
];
if ($offset + $max_items > $items_total) {
$element['brightcove_id_pager']['pager']['next_button']['#disabled'] = TRUE;
}
else {
$element['brightcove_id_pager']['pager']['next_button']['#disabled'] = FALSE;
}
foreach ($element['brightcove_id_pager']['pager'] as &$item) {
$item['#type'] = 'button';
$item['#limit_validation_errors'] = [];
$item['#ajax'] = [
'callback' => 'brightcove_field_playlist_pager',
'event' => 'click',
'method' => 'replace',
'wrapper' => $ajax_wrapper_id,
];
$item['#field_name'] = $field['field_name'];
$item['#langcode'] = $langcode;
$item['#delta'] = $delta;
$item['#name'] = "{$item['#ajax_id']}_{$field['field_name']}_{$delta}";
}
return $element;
}