HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux bsx-1-dev 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb 9 10:15:05 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/memberpress/app/controllers/MeprMigratorCtrl.php
<?php
defined('ABSPATH') || exit;

class MeprMigratorCtrl extends MeprBaseCtrl
{
    /**
     * Loads the hooks for this controller.
     */
    public function load_hooks()
    {
        add_action('admin_enqueue_scripts', 'MeprMigratorCtrl::admin_enqueue_scripts');
        add_action('mpcs_admin_options_tab', 'MeprMigratorCtrl::add_options_tab');
        add_action('mpcs_admin_options_tab_content', 'MeprMigratorCtrl::add_options_tab_content');
        add_action('wp_ajax_mepr_migrator_migrate', 'MeprMigratorCtrl::migrate');
        add_action('admin_notices', 'MeprMigratorCtrl::admin_notices');
    }

    /**
     * Enqueue admin scripts.
     */
    public static function admin_enqueue_scripts()
    {
        if (MeprMigratorHelper::is_migrator_page()) {
            $migrators = MeprMigratorHelper::get_usable_course_migrators();
            if ($migrators) {
                wp_enqueue_style('memberpress-migrator', MEPR_CSS_URL . '/migrator.css', [], MEPR_VERSION);
                wp_enqueue_script('memberpress-migrator', MEPR_JS_URL . '/migrator.js', ['jquery'], MEPR_VERSION, true);

                if (in_array(MeprMigratorLearnDash::KEY, $migrators, true)) {
                    wp_enqueue_script('memberpress-migrator-learndash', MEPR_JS_URL . '/migrator.learndash.js', ['jquery', 'memberpress-migrator'], MEPR_VERSION, true);
                }

                wp_localize_script('memberpress-migrator', 'MeprMigratorL10n', [
                    'ajax_url'           => admin_url('admin-ajax.php'),
                    'migrate_nonce'      => wp_create_nonce('mepr_migrator_migrate'),
                    'leave_are_you_sure' => __('The migration has not yet completed, are you sure you want to leave this page?', 'memberpress'),
                    'migration_complete' => __('Migration complete', 'memberpress'),
                ]);
            }
        }
    }

    /**
     * Adds the Migrator tab to the Courses Settings within MP Settings.
     */
    public static function add_options_tab()
    {
        ?>
        <li><a data-id="migrator"><?php esc_html_e('Migrator', 'memberpress'); ?></a></li>
        <?php
    }

    /**
     * Adds the content of the Migrator tab.
     */
    public static function add_options_tab_content()
    {
        MeprView::render('/admin/options/courses_migrator');
    }

    /**
     * Handles the Ajax request to run a migration.
     */
    public static function migrate()
    {
        $data = MeprUtils::get_json_request_data('mepr_migrator_migrate');

        if (!isset($data['migrator'])) {
            wp_send_json_error(__('Bad request.', 'memberpress'));
        }

        $migrator = null;

        switch ($data['migrator']) {
            case MeprMigratorLearnDash::KEY:
                $migrator = new MeprMigratorLearnDash();
                break;
        }

        if (!$migrator instanceof MeprMigrator) {
            wp_send_json_error(__('Migrator not found', 'memberpress'));
        }

        try {
            $migrator->migrate($data);
        } catch (Exception $e) {
            wp_send_json_error($e->getMessage());
        }
    }

    /**
     * Display admin notices.
     */
    public static function admin_notices()
    {
        global $pagenow, $typenow;

        if (
            !MeprUtils::is_logged_in_and_an_admin() ||
            get_option('mepr_dismiss_notice_learndash_migrator') ||
            $pagenow !== 'edit.php' ||
            $typenow !== 'mpcs-course'
        ) {
            return;
        }

        if (
            MeprMigratorHelper::has_completed_migration(MeprMigratorLearnDash::KEY) ||
            !MeprMigratorLearnDash::is_migration_possible()
        ) {
            update_option('mepr_dismiss_notice_learndash_migrator', true);
            return;
        }
        ?>
    <div class="notice notice-info is-dismissible mepr-learndash-migrator-notice mepr-notice-dismiss-permanently" data-notice="learndash_migrator">
      <div>
        <img src="<?php echo esc_url(MEPR_IMAGES_URL . '/info-icon.jpg'); ?>" alt="" style="width: 30px; height: 30px;">
        <div>
          <p class="mepr-learndash-migrator-notice-heading"><?php esc_html_e('Migrate from LearnDash to MemberPress Courses?', 'memberpress'); ?></p>
          <p><?php esc_html_e('We noticed that you have some LearnDash courses that could be migrated to MemberPress Courses automatically. Click the button below to get started.', 'memberpress'); ?></p>
          <p class="mepr-learndash-migrator-notice-button-row">
            <a href="<?php echo esc_url(admin_url('admin.php?page=memberpress-courses-options&courses-tab=migrator')); ?>" class="button button-primary"><?php esc_html_e('Let\'s Do It', 'memberpress'); ?></a>
            <a href="#" class="mepr-dismiss-this-notice"><?php esc_html_e('Dismiss', 'memberpress'); ?></a>
          </p>
        </div>
      </div>
    </div>
        <?php
    }
}