CachePlugins.php
1 week ago
CurrencySwitcherUseTwigTemplate.php
1 week ago
ExportImport.php
1 week ago
MultiCurrencyMissing.php
1 week ago
RestrictedScreens.php
1 week ago
Review.php
1 week ago
TranslationControlMovedNotice.php
1 week ago
WizardNotice.php
1 week ago
ExportImport.php
156 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\AdminNotices; |
| 4 | |
| 5 | class ExportImport implements \IWPML_Backend_Action, \IWPML_DIC_Action { |
| 6 | |
| 7 | const PRIORITY = 8; |
| 8 | const GROUP = 'wpml-import-notices'; |
| 9 | |
| 10 | 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'; |
| 11 | const WCML_URL = 'https://wpml.org/documentation/related-projects/woocommerce-multilingual/?utm_source=plugin&utm_medium=gui&utm_campaign=wcml&utm_term=admin-notice'; |
| 12 | |
| 13 | const NOTICE_CLASSES = [ |
| 14 | 'wpml-import-notice', |
| 15 | 'wpml-import-notice-from-wcml', |
| 16 | ]; |
| 17 | |
| 18 | private $wpmlNotices; |
| 19 | |
| 20 | public function __construct( \WPML_Notices $wpmlNotices ) { |
| 21 | $this->wpmlNotices = $wpmlNotices; |
| 22 | } |
| 23 | |
| 24 | public function add_hooks() { |
| 25 | if ( defined( 'WPML_IMPORT_VERSION' ) ) { |
| 26 | return; |
| 27 | } |
| 28 | |
| 29 | add_action( 'admin_init', [ $this, 'manageNotice' ], self::PRIORITY ); |
| 30 | } |
| 31 | |
| 32 | public function manageNotice() { |
| 33 | if ( ! self::isOnMigrationPages() ) { |
| 34 | return; |
| 35 | } |
| 36 | $exportNotices = self::getExportNotices(); |
| 37 | $importNotices = self::getImportNotices(); |
| 38 | |
| 39 | array_walk( $exportNotices, function( $path, $id ) { |
| 40 | $this->maybeAddNotice( |
| 41 | $id, |
| 42 | $path, |
| 43 | $this->getExportMessage() |
| 44 | ); |
| 45 | } ); |
| 46 | array_walk( $importNotices, function( $path, $id ) { |
| 47 | $this->maybeAddNotice( |
| 48 | $id, |
| 49 | $path, |
| 50 | $this->getImportMessage() |
| 51 | ); |
| 52 | } ); |
| 53 | } |
| 54 | |
| 55 | private function maybeAddNotice( $id, $path, $message ) { |
| 56 | if ( ! self::isOnPage( $path ) ) { |
| 57 | return; |
| 58 | } |
| 59 | $notice = $this->wpmlNotices->get_new_notice( |
| 60 | $id, |
| 61 | $message, |
| 62 | self::GROUP |
| 63 | ); |
| 64 | $notice->set_css_class_types( 'info' ); |
| 65 | $notice->set_css_classes( self::NOTICE_CLASSES ); |
| 66 | $notice->add_display_callback( [ \WCML\AdminNotices\ExportImport::class, 'isOnMigrationPages' ] ); |
| 67 | $notice->set_dismissible( true ); |
| 68 | $this->wpmlNotices->add_notice( $notice, true ); |
| 69 | } |
| 70 | |
| 71 | private static function getExportNotices() { |
| 72 | $notices = [ |
| 73 | 'woocommerce-export' => '/edit.php?post_type=product&page=product_exporter', |
| 74 | ]; |
| 75 | if ( defined( 'PMWE_VERSION' ) ) { |
| 76 | $notices['wp-all-export'] = '/admin.php?page=pmxe-admin-export'; |
| 77 | } |
| 78 | return $notices; |
| 79 | } |
| 80 | |
| 81 | private static function getImportNotices() { |
| 82 | $notices = [ |
| 83 | 'woocommerce-import' => '/edit.php?post_type=product&page=product_importer', |
| 84 | ]; |
| 85 | if ( defined( 'PMWI_VERSION' ) ) { |
| 86 | $notices['wp-all-import'] = '/admin.php?page=pmxi-admin-import'; |
| 87 | } |
| 88 | return $notices; |
| 89 | } |
| 90 | |
| 91 | private static function isOnPage( $path ) { |
| 92 | if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { |
| 93 | return false; |
| 94 | } |
| 95 | |
| 96 | if ( |
| 97 | defined( 'DOING_AJAX' ) |
| 98 | && wp_doing_ajax() |
| 99 | ) { |
| 100 | return false; |
| 101 | } |
| 102 | |
| 103 | if ( false !== strpos( $_SERVER['REQUEST_URI'], $path ) ) { |
| 104 | return true; |
| 105 | } |
| 106 | |
| 107 | return false; |
| 108 | } |
| 109 | |
| 110 | public static function isOnMigrationPages() { |
| 111 | $exportNotices = self::getExportNotices(); |
| 112 | $importNotices = self::getImportNotices(); |
| 113 | $migrationPaths = array_values( array_merge( $exportNotices, $importNotices ) ); |
| 114 | foreach ( $migrationPaths as $path ) { |
| 115 | if ( false !== self::isOnPage( $path ) ) { |
| 116 | return true; |
| 117 | } |
| 118 | } |
| 119 | |
| 120 | return false; |
| 121 | } |
| 122 | |
| 123 | private function getExportMessage() { |
| 124 | return sprintf( |
| 125 | /* translators: %s is a link. */ |
| 126 | esc_html__( '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' ), |
| 127 | $this->getWpmlImportLink() |
| 128 | ); |
| 129 | } |
| 130 | |
| 131 | private function getImportMessage() { |
| 132 | return sprintf( |
| 133 | /* translators: %1$s and %2$s are both links. */ |
| 134 | esc_html__( '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' ), |
| 135 | $this->getWcmlLink(), |
| 136 | $this->getWpmlImportLink() |
| 137 | ); |
| 138 | } |
| 139 | |
| 140 | private function getWpmlImportLink() { |
| 141 | $url = self::WPML_IMPORT_URL; |
| 142 | $title = esc_html__( 'WPML Export and Import', 'woocommerce-multilingual' ); |
| 143 | return '<a class="wpml-external-link" href="' . esc_url( $url ) . '" title="' . esc_attr( $title ) . '" target="_blank">' |
| 144 | . esc_html( $title ) |
| 145 | . '</a>'; |
| 146 | } |
| 147 | |
| 148 | private function getWcmlLink() { |
| 149 | $url = self::WCML_URL; |
| 150 | $title = esc_html__( 'WPML Multilingual & Multicurrency for WooCommerce', 'woocommerce-multilingual' ); |
| 151 | return '<a class="wpml-external-link" href="' . esc_url( $url ) . '" title="' . esc_attr( $title ) . '" target="_blank">' |
| 152 | . esc_html( $title ) |
| 153 | . '</a>'; |
| 154 | } |
| 155 | |
| 156 | } |