PluginProbe
Packeta / trunk
Packeta vtrunk
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Uninstaller.php

Uninstaller.php in Packeta trunk, at src/Packetery/Module/Uninstaller.php

132 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Packetery\Module;
6
7 use Packetery\Module\Carrier\OptionPrefixer;
8 use Packetery\Module\Framework\WpAdapter;
9 use Packetery\Module\Options\OptionNames;
10
11 class Uninstaller {
12
13 /**
14 * @var Options\Repository
15 */
16 private $optionsRepository;
17
18 /**
19 * @var WpdbAdapter
20 */
21 private $wpdbAdapter;
22
23 /**
24 * @var WpAdapter
25 */
26 private $wpAdapter;
27
28 public function __construct(
29 Options\Repository $optionsRepository,
30 WpdbAdapter $wpdbAdapter,
31 WpAdapter $wpAdapter
32 ) {
33 $this->optionsRepository = $optionsRepository;
34 $this->wpdbAdapter = $wpdbAdapter;
35 $this->wpAdapter = $wpAdapter;
36 }
37
38 /**
39 * Uninstalls plugin and drops custom database table.
40 */
41 public function uninstall(): void {
42 if ( defined( 'PACKETERY_DEBUG' ) && constant( 'PACKETERY_DEBUG' ) === true ) {
43 return;
44 }
45 if ( defined( 'PACKETERY_REMOVE_ALL_DATA' ) && constant( 'PACKETERY_REMOVE_ALL_DATA' ) === true ) {
46 if ( $this->wpAdapter->isMultisite() ) {
47 $this->cleanUpForMultisite();
48 } else {
49 $this->cleanUp();
50 }
51 }
52 }
53
54 /**
55 * Drops all plugin tables, options and transients when Multisite is enabled.
56 */
57 private function cleanUpForMultisite(): void {
58 $sites = Plugin::getSites();
59
60 foreach ( $sites as $site ) {
61 $this->wpAdapter->switchToBlog( $site );
62 $this->cleanUp();
63 $this->wpAdapter->restoreCurrentBlog();
64 }
65 }
66
67 /**
68 * Drops all plugin tables, options and transients for a single site.
69 */
70 private function cleanUp(): void {
71 $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packeteryLog . '`' );
72 $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packeteryCarrier . '`' );
73 $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packeteryOrder . '`' );
74 $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packeteryCustomsDeclarationItem . '`' );
75 $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packeteryCustomsDeclaration . '`' );
76
77 $transientsToDelete = $this->optionsRepository->getAllTransientsByPrefixes(
78 [
79 Transients::CHECKOUT_DATA_PREFIX,
80 Transients::MESSAGE_MANAGER_MESSAGES_PREFIX,
81 Transients::ORDER_COLLECTION_PRINT_ORDER_IDS_PREFIX,
82 Transients::LABEL_PRINT_ORDER_IDS_PREFIX,
83 Transients::LABEL_PRINT_BACK_LINK_PREFIX,
84 ]
85 );
86
87 foreach ( $transientsToDelete as $optionName ) {
88 $this->wpAdapter->deleteTransient( $optionName );
89 }
90
91 $this->wpAdapter->deleteTransient( Transients::METABOX_NETTE_FORM_PREV_INVALID_VALUES );
92 $this->wpAdapter->deleteTransient( Transients::RUN_UPDATE_CARRIERS );
93 $this->wpAdapter->deleteTransient( Transients::CARRIER_CHANGES );
94 $this->wpAdapter->deleteTransient( Transients::SPLIT_MESSAGE_DISMISSED );
95
96 $optionNamesToDelete = $this->optionsRepository->getAllOptionNamesByPrefixes(
97 [
98 OptionPrefixer::CARRIER_OPTION_PREFIX,
99 'woocommerce_packeta_method_',
100 ]
101 );
102
103 foreach ( $optionNamesToDelete as $optionName ) {
104 $this->wpAdapter->deleteOption( $optionName );
105 }
106
107 $this->wpAdapter->deleteOption( OptionNames::VERSION );
108 $this->wpAdapter->deleteOption( OptionNames::LAST_SETTINGS_EXPORT );
109 $this->wpAdapter->deleteOption( OptionNames::LAST_CARRIER_UPDATE );
110 $this->wpAdapter->deleteOption( OptionNames::PACKETERY );
111 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_SYNC );
112 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_AUTO_SUBMISSION );
113 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_ADVANCED );
114 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_ACTIVATED );
115 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_TUTORIAL_ORDER_DETAIL_EDIT_PACKET );
116 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_TUTORIAL_ORDER_GRID_EDIT_PACKET );
117 $this->wpAdapter->deleteOption( OptionNames::FEATURE_FLAGS );
118 $this->wpAdapter->deleteOption( OptionNames::FEATURE_FLAGS_ERROR_COUNTER );
119 $this->wpAdapter->deleteOption( OptionNames::FEATURE_FLAGS_DISABLED_DUE_ERRORS );
120 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_DIAGNOSTICS_LOGGING_ENABLED );
121
122 $this->wpdbAdapter->query(
123 $this->wpdbAdapter->prepare(
124 "DELETE FROM `{$this->wpdbAdapter->postmeta}`
125 WHERE `meta_key` IN (%s, %s)",
126 Product\Entity::META_AGE_VERIFICATION_18_PLUS,
127 Product\Entity::META_DISALLOWED_SHIPPING_RATES
128 )
129 );
130 }
131 }
132