'custom_term_fields_readonly_config' ];
} else {
$iclTranslationManagement->settings[ '__custom_term_fields_readonly_config_prev' ] = array();
}
$iclTranslationManagement->settings[ 'custom_term_fields_readonly_config' ] = array();
}
static function load_plugins_wpml_config() {
if ( is_multisite() ) {
// Get multi site plugins
$plugins = get_site_option( 'active_sitewide_plugins' );
if ( !empty( $plugins ) ) {
foreach ( $plugins as $p => $dummy ) {
if(!self::check_on_config_file($p)){
continue;
}
$plugin_slug = dirname( $p );
$config_file = WP_PLUGIN_DIR . '/' . $plugin_slug . '/wpml-config.xml';
if ( trim( $plugin_slug, '\/.' ) && file_exists( $config_file ) ) {
self::$wpml_config_files[ ] = $config_file;
}
}
}
}
// Get single site or current blog active plugins
$plugins = get_option( 'active_plugins' );
if ( !empty( $plugins ) ) {
foreach ( $plugins as $p ) {
if(!self::check_on_config_file($p)){
continue;
}
$plugin_slug = dirname( $p );
$config_file = WP_PLUGIN_DIR . '/' . $plugin_slug . '/wpml-config.xml';
if ( trim( $plugin_slug, '\/.' ) && file_exists( $config_file ) ) {
self::$wpml_config_files[ ] = $config_file;
}
}
}
// Get the must-use plugins
$mu_plugins = wp_get_mu_plugins();
if ( !empty( $mu_plugins ) ) {
foreach ( $mu_plugins as $mup ) {
if(!self::check_on_config_file($mup)){
continue;
}
$plugin_dir_name = dirname( $mup );
$plugin_base_name = basename( $mup, ".php" );
$plugin_sub_dir = $plugin_dir_name . '/' . $plugin_base_name;
if ( file_exists( $plugin_sub_dir . '/wpml-config.xml' ) ) {
$config_file = $plugin_sub_dir . '/wpml-config.xml';
self::$wpml_config_files[ ] = $config_file;
}
}
}
return self::$wpml_config_files;
}
static function check_on_config_file( $name ){
if(empty(self::$active_plugins)){
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
self::$active_plugins = get_plugins();
}
$config_index_file_data = maybe_unserialize(get_option('wpml_config_index'));
$config_files_arr = maybe_unserialize(get_option('wpml_config_files_arr'));
if(!$config_index_file_data || !$config_files_arr){
return true;
}
if(isset(self::$active_plugins[$name])){
$plugin_info = self::$active_plugins[$name];
$plugin_slug = dirname( $name );
$name = $plugin_info['Name'];
$config_data = $config_index_file_data->plugins;
$config_files_arr = $config_files_arr->plugins;
$config_file = WP_PLUGIN_DIR . '/' . $plugin_slug . '/wpml-config.xml';
$type = 'plugin';
}else{
$config_data = $config_index_file_data->themes;
$config_files_arr = $config_files_arr->themes;
$config_file = get_template_directory() . '/wpml-config.xml';
$type = 'theme';
}
foreach($config_data as $item){
if($name == $item->name && isset($config_files_arr[$item->name])){
if($item->override_local || !file_exists( $config_file )){
end(self::$wpml_config_files);
$key = key(self::$wpml_config_files)+1;
self::$wpml_config_files[$key] = new stdClass();
self::$wpml_config_files[$key]->config = icl_xml2array($config_files_arr[$item->name]);
self::$wpml_config_files[$key]->type = $type;
self::$wpml_config_files[$key]->admin_text_context = basename( dirname( $config_file ) );
return false;
}else{
return true;
}
}
}
return true;
}
static function load_theme_wpml_config() {
$theme_data = wp_get_theme();
if(!self::check_on_config_file($theme_data->get('Name'))){
return self::$wpml_config_files;
}
if ( get_template_directory() != get_stylesheet_directory() ) {
$config_file = get_stylesheet_directory() . '/wpml-config.xml';
if ( file_exists( $config_file ) ) {
self::$wpml_config_files[ ] = $config_file;
}
}
$config_file = get_template_directory() . '/wpml-config.xml';
if ( file_exists( $config_file ) ) {
self::$wpml_config_files[ ] = $config_file;
}
return self::$wpml_config_files;
}
static function get_theme_wpml_config_file() {
if ( get_template_directory() != get_stylesheet_directory() ) {
$config_file = get_stylesheet_directory() . '/wpml-config.xml';
if ( file_exists( $config_file ) ) {
return $config_file;
}
}
$config_file = get_template_directory() . '/wpml-config.xml';
if ( file_exists( $config_file ) ) {
return $config_file;
}
return false;
}
static function parse_wpml_config_files() {
$config_all['wpml-config'] = array(
'custom-fields' => array(),
'custom-term-fields' => array(),
'custom-types' => array(),
'taxonomies' => array(),
'admin-texts' => array(),
'language-switcher-settings' => array(),
'shortcodes' => array(),
);
if ( !empty( self::$wpml_config_files ) ) {
foreach ( self::$wpml_config_files as $file ) {
$config = is_object( $file ) ? $file->config : icl_xml2array( file_get_contents( $file ) );
do_action( 'wpml_parse_config_file', $file );
if ( isset( $config[ 'wpml-config' ] ) ) {
$wpml_config = $config[ 'wpml-config' ];
$wpml_config_all = $config_all[ 'wpml-config' ];
$wpml_config_all = self::parse_config_index($wpml_config_all, $wpml_config, 'custom-field', 'custom-fields');
$wpml_config_all = self::parse_config_index($wpml_config_all, $wpml_config, 'custom-term-field', 'custom-term-fields');
$wpml_config_all = self::parse_config_index($wpml_config_all, $wpml_config, 'custom-type', 'custom-types');
$wpml_config_all = self::parse_config_index($wpml_config_all, $wpml_config, 'taxonomy', 'taxonomies');
$wpml_config_all = self::parse_config_index($wpml_config_all, $wpml_config, 'shortcode', 'shortcodes');
//language-switcher-settings
if ( isset( $wpml_config[ 'language-switcher-settings' ][ 'key' ] ) ) {
if ( !is_numeric( key( $wpml_config[ 'language-switcher-settings' ][ 'key' ] ) ) ) { //single
$wpml_config_all[ 'language-switcher-settings' ][ 'key' ][ ] = $wpml_config[ 'language-switcher-settings' ][ 'key' ];
} else {
foreach ( $wpml_config[ 'language-switcher-settings' ][ 'key' ] as $cf ) {
$wpml_config_all[ 'language-switcher-settings' ][ 'key' ][ ] = $cf;
}
}
}
$config_all[ 'wpml-config' ] = $wpml_config_all;
}
}
$config_all = apply_filters( 'icl_wpml_config_array', $config_all );
$config_all = apply_filters( 'wpml_config_array', $config_all );
}
self::parse_wpml_config( $config_all );
}
/**
* @param $config
*
* @return mixed
*/
protected static function parse_custom_fields( $config ) {
/** @var TranslationManagement $iclTranslationManagement */
global $iclTranslationManagement, $wpdb;
$setting_factory = $iclTranslationManagement->settings_factory();
$import = new WPML_Custom_Field_XML_Settings_Import( $wpdb,
$setting_factory, $config['wpml-config'] );
$import->run();
}
private static function parse_config_index( $config_all, $wpml_config, $index_sing, $index_plur ) {
if ( isset( $wpml_config[ $index_plur ][ $index_sing ] ) ) {
if ( isset( $wpml_config[ $index_plur ][ $index_sing ]['value'] ) ) { //single
$config_all[ $index_plur ][ $index_sing ][] = $wpml_config[ $index_plur ][ $index_sing ];
} else {
foreach ( (array) $wpml_config[ $index_plur ][ $index_sing ] as $cf ) {
$config_all[ $index_plur ][ $index_sing ][] = $cf;
}
}
}
return $config_all;
}
}