Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1a89be1
Merge pull request #1019 from rtCamp/develop
subodhr258 Sep 2, 2025
a66e9df
Prevent opening of multiple control bar menus (#1024)
prachigarg19 Sep 2, 2025
9b00d84
Provide thumbnail support for vimeo video migration (#1025)
KMchaudhary Sep 2, 2025
7544290
Fix - Enable engagements after video transcoded (#1030)
subodhr258 Sep 3, 2025
89abcef
Fix: Virtual Media thumbnails (#1032)
DarkMatter-999 Sep 3, 2025
44f75bd
fix: gallery sidebar toggle
DarkMatter-999 Sep 3, 2025
cdc4f34
fix: add spacing for folder load more button
DarkMatter-999 Sep 3, 2025
dc04775
Merge pull request #1036 from rtCamp/fix/media-library-ui
KMchaudhary Sep 3, 2025
22905f2
Fix the media list view search input icons (#1038)
KMchaudhary Sep 4, 2025
63fa5ba
Fix QA issues (#1041)
prachigarg19 Sep 4, 2025
a76c9d8
Add vimeo title, and description support vimeo migration (#1045)
KMchaudhary Sep 4, 2025
891350c
Modify the admanager initialization order (#1042)
KMchaudhary Sep 4, 2025
c86a8c1
Fix the fetch_vimeo_video_id return statement (#1046)
KMchaudhary Sep 4, 2025
cc27693
fix: Error handling in PHP (#1047)
subodhr258 Sep 5, 2025
303fc79
fix: Ensure the media library preview error overlay doesn't cover any…
subodhr258 Sep 5, 2025
f528d66
Implement new re-transcoding API changes (#1026)
KMchaudhary Sep 8, 2025
cfa113a
Vimeo Migration Hotfixes (#1052)
subodhr258 Sep 8, 2025
769912c
Close the bookmarks and locked tab by default
Sep 8, 2025
6ed1dfd
fix: Avoid retranscoding virtual media (#1054)
subodhr258 Sep 8, 2025
6df9638
Set Show Branding option to true for all video
Sep 8, 2025
d16e289
Fix the progress bar jumping to 100% issue, on restart migration butt…
Sep 8, 2025
bfb896b
Add minor typos error
Sep 8, 2025
ea77479
Merge pull request #1056 from rtCamp/tweak/minor-changes
KMchaudhary Sep 8, 2025
4e81064
Fix: Gallery Modal styles (#1055)
DarkMatter-999 Sep 8, 2025
972e0bd
Hotfix/fix virtual media thumbnails (#1057)
prachigarg19 Sep 8, 2025
6b771d8
fix: Optional chaining for nonce (#1058)
subodhr258 Sep 8, 2025
36cf387
docs: Update links and content in README files for 1.4.0 (#1039)
subodhr258 Sep 8, 2025
e960142
docs: Update version to 1.4.0 (#1059)
subodhr258 Sep 8, 2025
12920f1
docs: Update changelog date (#1061)
subodhr258 Sep 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog #

## v1.4.0 (September 9, 2025) ##

- New: Added integration for LifterLMS
- New: Added Ninja Forms and MetForm layer integration
- New: Added GoDAM Recorder Field for Everest Forms and Ninja Forms
- New: Added Engagements for GoDAM Video and Gallery with Views, Likes, and Comments
- New: Implemented Migration Tools for existing videos and Vimeo videos to GoDAM
- New: Added Speech-to-text functionality using AI transcriptions
- New: Added Custom Thumbnail Upload option for videos
- New: Enabled different Hover-Interactions for videos
- Tweak: Improved compatibility with Elementor
- Tweak: Updated Media Library UI
- Fix: Fixed iOS compatibility
- Fix: Resolved re-transcoding ID preservation to maintain video continuity and prevent data loss

## v1.3.5 (August 26, 2025) ##

- Tweak: Set transcoded videos as public by default and add Org support parameters
Expand Down
69 changes: 48 additions & 21 deletions README.md

Large diffs are not rendered by default.

102 changes: 0 additions & 102 deletions admin/class-rtgodam-retranscodemedia.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ public function __construct() {
}

add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueues' ) );
add_action( 'wp_ajax_retranscodemedia', array( $this, 'ajax_process_retranscode_request' ) );
add_filter( 'media_row_actions', array( $this, 'add_media_row_action' ), 10, 2 );
add_action( 'admin_head-upload.php', array( $this, 'add_bulk_actions_via_javascript' ) );
add_action( 'admin_action_bulk_retranscode_media', array( $this, 'bulk_action_handler' ) ); // Top drowndown.
Expand Down Expand Up @@ -546,107 +545,6 @@ public function retranscode_interface() {
<?php
}

/**
* Process a single image ID (this is an AJAX handler)
*/
public function ajax_process_retranscode_request() {

header( 'Content-type: application/json' );
$id = rtgodam_filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT );
$id = intval( $id );

if ( empty( $id ) || 0 >= $id ) {
wp_send_json_error();
exit;
}

$media = get_post( $id );

if ( ! $media || 'attachment' !== $media->post_type ||
(
'audio/' !== substr( $media->post_mime_type, 0, 6 ) &&
'video/' !== substr( $media->post_mime_type, 0, 6 ) &&
'application/pdf' !== $media->post_mime_type
)
) {
// translators: Media id of the invalid media type.
die( wp_json_encode( array( 'error' => sprintf( __( 'Sending Failed: %d is an invalid media ID/type.', 'godam' ), intval( $id ) ) ) ) );
}

// Safe fallback via filter; PHPCS can't resolve dynamic capability.
// phpcs:ignore WordPress.WP.Capabilities.Undetermined
if ( ! current_user_can( $this->capability ) ) {
$this->die_json_error_msg( $media->ID, __( "Your user account doesn't have permission to transcode", 'godam' ) );
}

// Check if transcoding status is failed and clean up if needed.
$transcoding_status = get_post_meta( $media->ID, 'rtgodam_transcoding_status', true );
if ( 'Failed' === $transcoding_status ) {
// Clean up any existing job ID and status.
delete_post_meta( $media->ID, 'rtgodam_transcoding_job_id' );
}

delete_post_meta( $media->ID, 'rtgodam_transcoding_status' );
delete_post_meta( $media->ID, 'rtgodam_transcoding_error_msg' );

// Check if media is already being transcoded.
if ( rtgodam_is_file_being_transcoded( $media->ID ) ) {
$this->die_json_error_msg( $media->ID, sprintf( __( 'The media is already being transcoded', 'godam' ) ) );
}

/**
* Check if `rtgodam_transcoding_job_id` meta is present for the media
* if it's present then media won't get sent to the transcoder
* so we need to delete `rtgodam_transcoding_job_id` meta before we send
* media back for the retranscoding
*/
$already_sent = get_post_meta( $media->ID, 'rtgodam_transcoding_job_id', true );

if ( ! empty( $already_sent ) ) {
delete_post_meta( $media->ID, 'rtgodam_transcoding_job_id' );
}

// Get the transcoder object.
$transcoder = new RTGODAM_Transcoder_Handler( true );

$attachment_meta = array( 'mime_type' => $media->post_mime_type );

$transcoded_files = get_post_meta( $media->ID, 'rtgodam_media_transcoded_files', true );

// No need to ask for the transcoded (mp4) file if we already have it.
// Only asks for the thumbnails.

if ( ! empty( $transcoded_files ) && is_array( $transcoded_files ) ) {
if ( array_key_exists( 'mp4', $transcoded_files ) && count( $transcoded_files['mp4'] ) > 0 ) {

/**
* We can ask for the new fresh transcoded file even if it already present.
* Use: add_filter( 'rtgodam_force_trancode_media', '__return_true' );
*
* @param bool FALSE by default. Pass TRUE if you want to request for new transcoded file
*/
$force_transcode = apply_filters( 'rtgodam_force_trancode_media', false );
if ( ! $force_transcode ) {
$attachment_meta['mime_type'] = 'video/mp4';
}
}
}

// Send media for (Re)transcoding.
$transcoder->wp_media_transcoding( $attachment_meta, $media->ID );

$is_sent = get_post_meta( $media->ID, 'rtgodam_transcoding_job_id', true );

if ( ! $is_sent ) {
$this->die_json_error_msg( $media->ID, __( 'Unknown failure reason.', 'godam' ) );
}

update_post_meta( $media->ID, 'rtgodam_retranscoding_sent', $is_sent );

// translators: Media name, Media id and success message for successfull transcode.
die( wp_json_encode( array( 'success' => sprintf( __( '&quot;%1$s&quot; (ID %2$s) was successfully sent in %3$s seconds.', 'godam' ), esc_html( get_the_title( $media->ID ) ), $media->ID, timer_stop() ) ) ) );
}

/**
* Helper to make a JSON error message
*
Expand Down
18 changes: 11 additions & 7 deletions admin/class-rtgodam-transcoder-handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,7 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
return $wp_metadata;
}

$already_sent = get_post_meta( $attachment_id, 'rtgodam_transcoding_job_id', true );
if ( ! empty( $already_sent ) ) {
return $wp_metadata;
}
$transcoding_job_id = get_post_meta( $attachment_id, 'rtgodam_transcoding_job_id', true );

$path = get_attached_file( $attachment_id );
$url = wp_get_attachment_url( $attachment_id );
Expand Down Expand Up @@ -276,11 +273,12 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
}

$args = array(
'method' => 'POST',
'method' => empty( $transcoding_job_id ) ? 'POST' : 'PUT',
'sslverify' => false,
'timeout' => 60, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout
'body' => array_merge(
array(
'retranscode' => empty( $transcoding_job_id ) ? 0 : 1,
'api_token' => $this->api_key,
'job_type' => $job_type,
'job_for' => $job_for,
Expand All @@ -304,7 +302,7 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
),
);

$transcoding_url = $this->transcoding_api_url . 'resource/Transcoder Job';
$transcoding_url = $this->transcoding_api_url . 'resource/Transcoder Job' . ( empty( $transcoding_job_id ) ? '' : '/' . $transcoding_job_id );

// Block if blacklisted ip address.
$remote_address_key = 'REMOTE_ADDR';
Expand All @@ -313,7 +311,7 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
return $metadata;
}

$upload_page = wp_remote_post( $transcoding_url, $args );
$upload_page = wp_remote_request( $transcoding_url, $args );

if ( ! is_wp_error( $upload_page ) &&
(
Expand Down Expand Up @@ -425,6 +423,12 @@ public function is_valid_key( $key ) {
public function update_usage( $key ) {

$response = rtgodam_verify_api_key( $key );

// Check if response is WP_Error before accessing array elements.
if ( is_wp_error( $response ) ) {
return $response;
}

update_option( 'rtgodam-usage', array( $key => (object) $response['data'] ) );

return $response;
Expand Down
2 changes: 1 addition & 1 deletion assets/src/blocks/godam-gallery/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ export default function Edit( { attributes, setAttributes } ) {
</>
) }
<ToggleControl
label={ __( 'Engagements visibility', 'godam' ) }
label={ __( 'Enable Likes & Comments', 'godam' ) }
checked={ !! engagements }
onChange={ ( value ) => setAttributes( { engagements: value } ) }
help={ __( 'Engagement will only be visible for transcoded videos', 'godam' ) }
Expand Down
2 changes: 1 addition & 1 deletion assets/src/blocks/godam-player/block.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
},
"showShareButton": {
"type": "boolean",
"default": true
"default": false
},
"layout": {
"type": "object",
Expand Down
2 changes: 1 addition & 1 deletion assets/src/blocks/godam-player/edit-common-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ const VideoSettings = ( { setAttributes, attributes, isInsideQueryLoop = false }
) }
<ToggleControl
__nextHasNoMarginBottom
label={ __( 'Engagements visibility', 'godam' ) }
label={ __( 'Enable Likes & Comments', 'godam' ) }
onChange={ toggleFactory.engagements }
checked={ !! engagements }
help={ __( 'Engagement will only be visible for transcoded videos', 'godam' ) }
Expand Down
4 changes: 2 additions & 2 deletions assets/src/blocks/sureforms/blocks/recorder/block.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 3,
"name": "godam/srfm-recorder",
"title": "Godam Recorder",
"title": "GoDAM Recorder",
"icon": "video-alt",
"category": "sureforms",
"description": "Recorder field for sureforms",
"description": "Enable video submissions inside forms using the GoDAM Recorder field that supports webcam and screencast",
"keywords": [
"sureforms",
"godam",
Expand Down
58 changes: 58 additions & 0 deletions assets/src/css/admin.scss
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ $LIGHT_BLUE: #2196F3;

$media-library-sidebar-bg: #fff;
$media-library-sidebar-bg-dark: #a3a3a3;
$media-library-sidebar-border: #E0E0E0;

#wpbody-content {
/* stylelint-disable-next-line value-keyword-case */
Expand Down Expand Up @@ -111,6 +112,47 @@ $media-frame-width: calc(300px + 2 * 24px);
}
}

.media-frame-menu:has(#menu-item-gallery) {

#media-folder-toggle-button {
top: -24px;
}

#rt-transcoder-media-library-root {
height: calc(100% - 48px);
min-height: unset;
}
}

.media-frame-menu:has(#menu-item-gallery-edit) {

#media-folder-toggle-button {
top: -124px;
}

#rt-transcoder-media-library-root {
height: calc(100% - 150px);
min-height: unset;
}
}

#menu-item-gallery, #menu-item-gallery-edit, #menu-item-gallery-library {
$margin: 1rem;
margin: $margin;
width: calc( 100% - 2 * $margin);
padding: 1rem;
border: 1px solid $media-library-sidebar-border;
border-radius: 3px;
}

#menu-item-cancel {
margin-top: 1rem;
}

.media-menu .separator {
display: none;
}

.hide-sidebar {

.media-frame-menu {
Expand All @@ -120,6 +162,14 @@ $media-frame-width: calc(300px + 2 * 24px);
overflow: visible;
}

#menu-item-gallery, #menu-item-cancel, #menu-item-gallery-edit, #menu-item-gallery-library {
display: none;
}

.media-selection {
left: -180px;
}

.media-frame-title {
left: 0;
}
Expand Down Expand Up @@ -181,6 +231,10 @@ $media-frame-width: calc(300px + 2 * 24px);
}
}

.media-selection {
left: 150px;
}

.media-frame-menu-heading {
display: none;
}
Expand Down Expand Up @@ -349,6 +403,10 @@ $media-frame-width: calc(300px + 2 * 24px);
}
}

.media-frame.hide-router .media-frame-content {
top: 100px;
}

.button {
border: 1px solid $media-library-sidebar-bg-dark;
border-radius: 0.25rem;
Expand Down
8 changes: 8 additions & 0 deletions assets/src/css/godam-player.scss
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@
}
}

.vjs-text-track-display {
bottom: 4em !important;
}

&:hover {

.vjs-big-play-button {
Expand Down Expand Up @@ -169,6 +173,10 @@
}
}

.vjs-audio-button.vjs-menu-button {
display: none;
}

.animate-play-btn {
display: none;
}
Expand Down
23 changes: 15 additions & 8 deletions assets/src/css/media-library.scss
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,14 @@ $media-library-active-folder: #f5f5f5;
gap: 12px 0;
padding: 6px 10px;

#media-search-input {
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgNy45NTY0M0MxIDkuODAxMzkgMS43MzI5MSAxMS41NzA4IDMuMDM3NDkgMTIuODc1NEM0LjM0MjA4IDE0LjE4IDYuMTExNDcgMTQuOTEyOSA3Ljk1NjQzIDE0LjkxMjlDOS44MDEzOSAxNC45MTI5IDExLjU3MDggMTQuMTggMTIuODc1NCAxMi44NzU0QzE0LjE4IDExLjU3MDggMTQuOTEyOSA5LjgwMTM5IDE0LjkxMjkgNy45NTY0M0MxNC45MTI5IDYuMTExNDcgMTQuMTggNC4zNDIwOCAxMi44NzU0IDMuMDM3NDlDMTEuNTcwOCAxLjczMjkxIDkuODAxMzkgMSA3Ljk1NjQzIDFDNi4xMTE0NyAxIDQuMzQyMDggMS43MzI5MSAzLjAzNzQ5IDMuMDM3NDlDMS43MzI5MSA0LjM0MjA4IDEgNi4xMTE0NyAxIDcuOTU2NDNaIiBzdHJva2U9IiM1MjUyNTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTYuOTk5NSAxNi45OTk1TDEyLjg3NSAxMi44NzUiIHN0cm9rZT0iIzUyNTI1MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=);
background-repeat: no-repeat;
background-size: 16px 16px;
background-position: 10px center;
padding-left: 36px;
}

.actions {
display: flex;
gap: 0.75rem;
Expand Down Expand Up @@ -228,14 +236,6 @@ $media-library-active-folder: #f5f5f5;
flex-wrap: wrap;
padding: 0 10px;

#media-search-input {
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgNy45NTY0M0MxIDkuODAxMzkgMS43MzI5MSAxMS41NzA4IDMuMDM3NDkgMTIuODc1NEM0LjM0MjA4IDE0LjE4IDYuMTExNDcgMTQuOTEyOSA3Ljk1NjQzIDE0LjkxMjlDOS44MDEzOSAxNC45MTI5IDExLjU3MDggMTQuMTggMTIuODc1NCAxMi44NzU0QzE0LjE4IDExLjU3MDggMTQuOTEyOSA5LjgwMTM5IDE0LjkxMjkgNy45NTY0M0MxNC45MTI5IDYuMTExNDcgMTQuMTggNC4zNDIwOCAxMi44NzU0IDMuMDM3NDlDMTEuNTcwOCAxLjczMjkxIDkuODAxMzkgMSA3Ljk1NjQzIDFDNi4xMTE0NyAxIDQuMzQyMDggMS43MzI5MSAzLjAzNzQ5IDMuMDM3NDlDMS43MzI5MSA0LjM0MjA4IDEgNi4xMTE0NyAxIDcuOTU2NDNaIiBzdHJva2U9IiM1MjUyNTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTYuOTk5NSAxNi45OTk1TDEyLjg3NSAxMi44NzUiIHN0cm9rZT0iIzUyNTI1MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=);
background-repeat: no-repeat;
background-size: 16px 16px;
background-position: 10px center;
padding-left: 36px;
}

.button {
border: 1px solid $media-library-sidebar-bg-dark;
border-radius: 0.25rem;
Expand Down Expand Up @@ -612,3 +612,10 @@ $media-library-active-folder: #f5f5f5;
.edit-attachment-frame .attachment-info {
height: auto;
}

/**
* Ensure the media library preview error overlay doesn't cover any elements.
*/
.mejs-overlay.mejs-layer {
overflow: auto;
}
Loading
Loading