/var/www/html_fr/wp-content/plugins/yaymail/src/Migrations/MainMigration.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
namespace YayMail\Migrations;

use 
YayMail\Migrations\MigrationHelper;
use 
YayMail\Utils\SingletonTrait;
use 
YayMail\Utils\Logger;

/**
 * Database migration Main class
 */
class MainMigration {
    use 
SingletonTrait;

    private 
$logger;

    private 
$old_version;
    private 
$new_version;

    const 
CORE_MIGRATIONS = [
        
'4.0.0' => '\YayMail\Migrations\Versions\Ver_4_0_0',
        
'4.0.7' => '\YayMail\Migrations\Versions\Ver_4_0_7',
        
'4.1.0' => '\YayMail\Migrations\Versions\Ver_4_1_0',
    ];

    private function 
__construct() {
        if ( ! 
defined'YAYMAIL_VERSION' ) ) {
            return;
        }
        
$this->logger      = new Logger();
        
$this->new_version MigrationHelper::format_version_numberYAYMAIL_VERSION );

        
$old_version get_option'yaymail_version' );
        
// YayMail's version from db
        
$this->old_version MigrationHelper::format_version_number$old_version ?? '3.9.9' );
    }

    public function 
migrate$skip_check_migration false ) {
        
$args = [
            
'post_type'      => 'yaymail_template',
            
'post_status'    => 'any',
            
'posts_per_page' => -1,
        ];

        
$query = new \WP_Query$args );

        
$has_yaymail_template $query->have_posts();
        if ( ! 
$skip_check_migration && ( empty( $this->old_version ) && ! $has_yaymail_template ) ) {
            
$this->logger->log'YayMail is freshly installed, no migrations needed!' );
            return 
false;
        }

        
$this->logger->log'***** Start migration transaction *****' );
        global 
$wpdb;
        
$wpdb->query'START TRANSACTION' );

        try {
            
$core_migrations self::CORE_MIGRATIONS;
            
$this->logger->log'Start core migrations' );

            if ( 
$skip_check_migration ) {
                
$filtered_migrations $core_migrations;
            } else {
                
$filtered_migrations MigrationHelper::filter_migrations$core_migrations$this->old_version$this->new_version );
            }

            if ( ! empty( 
$filtered_migrations ) ) {
                
MigrationHelper::perform_migrations$filtered_migrations$skip_check_migration );
                
update_option'yaymail_version'$this->new_version );
                
wp_cache_delete'yaymail_version''options' );
            }

            
$this->logger->log'Finish core migrations' );

            
do_action'yaymail_run_addon_migrations' );
            
$wpdb->query'COMMIT' );

            return 
true;
        } catch ( 
\Exception $e ) {
            
$wpdb->query'ROLLBACK' );
            
$this->logger->log"[Migration failed] {$e->getMessage()});
            return 
false;
        } finally {
            
$this->logger->log'***** End migration transaction *****' );
        }
//end try
    
}
}