Skip to content

Commit

Permalink
Add support for multiple languages on videos
Browse files Browse the repository at this point in the history
Basic support; only es and fr added.
  • Loading branch information
joedolson committed Jul 12, 2024
1 parent dfd539b commit 5dcc56f
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 19 deletions.
10 changes: 10 additions & 0 deletions src/assets/css/admin.css
Original file line number Diff line number Diff line change
Expand Up @@ -347,3 +347,13 @@
#wpcs-session-date {
margin-bottom: 15px;
}

#session-info .inside {
display: flex;
gap: 24px;
}

#session-info legend {
font-weight: 700;
padding: 0;
}
99 changes: 80 additions & 19 deletions src/wp-conference-schedule.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public function wpcs_enqueue_scripts() {
* @uses wp_enqueue_style()
*/
public function wpcs_admin_css() {
wp_enqueue_style( 'wpcs-admin', plugins_url( '/assets/css/admin.css', __FILE__ ), array(), 1 );
wp_enqueue_style( 'wpcs-admin', plugins_url( '/assets/css/admin.css', __FILE__ ), array(), WPCS_VERSION );
}

/**
Expand Down Expand Up @@ -298,12 +298,15 @@ public function wpcs_metabox_session_info() {
$session_meridiem = ( $session_time ) ? gmdate( 'a', $session_time ) : $default_meridiem;

}
$session_captions = get_post_meta( $post->ID, '_wpcs_caption_url', true );
$session_youtube = get_post_meta( $post->ID, '_wpcs_youtube_id', true );
$session_captions = get_post_meta( $post->ID, '_wpcs_caption_url', true );
$session_captions_es = get_post_meta( $post->ID, '_wpcs_caption_url_es', true );
$session_captions_fr = get_post_meta( $post->ID, '_wpcs_caption_url_fr', true );
$session_youtube = get_post_meta( $post->ID, '_wpcs_youtube_id', true );

wp_nonce_field( 'edit-session-info', 'wpcs-meta-session-info' );
?>

<fieldset>
<legend><?php _e( 'Session Schedule', 'wpa-conference' ); ?></legend>
<p>
<label for="wpcs-session-date"><?php esc_html_e( 'Date:', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-date" data-date="<?php echo esc_attr( $session_date ); ?>" name="wpcs-session-date" value="<?php echo esc_attr( $session_date ); ?>" /><br />
Expand Down Expand Up @@ -342,16 +345,30 @@ public function wpcs_metabox_session_info() {
</select>
</p>
<p>
<label for="wpcs-session-youtube"><?php esc_html_e( 'YouTube ID', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-youtube" name="wpcs-session-youtube" value="<?php echo esc_attr( $session_youtube ); ?>" />
</p>
<p>
<label for="wpcs-session-caption"><?php esc_html_e( 'Caption URL:', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-caption" name="wpcs-session-caption" value="<?php echo esc_attr( $session_captions ); ?>" />
</p>
<p>
<input type="checkbox" id="wpcs-session-is-opening-remarks" name="wpcs-opening-remarks" value="true" <?php checked( 'true', $opening_remarks ); ?> /> <label for="wpcs-session-is-opening-remarks"><?php esc_html_e( 'Opening Remarks', 'wpa-conference' ); ?></label>
<input type="checkbox" id="wpcs-session-is-opening-remarks" name="wpcs-opening-remarks" value="true" <?php checked( 'true', $opening_remarks ); ?> aria-describedby="is-opening-remarks" /> <label for="wpcs-session-is-opening-remarks"><?php esc_html_e( 'Opening Remarks', 'wpa-conference' ); ?></label>
<br /><em id="is-opening-remarks">Opening remarks are on a different schedule, this allows us to pull them out separately.</em>
</p>
</fieldset>
<fieldset>
<legend><?php _e( 'Session Recording', 'wpa-conference' ); ?></legend>
<p>
<label for="wpcs-session-youtube"><?php esc_html_e( 'YouTube ID', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-youtube" name="wpcs-session-youtube" value="<?php echo esc_attr( $session_youtube ); ?>" />
</p>
<p>
<label for="wpcs-session-caption"><?php esc_html_e( 'English Caption URL:', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-caption" name="wpcs-session-caption" value="<?php echo esc_attr( $session_captions ); ?>" />
</p>
<p>
<label for="wpcs-session-caption-es"><?php esc_html_e( 'Spanish Caption URL:', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-caption-es" name="wpcs-session-caption-es" value="<?php echo esc_attr( $session_captions_es ); ?>" />
</p>
<p>
<label for="wpcs-session-caption-fr"><?php esc_html_e( 'French Caption URL:', 'wpa-conference' ); ?></label>
<input type="text" id="wpcs-session-caption-fr" name="wpcs-session-caption-fr" value="<?php echo esc_attr( $session_captions_fr ); ?>" />
</p>
</fieldset>


<?php
}
Expand Down Expand Up @@ -416,6 +433,14 @@ public function wpcs_save_post_session( $post_id, $post ) {
// Update session caption URL.
$session_caption = sanitize_text_field( $_POST['wpcs-session-caption'] ?? '' );
update_post_meta( $post_id, '_wpcs_caption_url', $session_caption );

// Update session caption URL.
$session_caption_es = sanitize_text_field( $_POST['wpcs-session-caption-es'] ?? '' );
update_post_meta( $post_id, '_wpcs_caption_url_es', $session_caption_es );

// Update session caption URL.
$session_caption_fr = sanitize_text_field( $_POST['wpcs-session-caption-fr'] ?? '' );
update_post_meta( $post_id, '_wpcs_caption_url_fr', $session_caption_fr );
}
}

Expand Down Expand Up @@ -1541,17 +1566,42 @@ function wpcsp_sponsor_level_metabox() {
// Load the plugin class.
$GLOBALS['wpcs_plugin'] = new WPCS_Conference_Schedule();

/**
* Map supported languages to labels.
*
* @param string $lang Language code.
*
* @return string
*/
function wpcs_get_label( $lang ) {
$labels = array(
'en' => 'English',
'es' => 'Español',
'fr' => 'Français',
);

return ( isset( $labels[ $lang ] ) ) ? $labels[ $lang ] : $lang;
}

/**
* Get video HTML.
*
* @return string
*/
function wpcs_get_video() {
$captions = wpcs_get_captions();
$subtitles = '';
foreach ( $captions as $lang => $caption ) {
$label = wpcs_get_label( $lang );
if ( $caption ) {
$subtitles .= '<track kind="captions" src="' . esc_url( $caption ) . '" srclang="' . esc_attr( $lang ) . '" label="' . $label . '">';
}
}
return '
<div class="wp-block-group alignwide wpad-video-player">
<h2>Session Video</h2>
<video id="able-player-' . get_the_ID() . '" data-skin="2020" data-able-player data-transcript-div="able-player-transcript-' . get_the_ID() . '" preload="auto" poster="' . wpcs_get_poster() . '" data-youtube-id="' . wpcs_get_youtube() . '">
<track kind="captions" src="' . wpcs_get_captions() . '" srclang="en" label="English">
' . $subtitles . '
</video>
<div id="able-player-transcript-' . get_the_ID() . '"></div>
</div>';
Expand Down Expand Up @@ -1585,15 +1635,26 @@ function wpcs_get_poster() {
}

/**
* Get captions URL.
* Get captions URLs.
*
* @return string
* @return bool|array
*/
function wpcs_get_captions() {
$post_id = get_the_ID();
$session_captions = get_post_meta( $post_id, '_wpcs_caption_url', true );
$post_id = get_the_ID();
$captions = get_post_meta( $post_id, '_wpcs_caption_url', true );
$captions_es = get_post_meta( $post_id, '_wpcs_caption_url_es', true );
$captions_fr = get_post_meta( $post_id, '_wpcs_caption_url_fr', true );

if ( ! $captions ) {
return false;
}
$captions = array(
'en' => $captions,
'es' => $captions_es,
'fr' => $captions_fr,
);

return $session_captions;
return $captions;
}

/**
Expand Down

0 comments on commit 5dcc56f

Please sign in to comment.