PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.4.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.4.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Webhooks / WebhooksHistoryService.php
surecart / app / src / Webhooks Last commit date
WebhooksHistoryService.php 3 years ago WebhooksService.php 3 years ago WebhooksServiceProvider.php 3 years ago
WebhooksHistoryService.php
181 lines
1 <?php
2
3 namespace SureCart\Webhooks;
4
5 use SureCart\Models\Webhook;
6
7 /**
8 * Handles domain name changes to webhook
9 * Shows notices and allows user to remove old webhooks.
10 */
11 class WebhooksHistoryService {
12 /**
13 * Webhooks service.
14 *
15 * @var \SureCart\Webhooks\WebhooksService
16 */
17 protected $webhooks_service;
18
19 /**
20 * The option name.
21 *
22 * @var string
23 */
24 protected $registered_webhook = 'ce_registered_webhook';
25
26 /**
27 * The old domains option name.
28 *
29 * @var string
30 */
31 protected $previous_webhook = 'ce_previous_webhook';
32
33 /**
34 * Listen to domain changes.
35 *
36 * @return void
37 */
38 public function listen() {
39 \add_action( 'updated_option', [ $this, 'maybeStoreWebhookChange' ], 10, 3 );
40 \add_action( 'admin_notices', [ $this, 'maybeShowDomainChangeNotice' ] );
41 }
42
43 /**
44 * See if the domain changes, then
45 * store the change in the database.
46 *
47 * @param string $option Name of the updated option.
48 * @param mixed $old_value The old option value.
49 * @param mixed $value The new option value.
50 * @return void
51 */
52 public function maybeStoreWebhookChange( $option, $old_value, $value ) {
53 // we only care about our option and if it was updated.
54 if ( $option !== $this->registered_webhook ) {
55 return;
56 }
57
58 // store the old webhook when this changes.
59 $this->setPreviousWebhook( $old_value );
60 }
61
62 /**
63 * Store the old domain in the database.
64 * We do autoload this option so we can check it on every request.
65 *
66 * @param string $value The old domain.
67 * @return boolean
68 */
69 public function setPreviousWebhook( $value ) {
70 return update_option( $this->previous_webhook, $value );
71 }
72
73 /**
74 * Delete any previous webhooks.
75 *
76 * @return boolean
77 */
78 public function deletePreviousWebhook() {
79 return delete_option( $this->previous_webhook );
80 }
81
82 /**
83 * Get the previous webhook.
84 */
85 public function getPreviousWebhook() {
86 return get_option( $this->previous_webhook, [] );
87 }
88
89 /**
90 * Does this webhook have multiple domains registered?
91 *
92 * @return boolean
93 */
94 public function getPreviousDomain() {
95 $webhook = $this->getPreviousWebhook();
96 return $webhook['url'] ?? '';
97 }
98
99 /**
100 * Save the registered webhook.
101 *
102 * @return bool
103 */
104 public function saveRegisteredWebhook( $webhook ) {
105 return update_option( $this->registered_webhook, $webhook );
106 }
107
108 public function getRegisteredWebhook() {
109 return get_option( $this->registered_webhook, [] );
110 }
111
112 /**
113 * Does the webhook domain match?
114 *
115 * @return boolean
116 */
117 public function domainMatches() {
118 $webhook = get_option( $this->registered_webhook, [] );
119 if ( empty( $webhook['url'] ) ) {
120 return false;
121 }
122 return Webhook::getListenerUrl() === $webhook['url'];
123 }
124
125 /**
126 * Undocumented function
127 *
128 * @return void
129 */
130 public function maybeShowDomainChangeNotice() {
131 $webhook = $this->getPreviousWebhook();
132
133 if ( empty( $webhook['url'] ) || empty( $webhook['id'] ) ) {
134 return false;
135 }
136
137 ?>
138 <div class="notice notice-error">
139 <p>
140 <?php _e( 'It looks like this site has moved or has been duplicated. SureCart has created new webhooks for the domain to prevent purchase sync issues. Should we remove the previous webook?', 'surecart' ); ?>
141 </p>
142 <p>
143 <a href="<?php echo esc_url( \SureCart::getUrl()->editModel( 'ignore_webhook', $webhook['id'] ) ); ?>"
144 class="button button-primary"
145 aria-label="<?php esc_attr_e( 'Ignore notice.', 'surecart' ); ?>">
146 <?php esc_html_e( 'Ignore this notice. This is a duplicate or staging site.', 'surecart' ); ?>
147 </a>
148 <a href="<?php echo esc_url( \SureCart::getUrl()->editModel( 'remove_webhook', $webhook['id'] ) ); ?>"
149 onclick="return confirm('<?php esc_attr_e( 'Are you sure you want to remove this webhook?', 'surecart' ); ?>')"
150 class="button button-secondary"
151 aria-label="<?php esc_attr_e( 'Remove webhook', 'surecart' ); ?>">
152 <?php printf( esc_html__( 'My website domain has permanently changed. Remove webhook for %s', 'surecart' ), esc_url( str_replace( 'surecart/webhooks', '', untrailingslashit( $webhook['url'] ) ) ) ); ?>
153 </a>
154 <p>
155 </div>
156
157 <?php
158 return true;
159 }
160
161 /**
162 * Toggle archive action link and text.
163 *
164 * @param \SureCart\Models\Product $product Product model.
165 * @return string
166 */
167 public function actionRemoveWebhook( $webhook ) {
168 $confirm_message = __( 'Are you sure you want to remove this webhook?', 'surecart' );
169 $link = \SureCart::getUrl()->editModel( 'remove_webhook', $webhook->id );
170 $text = sprintf( esc_html__( 'My website domain has permanently changed. Remove webhook for %s', 'surecart' ), esc_url_raw( $webhook->url ) );
171
172 return sprintf(
173 '<a class="button button-primary" onclick="return confirm(\'%1s\')" href="%2s" aria-label="%3s">%4s</a>',
174 esc_attr( $confirm_message ),
175 esc_url( $link ),
176 esc_attr__( 'Remove webhook.', 'surecart' ),
177 esc_html( $text )
178 );
179 }
180 }
181