'ADD', 'name' => 'gettext_context', 'type' => 'TEXT', 'null' => false, 'after' => 'status', ); } $columns_definitions[ ] = array( 'action' => 'ADD', 'name' => 'domain_name_context_md5', 'type' => 'VARCHAR(32)', 'charset' => 'LATIN1', 'null' => false, 'default' => '', 'after' => 'gettext_context', ); if ( icl_alter_table_columns( 'icl_strings', $columns_definitions ) ) { if ( icl_table_index_exists( 'icl_strings', 'context_name' ) ) { if ( icl_drop_table_index( 'icl_strings', 'context_name' ) ) { } } if ( icl_table_index_exists( 'icl_strings', 'context_name_gettext_context' ) ) { if ( icl_drop_table_index( 'icl_strings', 'context_name_gettext_context' ) ) { } } } update_domain_name_context( ); $index_definition = array( 'name' => 'uc_domain_name_context_md5', 'type' => 'BTREE', 'choice' => 'UNIQUE', 'columns' => array( 'domain_name_context_md5' ), ); icl_create_table_index( 'icl_strings', $index_definition ); } if ( icl_table_column_exists( 'icl_strings', 'gettext_context_md5' ) ) { $columns_definitions = array( array( 'action' => 'DROP', 'name' => 'gettext_context_md5', ) ); icl_alter_table_columns( 'icl_strings', $columns_definitions); } } function update_domain_name_context( ) { global $wpdb; $results = $wpdb->get_results("SELECT id, name, value, context as domain, gettext_context FROM {$wpdb->prefix}icl_strings WHERE id > 0"); $domain_name_context_md5_used = array( ); $duplicate_count = 0; foreach( $results as $string ) { $domain_name_context_md5 = md5( $string->domain . $string->name . $string->gettext_context ); while ( in_array( $domain_name_context_md5, $domain_name_context_md5_used ) ) { /* We need to handle duplicates because previous versions of WPML didn't strictly * disallow them when handling gettext contexts. * This solution doesn't solve the problem because there is no solution * It just stops any DB errors about duplicate keys. */ $duplicate_count++; $domain_name_context_md5 = md5( $string->domain . $string->name . 'duplicate-' . $duplicate_count . '-' . $string->gettext_context ); } $domain_name_context_md5_used[ ] = $domain_name_context_md5; $data = array( 'domain_name_context_md5' => $domain_name_context_md5, ); $where = array( 'id' => $string->id ); $wpdb->update( $wpdb->prefix . 'icl_strings', $data, $where ); } } update_gettext_context_schema( );