backgroundTaskRepository = $backgroundTaskRepository; } public function add_hooks() { if ( wpml_is_ajax() ) { // Prevent loading this for ajax calls. // All tasks of this class are not relevant for ajax requests. Currently it's loaded by the root plugin.php // which do not separate between ajax and non-ajax calls and loads this whenever is_admin() is true. // Problem: ALL ajax calls return true for is_admin() - also on the frontend and for non logged-in users. // TODO: Remove once wpmltm-4351 is done. return; } if ( UIPage::isTMJobs( $_GET ) ) { return; } $displayBackgroundTasks = $this->backgroundTaskRepository->getCountRunnableTasks() > 0; $maybeLoadStatusBarAndATEConsole = Fns::tap( function ( $data ) use ( $displayBackgroundTasks ) { if ( \WPML_TM_ATE_Status::is_enabled_and_activated() || Settings::pathOr( false, [ 'translation-management', 'doc_translation_method' ] ) === ICL_TM_TMETHOD_ATE || $displayBackgroundTasks ) { StatusBar::add_hooks( $data['data']['hasAutomaticJobsInProgress'], $data['data']['needsReviewCount'], $displayBackgroundTasks ); Hooks::onAction( 'in_admin_header' ) ->then( [ self::class, 'showAteConsoleContainer' ] ); } } ); Hooks::onAction( 'wp_loaded' ) ->then( [ self::class, 'getData' ] ) ->then( $maybeLoadStatusBarAndATEConsole ) ->then( Resources::enqueueApp( 'ate-jobs-sync' ) ) ->then( Fns::always( make( \WPML_TM_Scripts_Factory::class ) ) ) ->then( invoke( 'localize_script' )->with( 'wpml-ate-jobs-sync-ui' ) ); Hooks::onFilter( 'wpml_tm_get_wpml_auto_translate_container' ) ->then( [ self::class, 'getWpmlAutoTranslateContainer' ] ); } public static function getData() { $jobsToSync = Jobs::getJobsToSync(); $anyJobsExist = Jobs::isThereJob(); $ateTab = admin_url( UIPage::getTMATE() ); $isAteActive = \WPML_TM_ATE_Status::is_enabled_and_activated(); $defaultLanguage = Languages::getDefaultCode(); $getLanguages = pipe( Languages::class . '::getActive', CachedLanguageMappings::withCanBeTranslatedAutomatically(), CachedLanguageMappings::withMapping(), Fns::map( Obj::over( Obj::lensProp( 'mapping' ), Obj::prop( 'targetCode' ) ) ), Fns::map( Obj::addProp( 'is_default', Relation::propEq( 'code', $defaultLanguage ) ) ), Obj::values() ); return [ 'name' => 'ate_jobs_sync', 'data' => [ 'endpoints' => self::getEndpoints(), 'urls' => self::getUrls( $ateTab ), 'jobIdPlaceHolder' => self::JOB_ID_PLACEHOLDER, 'languages' => $isAteActive ? $getLanguages() : [], 'isTranslationManager' => User::canManageTranslations(), 'jobsToSync' => $jobsToSync, 'anyJobsExist' => $anyJobsExist, 'totalJobsCount' => Jobs::getTotal(), 'needsReviewCount' => count( Jobs::getJobsWithStatus( [ ICL_TM_NEEDS_REVIEW ] ) ), 'shouldTranslateEverything' => ! Option::isPausedTranslateEverything() && Option::shouldTranslateEverything() && ! TranslateEverything::isEverythingProcessed( true ), 'isPausedTranslateEverything' => Option::isPausedTranslateEverything() ? 1 : 0, 'isAutomaticTranslations' => Option::shouldTranslateEverything(), 'hasAutomaticJobsInProgress' => Logic::isNotEmpty( Fns::filter( Obj::prop( 'automatic' ), $jobsToSync ) ), 'isSyncRequired' => count( $jobsToSync ), 'strings' => self::getStrings(), 'ateConsole' => self::getAteData( Lst::pluck( 'ateJobId', $jobsToSync ) ), 'isAteActive' => $isAteActive, 'editorMode' => Settings::pathOr( false, [ 'translation-management', 'doc_translation_method' ] ), ], ]; } /** * @return string */ public static function getNotEnoughCreditPopup() { $isTranslationManager = User::canManageTranslations(); $content = $isTranslationManager ? __( "There is an issue with automatic translation that needs your attention.", 'wpml-translation-management' ) : __( " There is an issue with automatic translation that needs attention from a translation manager.", 'wpml-translation-management' ); $fix = __( 'Fix it to continue translating automatically', 'wpml-translation-management' ); $primaryButton = $isTranslationManager ? '' : ''; $translate = __( 'Translate content myself', 'wpml-translation-management' ); $secondaryButton = UIPage::isTMDashboard( $_GET ) || ! $isTranslationManager ? '' : ''; return '
' . $content . '
' . $primaryButton . $secondaryButton . '