first commit
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace WPML\TM\ATE;
|
||||
|
||||
use WPML\Element\API\Languages;
|
||||
use WPML\FP\Fns;
|
||||
use WPML\FP\Logic;
|
||||
use WPML\FP\Lst;
|
||||
use WPML\FP\Maybe;
|
||||
use WPML\FP\Obj;
|
||||
use WPML\FP\Relation;
|
||||
use WPML\LIB\WP\Hooks;
|
||||
use WPML\LIB\WP\User;
|
||||
use WPML\TM\API\ATE\CachedLanguageMappings;
|
||||
use WPML\TM\API\ATE\LanguageMappings;
|
||||
use WPML\UIPage;
|
||||
use function WPML\FP\pipe;
|
||||
use function WPML\FP\spreadArgs;
|
||||
use WPML\Setup\Option;
|
||||
|
||||
class StatusBar {
|
||||
|
||||
public static function add_hooks() {
|
||||
if (
|
||||
User::getCurrent()->has_cap( \WPML_Manage_Translations_Role::CAPABILITY )
|
||||
&& Option::shouldTranslateEverything()
|
||||
) {
|
||||
Hooks::onAction( 'admin_bar_menu', 999 )
|
||||
->then( spreadArgs( [ self::class, 'add' ] ) );
|
||||
}
|
||||
}
|
||||
|
||||
public static function add( \WP_Admin_Bar $adminBar ) {
|
||||
$iconurl = "'" . ICL_PLUGIN_URL . '/res/img/icon16.png' . "'";
|
||||
|
||||
$iconspan = '<span class="" style="
|
||||
float:left; width:22px !important; height:22px !important;
|
||||
margin-left: 5px !important; margin-top: 5px !important;
|
||||
background-image:url(' . $iconurl . ');"></span>';
|
||||
|
||||
$title = '<div id="wpml-status-bar-count" style="display:inline-block"></div>';
|
||||
$adminBar->add_node(
|
||||
[
|
||||
'parent' => false,
|
||||
'id' => 'ate-status-bar',
|
||||
'title' => $iconspan . $title,
|
||||
'href' => false
|
||||
]
|
||||
);
|
||||
$adminBar->add_node(
|
||||
[
|
||||
'parent' => 'ate-status-bar',
|
||||
'id' => 'ate-status-bar-content',
|
||||
'meta' => [ 'html' => '<div id="wpml-ate-status-bar-content"></div>' ],
|
||||
'href' => false,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public static function getNotices() {
|
||||
return self::getNoticeAboutIneligibleLanguages();
|
||||
}
|
||||
|
||||
private static function getNoticeAboutIneligibleLanguages() {
|
||||
if ( ! \WPML_TM_ATE_Status::is_enabled_and_activated() ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$isNotDontMap = pipe( Obj::pathOr( null, [ 'mapping', 'targetId' ] ), Relation::equals( LanguageMappings::IGNORE_MAPPING_ID ), Logic::not() );
|
||||
$isDefault = Relation::propEq( 'code', Languages::getDefaultCode() );
|
||||
$findDefault = Fns::memorize( Lst::find( $isDefault ) );
|
||||
|
||||
$supportedLanguages = Maybe::of( Languages::getActive() )
|
||||
->map( CachedLanguageMappings::withCanBeTranslatedAutomatically() )
|
||||
->map( Fns::filter( Obj::prop( 'can_be_translated_automatically' ) ) )
|
||||
->reject( Logic::isEmpty() )
|
||||
->getOrElse([]);
|
||||
|
||||
$createNoticeWithText = function ( $text, $type = 'important', $isDefault = false ) use ( $supportedLanguages ) {
|
||||
return [
|
||||
[
|
||||
'id' => 'unsupportedLanguages',
|
||||
'text' => $text,
|
||||
'type' => $type,
|
||||
'href' => add_query_arg( [ 'trop' => 1 ] , UIPage::getLanguages() ),
|
||||
'target' => '_self',
|
||||
'_hasSupportedLanguages' => ! $isDefault && count( $supportedLanguages ) > 1,
|
||||
// We consider that we support Automatic Translation when default and at least 1 more language is supported.
|
||||
]
|
||||
];
|
||||
};
|
||||
|
||||
$createNoticeForDefaultLanguage = function ( $defaultLanguage ) use ( $createNoticeWithText ) {
|
||||
$txt = sprintf(
|
||||
__( "Your default language, %s, must be mapped to a supported language in order to use automatic translation.", 'wpml-translation-management' ),
|
||||
Obj::prop( 'english_name', $defaultLanguage )
|
||||
);
|
||||
|
||||
return $createNoticeWithText( $txt, 'important', true );
|
||||
};
|
||||
|
||||
$createNoticeForSecondaryLanguages = function ( $languages ) use ( $createNoticeWithText ) {
|
||||
if ( Lst::find( Logic::complement( CachedLanguageMappings::hasTheSameMappingAsDefaultLang() ), $languages ) ) {
|
||||
$txt = sprintf(
|
||||
__( "The following language(s) on your site must be mapped to a supported language in order to use automatic translation: %s", 'wpml-translation-management' ),
|
||||
Lst::join( ', ', Lst::pluck( 'english_name', $languages ) )
|
||||
);
|
||||
|
||||
return $createNoticeWithText( $txt );
|
||||
}
|
||||
|
||||
return $createNoticeWithText( self::getNoticeMsgForLanguageWithTheSameMappingAsDefault( $languages ), 'info' );
|
||||
};
|
||||
|
||||
$createNotice = Logic::ifElse( $findDefault, pipe( $findDefault, $createNoticeForDefaultLanguage ), $createNoticeForSecondaryLanguages );
|
||||
|
||||
return Maybe::of( Languages::getActive() )
|
||||
->map( CachedLanguageMappings::withCanBeTranslatedAutomatically() )
|
||||
->map( Fns::reject( Obj::prop( 'can_be_translated_automatically' ) ) )
|
||||
->reject( Logic::isEmpty() )
|
||||
->map( CachedLanguageMappings::withMapping() )
|
||||
->map( Fns::filter( Logic::anyPass( [ $isDefault, $isNotDontMap ] ) ) )
|
||||
->reject( Logic::isEmpty() )
|
||||
->map( $createNotice )
|
||||
->getOrElse( [] );
|
||||
}
|
||||
|
||||
public static function getNoticeMsgForLanguageWithTheSameMappingAsDefault( $languages ) {
|
||||
return sprintf(
|
||||
__( "It's not possible to use automatic translation with your current language setup, as the following languages are mapped to the same language as the default: %s", 'wpml-translation-management' ),
|
||||
Lst::join( ', ', Lst::pluck( 'english_name', $languages ) )
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user