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
/
woocommerce-multilingual
/
classes
/
AdminNotices
:
ExportImport.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace WCML\AdminNotices; use WPML\FP\Fns; use WPML\FP\Logic; use WPML\FP\Obj; use WPML\FP\Str; use function WPML\FP\pipe; class ExportImport implements \IWPML_Backend_Action, \IWPML_DIC_Action { // Cascade of priorities before 10. // 7: WPML. // 8: WCML. // 9: WPML Export and Import. const PRIORITY = 8; const GROUP = 'wpml-import-notices'; const WPML_IMPORT_URL = 'https://wpml.org/documentation/related-projects/wpml-export-and-import/?utm_source=plugin&utm_medium=gui&utm_campaign=wpml-export-import&utm_term=admin-notice'; const WCML_URL = 'https://wpml.org/documentation/related-projects/woocommerce-multilingual/?utm_source=plugin&utm_medium=gui&utm_campaign=wcml&utm_term=admin-notice'; const NOTICE_CLASSES = [ 'wpml-import-notice', 'wpml-import-notice-from-wcml', ]; /** @var \WPML_Notices $notices */ private $wpmlNotices; public function __construct( \WPML_Notices $wpmlNotices ) { $this->wpmlNotices = $wpmlNotices; } public function add_hooks() { if ( defined( 'WPML_IMPORT_VERSION' ) ) { // WPML Export and Import will take care of this. return; } add_action( 'admin_init', [ $this, 'manageNotice' ], self::PRIORITY ); } public function manageNotice() { if ( ! self::isOnMigrationPages() ) { return; } $exportNotices = self::getExportNotices(); $importNotices = self::getImportNotices(); $noticeIds = array_keys( array_merge( $exportNotices, $importNotices ) ); array_walk( $exportNotices, function( $path, $id ) { $this->maybeAddNotice( $id, $path, $this->getExportMessage() ); } ); array_walk( $importNotices, function( $path, $id ) { $this->maybeAddNotice( $id, $path, $this->getImportMessage() ); } ); } /** * @param string $id * @param string $path * @param string $message */ private function maybeAddNotice( $id, $path, $message ) { if ( ! self::isOnPage( $path ) ) { return; } $notice = $this->wpmlNotices->get_new_notice( $id, $message, self::GROUP ); $notice->set_css_class_types( 'info' ); $notice->set_css_classes( self::NOTICE_CLASSES ); $notice->add_display_callback( [ \WCML\AdminNotices\ExportImport::class, 'isOnMigrationPages' ] ); $notice->set_dismissible( true ); $this->wpmlNotices->add_notice( $notice, true ); } /** * @return array */ private static function getExportNotices() { $notices = [ 'woocommerce-export' => '/edit.php?post_type=product&page=product_exporter', ]; if ( defined( 'PMWE_VERSION' ) ) { $notices['wp-all-export'] = '/admin.php?page=pmxe-admin-export'; } return $notices; } /** * @return array */ private static function getImportNotices() { $notices = [ 'woocommerce-import' => '/edit.php?post_type=product&page=product_importer', ]; if ( defined( 'PMWI_VERSION' ) ) { $notices['wp-all-import'] = '/admin.php?page=pmxi-admin-import'; } return $notices; } /** * @param string $path * * @return bool */ private static function isOnPage( $path ) { if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { return false; } if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return false; } if ( false !== strpos( $_SERVER['REQUEST_URI'], $path ) ) { return true; } return false; } /** * @return bool */ public static function isOnMigrationPages() { $exportNotices = self::getExportNotices(); $importNotices = self::getImportNotices(); $migrationPaths = array_values( array_merge( $exportNotices, $importNotices ) ); foreach ( $migrationPaths as $path ) { if ( false !== self::isOnPage( $path ) ) { return true; } } return false; } /** * @return string */ private function getExportMessage() { return sprintf( /* translators: %s is a link. */ __( 'Migrating your multilingual shop? With %s you can transfer your translated content to a new site, including cross-sells, up-sells, and product attributes.', 'woocommerce-multilingual' ), $this->getWpmlImportLink() ); } /** * @return string */ private function getImportMessage() { return sprintf( /* translators: %1$s and %2$s are both links. */ __( 'Looking to import your multilingual shop? With %1$s and %2$s in both your original and new site, you can export and import your translations automatically.', 'woocommerce-multilingual' ), $this->getWcmlLink(), $this->getWpmlImportLink() ); } /** * @return string */ private function getWpmlImportLink() { $url = self::WPML_IMPORT_URL; $title = __( 'WPML Export and Import', 'woocommerce-multilingual' ); return '<a class="wpml-external-link" href="' . esc_url( $url ) . '" title="' . esc_attr( $title ) . '" target="_blank">' . esc_html( $title ) . '</a>'; } /** * @return string */ private function getWcmlLink() { $url = self::WCML_URL; $title = __( 'WooCommerce Multilingual', 'woocommerce-multilingual' ); return '<a class="wpml-external-link" href="' . esc_url( $url ) . '" title="' . esc_attr( $title ) . '" target="_blank">' . esc_html( $title ) . '</a>'; } }