File: /var/www/delta/wp-content/plugins/sitepress-multilingual-cms/classes/ATE/API/ClonedSites/Loader.php
<?php
namespace WPML\TM\ATE\ClonedSites;
use WPML\Core\WP\App\Resources;
use WPML\FP\Fns;
use WPML\FP\Lst;
use WPML\FP\Obj;
use WPML\LIB\WP\User;
use WPML\TM\ATE\ClonedSites\Endpoints\GetCredits as ClonedSitesGetCredits;
use WPML\TM\ATE\ClonedSites\Endpoints\Copy;
use WPML\TM\ATE\ClonedSites\Endpoints\Move;
use WPML\TM\ATE\ClonedSites\Endpoints\CopyWithCredits;
use WPML\TM\ATE\ClonedSites\Lock;
use WPML\TM\Templates\Notices\AteLocked;
use WPML\LIB\WP\Hooks;
use WPML\UIPage;
use function WPML\Container\make;
use function WPML\FP\invoke;
use function WPML\FP\spreadArgs;
class Loader implements \IWPML_Backend_Action, \IWPML_DIC_Action {
/** @var Lock */
private $lock;
public function __construct( Lock $lock ) {
$this->lock = $lock;
}
public function add_hooks() {
$displayPlaceholder = function () {
if ( $this->shouldRender() ) {
echo '<div id="wpml-tm-ate-lock-notice"></div>';
}
};
Hooks::onAction( 'admin_notices' )
->then( $displayPlaceholder );
Hooks::onFilter( 'wpml_tm_dashboard_notices' )
->then( spreadArgs( Lst::append( $displayPlaceholder ) ) );
Hooks::onAction( 'admin_enqueue_scripts' )
->then( function () {
if ( $this->shouldRender() ) {
$fn = Resources::enqueueApp( 'ate-cloned-sites' );
$fn( $this->getData() );
}
} );
}
public function getData() {
$lockData = $this->lock->getLockData();
$urlCurrentlyRegisteredInAMS = Obj::prop( 'urlCurrentlyRegisteredInAMS', $lockData );
$urlUsedToMakeRequest = Obj::prop( 'urlUsedToMakeRequest', $lockData );
return [
'name' => 'ate_cloned_sites',
'data' => [
'hasRightToHandle' => User::isAdministrator(),
'endpoints' => [
'move' => Move::class,
'copy' => Copy::class,
'copyWithCredits' => CopyWithCredits::class,
'clonedSitesGetCredits' => ClonedSitesGetCredits::class,
],
'urls' => [
'toolsOnOldSite' => $urlCurrentlyRegisteredInAMS . '/wp-admin/' . UIPage::getTMATE() . '&widget_action=open_sites&force_code=1',
],
'settings' => [
'allowedModes' => apply_filters( 'wpml_ate_locked_allow_site_move_copy', [
'move' => true,
'copy' => true
] ),
'urlCurrentlyRegisteredInAMS' => $urlCurrentlyRegisteredInAMS,
'urlUsedToMakeRequest' => Obj::prop( 'urlUsedToMakeRequest', $lockData ),
'isOriginalSiteMovedToAnotherURL' => $lockData['identicalUrlBeforeMovement'],
],
],
];
}
private function shouldRender() {
return Lock::isLocked() && $this->shouldDisplayOnCurrentPage();
}
private function shouldDisplayOnCurrentPage() {
return $this->shouldDisplayOnScreen( [ 'dashboard' ] ) || $this->shouldDisplayOnPage( $this->getPages() );
}
/**
* @param array $screens
*
* @return bool
*/
private function shouldDisplayOnScreen( array $screens ) {
$currentScreen = \get_current_screen();
return $currentScreen instanceof \WP_Screen
&& in_array( $currentScreen->id, $screens );
}
/**
* @param array $pages
*
* @return bool
*/
private function shouldDisplayOnPage( array $pages ) {
return isset( $_GET['page'] ) && in_array( $_GET['page'], $pages );
}
/**
* @return array|string[]
*/
private function getPages() {
$pages = [
WPML_PLUGIN_FOLDER . '/menu/languages.php',
WPML_PLUGIN_FOLDER . '/menu/theme-localization.php',
WPML_PLUGIN_FOLDER . '/menu/settings.php',
WPML_PLUGIN_FOLDER . '/menu/support.php',
WPML_TM_FOLDER . '/menu/settings',
WPML_TM_FOLDER . '/menu/main.php',
WPML_TM_FOLDER . '/menu/translations-queue.php',
WPML_TM_FOLDER . '/menu/string-translation.php',
WPML_TM_FOLDER . '/menu/settings.php',
];
return $pages;
}
}