Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
wpml-string-translation
/
classes
/
upgrade
/
Command
:
MigrateMultilingualWidgets.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace WPML\ST\Upgrade\Command; use WPML\Element\API\Languages; use WPML\FP\Cast; use WPML\FP\Fns; use WPML\FP\Logic; use WPML\FP\Lst; use WPML\FP\Obj; use WPML\FP\Relation; use WPML\FP\Str; use WPML\LIB\WP\Option; use WPML\ST\MO\File\ManagerFactory; use function WPML\FP\partial; use function WPML\FP\pipe; class MigrateMultilingualWidgets implements \IWPML_St_Upgrade_Command { public function run() { $multiLingualWidgets = Option::getOr( 'widget_text_icl', [] ); $multiLingualWidgets = array_filter( $multiLingualWidgets, Logic::complement( 'is_scalar' ) ); if ( ! $multiLingualWidgets ) { return true; } $textWidgets = Option::getOr( 'widget_text', [] ); if ( $textWidgets ) { $theHighestTextWidgetId = max( Obj::keys( $textWidgets ) ); } else { $theHighestTextWidgetId = 0; $textWidgets['_multiwidget'] = 1; } $transformWidget = pipe( Obj::renameProp( 'icl_language', 'wpml_language' ), Obj::over( Obj::lensProp( 'wpml_language' ), Logic::ifElse( Relation::equals( 'multilingual' ), Fns::always( 'all' ), Fns::identity() ) ) ); $oldToNewIdMap = []; foreach ( $multiLingualWidgets as $id => $widget ) { $newId = ++ $theHighestTextWidgetId; $oldToNewIdMap[ $id ] = $newId; $textWidgets = Obj::assoc( $newId, $transformWidget( $widget ), $textWidgets ); } Option::update( 'widget_text', $textWidgets ); Option::delete( 'widget_text_icl' ); $sidebars = wp_get_sidebars_widgets(); $sidebars = $this->convertSidebarsConfig( $sidebars, $oldToNewIdMap ); wp_set_sidebars_widgets( $sidebars ); $this->convertWidgetsContentStrings(); return true; } private function convertSidebarsConfig( $sidebars, array $oldToNewIdMap ) { $isMultilingualWidget = Str::startsWith( 'text_icl' ); $extractIdNumber = pipe( Str::split( '-' ), Lst::last(), Cast::toInt() ); $mapWidgetId = Logic::ifElse( $isMultilingualWidget, pipe( $extractIdNumber, Obj::prop( Fns::__, $oldToNewIdMap ), Str::concat( 'text-' ) ), Fns::identity() ); return Fns::map( Fns::map( $mapWidgetId ), $sidebars ); } private function convertWidgetsContentStrings() { global $wpdb; $wpdb->query(" UPDATE {$wpdb->prefix}icl_strings SET `name` = CONCAT( 'widget body - ', MD5(`value`)) WHERE `name` LIKE 'widget body - text_icl%' "); $locales = Fns::map( Languages::getWPLocale(), Languages::getSecondaries() ); Fns::map( partial( [ ManagerFactory::create(), 'add' ], 'Widgets' ), $locales ); } public function run_ajax() { } public function run_frontend() { } public static function get_command_id() { return __CLASS__; } }