Skip to content

Commit 4e84c44

Browse files
author
Diego Pereira
committed
[compdev-959] Fixed remote XML configuration file links returning 404 errors in Overview page
Added some logic to get the correct path for the XML file, based on the remote config. https://onthegosystems.myjetbrains.com/youtrack/issue/compdev-959
1 parent 99cdc12 commit 4e84c44

2 files changed

Lines changed: 98 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Bugfix
44

55
- Fixed Configuration Generator ignoring capitalization in custom field names, shortcode tags, and shortcode attributes
6+
- Fixed remote XML configuration file links returning 404 errors in Overview page
67

78
# 2.2.6
89

inc/wpml-compatibility-test-tools.class.php

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,99 @@ function save_configuration_for_debug( $config ) {
702702
return $config;
703703
}
704704

705+
/**
706+
* Get plugin or theme name from directory slug.
707+
*
708+
* @param string $slug Directory name (e.g., 'bb-plugin', 'avada')
709+
*
710+
* @return string|false Plugin/theme name or false if not found
711+
*/
712+
function get_plugin_or_theme_name_from_slug( $slug ) {
713+
static $cache = array();
714+
715+
// Return cached result if available
716+
if ( isset( $cache[ $slug ] ) ) {
717+
return $cache[ $slug ];
718+
}
719+
720+
if ( ! function_exists( 'get_plugins' ) ) {
721+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
722+
}
723+
724+
$all_plugins = get_plugins();
725+
726+
foreach ( $all_plugins as $plugin_path => $plugin_data ) {
727+
// Plugin path format: "plugin-folder/plugin-file.php"
728+
$plugin_folder = dirname( $plugin_path );
729+
730+
if ( $plugin_folder === $slug ) {
731+
$cache[ $slug ] = $plugin_data['Name'];
732+
return $plugin_data['Name'];
733+
}
734+
}
735+
736+
$theme = wp_get_theme( $slug );
737+
if ( $theme->exists() ) {
738+
$theme_name = $theme->get( 'Name' );
739+
$cache[ $slug ] = $theme_name;
740+
return $theme_name;
741+
}
742+
743+
return false;
744+
}
745+
746+
/**
747+
* Get the correct folder ID from wpml_config_index based on admin_text_context.
748+
*
749+
* @param string $admin_text_context
750+
*
751+
* @return string
752+
*/
753+
function get_remote_config_folder_id( $admin_text_context ) {
754+
static $cache = array();
755+
756+
if ( isset( $cache[ $admin_text_context ] ) ) {
757+
return $cache[ $admin_text_context ];
758+
}
759+
760+
$config_index = get_option( 'wpml_config_index', array() );
761+
762+
if ( empty( $config_index ) ) {
763+
$result = strtolower( $admin_text_context );
764+
$cache[ $admin_text_context ] = $result;
765+
return $result;
766+
}
767+
768+
$plugin_or_theme_name = $this->get_plugin_or_theme_name_from_slug( $admin_text_context );
769+
770+
$sections = array( 'global', 'plugins', 'themes' );
771+
772+
foreach ( $sections as $section ) {
773+
if ( ! isset( $config_index->$section ) || ! is_array( $config_index->$section ) ) {
774+
continue;
775+
}
776+
777+
foreach ( $config_index->$section as $config_item ) {
778+
if ( ! isset( $config_item->path ) || ! isset( $config_item->name ) ) {
779+
continue;
780+
}
781+
782+
if ( $plugin_or_theme_name && $config_item->name === $plugin_or_theme_name ) {
783+
$path_parts = explode( '/', $config_item->path );
784+
if ( isset( $path_parts[1] ) && ! empty( $path_parts[1] ) ) {
785+
$result = $path_parts[1];
786+
$cache[ $admin_text_context ] = $result;
787+
return $result;
788+
}
789+
}
790+
}
791+
}
792+
793+
$result = strtolower( $admin_text_context );
794+
$cache[ $admin_text_context ] = $result;
795+
return $result;
796+
}
797+
705798
/**
706799
* Intercept wpml-config.xml parsing to display loaded configuration files
707800
* for debugging purposes.
@@ -714,9 +807,10 @@ function save_configuration_for_debug( $config ) {
714807
function display_configuration_for_debug( $file ) {
715808
// Get url and name.
716809
if ( is_object( $file ) ) {
717-
$url = ICL_REMOTE_WPML_CONFIG_FILES_INDEX . 'wpml-config/' . $file->admin_text_context . '/wpml-config.xml';
718-
$name = $file->admin_text_context;
719-
$class = 'dashicons-admin-site';
810+
$folder_id = $this->get_remote_config_folder_id( $file->admin_text_context );
811+
$url = ICL_REMOTE_WPML_CONFIG_FILES_INDEX . 'wpml-config/' . $folder_id . '/wpml-config.xml';
812+
$name = $file->admin_text_context;
813+
$class = 'dashicons-admin-site';
720814
} else {
721815
$url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $file );
722816
$name = basename( dirname( $url ) );

0 commit comments

Comments
 (0)