Skip to content
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
fd39309
Merge pull request #1424 from rtCamp/main
subodhr258 Dec 19, 2025
c331979
fix: Robust background scroll fix for iPhone 13 Pro and others (#1408)
subodhr258 Dec 22, 2025
e6ab454
Manual Transcode Option using Filter (#1391)
subodhr258 Dec 22, 2025
6a19a16
fix: Merge conflict (#1425)
subodhr258 Dec 22, 2025
3965719
Fix: Empty CTA screen on incomplete details filled. #1162 (#1244)
OpuRockey Dec 24, 2025
3007742
fix: Capitalization in text (#1430)
subodhr258 Dec 31, 2025
1897277
Feat: make analytics page responsive (#1093)
shivamdev-lgtm Dec 31, 2025
d172c1e
chore: Create issue templates (#1455)
subodhr258 Jan 6, 2026
d563e6d
Fixed Image CTA (Portrait) Cut Off in Safari Instead of Being Respons…
OpuRockey Jan 7, 2026
1daf308
Fix - Hotspot positioning and other fixes (#1449)
subodhr258 Jan 8, 2026
a6106f2
Fix poll layer skip button not updating to "Continue" after submissio…
Copilot Jan 8, 2026
95db123
Fix godam-tab video mpd url source (#1462)
KMchaudhary Jan 8, 2026
59503e0
Feat/godam gallery iframe (#1429)
KMchaudhary Jan 9, 2026
bf8dc45
Fix: aspect ratio in godam/video block (#1460)
KMchaudhary Jan 9, 2026
3376d01
Fix the HLS URL quality menu issue for safari and iOS devices (#1470)
KMchaudhary Jan 9, 2026
53690b9
Fix: fullscreen layer font size (#1474)
KMchaudhary Jan 9, 2026
1ad4e3d
Feat - Add PostHog support for GoDAM (#1342)
subodhr258 Jan 9, 2026
729d036
Fix/ios player (#1465)
subodhr258 Jan 12, 2026
8b48aa5
Fix: Recorder pop up modal doesn't open for SureForms on preview page…
OpuRockey Jan 12, 2026
ce5fc40
Fix the overlap of godam/video block UI with engagement modal (#1473)
KMchaudhary Jan 13, 2026
451b5df
fix: Make hotspot tooltip visible inside video container always (#1478)
subodhr258 Jan 13, 2026
990e2ae
Add hotfix to videojs config for Safari, and iOS device playback (#1479)
KMchaudhary Jan 13, 2026
42ce589
Fix - GoDAM Block in Row and Stack, Block Icon Hover issue (#1501)
subodhr258 Jan 14, 2026
dd8c271
Feat/virtual media all (#1412)
KMchaudhary Jan 14, 2026
531c025
Started storing the transcoded image url in attachment postmeta (#1505)
KMchaudhary Jan 15, 2026
1f4da71
Fix: GoDAM Recorder links are not working as expected for WPForms and…
OpuRockey Jan 15, 2026
24dd965
Implement the loading animation on godam_video block (#1500)
KMchaudhary Jan 16, 2026
d6cc2a4
Show the oEmbed URL for godam tab video items (#1513)
KMchaudhary Jan 16, 2026
2a3bc27
Fix mobile responsiveness for Analytics and Dashboard pages (#1481)
AhmarZaidi Jan 16, 2026
2ed88c9
Fix - QA skins fixes (#1515)
subodhr258 Jan 16, 2026
b11289b
fix: New PCP errors related to ABSPATH (#1519)
subodhr258 Jan 16, 2026
9e13f54
fix: Add possible check for Refresh Status error (#1517)
subodhr258 Jan 16, 2026
43a8cd1
Fix the image transcoding retranscoding requests (#1520)
KMchaudhary Jan 19, 2026
eb9c838
Fix the url missmatch of virtual image source set (#1522)
KMchaudhary Jan 19, 2026
94177b3
Fix the Copy Block button breaking block on editor issue (#1529)
KMchaudhary Jan 19, 2026
3a85868
Fix the gallery block console errors, occure due to rtmedia plugin (#…
KMchaudhary Jan 19, 2026
1863f6f
Fix the email, firstname, lastname 0 value passed to transcoding requ…
KMchaudhary Jan 20, 2026
091d255
Fix the aspectRatio compatibility issue on godam video block (#1541)
KMchaudhary Jan 20, 2026
9d9a71b
Release/doc v1.5.0 (#1540)
KMchaudhary Jan 20, 2026
4820ce7
Add new contributors (#1542)
KMchaudhary Jan 20, 2026
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
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: "Bug Report"
about: "If something isn't working as expected"
title: ''
labels: ''
assignees: ''
---

## Bug Report

**Current Behavior**
A clear and concise description of the buggy behavior.

**Expected behavior/code**
A clear and concise description of what you expected to happen (or code).

**Steps to reproduce the bug**
Steps to reproduce if any.

**Testing Environment (if applicable)**

- Browser used
- OS: [e.g. OSX 10.15.x, Ubuntu 18.04]
- Browser used
- ...

**Possible Solution**
<!--- Only if you have suggestions on a fix for the bug -->

**Additional context/Screenshots**
Add any other context about the problem here. If applicable, add screenshots to help explain.
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: "\U0001F680 Feature Request"
about: "Suggest an idea for this project."
title: ''
labels: ''
assignees: ''
---

## Feature Request

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I have an issue when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen. Add any considered drawbacks.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Documentation, Adoption, Migration Strategy (if applicable)**
If you can, explain how users will be able to use this and possibly write out a version of the docs.
Maybe a screenshot or design?
2 changes: 1 addition & 1 deletion admin/class-rtgodam-retranscodemedia.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public function load_rest_endpoints() {
* Add the Retranscode Media meta box to the EasyDam Tools page.
*/
public function render_tools_page() {
$this->add_easydam_meta_boxes()
$this->add_easydam_meta_boxes();
?>
<div>
<h1><?php esc_html_e( 'GoDAM Tools', 'godam' ); ?></h1>
Expand Down
151 changes: 142 additions & 9 deletions admin/class-rtgodam-transcoder-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ public function __construct() {
add_action( 'admin_notices', array( $this, 'dashboard_offer_banner' ) );
add_action( 'admin_notices', array( $this, 'free_plan_admin_notice' ) );
add_action( 'admin_notices', array( $this, 'usage_limit_notices' ) );
add_action( 'admin_notices', array( $this, 'posthog_tracking_notice' ) );
add_action( 'admin_init', array( $this, 'handle_posthog_tracking_action' ) );
add_action( 'admin_init', array( $this, 'handle_clear_godam_cache' ) );
add_action( 'wp_ajax_rtgodam_dismiss_free_plan_notice', array( $this, 'dismiss_free_plan_notice' ) );
}
}
Expand Down Expand Up @@ -388,6 +391,41 @@ public function is_dashboard_screen() {
return isset( $current_screen->id ) && 'dashboard' === $current_screen->id;
}

/**
* Handle the cache clearing request for GoDAM usage data.
* This runs on admin_init to ensure headers haven't been sent yet.
*
* @since n.e.x.t
*/
public function handle_clear_godam_cache() {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified below.
if ( ! isset( $_GET['clear_godam_cache'] ) ) {
return;
}

// Verify user capabilities.
if ( ! current_user_can( 'manage_options' ) ) {
return;
}

// Verify nonce.
if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ), 'clear_godam_cache' ) ) {
return;
}

// Clear the cache.
delete_option( 'rtgodam_user_data' );

// Build redirect URL safely.
$current_url = remove_query_arg( array( 'clear_godam_cache', '_wpnonce' ) );

// Perform the redirect with error handling.
if ( ! headers_sent() ) {
wp_safe_redirect( $current_url );
exit;
}
}

/**
* Display usage limit notices when bandwidth/storage usage is high.
*/
Expand All @@ -408,15 +446,6 @@ public function usage_limit_notices() {
return;
}

// Handle cache clearing request.
if ( isset( $_GET['clear_godam_cache'] ) && current_user_can( 'manage_options' ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ), 'clear_godam_cache' ) ) {
delete_option( 'rtgodam_user_data' );
// Redirect back to the same page without the query parameter.
$current_url = remove_query_arg( array( 'clear_godam_cache', '_wpnonce' ) );
wp_safe_redirect( $current_url );
exit;
}

// Get user data with usage information.
$user_data = rtgodam_get_user_data( true );

Expand Down Expand Up @@ -623,4 +652,108 @@ private function display_bandwidth_exceeded_notice( $bandwidth_percentage ) {
</div>
<?php
}

/**
* Display PostHog tracking notice.
*
* @since n.e.x.t
*/
public function posthog_tracking_notice() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}

$settings = get_option( 'rtgodam-settings', array() );
$api_key = get_option( 'rtgodam-api-key', '' );

// If API key is present, we don't show the notice (it's auto-enabled or already handled).
if ( ! empty( $api_key ) ) {
return;
}

// If posthog_initialized is true, it means the user has already made a choice or it was auto-enabled.
if ( ! empty( $settings['general']['posthog_initialized'] ) ) {
return;
}

$optin_url = wp_nonce_url( add_query_arg( 'godam_tracker_optin', 'true' ), 'godam_tracker_action' );
$optout_url = wp_nonce_url( add_query_arg( 'godam_tracker_optout', 'true' ), 'godam_tracker_action' );

$notice = sprintf(
__( 'Want to help make <strong>GoDAM</strong> even more awesome? Allow GoDAM to collect anonymous diagnostic data and usage information.', 'godam' )
);

$policy_url = 'https://posthog.com/privacy';

echo '<div class="updated"><p>';
echo wp_kses_post( $notice );
echo ' (<a class="godam-insights-data-we-collect" href="#">' . esc_html__( 'what we collect', 'godam' ) . '</a>)';
echo '<div class="description" style="display:none; margin-top: 10px; padding: 10px; background: #f9f9f9; border: 1px solid #e5e5e5; border-radius: 4px;">';
echo '<p style="margin-top: 0;"><strong>' . esc_html__( 'Data we collect:', 'godam' ) . '</strong></p>';
echo '<ul style="list-style: disc; margin-left: 20px;">';
echo '<li>' . esc_html__( 'Server environment details (PHP, MySQL, Server, and WordPress versions)', 'godam' ) . '</li>';
echo '<li>' . esc_html__( 'Site and user count (Language and number of users)', 'godam' ) . '</li>';
echo '<li>' . esc_html__( 'Plugin details (Number of active and inactive plugins)', 'godam' ) . '</li>';
echo '<li>' . esc_html__( 'Usage data (Interactions, navigation, session replays, heatmaps, and errors via PostHog)', 'godam' ) . '</li>';
echo '</ul>';
echo '<p style="margin-bottom: 0;">';
printf(
wp_kses(
/* translators: %s: PostHog privacy policy URL */
__( 'We are using PostHog to collect anonymous data. <a href="%s" target="_blank">Learn more</a>. This can be disabled from the settings on the Help page.', 'godam' ),
array(
'a' => array(
'href' => array(),
'target' => array(),
),
)
),
esc_url( $policy_url )
);
echo '</p></div>';
echo '</p><p class="submit">';
echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-primary button-large">' . esc_html__( 'Allow', 'godam' ) . '</a>';
echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary button-large">' . esc_html__( 'No thanks', 'godam' ) . '</a>';
echo '</p></div>';
}

/**
* Handle PostHog tracking action.
*
* @since 1.4.9
*/
public function handle_posthog_tracking_action() {
if ( ! isset( $_GET['godam_tracker_optin'] ) && ! isset( $_GET['godam_tracker_optout'] ) ) {
return;
}

$nonce = isset( $_GET['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ) : '';

if ( ! wp_verify_nonce( $nonce, 'godam_tracker_action' ) ) {
return;
}

if ( ! current_user_can( 'manage_options' ) ) {
return;
}

$settings = get_option( 'rtgodam-settings', array() );

if ( ! isset( $settings['general'] ) ) {
$settings['general'] = array();
}

if ( isset( $_GET['godam_tracker_optin'] ) && 'true' === $_GET['godam_tracker_optin'] ) {
$settings['general']['enable_posthog_tracking'] = true;
$settings['general']['posthog_initialized'] = true;
} elseif ( isset( $_GET['godam_tracker_optout'] ) && 'true' === $_GET['godam_tracker_optout'] ) {
$settings['general']['enable_posthog_tracking'] = false;
$settings['general']['posthog_initialized'] = true;
}

update_option( 'rtgodam-settings', $settings );

wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'godam_tracker_optin', 'godam_tracker_optout', '_wpnonce' ) ) ) );
exit;
}
}
31 changes: 29 additions & 2 deletions admin/class-rtgodam-transcoder-handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,34 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
return;
}

/**
* Filter to allow external developers to disable automatic transcoding on upload.
* This allows users to have manual control over when videos get transcoded.
*
* Note: This filter only applies to automatic uploads. Manual retranscoding requests
* (via bulk actions, tools page, etc.) will always proceed regardless of this setting.
* Form integrations will also use this filter to disable transcoding for form uploads.
*
* Example usage:
* add_filter( 'godam_auto_transcode_on_upload', '__return_false' ); // Disable globally
*
* @since n.e.x.t
*
* @param bool $auto_transcode_on_upload Whether to automatically transcode on upload. Default true.
*/
if ( ! $retranscode ) {
$auto_transcode_on_upload = apply_filters( 'godam_auto_transcode_on_upload', true );

if ( ! $auto_transcode_on_upload ) {
return $wp_metadata;
}
}

// Skip transcoding and re-transcoding for images.
if ( preg_match( '/image/i', $wp_metadata['mime_type'], $type_array ) ) {
return $wp_metadata;
}

if ( empty( $wp_metadata['mime_type'] ) ) {
return $wp_metadata;
}
Expand Down Expand Up @@ -255,7 +283,6 @@ public function wp_media_transcoding( $wp_metadata, $attachment_id, $autoformat
$type = strtolower( $type_arry[ count( $type_arry ) - 1 ] );
$extension = pathinfo( $path, PATHINFO_EXTENSION );
$not_allowed_type = array();
preg_match( '/video|audio/i', $metadata['mime_type'], $type_array );

if ( (
preg_match( '/video|audio/i', $metadata['mime_type'], $type_array ) ||
Expand Down Expand Up @@ -765,7 +792,7 @@ public function get_post_id_by_meta_key_and_value( $key, $value ) {
$meta = wp_cache_get( $cache_key, 'godam' );
if ( empty( $meta ) ) {
$meta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s", $key, $value ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
wp_cache_set( $cache_key, $meta, 'godam', 3600 );
wp_cache_set( $cache_key, $meta, 'godam', HOUR_IN_SECONDS );
}

if ( is_array( $meta ) && ! empty( $meta ) && isset( $meta[0] ) ) {
Expand Down
5 changes: 5 additions & 0 deletions admin/class-rtgodam-transcoder-rest-routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,11 @@ public function handle_callback( WP_REST_Request $request ) {
// Setting the transcoded PDF URL.
update_post_meta( $attachment_id, 'rtgodam_transcoded_url', esc_url_raw( $post_array['download_url'] ) );
}

if ( 'image' === $job_type && isset( $post_array['download_url'] ) && ! empty( $post_array['download_url'] ) ) {
// Setting the transcoded Image URL.
update_post_meta( $attachment_id, 'rtgodam_transcoded_url', esc_url_raw( $post_array['download_url'] ) );
}
} else {
$flag = __( 'Something went wrong. The required attachment id does not exists. It must have been deleted.', 'godam' );
}
Expand Down
9 changes: 4 additions & 5 deletions admin/godam-transcoder-actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ function rtgodam_add_transcoded_url_field( $form_fields, $post ) {
$is_allowed = (
str_starts_with( $mime_type, 'video/' ) ||
str_starts_with( $mime_type, 'audio/' ) ||
str_starts_with( $mime_type, 'image/' ) ||
'application/pdf' === $mime_type
);

Expand All @@ -44,15 +45,13 @@ function rtgodam_add_transcoded_url_field( $form_fields, $post ) {

$easydam_settings = get_option( 'rtgodam-settings', array() );

$adaptive_bitrate_enabled = ! empty( $easydam_settings['video']['adaptive_bitrate'] );

// Determine if the site has a valid API key (i.e., Premium user).
$api_key = get_option( 'rtgodam-api-key', '' );

if ( ! empty( $api_key ) ) {

// If $job_id is present then show the oEmbed URL.
if ( ! empty( $job_id ) ) {
// If $job_id is present then show the oEmbed URL field for video files.
if ( ! empty( $job_id ) && 0 === strpos( $mime_type, 'video/' ) ) {
$oembed_url = RTGODAM_API_BASE . '/web/video/' . $job_id;

$form_fields['oembed_url'] = array(
Expand All @@ -70,7 +69,7 @@ function rtgodam_add_transcoded_url_field( $form_fields, $post ) {
}

$transcoded_url_label = __( 'Transcoded CDN URL', 'godam' );
if ( strpos( $mime_type, 'video/' ) === 0 ) {
if ( 0 === strpos( $mime_type, 'video/' ) ) {
$transcoded_url_label = __( 'Transcoded CDN URL (MPD)', 'godam' );
}

Expand Down
13 changes: 13 additions & 0 deletions admin/godam-transcoder-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,19 @@ function rtgodam_verify_api_key( $api_key, $save = false ) {
if ( 200 === $status_code && isset( $body['message']['account_token'] ) ) {

$account_token = $body['message']['account_token'];

// Enable PostHog tracking once API key is activated or plugin is updated with active API key.
$settings = get_option( 'rtgodam-settings', array() );
if ( $save || empty( $settings['general']['posthog_initialized'] ) ) {
$settings['general']['enable_posthog_tracking'] = true;
$settings['general']['posthog_initialized'] = true;
update_option( 'rtgodam-settings', $settings );
} elseif ( ! empty( $settings['general']['posthog_initialized'] ) && ! $settings['general']['enable_posthog_tracking'] && $save ) {
// If user previously opted out but is now activating an API key, re-enable tracking.
$settings['general']['enable_posthog_tracking'] = true;
update_option( 'rtgodam-settings', $settings );
}

if ( $save ) {
// Save the API key in the site options only if it is verified.
update_option( 'rtgodam-api-key', $api_key );
Expand Down
Loading