Passed
Push — master ( 96c122...1f45e8 )
by Paul
07:12 queued 03:31
created

Upgrade_4_0_2::protectMetaKeys()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 12
ccs 0
cts 12
cp 0
crap 2
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Modules\Upgrader;
4
5
use GeminiLabs\SiteReviews\Application;
6
use GeminiLabs\SiteReviews\Database\OptionManager;
7
use GeminiLabs\SiteReviews\Defaults\CreateReviewDefaults;
8
use GeminiLabs\SiteReviews\HelperTraits\Arr;
9
10
class Upgrade_4_0_2
11
{
12
    use Arr;
13
14
    public function __construct()
15
    {
16
        $this->migrateSettings();
17
        $this->protectMetaKeys();
18
        $this->deleteSessions();
19
        delete_transient(Application::ID.'_cloudflare_ips');
20
    }
21
22
    /**
23
     * @return void
24
     */
25
    public function deleteSessions()
26
    {
27
        global $wpdb;
28
        $wpdb->query("
29
            DELETE
30
            FROM {$wpdb->options}
31
            WHERE option_name LIKE '_glsr_session%'
32
        ");
33
    }
34
35
    /**
36
     * @return void
37
     */
38
    public function migrateSettings()
39
    {
40
        if ($settings = get_option(OptionManager::databaseKey(3))) {
41
            $multilingual = 'yes' == $this->dataGet($settings, 'settings.general.support.polylang')
42
                ? 'polylang'
43
                : '';
44
            $settings = $this->dataSet($settings, 'settings.general.multilingual', $multilingual);
45
            $settings = $this->dataSet($settings, 'settings.general.rebusify', 'no');
46
            $settings = $this->dataSet($settings, 'settings.general.rebusify_email', '');
47
            $settings = $this->dataSet($settings, 'settings.general.rebusify_serial', '');
48
            $settings = $this->dataSet($settings, 'settings.reviews.name.format', '');
49
            $settings = $this->dataSet($settings, 'settings.reviews.name.initial', '');
50
            $settings = $this->dataSet($settings, 'settings.submissions.blacklist.integration', '');
51
            $settings = $this->dataSet($settings, 'settings.submissions.limit', '');
52
            $settings = $this->dataSet($settings, 'settings.submissions.limit_whitelist.email', '');
53
            $settings = $this->dataSet($settings, 'settings.submissions.limit_whitelist.ip_address', '');
54
            $settings = $this->dataSet($settings, 'settings.submissions.limit_whitelist.username', '');
55
            unset($settings['settings']['general']['support']);
56
            update_option(OptionManager::databaseKey(4), $settings);
57
        }
58
    }
59
60
    /**
61
     * @return void
62
     */
63
    public function protectMetaKeys()
64
    {
65
        global $wpdb;
66
        $keys = array_keys(glsr(CreateReviewDefaults::class)->defaults());
67
        $keys = implode("','", $keys);
68
        $postType = Application::POST_TYPE;
69
        $wpdb->query("
70
            UPDATE {$wpdb->postmeta} pm
71
            INNER JOIN {$wpdb->posts} p ON p.id = pm.post_id
72
            SET pm.meta_key = CONCAT('_', pm.meta_key)
73
            WHERE pm.meta_key IN ('{$keys}')
74
            AND p.post_type = '{$postType}'
75
        ");
76
    }
77
}
78