Popups by OptinMonster – Best WordPress Lead Generation Plugin - Version 1.9.10

Version Description

  • New Gutenberg block for embedding inline campaigns.
  • Improved syncing of data between the OptinMonster app and the WordPress plugin to help with shortcode parsing, and adding/removing campaigns when going live or pausing. Will also retain previously saved Output Settings when un-pausing a campaign and refreshing.
  • Improvements to a11y across the plugin's admin pages.
  • Updated Constant Contact branding
  • Updates to improve performance on the plugin's admin pages.
  • Minified assets to improve performance on the plugin's admin pages.
  • Increase timeout time for the WooCommerce auto-generate keys request to accomodate for some servers.
  • Clean up admin notices when on the OptinMonster plugin's admin pages.
  • New About Us page.
  • Added filter for auto-enabling new campaigns (true by default).
  • Added filter for changing the API enqueue location from the default footer.
  • Added plugin settings menu links to plugin action links in the Plugins table.
  • Improvements to the Welcome page to allow connecting account directly.
  • Improvements to the account-connection process.
  • Improvements to the Campaigns page.
  • Improvements to the Campaigns' Output Settings pages.
  • Fix bug with mailpoet phone number possibly being set to 0.
  • Fix bug to allow campaigns to show on categories, even when the category is registered to a non-"post" post-type.
  • Fixed potential issues with storing our embed code for multisite installations.
  • Fixed bug where cookie-delete button was not deleting all OptinMonster cookies for given user.
  • Improved WooCommerce connect screen by showing the auto-generate option by default.
  • Removed duplicate WooCommerce categories/tags from the Output Settings.
  • Various other bug fixes, and performance updates.
  • Improved debug output.
Download this release

Release Info

Developer jtsternberg
Plugin Icon 128x128 Popups by OptinMonster – Best WordPress Lead Generation Plugin
Version 1.9.10
Comparing to
See all releases

Code changes from version 1.9.9 to 1.9.10

Files changed (104) hide show
  1. CHANGELOG.md +26 -0
  2. OMAPI/Actions.php +57 -30
  3. OMAPI/Ajax.php +88 -68
  4. OMAPI/Api.php +70 -28
  5. OMAPI/Blocks.php +193 -0
  6. OMAPI/ConstantContact.php +42 -295
  7. OMAPI/Content.php +229 -102
  8. OMAPI/InstallSkin.php +55 -0
  9. OMAPI/MailPoet.php +212 -0
  10. OMAPI/Menu.php +508 -605
  11. OMAPI/Output.php +39 -28
  12. OMAPI/Pages.php +179 -0
  13. OMAPI/Pointer.php +25 -13
  14. OMAPI/Refresh.php +168 -45
  15. OMAPI/RestApi.php +390 -20
  16. OMAPI/Review.php +9 -39
  17. OMAPI/Rules.php +57 -28
  18. OMAPI/Save.php +186 -78
  19. OMAPI/Shortcode.php +22 -15
  20. OMAPI/Sites.php +130 -23
  21. OMAPI/Support.php +175 -0
  22. OMAPI/TrustPulse.php +14 -8
  23. OMAPI/Type.php +1 -1
  24. OMAPI/Utils.php +19 -0
  25. OMAPI/Validate.php +38 -27
  26. OMAPI/Welcome.php +95 -155
  27. OMAPI/Widget.php +13 -7
  28. assets/css/images/constant-contact-OM.png +0 -0
  29. assets/css/images/constant_OM.png +0 -0
  30. assets/css/images/dashboard-icon.png +0 -0
  31. assets/css/images/featured-logos.png +0 -0
  32. assets/css/images/features-ab-testing.png +0 -0
  33. assets/css/images/features-analytics.png +0 -0
  34. assets/css/images/features-builder.png +0 -0
  35. assets/css/images/features-exit-animated.gif +0 -0
  36. assets/css/images/logo-color-large.png +0 -0
  37. assets/css/images/logo-color-large@2x.png +0 -0
  38. assets/css/images/matthewwoodward.png +0 -0
  39. assets/css/images/menu-icon@2x.png +0 -0
  40. assets/css/images/michaelstelzner.png +0 -0
  41. assets/css/images/neilpatel.png +0 -0
  42. assets/css/images/omapi-graph.png +0 -0
  43. assets/css/images/title-icon@2x.png +0 -0
  44. assets/css/images/video-cta-button.png +0 -0
  45. assets/css/select2-spinner.gif +0 -0
  46. assets/css/select2.min.css +0 -0
  47. assets/css/select2.png +0 -0
  48. assets/css/select2x2.png +0 -0
  49. assets/css/settings.css +0 -916
  50. assets/css/trustpulse-admin.min.css +0 -416
  51. assets/dist/css/blocks-admin.min.css +53 -0
  52. assets/dist/css/blocks-admin.min.js +1 -0
  53. assets/dist/css/common.min.css +153 -0
  54. assets/dist/css/common.min.js +1 -0
  55. assets/dist/css/settings.min.css +955 -0
  56. assets/dist/css/settings.min.js +1 -0
  57. assets/dist/css/trustpulse.min.css +329 -0
  58. assets/dist/css/trustpulse.min.js +1 -0
  59. assets/dist/js/campaign-selector.min.js +1 -0
  60. assets/dist/js/connect.min.js +1 -0
  61. assets/dist/js/pointer.min.js +1 -0
  62. assets/dist/js/settings.min.js +1 -0
  63. assets/fonts/Averta-ExtraBoldItalic.eot +0 -0
  64. assets/fonts/FontAwesome.otf +0 -0
  65. assets/fonts/fontawesome-webfont.eot +0 -0
  66. assets/fonts/fontawesome-webfont.svg +0 -0
  67. assets/fonts/fontawesome-webfont.ttf +0 -0
  68. assets/fonts/fontawesome-webfont.woff +0 -0
  69. assets/images/BigCommerce-logo.png +0 -0
  70. assets/images/about/plugin-mi.png +0 -0
  71. assets/images/about/plugin-wp-forms.png +0 -0
  72. assets/images/features-event.svg +135 -0
  73. assets/images/features-fire.svg +60 -0
  74. assets/images/gravity-forms.png +0 -0
  75. assets/images/home-flexible.svg +66 -0
  76. assets/images/home-smart-targeting.svg +126 -0
  77. assets/images/logo-edd.png +0 -0
  78. assets/images/logo-formidable.png +0 -0
  79. assets/images/logo-om.png +0 -0
  80. assets/images/memberpress-logo.svg +76 -0
  81. assets/images/ninja-forms.png +0 -0
  82. assets/images/omteam.jpg +0 -0
  83. assets/images/trustpulse-admin-icon.svg +3 -0
  84. assets/images/video-background.png +0 -0
  85. assets/images/video-cta-button.png +0 -0
  86. assets/images/woocommerce_logo.png +0 -0
  87. assets/images/wpforms.png +0 -0
  88. assets/js/pointer.js +26 -20
  89. assets/js/select2.min.js +0 -0
  90. assets/js/settings.js +128 -52
  91. assets/js/tooltip.min.js +0 -0
  92. optin-monster-wp-api.php +167 -28
  93. readme.txt +28 -6
  94. views/about.php +64 -0
  95. views/constantcontact.php +248 -0
  96. views/logo.svg +174 -0
  97. views/notification-close-js.php +20 -0
  98. views/notification-css.php +83 -0
  99. views/notification-pulse-css.php +58 -0
  100. views/notification.php +11 -0
  101. views/plugin-banner.php +30 -0
  102. views/review.php +33 -0
  103. views/trustpulse-settings-page.php +15 -14
  104. views/welcome.php +126 -0
CHANGELOG.md CHANGED
@@ -1,6 +1,32 @@
1
  # Changelog
2
  All notable changes to the OptinMonster plugin will be documented in this file.
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  ### 1.9.9
5
  * Fix issue where if multiple post tags were selected, popups and other campaigns would only appear on the first tag selected.
6
  * Fix campaign shortcode suggestion in admin being incorrect.
1
  # Changelog
2
  All notable changes to the OptinMonster plugin will be documented in this file.
3
 
4
+ ### 1.9.10
5
+ * New Gutenberg block for embedding inline campaigns.
6
+ * Improved syncing of data between the OptinMonster app and the WordPress plugin to help with shortcode parsing, and adding/removing campaigns when going live or pausing. Will also retain previously saved Output Settings when un-pausing a campaign and refreshing.
7
+ * Improvements to a11y across the plugin's admin pages.
8
+ * Updated Constant Contact branding
9
+ * Updates to improve performance on the plugin's admin pages.
10
+ * Minified assets to improve performance on the plugin's admin pages.
11
+ * Increase timeout time for the WooCommerce auto-generate keys request to accomodate for some servers.
12
+ * Clean up admin notices when on the OptinMonster plugin's admin pages.
13
+ * New About Us page.
14
+ * Added filter for auto-enabling new campaigns (true by default).
15
+ * Added filter for changing the API enqueue location from the default footer.
16
+ * Added plugin settings menu links to plugin action links in the Plugins table.
17
+ * Improvements to the Welcome page to allow connecting account directly.
18
+ * Improvements to the account-connection process.
19
+ * Improvements to the Campaigns page.
20
+ * Improvements to the Campaigns' Output Settings pages.
21
+ * Fix bug with mailpoet phone number possibly being set to 0.
22
+ * Fix bug to allow campaigns to show on categories, even when the category is registered to a non-"post" post-type.
23
+ * Fixed potential issues with storing our embed code for multisite installations.
24
+ * Fixed bug where cookie-delete button was not deleting all OptinMonster cookies for given user.
25
+ * Improved WooCommerce connect screen by showing the auto-generate option by default.
26
+ * Removed duplicate WooCommerce categories/tags from the Output Settings.
27
+ * Various other bug fixes, and performance updates.
28
+ * Improved debug output.
29
+
30
  ### 1.9.9
31
  * Fix issue where if multiple post tags were selected, popups and other campaigns would only appear on the first tag selected.
32
  * Fix campaign shortcode suggestion in admin being incorrect.
OMAPI/Actions.php CHANGED
@@ -68,7 +68,7 @@ class OMAPI_Actions {
68
 
69
  // Add validation messages.
70
  add_action( 'admin_init', array( $this, 'actions' ) );
71
- add_action( 'admin_init', array( $this, 'fetch_missing_data' ) );
72
  add_action( 'admin_notices', array( $this, 'notices' ) );
73
 
74
  }
@@ -106,35 +106,32 @@ class OMAPI_Actions {
106
  }
107
 
108
  // Prepare variable of args for admin notice.
109
- $args = array();
110
  $args['optin_monster_api_action_done'] = $action;
111
- $args['optin_monster_api_view'] = 'optins';
112
 
113
  switch ( $action ) {
114
- case 'status' :
115
  if ( $this->status() ) {
116
  $args['optin_monster_api_action_type'] = 'success';
117
  $args['optin_monster_api_action_id'] = $this->optin_id;
118
  } else {
119
  $args['optin_monster_api_action_type'] = 'error';
120
  }
121
- break;
122
 
123
- case 'cookies' :
124
  if ( $this->cookies() ) {
125
  $args['optin_monster_api_action_type'] = 'success';
126
  } else {
127
  $args['optin_monster_api_action_type'] = 'error';
128
  }
129
- break;
130
  default:
131
- break;
132
  }
133
 
134
  // Now redirect to prevent reloads from undoing actions.
135
- $redirect = esc_url_raw( add_query_arg( $args, admin_url( 'admin.php?page=optin-monster-api-settings' ) ) );
136
- die( wp_redirect( $redirect ) );
137
-
138
  }
139
 
140
  /**
@@ -239,18 +236,29 @@ class OMAPI_Actions {
239
  $notice = '';
240
 
241
  switch ( $action ) {
242
- case 'status' :
243
- $notice = 'success' === $type
244
- ? sprintf( __( 'The campaign status was updated successfully. You can configure more specific loading requirements by <a href="%s" title="Click here to edit the output settings for the updated campaign.">editing the output settings</a> for the campaign.', 'optin-monster-api' ), esc_url_raw( add_query_arg( array( 'page' => 'optin-monster-api-settings', 'optin_monster_api_view' => 'optins', 'optin_monster_api_action' => 'edit', 'optin_monster_api_id' => $this->optin_id ), admin_url( 'admin.php' ) ) ) )
245
- : esc_html__( 'There was an error updating the campaign status. Please try again.', 'optin-monster-api' );
246
- break;
247
- case 'cookies' :
 
 
 
 
 
 
 
 
 
 
 
248
  $notice = 'success' === $type
249
  ? esc_html__( 'The local cookies have been cleared successfully.', 'optin-monster-api' )
250
  : esc_html__( 'There was an error clearing the local cookies. Please try again.', 'optin-monster-api' );
251
- break;
252
  default:
253
- break;
254
  }
255
 
256
  return $notice;
@@ -264,8 +272,8 @@ class OMAPI_Actions {
264
  public function notices() {
265
 
266
  // Check to see if any notices should be output based on query args.
267
- $action = isset( $_GET['optin_monster_api_action_done'] ) ? strip_tags( stripslashes( $_GET['optin_monster_api_action_done' ] ) ) : false;
268
- $type = isset( $_GET['optin_monster_api_action_type'] ) ? strip_tags( stripslashes( $_GET['optin_monster_api_action_type' ] ) ) : false;
269
 
270
  // Maybe set the optin ID if it is available.
271
  if ( isset( $_GET['optin_monster_api_action_id'] ) ) {
@@ -297,30 +305,30 @@ class OMAPI_Actions {
297
  $changed = false;
298
 
299
  // If we don't have an API Key yet, we can't fetch anything else.
300
- if ( ! $creds['apikey'] && ! $creds['user'] && ! $creds['key'] ) {
301
  return;
302
  }
303
 
304
  // Fetch the userId and accountId, if we don't have them
305
  if ( empty( $option['userId'] ) || empty( $option['accountId'] ) ) {
306
- $api = OMAPI_Api::build( 'v2', 'me', 'GET' );
307
  $body = $api->request();
308
 
309
  if ( isset( $body->id, $body->accountId ) ) {
310
  $option['userId'] = $body->id;
311
  $option['accountId'] = $body->accountId;
312
- $changed = true;
313
  }
314
-
315
  }
316
 
317
  // Fetch the SiteIds for this site, if we don't have them
318
- if ( empty( $option['siteIds'] ) ) {
319
- $sites = $this->base->sites->fetch();
320
- $option['siteIds'] = $sites['ids'];
321
- $option['customApiUrl'] = $sites['customApiUrl'];
322
 
323
- $changed = true;
 
 
 
 
324
  }
325
 
326
  // Only update the option if we've changed something
@@ -330,4 +338,23 @@ class OMAPI_Actions {
330
 
331
  }
332
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  }
68
 
69
  // Add validation messages.
70
  add_action( 'admin_init', array( $this, 'actions' ) );
71
+ add_action( 'admin_init', array( $this, 'fetch_missing_data' ), 99 );
72
  add_action( 'admin_notices', array( $this, 'notices' ) );
73
 
74
  }
106
  }
107
 
108
  // Prepare variable of args for admin notice.
109
+ $args = array();
110
  $args['optin_monster_api_action_done'] = $action;
 
111
 
112
  switch ( $action ) {
113
+ case 'status':
114
  if ( $this->status() ) {
115
  $args['optin_monster_api_action_type'] = 'success';
116
  $args['optin_monster_api_action_id'] = $this->optin_id;
117
  } else {
118
  $args['optin_monster_api_action_type'] = 'error';
119
  }
120
+ break;
121
 
122
+ case 'cookies':
123
  if ( $this->cookies() ) {
124
  $args['optin_monster_api_action_type'] = 'success';
125
  } else {
126
  $args['optin_monster_api_action_type'] = 'error';
127
  }
128
+ break;
129
  default:
130
+ break;
131
  }
132
 
133
  // Now redirect to prevent reloads from undoing actions.
134
+ $this->base->menu->redirect_to_dashboard( 'optins', $args );
 
 
135
  }
136
 
137
  /**
236
  $notice = '';
237
 
238
  switch ( $action ) {
239
+ case 'status':
240
+ if ( 'success' === $type ) {
241
+ $url = $this->base->menu->get_settings_link(
242
+ 'optins',
243
+ array(
244
+ 'optin_monster_api_action' => 'edit',
245
+ 'optin_monster_api_id' => $this->optin_id,
246
+ )
247
+ );
248
+
249
+ $notice = sprintf( __( 'The campaign status was updated successfully. You can configure more specific loading requirements by <a href="%s" title="Click here to edit the output settings for the updated campaign.">editing the output settings</a> for the campaign.', 'optin-monster-api' ), esc_url_raw( $url ) );
250
+ } else {
251
+ $notice = esc_html__( 'There was an error updating the campaign status. Please try again.', 'optin-monster-api' );
252
+ }
253
+
254
+ break;
255
+ case 'cookies':
256
  $notice = 'success' === $type
257
  ? esc_html__( 'The local cookies have been cleared successfully.', 'optin-monster-api' )
258
  : esc_html__( 'There was an error clearing the local cookies. Please try again.', 'optin-monster-api' );
259
+ break;
260
  default:
261
+ break;
262
  }
263
 
264
  return $notice;
272
  public function notices() {
273
 
274
  // Check to see if any notices should be output based on query args.
275
+ $action = isset( $_GET['optin_monster_api_action_done'] ) ? strip_tags( stripslashes( $_GET['optin_monster_api_action_done'] ) ) : false;
276
+ $type = isset( $_GET['optin_monster_api_action_type'] ) ? strip_tags( stripslashes( $_GET['optin_monster_api_action_type'] ) ) : false;
277
 
278
  // Maybe set the optin ID if it is available.
279
  if ( isset( $_GET['optin_monster_api_action_id'] ) ) {
305
  $changed = false;
306
 
307
  // If we don't have an API Key yet, we can't fetch anything else.
308
+ if ( empty( $creds['apikey'] ) && empty( $creds['user'] ) && empty( $creds['key'] ) ) {
309
  return;
310
  }
311
 
312
  // Fetch the userId and accountId, if we don't have them
313
  if ( empty( $option['userId'] ) || empty( $option['accountId'] ) ) {
314
+ $api = OMAPI_Api::build( 'v2', 'me', 'GET' );
315
  $body = $api->request();
316
 
317
  if ( isset( $body->id, $body->accountId ) ) {
318
  $option['userId'] = $body->id;
319
  $option['accountId'] = $body->accountId;
320
+ $changed = true;
321
  }
 
322
  }
323
 
324
  // Fetch the SiteIds for this site, if we don't have them
325
+ if ( empty( $option['siteIds'] ) || empty( $option['siteId'] ) || $this->siteIdsAreNumeric( $option['siteIds'] ) ) {
 
 
 
326
 
327
+ $result = $this->base->sites->fetch();
328
+ if ( ! is_wp_error( $result ) ) {
329
+ $option = array_merge( $option, $result );
330
+ $changed = true;
331
+ }
332
  }
333
 
334
  // Only update the option if we've changed something
338
 
339
  }
340
 
341
+
342
+ /**
343
+ * In one version of the Plugin, we fetched the numeric SiteIds,
344
+ * But we actually needed the alphanumeric SiteIds.
345
+ *
346
+ * So we use this check to determine if we need to re-fetch Site Ids
347
+ *
348
+ * @param array $siteIds
349
+ * @return bool True if the ids are numeric
350
+ */
351
+ protected function siteIdsAreNumeric( $site_ids ) {
352
+ foreach ( $site_ids as $id ) {
353
+ if ( ! ctype_digit( (string) $id ) ) {
354
+ return false;
355
+ }
356
+ }
357
+
358
+ return true;
359
+ }
360
  }
OMAPI/Ajax.php CHANGED
@@ -86,7 +86,11 @@ class OMAPI_Ajax {
86
 
87
  switch ( $_REQUEST['action'] ) {
88
  case 'mailpoet':
89
- $this->mailpoet();
 
 
 
 
90
  break;
91
  default:
92
  break;
@@ -94,86 +98,102 @@ class OMAPI_Ajax {
94
  }
95
 
96
  /**
97
- * Opts the user into MailPoet.
98
  *
99
- * @since 1.0.0
 
 
 
100
  */
101
- public function mailpoet() {
102
- // Run a security check first.
103
- check_ajax_referer( 'omapi', 'nonce' );
104
-
105
- // Prepare variables.
106
- $data = array_merge( $_REQUEST, $_REQUEST['optinData'] );
107
- unset( $data['optinData'] );
108
-
109
- $optin = $this->base->get_optin_by_slug( stripslashes( $data['optin'] ) );
110
- $list = get_post_meta( $optin->ID, '_omapi_mailpoet_list', true );
111
- $phone_field = get_post_meta( $optin->ID, '_omapi_mailpoet_phone_field', true );
112
- $email = ! empty( $data['email'] ) ? stripslashes( $data['email'] ) : false;
113
- $name = ! empty( $data['name'] ) ? stripslashes( $data['name'] ) : false;
114
- $user = array();
115
-
116
- // Possibly split name into first and last.
117
- if ( $name ) {
118
- $names = explode( ' ', $name );
119
- if ( isset( $names[0] ) ) {
120
- $user['firstname'] = $names[0];
121
- }
122
 
123
- if ( isset( $names[1] ) ) {
124
- $user['lastname'] = $names[1];
125
- }
 
 
126
  }
127
 
128
- // Save the email address.
129
- $user['email'] = $email;
130
 
131
- // Save the phone number
132
- if ( ! empty( $phone_field ) ) {
133
- $user[ $phone_field ] = ! empty( $data['phone'] ) ? stripslashes( $data['phone'] ) : false;
 
 
 
134
  }
135
 
136
- // Store the data.
137
- $data = array(
138
- 'user' => $user,
139
- 'user_list' => array( 'list_ids' => array( $list ) ),
140
- );
141
- $data = apply_filters( 'optin_monster_pre_optin_mailpoet', $data, $_REQUEST, $list, null );
142
-
143
- // Save the subscriber. Check for MailPoet 3 first. Default to legacy.
144
- if ( class_exists( 'MailPoet\\API\\API' ) ) {
145
- // Customize the lead data for MailPoet 3.
146
- if ( isset( $user['firstname'] ) ) {
147
- $user['first_name'] = $user['firstname'];
148
- unset( $user['firstname'] );
149
- }
150
 
151
- if ( isset( $user['lastname'] ) ) {
152
- $user['last_name'] = $user['lastname'];
153
- unset( $user['lastname'] );
154
- }
155
 
156
- try {
157
- $subscriber = \MailPoet\API\API::MP( 'v1' )->getSubscriber( $user['email'] );
158
- } catch ( Exception $e ) {
159
- $subscriber = false;
160
- }
161
 
162
- try {
163
- if ( $subscriber ) {
164
- \MailPoet\API\API::MP( 'v1' )->subscribeToList( $subscriber['email'], array( $list ) );
165
- } else {
166
- \MailPoet\API\API::MP( 'v1' )->addSubscriber( $user, array( $list ) );
167
- }
168
- } catch ( Exception $e ) {
169
- return wp_send_json_error( $e->getMessage(), 400 );
170
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  } else {
172
- $userHelper = WYSIJA::get( 'user', 'helper' );
173
- $userHelper->addSubscriber( $data );
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  }
175
 
176
- // Send back a response.
177
- wp_send_json_success();
 
 
 
178
  }
179
  }
86
 
87
  switch ( $_REQUEST['action'] ) {
88
  case 'mailpoet':
89
+ $this->base->mailpoet->handle_ajax_call();
90
+ break;
91
+ case 'om_plugin_install':
92
+ add_action( 'wp_ajax_om_plugin_install', array( $this, 'install_or_activate' ) );
93
+ add_action( 'wp_ajax_nopriv_om_plugin_install', array( $this, 'install_or_activate' ) );
94
  break;
95
  default:
96
  break;
98
  }
99
 
100
  /**
101
+ * Installs and activates a plugin for a given url
102
  *
103
+ * @since 1.9.10
104
+ *
105
+ * @param string $plugin_url The Plugin URL
106
+ * @return void
107
  */
108
+ public function install_plugin( $plugin_url ) {
109
+ // Todo: Add Nonce verification
110
+ if ( ! current_user_can( 'install_plugins' ) ) {
111
+ wp_send_json_error( esc_html__( 'Sorry, not allowed!', 'optin-monster-api' ) );
112
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
+ $creds = request_filesystem_credentials( admin_url( 'admin.php' ), '', false, false, null );
115
+
116
+ // Check for file system permissions.
117
+ if ( false === $creds ) {
118
+ wp_send_json_error( esc_html__( 'Sorry, not allowed!', 'optin-monster-api' ) );
119
  }
120
 
121
+ // We do not need any extra credentials if we have gotten this far, so let's install the plugin.
122
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
123
 
124
+ // Create the plugin upgrader with our custom skin.
125
+ $installer = new Plugin_Upgrader( new OMAPI_InstallSkin() );
126
+
127
+ // Error check.
128
+ if ( ! method_exists( $installer, 'install' ) ) {
129
+ wp_send_json_error();
130
  }
131
 
132
+ $installer->install( esc_url_raw( $plugin_url ) ); // phpcs:ignore
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
+ if ( ! $installer->plugin_info() ) {
135
+ wp_send_json_error();
136
+ }
 
137
 
138
+ $plugin_basename = $installer->plugin_info();
 
 
 
 
139
 
140
+ // Activate the plugin silently.
141
+ $activated = activate_plugin( $plugin_basename );
142
+
143
+ if ( ! is_wp_error( $activated ) ) {
144
+ wp_send_json_success(
145
+ array(
146
+ 'msg' => esc_html__( 'Plugin installed & activated.', 'optin-monster-api' ),
147
+ 'is_activated' => true,
148
+ 'basename' => $plugin_basename,
149
+ )
150
+ );
151
+ }
152
+
153
+ wp_send_json_success(
154
+ array(
155
+ 'msg' => esc_html__( 'Plugin installed.', 'optin-monster-api' ),
156
+ 'is_activated' => false,
157
+ 'basename' => $plugin_basename,
158
+ )
159
+ );
160
+ }
161
+
162
+ /**
163
+ * Installs or Activates a plugin with a given plugin name
164
+ *
165
+ * @param string $plugin_name
166
+ * @return void
167
+ */
168
+ public function install_or_activate() {
169
+ $plugin = $_POST['plugin'];
170
+ $action = $_POST['installAction'];
171
+ $url = $_POST['url'];
172
+
173
+ if ( 'install' === $action ) {
174
+ $this->install_plugin( $url );
175
  } else {
176
+ $this->activate_plugin( $plugin );
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Activates a plugin with a given plugin name
182
+ *
183
+ * @param string $plugin_name
184
+ * @return void
185
+ */
186
+ public function activate_plugin( $plugin_name ) {
187
+
188
+ // Check for permissions.
189
+ if ( ! current_user_can( 'activate_plugins' ) ) {
190
+ wp_send_json_error( esc_html__( 'Sorry, not allowed!', 'optin-monster-api' ) );
191
  }
192
 
193
+ $activate = activate_plugins( sanitize_text_field( $plugin_name ) );
194
+
195
+ if ( ! is_wp_error( $activate ) ) {
196
+ wp_send_json_success( esc_html__( 'Plugin activated.', 'optin-monster-api' ) );
197
+ }
198
  }
199
  }
OMAPI/Api.php CHANGED
@@ -20,6 +20,13 @@ if ( ! defined( 'ABSPATH' ) ) {
20
  */
21
  class OMAPI_Api {
22
 
 
 
 
 
 
 
 
23
  /**
24
  * Base API route.
25
  *
@@ -142,20 +149,27 @@ class OMAPI_Api {
142
  *
143
  * @since 1.8.0
144
  *
145
- * @param string $version The Api Version (v1 or v2)
146
  * @param string $endpoint The Api Endpoint
147
- * @param string $method The Request method
 
148
  *
149
  * @return self
150
  */
151
- public static function build( $version, $route, $method = 'POST' ) {
152
- $creds = OMAPI::get_instance()->get_api_credentials();
153
- // Check if we have the new API and if so only use it
154
- if ( $creds['apikey'] ) {
155
- return new OMAPI_Api( $route, array( 'apikey' => $creds['apikey'] ), $method, $version );
 
 
 
 
 
 
156
  }
157
 
158
- return new OMAPI_Api( $route, array( 'user' => $creds['user'], 'key' => $creds['key'] ), $method, $version);
159
  }
160
 
161
  /**
@@ -164,19 +178,21 @@ class OMAPI_Api {
164
  * @since 1.0.0
165
  *
166
  * @param string $route The API route to target.
167
- * @param array $creds Array of API credentials.
168
  * @param string $method The API method.
169
  * @param string $version The version number of our API
170
  */
171
  public function __construct( $route, $creds, $method = 'POST', $version = 'v1' ) {
172
  // Set class properties.
173
- $this->route = $route;
174
- $this->version = $version;
175
- $this->method = $method;
176
- $this->user = ! empty( $creds['user'] ) ? $creds['user'] : '';
177
- $this->key = ! empty( $creds['key'] ) ? $creds['key'] : '';
178
- $this->apikey = ! empty( $creds['apikey'] ) ? $creds['apikey'] : '';
179
- $this->plugin = OMAPI::get_instance()->plugin_slug;
 
 
180
  }
181
 
182
  /**
@@ -190,8 +206,9 @@ class OMAPI_Api {
190
  // Build the body of the request.
191
  $body = array(
192
  'omapi-user' => $this->user,
193
- 'omapi-key' => $this->key
194
  );
 
195
 
196
  // If a plugin API request, add the data.
197
  if ( 'info' == $this->route || 'update' == $this->route ) {
@@ -205,25 +222,25 @@ class OMAPI_Api {
205
 
206
  $body = wp_parse_args( $args, $body );
207
  $url = in_array( $this->method, array( 'GET', 'DELETE' ), true )
208
- ? add_query_arg( $body, $this->getUrl() )
209
  : $this->getUrl();
210
- $url = esc_url_raw( $url );
 
211
 
212
  // Build the headers of the request.
213
  $headers = array(
214
- 'Content-Type' => 'application/x-www-form-urlencoded',
215
- 'Cache-Control' => 'no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0',
216
- 'Pragma' => 'no-cache',
217
- 'Expires' => 0,
218
- 'Origin' => site_url(),
219
- 'OMAPI-Referer' => site_url(),
220
- 'OMAPI-Sender' => 'WordPress',
221
  );
222
 
223
  if ( $this->apikey ) {
224
  $headers['X-OptinMonster-ApiKey'] = $this->apikey;
225
  }
226
-
227
  // Setup data to be sent to the API.
228
  $data = array(
229
  'headers' => $headers,
@@ -259,7 +276,7 @@ class OMAPI_Api {
259
  $error = ! empty( $this->response_body->error ) ? stripslashes( $this->response_body->error ) : 'unknown';
260
  }
261
 
262
- return new WP_Error( $type, sprintf( __( 'The API returned a <strong>%s</strong> response with this message: <strong>%s</strong>', 'optin-monster-api' ), $this->response_code, $error ) );
263
  }
264
 
265
  // Return the json decoded content.
@@ -301,4 +318,29 @@ class OMAPI_Api {
301
  public function set_additional_data( array $data ) {
302
  $this->additional_data = array_merge( $this->additional_data, $data );
303
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  }
20
  */
21
  class OMAPI_Api {
22
 
23
+ /**
24
+ * Holds the last instantiated instance of this class.
25
+ *
26
+ * @var OMAPI_Api
27
+ */
28
+ protected static $instance = null;
29
+
30
  /**
31
  * Base API route.
32
  *
149
  *
150
  * @since 1.8.0
151
  *
152
+ * @param string $version The Api Version (v1 or v2)
153
  * @param string $endpoint The Api Endpoint
154
+ * @param string $method The Request method
155
+ * @param array $creds Array of API credentials.
156
  *
157
  * @return self
158
  */
159
+ public static function build( $version, $route, $method = 'POST', $creds = array() ) {
160
+ if ( empty( $creds ) ) {
161
+ $creds = OMAPI::get_instance()->get_api_credentials();
162
+
163
+ // Check if we have the new API and if so only use it
164
+ $creds = ! empty( $creds['apikey'] )
165
+ ? array( 'apikey' => $creds['apikey'] )
166
+ : array(
167
+ 'user' => $creds['user'],
168
+ 'key' => $creds['key'],
169
+ );
170
  }
171
 
172
+ return new self( $route, $creds, $method, $version );
173
  }
174
 
175
  /**
178
  * @since 1.0.0
179
  *
180
  * @param string $route The API route to target.
181
+ * @param array $creds Array of API credentials.
182
  * @param string $method The API method.
183
  * @param string $version The version number of our API
184
  */
185
  public function __construct( $route, $creds, $method = 'POST', $version = 'v1' ) {
186
  // Set class properties.
187
+ $this->route = $route;
188
+ $this->version = $version;
189
+ $this->method = $method;
190
+ $this->user = ! empty( $creds['user'] ) ? $creds['user'] : '';
191
+ $this->key = ! empty( $creds['key'] ) ? $creds['key'] : '';
192
+ $this->apikey = ! empty( $creds['apikey'] ) ? $creds['apikey'] : '';
193
+ $this->plugin = OMAPI::get_instance()->plugin_slug;
194
+
195
+ self::$instance = $this;
196
  }
197
 
198
  /**
206
  // Build the body of the request.
207
  $body = array(
208
  'omapi-user' => $this->user,
209
+ 'omapi-key' => $this->key,
210
  );
211
+ $body = array_filter( $body );
212
 
213
  // If a plugin API request, add the data.
214
  if ( 'info' == $this->route || 'update' == $this->route ) {
222
 
223
  $body = wp_parse_args( $args, $body );
224
  $url = in_array( $this->method, array( 'GET', 'DELETE' ), true )
225
+ ? add_query_arg( array_map( 'urlencode', $body ), $this->getUrl() )
226
  : $this->getUrl();
227
+
228
+ $url = esc_url_raw( $url );
229
 
230
  // Build the headers of the request.
231
  $headers = array(
232
+ 'Content-Type' => 'application/x-www-form-urlencoded',
233
+ 'Cache-Control' => 'no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0',
234
+ 'Pragma' => 'no-cache',
235
+ 'Expires' => 0,
236
+ 'Origin' => site_url(),
237
+ 'OMAPI-Referer' => site_url(),
238
+ 'OMAPI-Sender' => 'WordPress',
239
  );
240
 
241
  if ( $this->apikey ) {
242
  $headers['X-OptinMonster-ApiKey'] = $this->apikey;
243
  }
 
244
  // Setup data to be sent to the API.
245
  $data = array(
246
  'headers' => $headers,
276
  $error = ! empty( $this->response_body->error ) ? stripslashes( $this->response_body->error ) : 'unknown';
277
  }
278
 
279
+ return new WP_Error( $type, sprintf( __( 'The API returned a <strong>%1$s</strong> response with this message: <strong>%2$s</strong>', 'optin-monster-api' ), $this->response_code, $error ), $this->response_code );
280
  }
281
 
282
  // Return the json decoded content.
318
  public function set_additional_data( array $data ) {
319
  $this->additional_data = array_merge( $this->additional_data, $data );
320
  }
321
+
322
+ /**
323
+ * Clear additional data
324
+ *
325
+ * @since 1.9.0
326
+ *
327
+ * @param array $data
328
+ * return void
329
+ */
330
+ public function clear_additional_data() {
331
+ $this->additional_data = null;
332
+
333
+ return $this;
334
+ }
335
+
336
+ /**
337
+ * Returns the last instantiated instance of this class.
338
+ *
339
+ * @since 1.9.10
340
+ *
341
+ * @return A single instance of this class.
342
+ */
343
+ public static function instance() {
344
+ return self::$instance;
345
+ }
346
  }
OMAPI/Blocks.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Gutenberg Blocks registration class.
4
+ *
5
+ * @since 1.9.10
6
+ *
7
+ * @package OMAPI
8
+ * @author Thomas Griffin
9
+ */
10
+
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+
16
+ /**
17
+ * Gutenberg Blocks registration class.
18
+ *
19
+ * @since 1.9.10
20
+ */
21
+ class OMAPI_Blocks {
22
+
23
+ /**
24
+ * Holds the class object.
25
+ *
26
+ * @since 1.9.10
27
+ *
28
+ * @var object
29
+ */
30
+ public static $instance;
31
+
32
+ /**
33
+ * Path to the file.
34
+ *
35
+ * @since 1.9.10
36
+ *
37
+ * @var string
38
+ */
39
+ public $file = __FILE__;
40
+
41
+ /**
42
+ * Holds the base class object.
43
+ *
44
+ * @since 1.9.10
45
+ *
46
+ * @var object
47
+ */
48
+ public $base;
49
+
50
+ /**
51
+ * Primary class constructor.
52
+ *
53
+ * @since 1.9.10
54
+ */
55
+ public function __construct() {
56
+
57
+ if ( function_exists( 'register_block_type' ) ) {
58
+
59
+ // Set our object.
60
+ $this->set();
61
+ $this->register_blocks();
62
+
63
+ add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
64
+ }
65
+
66
+ }
67
+
68
+ /**
69
+ * Sets our object instance and base class instance.
70
+ *
71
+ * @since 1.9.10
72
+ */
73
+ public function set() {
74
+ self::$instance = $this;
75
+ $this->base = OMAPI::get_instance();
76
+ }
77
+
78
+ /**
79
+ * Register OptinMonster Gutenberg blocks on the backend.
80
+ *
81
+ * @since 1.9.10
82
+ */
83
+ public function register_blocks() {
84
+ register_block_type(
85
+ 'optinmonster/campaign-selector',
86
+ array(
87
+ 'attributes' => array(
88
+ 'slug' => array(
89
+ 'type' => 'string',
90
+ ),
91
+ 'followrules' => array(
92
+ 'type' => 'boolean',
93
+ ),
94
+ ),
95
+ // 'editor_style' => $this->base->plugin_slug . '-gutenberg-campaign-selector',
96
+ 'render_callback' => array( $this, 'get_output' ),
97
+ )
98
+ );
99
+ }
100
+
101
+ /**
102
+ * Load OptinMonster Gutenberg block scripts.
103
+ *
104
+ * @since 1.9.10
105
+ */
106
+ public function enqueue_block_editor_assets() {
107
+ $version = $this->base->asset_version();
108
+ $script_id = $this->base->plugin_slug . '-gutenberg-campaign-selector';
109
+
110
+ wp_enqueue_style( $this->base->plugin_slug . '-blocks-admin', $this->base->url . 'assets/dist/css/blocks-admin.min.css', array(), $version );
111
+
112
+ wp_enqueue_script(
113
+ $script_id,
114
+ $this->base->url . 'assets/dist/js/campaign-selector.min.js',
115
+ array( 'wp-blocks', 'wp-i18n', 'wp-element' ),
116
+ $version,
117
+ true
118
+ );
119
+
120
+ // For translation of strings.
121
+ $i18n = array(
122
+ 'title' => esc_html__( 'OptinMonster Campaign', 'optin-monster-api' ),
123
+ 'description' => esc_html__( 'Select &amp; display one of your OptinMonster inline Campaigns.', 'optin-monster-api' ),
124
+ 'campaign_select' => esc_html__( 'Select a Campaign', 'optin-monster-api' ),
125
+ 'campaign_settings' => esc_html__( 'OptinMonster Settings', 'optin-monster-api' ),
126
+ 'campaign_selected' => esc_html__( 'Campaign', 'optin-monster-api' ),
127
+ 'followrules_label' => esc_html__( 'Use Output Settings' ),
128
+ 'followrules_help' => esc_html__( 'Ensure this campaign follows any conditions you\'ve selected in its %s', 'optin-monster-api' ),
129
+ 'output_settings' => esc_html__( 'Output Settings', 'optin-monster-api' ),
130
+ 'no_campaigns' => esc_html__( 'No inline campaigns available!', 'optin-monster-api' ),
131
+ 'no_campaigns_help' => esc_html__( 'Create an inline campaign in order to display them in your WordPress posts/pages. Alternatively, use a Monster Link to trigger another campaign type.', 'optin-monster-api' ),
132
+ 'found_error' => esc_html__( 'An error was encountered', 'optin-monster-api' ),
133
+ );
134
+ $i18n['description'] = html_entity_decode( $i18n['description'] );
135
+
136
+ $campaigns = $this->base->get_optins();
137
+ wp_localize_script(
138
+ $script_id,
139
+ 'OMAPI',
140
+ array(
141
+ 'logoUrl' => $this->base->url . 'assets/css/images/logo-om.png',
142
+ 'i18n' => $i18n,
143
+ 'campaigns' => ! empty( $campaigns ) ? $campaigns : array(),
144
+ 'post' => get_post(),
145
+ 'omEnv' => defined( 'OPTINMONSTER_ENV' ) ? OPTINMONSTER_ENV : '',
146
+ 'apiUrl' => esc_url_raw( $this->base->get_api_url() ),
147
+ 'omUserId' => $this->base->get_option( 'userId' ),
148
+ 'editUrl' => $this->base->menu->get_settings_link(
149
+ 'optins',
150
+ array(
151
+ 'optin_monster_api_action' => 'edit',
152
+ 'optin_monster_api_id' => '%d',
153
+ )
154
+ ),
155
+ )
156
+ );
157
+ }
158
+
159
+ /**
160
+ * Get form HTML to display in a OptinMonster Gutenberg block.
161
+ *
162
+ * @param array $atts Attributes passed by OptinMonster Gutenberg block.
163
+ *
164
+ * @since 1.9.10
165
+ *
166
+ * @return string
167
+ */
168
+ public function get_output( $atts ) {
169
+ $is_rest = defined( 'REST_REQUEST' ) && REST_REQUEST;
170
+ $context = ! empty( $_REQUEST['context'] ) ? sanitize_text_field( $_REQUEST['context'] ) : '';
171
+ $is_gutes = $is_rest && 'edit' === $context;
172
+
173
+ // Our Guten-block handles the embed output manually.
174
+ if ( $is_gutes ) {
175
+ return;
176
+ }
177
+
178
+ $output = $this->base->shortcode->shortcode( $atts );
179
+
180
+ if (
181
+ ! empty( $output )
182
+ && ! wp_script_is( $this->base->plugin_slug . '-api-script', 'enqueued' )
183
+ ) {
184
+
185
+ // Need to enqueue the base api script.
186
+ $this->base->output->api_script();
187
+ }
188
+
189
+ // Just return the shortcode output to the frontend.
190
+ return $output;
191
+ }
192
+
193
+ }
OMAPI/ConstantContact.php CHANGED
@@ -98,11 +98,15 @@ class OMAPI_ConstantContact {
98
  * @since 1.6.0
99
  */
100
  public function register_cc_page() {
101
- $slug = 'optin-monster-constant-contact';
102
- $is_current = isset( $_GET['page'] ) && $slug === $_GET['page'];
 
 
 
 
103
 
104
  $this->hook = add_submenu_page(
105
- $is_current ? 'optin-monster-api-settings' : 'optin-monster-api-settings-no-menu', //parent slug
106
  esc_html__( 'OptinMonster with Constant Contact', 'optin-monster-api' ), // page title,
107
  esc_html__( 'OptinMonster + Constant Contact', 'optin-monster-api' ),
108
  apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $slug ), // cap
@@ -144,7 +148,7 @@ class OMAPI_ConstantContact {
144
 
145
  // Only show on the main dashboard page (wp-admin/index.php)
146
  // or any OptinMonster plugin-specific screen.
147
- $can_show = $is_om_page = isset( $_GET['page'] ) && 'optin-monster-api-settings' === $_GET['page'];
148
  if ( ! $can_show ) {
149
  $can_show = function_exists( 'get_current_screen' ) && 'dashboard' === get_current_screen()->id;
150
  }
@@ -153,8 +157,8 @@ class OMAPI_ConstantContact {
153
  return;
154
  }
155
 
156
- $connect = admin_url( 'admin.php?page=optin-monster-api-settings' );
157
- $learn_more = admin_url( 'admin.php?page=optin-monster-constant-contact' );
158
 
159
  // Output the notice message.
160
  ?>
@@ -193,35 +197,31 @@ class OMAPI_ConstantContact {
193
  );
194
  ?>
195
  </p>
196
- </div>
197
- <style type="text/css">
198
- .om-constant-contact-notice {
199
- /*border-left-color: #1a5285;*/
200
- }
201
-
202
- .om-constant-contact-notice p:first-of-type {
203
- margin: 16px 0 8px;
204
- }
205
-
206
- .om-constant-contact-notice p:last-of-type {
207
- margin: 8px 0 16px;
208
- }
209
-
210
- .om-constant-contact-notice .button-primary,
211
- .om-constant-contact-notice .button-secondary {
212
- display: inline-block;
213
- margin: 0 10px 0 0;
214
- }
215
- </style>
216
- <script type="text/javascript">
217
- jQuery( function ( $ ) {
218
- $( document ).on( 'click', '.om-constant-contact-notice button', function ( event ) {
219
- event.preventDefault();
220
- $.post( ajaxurl, { action: 'om_constant_contact_dismiss' } );
221
- $( '.om-constant-contact-notice' ).remove();
222
  } );
223
- } );
224
- </script>
225
  <?php
226
  }
227
 
@@ -242,20 +242,11 @@ class OMAPI_ConstantContact {
242
  * @since 1.6.0
243
  */
244
  public function assets() {
245
- add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) );
246
  add_filter( 'admin_footer_text', array( $this, 'footer' ) );
247
  add_action( 'in_admin_header', array( $this->base->menu, 'output_plugin_screen_banner' ) );
248
  }
249
 
250
- /**
251
- * Register and enqueue settings page specific CSS.
252
- *
253
- * @since 1.6.0
254
- */
255
- public function styles() {
256
- wp_enqueue_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/css/settings.css', OMAPI_FILE ), array(), $this->base->version );
257
- }
258
-
259
  /**
260
  * Customizes the footer text on the OptinMonster settings page.
261
  *
@@ -280,257 +271,13 @@ class OMAPI_ConstantContact {
280
  * @since 1.6.0
281
  */
282
  public function display_page() {
283
- $images_url = esc_url( plugins_url( '/assets/css/images/', OMAPI_FILE ) );
284
- ?>
285
- <style type="text/css">
286
- .admin_page_optin-monster-constant-contact #wpbody {
287
- background: #fff;
288
- }
289
-
290
- .notice {
291
- display: none;
292
- }
293
-
294
- .om-cc-wrap {
295
- max-width: 970px;
296
- }
297
-
298
- .om-cc-wrap h1 {
299
- /*color: #1a5285;*/
300
- font-size: 30px;
301
- margin: 0 0 15px 0;
302
- }
303
-
304
- .om-cc-wrap h2 {
305
- /*color: #1a5285;*/
306
- font-size: 26px;
307
- margin: 0 0 15px 0;
308
- text-align: left;
309
- }
310
-
311
- .om-cc-wrap p {
312
- font-size: 16px;
313
- font-weight: 300;
314
- color: #333;
315
- margin: 1.2em 0;
316
- }
317
-
318
- .om-cc-wrap ul,
319
- .om-cc-wrap ol {
320
- margin: 1.6em 2.5em 2em;
321
- line-height: 1.5;
322
- font-size: 16px;
323
- font-weight: 300;
324
- }
325
-
326
- .om-cc-wrap ul {
327
- list-style: disc;
328
- }
329
-
330
- .om-cc-wrap li {
331
- margin-bottom: 0.8em;
332
- }
333
-
334
- .om-cc-wrap hr {
335
- margin: 2.2em 0;
336
- }
337
-
338
- .om-cc-wrap .logo {
339
- float: right;
340
- margin-top: 0.8em;
341
- border: 1px solid #ddd;
342
- }
343
-
344
- .om-cc-wrap .reasons {
345
- margin: 2.2em 400px 2.2em 2em;
346
- }
347
-
348
- .om-cc-wrap .reasons li {
349
- margin-bottom: 1.4em;
350
- }
351
-
352
- .om-cc-wrap .steps {
353
- clear: both;
354
- display: -webkit-box;
355
- display: -ms-flexbox;
356
- display: flex;
357
- -ms-flex-wrap: wrap;
358
- flex-wrap: wrap;
359
- }
360
-
361
- .om-cc-wrap .step {
362
- -webkit-box-flex: 1;
363
- -ms-flex-positive: 1;
364
- flex-grow: 1;
365
- -ms-flex-negative: 1;
366
- flex-shrink: 1;
367
- margin-bottom: 1.4em;
368
- padding: 0 1em 0 0;
369
- -ms-flex-preferred-size: 50%;
370
- flex-basis: 50%;
371
- -webkit-box-sizing: border-box;
372
- box-sizing: border-box;
373
- }
374
-
375
- .om-cc-wrap .step a {
376
- -webkit-box-shadow: rgba(0, 35, 60, 0.1) 3px 7px 13px 0px;
377
- box-shadow: rgba(0, 35, 60, 0.1) 3px 7px 13px 0px;
378
- border: 1px solid #efefef;
379
- display: block;
380
- }
381
-
382
- .om-cc-wrap .step a:hover {
383
- border-color: #d9d9d9;
384
- }
385
-
386
- .om-cc-wrap .step img {
387
- max-width: 100%;
388
- height: auto;
389
- display: block;
390
- }
391
-
392
- .om-cc-wrap .dashicons-yes {
393
- color: #19BE19;
394
- font-size: 26px;
395
- }
396
-
397
- .om-cc-wrap .button {
398
- background-color: #0078C3;
399
- border: 1px solid #005990;
400
- border-radius: 4px;
401
- color: #fff;
402
- font-size: 16px;
403
- font-weight: 600;
404
- height: auto;
405
- line-height: 1;
406
- margin-bottom: 10px;
407
- padding: 14px 30px;
408
- text-align: center;
409
- }
410
-
411
- .om-cc-wrap .button:hover,
412
- .om-cc-wrap .button:focus {
413
- background-color: #005990;
414
- color: #fff
415
- }
416
-
417
- @media only screen and (max-width: 767px) {
418
- .om-cc-wrap h1 {
419
- font-size: 26px;
420
- }
421
-
422
- .om-cc-wrap h2 {
423
- font-size: 22px;
424
- }
425
-
426
- .om-cc-wrap p {
427
- font-size: 14px;
428
- }
429
-
430
- .om-cc-wrap ul,
431
- .om-cc-wrap ol {
432
- font-size: 14px;
433
- }
434
-
435
- .om-cc-wrap .logo {
436
- width: 120px;
437
- }
438
-
439
- .om-cc-wrap .reasons {
440
- margin-right: 150px;
441
- }
442
- }
443
- </style>
444
- <div class="wrap omapi-page om-cc-wrap">
445
- <h1><?php esc_html_e( 'Grow Your Website with OptinMonster + Email Marketing', 'optin-monster-api' ); ?></h1>
446
- <p><?php esc_html_e( 'Wondering if email marketing is really worth your time?', 'optin-monster-api' ); ?></p>
447
- <p><?php echo wp_kses( __( 'Email is hands-down the most effective way to nurture leads and turn them into customers, with a return on investment (ROI) of <strong>$44 back for every $1 spent</strong> according to the Direct Marketing Association.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></p>
448
- <p><?php esc_html_e( 'Here are 3 big reasons why every smart business in the world has an email list:', 'optin-monster-api' ); ?></p>
449
- <a href="<?php echo esc_url( $this->sign_up ); ?>" target="_blank" rel="noopener noreferrer">
450
- <img width="350" class="logo" src="<?php echo $images_url .'constant_OM.png'; ?>" alt="<?php esc_attr_e( 'OptinMonster with Constant Contact - Try us free', 'optin-monster-api' ); ?>"/>
451
- </a>
452
- <ol class="reasons">
453
- <li><?php echo wp_kses( __( '<strong>Email is still #1</strong> - At least 91% of consumers check their email on a daily basis. You get direct access to your subscribers, without having to play by social media&#39;s rules and algorithms.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
454
- <li><?php echo wp_kses( __( '<strong>You own your email list</strong> - Unlike with social media, your list is your property and no one can revoke your access to it.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
455
- <li><?php echo wp_kses( __( '<strong>Email converts</strong> - People who buy products marketed through email spend 138% more than those who don&#39;t receive email offers.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
456
- </ol>
457
- <p><?php esc_html_e( 'That&#39;s why it&#39;s crucial to start collecting email addresses and building your list as soon as possible.', 'optin-monster-api' ); ?></p>
458
- <p>
459
- <?php
460
- printf(
461
- wp_kses(
462
- /* translators: %s - WPBeginners.com Guide to Email Lists URL. */
463
- __( 'For more details, see this guide on <a href="%s" target="_blank" rel="noopener noreferrer">why building your email list is so important</a>.', 'optin-monster-api' ),
464
- array(
465
- 'a' => array(
466
- 'href' => array(),
467
- 'target' => array(),
468
- 'rel' => array(),
469
- ),
470
- )
471
- ),
472
- 'https://optinmonster.com/beginners-guide-to-email-marketing/'
473
- );
474
- ?>
475
- </p>
476
- <hr/>
477
- <h2><?php esc_html_e( 'You&#39;ve Already Started - Here&#39;s the Next Step (It&#39;s Easy)', 'optin-monster-api' ); ?></h2>
478
- <p><?php esc_html_e( 'Here are the 3 things you need to build an email list:', 'optin-monster-api' ); ?></p>
479
- <ol>
480
- <li><?php esc_html_e( 'A Website or Blog', 'optin-monster-api' ); ?> <span class="dashicons dashicons-yes"></span></li>
481
- <?php // TODO: update the following line ?>
482
- <li><?php esc_html_e( 'High-Converting Form Builder', 'optin-monster-api' ); ?> <span class="dashicons dashicons-yes"></span></li>
483
- <li><strong><?php esc_html_e( 'The Best Email Marketing Service', 'optin-monster-api' ); ?></strong></li>
484
- </ol>
485
- <p><?php esc_html_e( 'With a powerful email marketing service like Constant Contact, you can instantly send out mass notifications and beautifully designed newsletters to engage your subscribers.', 'optin-monster-api' ); ?></p>
486
- <p>
487
- <a href="<?php echo esc_url( $this->sign_up ); ?>" class="button" target="_blank" rel="noopener noreferrer">
488
- <?php esc_html_e( 'Get Started with Constant Contact for Free', 'optin-monster-api' ); ?>
489
- </a>
490
- </p>
491
- <p><?php esc_html_e( 'OptinMonster plugin makes it fast and easy to capture all kinds of visitor information right from your WordPress site - even if you don&#39;t have a Constant Contact account.', 'optin-monster-api' ); ?></p>
492
- <p><?php esc_html_e( 'But when you combine OptinMonster with Constant Contact, you can nurture your contacts and engage with them even after they leave your website. When you use Constant Contact + OptinMonster together, you can:', 'optin-monster-api' ); ?></p>
493
- <ul>
494
- <li><?php esc_html_e( 'Seamlessly add new contacts to your email list', 'optin-monster-api' ); ?></li>
495
- <li><?php esc_html_e( 'Create and send professional email newsletters', 'optin-monster-api' ); ?></li>
496
- <li><?php esc_html_e( 'Get expert marketing and support', 'optin-monster-api' ); ?></li>
497
- </ul>
498
- <p>
499
- <a href="<?php echo esc_url( $this->sign_up ); ?>" target="_blank" rel="noopener noreferrer">
500
- <strong><?php esc_html_e( 'Try Constant Contact Today', 'optin-monster-api' ); ?></strong>
501
- </a>
502
- </p>
503
- <hr/>
504
- <h2><?php esc_html_e( 'OptinMonster Makes List Building Easy', 'optin-monster-api' ); ?></h2>
505
- <p><?php esc_html_e( 'When creating OptinMonster, our goal was to make a conversion optimization tool that was both EASY and POWERFUL.', 'optin-monster-api' ); ?></p>
506
- <p><?php esc_html_e( 'Here&#39;s how it works.', 'optin-monster-api' ); ?></p>
507
- <div class="steps">
508
- <div class="step1 step">
509
- <a href="<?php echo $images_url . 'om-step-1.png'; ?>"><img src="<?php echo $images_url . 'om-step-1-sm.png'; ?>"></a>
510
- <p><?php esc_html_e( '1. Select a design from our beautiful, high-converting template library.', 'optin-monster-api' ); ?></p>
511
- </div>
512
- <div class="step2 step">
513
- <a href="<?php echo $images_url . 'om-step-2.png'; ?>"><img src="<?php echo $images_url . 'om-step-2-sm.png'; ?>"></a>
514
- <p><?php esc_html_e( '2. Drag and drop elements to completely customize the look and feel of your campaign.', 'optin-monster-api' ); ?></p>
515
- </div>
516
- <div class="step3 step">
517
- <a href="<?php echo $images_url . 'om-step-3.png'; ?>"><img src="<?php echo $images_url . 'om-step-3-sm.png'; ?>"></a>
518
- <p><?php esc_html_e( '3. Connect your Constant Contact email list.', 'optin-monster-api' ); ?></p>
519
- </div>
520
- <div class="step4 step">
521
- <a href="<?php echo $images_url . 'om-step-4.png'; ?>"><img src="<?php echo $images_url . 'om-step-4-sm.png'; ?>"></a>
522
- <p><?php esc_html_e( '4. Sync your campaign to your WordPress site, then hit Go Live.', 'optin-monster-api' ); ?></p>
523
- </div>
524
- </div>
525
- <p><?php esc_html_e( 'It doesn&#39;t matter what kind of business you run, what kind of website you have, or what industry you are in - you need to start building your email list today.', 'optin-monster-api' ); ?></p>
526
- <p><?php esc_html_e( 'With Constant Contact + OptinMonster, growing your list is easy.', 'optin-monster-api' ); ?></p>
527
- <p>
528
- <a href="<?php echo esc_url( $this->sign_up ); ?>" target="_blank" rel="noopener noreferrer">
529
- <strong><?php esc_html_e( 'Try Constant Contact Today', 'optin-monster-api' ); ?></strong>
530
- </a>
531
- </p>
532
- </div>
533
- <?php
534
  }
535
 
536
  }
98
  * @since 1.6.0
99
  */
100
  public function register_cc_page() {
101
+ $slug = 'optin-monster-constant-contact';
102
+ $is_current = isset( $_GET['page'] ) && $slug === $_GET['page'];
103
+ $parent_slug = $this->base->menu->parent_slug();
104
+ if ( ! $is_current ) {
105
+ $parent_slug .= '-no-menu';
106
+ }
107
 
108
  $this->hook = add_submenu_page(
109
+ $parent_slug, // parent slug
110
  esc_html__( 'OptinMonster with Constant Contact', 'optin-monster-api' ), // page title,
111
  esc_html__( 'OptinMonster + Constant Contact', 'optin-monster-api' ),
112
  apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $slug ), // cap
148
 
149
  // Only show on the main dashboard page (wp-admin/index.php)
150
  // or any OptinMonster plugin-specific screen.
151
+ $can_show = $is_om_page = $this->base->menu->is_om_page();
152
  if ( ! $can_show ) {
153
  $can_show = function_exists( 'get_current_screen' ) && 'dashboard' === get_current_screen()->id;
154
  }
157
  return;
158
  }
159
 
160
+ $connect = $this->base->menu->get_settings_link();
161
+ $learn_more = $this->base->menu->admin_page_url( array( 'page' => 'optin-monster-constant-contact' ) );
162
 
163
  // Output the notice message.
164
  ?>
197
  );
198
  ?>
199
  </p>
200
+ <style type="text/css">
201
+ .om-constant-contact-notice p:first-of-type {
202
+ margin: 16px 0 8px;
203
+ }
204
+
205
+ .om-constant-contact-notice p:last-of-type {
206
+ margin: 8px 0 16px;
207
+ }
208
+
209
+ .om-constant-contact-notice .button-primary,
210
+ .om-constant-contact-notice .button-secondary {
211
+ display: inline-block;
212
+ margin: 0 10px 0 0;
213
+ }
214
+ </style>
215
+ <script type="text/javascript">
216
+ jQuery( function ( $ ) {
217
+ $( document ).on( 'click', '.om-constant-contact-notice button', function ( event ) {
218
+ event.preventDefault();
219
+ $.post( ajaxurl, { action: 'om_constant_contact_dismiss' } );
220
+ $( '.om-constant-contact-notice' ).remove();
221
+ } );
 
 
 
 
222
  } );
223
+ </script>
224
+ </div>
225
  <?php
226
  }
227
 
242
  * @since 1.6.0
243
  */
244
  public function assets() {
245
+ add_action( 'admin_enqueue_scripts', array( $this->base->menu, 'styles' ) );
246
  add_filter( 'admin_footer_text', array( $this, 'footer' ) );
247
  add_action( 'in_admin_header', array( $this->base->menu, 'output_plugin_screen_banner' ) );
248
  }
249
 
 
 
 
 
 
 
 
 
 
250
  /**
251
  * Customizes the footer text on the OptinMonster settings page.
252
  *
271
  * @since 1.6.0
272
  */
273
  public function display_page() {
274
+ $this->base->output_view(
275
+ 'constantcontact.php',
276
+ array(
277
+ 'images_url' => esc_url( $this->base->url . 'assets/css/images/' ),
278
+ 'signup_url' => esc_url( $this->sign_up ),
279
+ )
280
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  }
282
 
283
  }
OMAPI/Content.php CHANGED
@@ -56,6 +56,24 @@ class OMAPI_Content {
56
  */
57
  protected $view;
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  /**
60
  * Primary class constructor.
61
  *
@@ -67,14 +85,15 @@ class OMAPI_Content {
67
  $this->set();
68
 
69
  // Load actions and filters.
70
- add_action( 'optin_monster_api_content_before', array( $this, 'form_start' ), 0, 2 );
71
- add_action( 'optin_monster_api_content_after', array( $this, 'form_end' ), 9999 );
72
- add_action( 'optin_monster_api_content_api', array( $this, 'api' ), 10, 2 );
73
- add_action( 'optin_monster_api_content_optins', array( $this, 'optins' ), 10, 2 );
74
- add_action( 'optin_monster_api_content_settings', array( $this, 'settings' ), 10, 2 );
75
- add_action( 'optin_monster_api_content_support', array( $this, 'support' ), 10, 2 );
76
- add_action( 'optin_monster_api_content_migrate', array( $this, 'migrate' ), 10, 2 );
77
- add_action( 'optin_monster_api_content_woocommerce', array( $this, 'woocommerce' ), 10, 2 );
 
78
 
79
  }
80
 
@@ -88,110 +107,177 @@ class OMAPI_Content {
88
  self::$instance = $this;
89
  $this->base = OMAPI::get_instance();
90
  $this->view = isset( $_GET['optin_monster_api_view'] ) ? stripslashes( $_GET['optin_monster_api_view'] ) : $this->base->get_view();
 
91
  $this->optin = isset( $_GET['optin_monster_api_id'] ) ? $this->base->get_optin( absint( $_GET['optin_monster_api_id'] ) ) : false;
92
 
93
  }
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  /**
96
  * Loads the starting form HTML for the panel content.
97
  *
98
  * @since 1.0.0
99
  *
100
- * @param string $id The panel ID we are targeting.
101
- * @param string $panel The panel name we are targeting.
 
 
102
  */
103
- public function form_start( $id, $panel ) {
 
 
 
104
 
105
- if ( $this->view == 'support' ) :
106
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  <h3><?php echo esc_html( $panel ); ?></h3>
108
- <?php
109
- else:
110
- ?>
111
- <form id="omapi-form-<?php echo sanitize_html_class( $id ); ?>" class="omapi-form" method="post" action="<?php echo esc_attr( stripslashes( $_SERVER['REQUEST_URI'] ) ); ?>">
112
  <?php wp_nonce_field( 'omapi_nonce_' . $id, 'omapi_nonce_' . $id ); ?>
113
  <input type="hidden" name="omapi_panel" value="<?php echo $id; ?>" />
114
  <input type="hidden" name="omapi_save" value="true" />
115
- <?php if ( 'settings' == $this->view ) : ?>
116
  <input type="hidden" name="omapi[<?php echo esc_attr( $this->view ); ?>][wpform]" value="true" />
117
  <?php endif; ?>
118
  <h3>
119
- <?php if ( isset( $_GET['optin_monster_api_action'] ) && 'edit' == $_GET['optin_monster_api_action'] ) : ?>
120
- <?php printf( esc_html__( 'Output Settings for %s', 'optin-monster-api' ), esc_html( $this->optin->post_title ) ); ?>
121
- <span class="omapi-back"><a class="button button-secondary button-small" href="<?php echo esc_url_raw( add_query_arg( array( 'optin_monster_api_view' => 'optins' ), admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ); ?>" title="<?php esc_attr_e( 'Back to campaign overview', 'optin-monster-api' ); ?>"><?php esc_html_e( 'Back to Overview', 'optin-monster-api' ); ?></a></span>
 
 
 
 
 
 
 
 
 
 
122
  <?php else : ?>
123
- <?php echo esc_html( $panel ); ?>
124
  <?php endif; ?>
125
  </h3>
126
- <?php
127
  endif;
128
 
129
  // Action to load success/reset messages.
 
130
  do_action( 'optin_monster_api_messages_' . $id );
131
-
132
  }
133
 
134
  /**
135
  * Loads the ending form HTML for the panel content.
136
  *
137
  * @since 1.0.0
 
 
 
 
 
138
  */
139
- public function form_end() {
 
 
 
 
140
  $hide_submit_button_class = apply_filters( 'omapi_hide_submit_buttom', false ) ? 'omapi-hidden' : '';
 
141
  // Load different form buttons based on if credentials have been supplied or not.
142
  if ( ! $this->base->get_api_credentials() && 'support' !== $this->view ) :
143
- ?>
144
  <p class="submit <?php echo $hide_submit_button_class; ?>">
145
- <input class="button button-primary" type="submit" name="omapi_submit" value="<?php esc_attr_e( 'Connect to OptinMonster', 'optin-monster-api' ); ?>" tabindex="749" />
146
  </p>
147
  </form>
148
- <?php
149
- elseif ( 'optins' == $this->view ) :
150
- if ( isset( $_GET['optin_monster_api_action'] ) && 'edit' == $_GET['optin_monster_api_action'] ) :
151
- ?>
152
  <p class="submit">
153
- <input class="button button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Save Settings', 'optin-monster-api' ); ?>" tabindex="749" />
154
  </p>
155
  </form>
156
- <?php
157
  else :
158
- ?>
159
  <p class="submit">
160
- <input class="button button-primary" type="submit" name="omapi_refresh" value="<?php esc_attr_e( 'Refresh Campaigns', 'optin-monster-api' ); ?>" tabindex="749" />
161
- <a class="button button-secondary" href="<?php echo wp_nonce_url( esc_url_raw( add_query_arg( array( 'optin_monster_api_view' => $this->view, 'optin_monster_api_action' => 'cookies' ), admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ), 'omapi-action' ); ?>" title="<?php esc_attr_e( 'Clear Local Cookies', 'optin-monster-api' ); ?>"><?php esc_html_e( 'Clear Local Cookies', 'optin-monster-api' ); ?></a>
162
  </p>
163
  </form>
164
- <?php
165
  endif;
166
- elseif ( 'migrate' == $this->view ) :
167
  ?>
168
  </form>
169
- <?php
170
- elseif ( 'support' == $this->view ) :
171
 
172
  // You get nothing.
173
 
174
  elseif ( 'woocommerce' === $this->view ) :
175
- ?>
176
  <p class="submit">
177
  <?php if ( OMAPI_WooCommerce::is_minimum_version() ) : ?>
178
  <?php if ( OMAPI_WooCommerce::is_connected() ) : ?>
179
- <input class="button button-primary" type="submit" name="omapi_woocommerce_disconnect" value="<?php esc_attr_e( 'Disconnect WooCommerce', 'optin-monster-api' ); ?>" tabindex="749" />
180
  <?php else : ?>
181
- <input class="button button-primary" type="submit" name="omapi_woocommerce_connect" value="<?php esc_attr_e( 'Connect WooCommerce', 'optin-monster-api' ); ?>" tabindex="749" />&nbsp;
182
- <input class="button button-secondary" type="submit" name="omapi[woocommerce][autogenerate]" value="<?php esc_attr_e( 'Auto-Generate Keys', 'optin-monster-api' ); ?>" tabindex="749" />
 
 
183
  <?php endif; ?>
184
  <?php endif; ?>
185
  </p>
186
  </form>
187
- <?php
188
  else :
189
- ?>
190
  <p class="submit <?php echo $hide_submit_button_class; ?>">
191
- <input class="button button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Save Settings', 'optin-monster-api' ); ?>" tabindex="749" />
192
  </p>
193
  </form>
194
- <?php
195
  endif;
196
  }
197
 
@@ -201,9 +287,13 @@ class OMAPI_Content {
201
  * @since 1.0.0
202
  *
203
  * @param string $panel The panel name we are targeting.
204
- * @param object $object The menu object (useful for settings helpers).
 
205
  */
206
- public function api( $panel, $object ) {
 
 
 
207
 
208
  $link = $this->base->menu->get_action_link();
209
  $text = $this->base->menu->has_trial_link()
@@ -212,9 +302,12 @@ class OMAPI_Content {
212
 
213
  $credentials = $this->base->get_api_credentials();
214
 
215
- if ( ! $credentials ) : ?>
216
- <p class="omapi-red"><strong><?php esc_html_e( 'You must authenticate your OptinMonster account before you can use OptinMonster on this site.', 'optin-monster-api' ); ?></strong></p>
217
- <p><em><?php printf( __( 'Need an OptinMonster account? <a href="%s" title="Click here to learn more about OptinMonster" target="_blank">%s</a>', 'optin-monster-api' ), $link, $text ); ?></em></p>
 
 
 
218
  <?php endif; ?>
219
 
220
  <?php echo $object->get_setting_ui( 'api', 'apikey' ); ?>
@@ -242,53 +335,58 @@ class OMAPI_Content {
242
  * @since 1.0.0
243
  *
244
  * @param string $panel The panel name we are targeting.
245
- * @param object $object The menu object (useful for settings helpers).
 
246
  */
247
- public function optins( $panel, $object ) {
 
 
 
248
 
249
- $optin_view = isset( $_GET['optin_monster_api_action'] ) && 'edit' == $_GET['optin_monster_api_action'] ? 'edit' : 'overview';
250
- if ( 'edit' == $optin_view ) {
251
- $this->optin_edit( $object );
252
- } else {
253
- $this->optin_overview( $object );
254
  }
255
 
 
256
  }
257
 
258
  /**
259
  * Shows the optins loaded on the site.
260
  *
261
  * @since 1.0.0
262
- *
263
- * @param object $object The menu object (useful for settings helpers).
264
  */
265
- public function optin_overview( $object ) {
 
 
 
 
 
 
 
 
 
 
 
266
 
267
- $optins = $this->base->get_optins();
268
- $i = 0;
269
- if ( ! empty( $optins ) ) :
270
- ?>
271
- <?php foreach ( $optins as $optin ) : $class = 0 == $i ? ' omapi-optin-first' : '';
272
- if ( (bool) get_post_meta( $optin->ID, '_omapi_enabled', true ) ) {
273
- $status = '<span class="omapi-green">' . esc_html__( 'Live', 'optin-monster-api' ) . '</span>';
274
- $status_tooltip = esc_html__( 'This campaign is embedded on your site based on your output settings and will load subject to the display rules configured in the campaign builder.', 'optin-monster-api' );
275
- } else {
276
- $status = '<span class="omapi-red">' . esc_html__( 'Disabled', 'optin-monster-api' ) . '</span>';
277
- $status_tooltip = esc_html__( 'This campaign is not embedded by the plugin anywhere on this site.', 'optin-monster-api' );
278
- }
279
- ?>
280
- <p class="omapi-optin<?php echo $class; ?>">
281
- <a href="<?php echo esc_url_raw( add_query_arg( array( 'optin_monster_api_view' => $this->view, 'optin_monster_api_action' => 'edit', 'optin_monster_api_id' => $optin->ID ), admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ); ?>" title="<?php printf( esc_attr__( 'Manage output settings for %s', 'optin-monster-api' ), $optin->post_title ); ?>"><?php echo $optin->post_title; ?></a>
282
- <span class="omapi-status omapi-has-tooltip" data-toggle="tooltip" data-placement="bottom" title="<?php echo $status_tooltip; ?>"><?php echo $status; ?></span><br>
283
- <span class="omapi-slug omapi-has-tooltip" data-toggle="tooltip" data-placement="bottom" title="<?php esc_html_e( 'The unique slug of this campaign. Used for shortcodes and embed scripts.', 'optin-monster-api' ); ?>"><?php echo $optin->post_name; ?></span>
284
- <span class="omapi-links"><?php echo $this->get_optin_links( $optin->ID ); ?></span>
285
- </p>
286
- <?php $i++; endforeach; ?>
287
  <?php else : ?>
288
- <p><strong><?php esc_html_e( 'No campaigns could be retrieved for this site.', 'optin-monster-api' ); ?></strong></p>
289
- <?php
290
  endif;
291
-
292
  }
293
 
294
  /**
@@ -297,12 +395,15 @@ class OMAPI_Content {
297
  * @since 1.0.0
298
  *
299
  * @param string $panel The panel name we are targeting.
300
- * @param object $object The menu object (useful for settings helpers).
 
301
  */
302
- public function settings( $panel, $object ) {
 
 
 
303
 
304
  echo $object->get_setting_ui( 'settings', 'cookies' );
305
-
306
  }
307
 
308
  /**
@@ -311,13 +412,23 @@ class OMAPI_Content {
311
  * @since 1.7.0
312
  *
313
  * @param string $panel The panel name we are targeting.
314
- * @param object $object The menu object (useful for settings helpers).
 
315
  */
316
- public function woocommerce( $panel, $object ) {
317
  echo $object->get_setting_ui( 'woocommerce', 'settings' ); // WPCS: XSS ok.
318
  }
319
 
320
- public function support( $panel, $object ) {
 
 
 
 
 
 
 
 
 
321
 
322
  echo $object->get_setting_ui( 'support', 'video' );
323
  echo $object->get_setting_ui( 'support', 'links' );
@@ -330,11 +441,12 @@ class OMAPI_Content {
330
  *
331
  * @since 1.0.0
332
  *
333
- * @param object $object The menu object (useful for settings helpers).
 
334
  */
335
  public function optin_edit( $object ) {
336
 
337
- //Check for existing optins
338
  if ( $this->optin ) {
339
  $type = get_post_meta( $this->optin->ID, '_omapi_type', true );
340
  echo $object->get_setting_ui( 'optins', 'enabled' );
@@ -343,9 +455,8 @@ class OMAPI_Content {
343
  if ( OMAPI_Utils::is_inline_type( $type ) ) {
344
  echo $object->get_setting_ui( 'optins', 'automatic' );
345
  echo $object->get_setting_ui( 'optins', 'automatic_shortcode' );
346
- } else {
347
- echo $object->get_setting_ui( 'optins', 'global' );
348
  }
 
349
  echo $object->get_setting_ui( 'optins', 'users' );
350
  }
351
 
@@ -395,10 +506,9 @@ class OMAPI_Content {
395
  echo $object->get_setting_ui( 'toggle', 'advanced-end' );
396
  }
397
 
398
- if ( 'sidebar' == $type || 'inline' == $type ) {
399
  echo $object->get_setting_ui( 'note', 'sidebar_widget_notice' );
400
  }
401
-
402
  } else {
403
  ?>
404
  <p><strong><?php esc_html_e( 'No campaign could be retrieved for the ID specified.', 'optin-monster-api' ); ?></strong></p>
@@ -422,14 +532,31 @@ class OMAPI_Content {
422
  $status = (bool) get_post_meta( $optin_id, '_omapi_enabled', true );
423
  $status_link = $status ? esc_html__( 'Disable', 'optin-monster-api' ) : esc_html__( 'Go Live', 'optin-monster-api' );
424
  $status_desc = $status ? esc_attr__( 'Disable this campaign', 'optin-monster-api' ) : esc_attr__( 'Go live with this campaign', 'optin-monster-api' );
425
- $links = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  $links['editd'] = '<a href="' . esc_url_raw( OPTINMONSTER_APP_URL . '/campaigns/' . $slug . '/edit/' ) . '" title="' . esc_attr__( 'Edit this campaign on the OptinMonster App', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Edit Design', 'optin-monster-api' ) . '</a>';
427
- $links['edito'] = '<a href="' . esc_url_raw( add_query_arg( array( 'optin_monster_api_view' => $this->view, 'optin_monster_api_action' => 'edit', 'optin_monster_api_id' => $optin_id ), admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ) . '" title="' . esc_attr__( 'Edit the output settings for this campaign', 'optin-monster-api' ) . '">' . esc_html__( 'Edit Output Settings', 'optin-monster-api' ) . '</a>';
428
- $links['status'] = '<a href="' . wp_nonce_url( esc_url_raw( add_query_arg( array( 'optin_monster_api_view' => $this->view, 'optin_monster_api_action' => 'status', 'optin_monster_api_id' => $optin_id ), admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ), 'omapi-action' ) . '" title="' . $status_desc . '">' . $status_link . '</a>';
429
 
430
  $links = apply_filters( 'optin_monster_api_action_links', $links, $optin_id );
431
- return implode( ' | ', (array) $links );
432
 
 
433
  }
434
 
435
  public function migrate() {
56
  */
57
  protected $view;
58
 
59
+ /**
60
+ * The current action slug
61
+ *
62
+ * @since 1.9.10
63
+ *
64
+ * @var string
65
+ */
66
+ protected $action;
67
+
68
+ /**
69
+ * The list of campaigns for the campaign overview.
70
+ *
71
+ * @since 1.9.10
72
+ *
73
+ * @var array
74
+ */
75
+ protected $campaigns = array();
76
+
77
  /**
78
  * Primary class constructor.
79
  *
85
  $this->set();
86
 
87
  // Load actions and filters.
88
+ add_filter( 'admin_body_class', array( $this, 'admin_body_classes' ) );
89
+ add_action( 'optin_monster_api_content_before', array( $this, 'form_start' ), 0, 4 );
90
+ add_action( 'optin_monster_api_content_after', array( $this, 'form_end' ), 9999, 4 );
91
+ add_action( 'optin_monster_api_content_api', array( $this, 'api' ), 10, 3 );
92
+ add_action( 'optin_monster_api_content_optins', array( $this, 'optins' ), 10, 3 );
93
+ add_action( 'optin_monster_api_content_settings', array( $this, 'settings' ), 10, 3 );
94
+ add_action( 'optin_monster_api_content_support', array( $this, 'support' ), 10, 3 );
95
+ add_action( 'optin_monster_api_content_migrate', array( $this, 'migrate' ), 10, 3 );
96
+ add_action( 'optin_monster_api_content_woocommerce', array( $this, 'woocommerce' ), 10, 3 );
97
 
98
  }
99
 
107
  self::$instance = $this;
108
  $this->base = OMAPI::get_instance();
109
  $this->view = isset( $_GET['optin_monster_api_view'] ) ? stripslashes( $_GET['optin_monster_api_view'] ) : $this->base->get_view();
110
+ $this->action = isset( $_GET['optin_monster_api_action'] ) ? stripslashes( $_GET['optin_monster_api_action'] ) : '';
111
  $this->optin = isset( $_GET['optin_monster_api_id'] ) ? $this->base->get_optin( absint( $_GET['optin_monster_api_id'] ) ) : false;
112
 
113
  }
114
 
115
+ /**
116
+ * Adds om admin body classes
117
+ *
118
+ * @since 1.9.10
119
+ *
120
+ * @param array $classes
121
+ *
122
+ * @return array
123
+ */
124
+ public function admin_body_classes( $classes ) {
125
+ if ( $this->view ) {
126
+ $classes .= ' omapi-view-'. $this->view .' ';
127
+ }
128
+
129
+ if ( $this->action ) {
130
+ $classes .= ' omapi-action-'. $this->action .' ';
131
+ }
132
+
133
+ return $classes;
134
+ }
135
+
136
  /**
137
  * Loads the starting form HTML for the panel content.
138
  *
139
  * @since 1.0.0
140
  *
141
+ * @param string $id The panel ID we are targeting.
142
+ * @param string $panel The panel name we are targeting.
143
+ * @param object $object The menu object.
144
+ * @param bool $active Whether current panel is active.
145
  */
146
+ public function form_start( $id, $panel, $object, $active ) {
147
+ if ( empty( $active ) ) {
148
+ return;
149
+ }
150
 
151
+ $url = stripslashes( $_SERVER['REQUEST_URI'] );
152
+ $url = add_query_arg( 'optin_monster_api_view', $id, $url );
153
+
154
+ if ( 'optins' === $this->view && 'edit' !== $this->action ) {
155
+
156
+ $args = array(
157
+ // Allow seeing the hidden drafts via query arg (for debugging purposes)
158
+ 'post_status' => ! empty( $_GET['post_status'] )
159
+ ? explode( ',', sanitize_text_field( $_GET['post_status'] ) )
160
+ : 'publish',
161
+ );
162
+
163
+ $this->campaigns = $this->base->get_optins( $args );
164
+ if ( ! empty( $this->campaigns ) ) {
165
+ $panel .= ' (' . count( $this->campaigns ) . ')';
166
+ }
167
+ }
168
+
169
+ if ( 'support' === $this->view ) :
170
+ ?>
171
  <h3><?php echo esc_html( $panel ); ?></h3>
172
+ <?php
173
+ else :
174
+ ?>
175
+ <form id="omapi-form-<?php echo sanitize_html_class( $id ); ?>" class="omapi-form" method="post" action="<?php echo esc_url( $url ); ?>">
176
  <?php wp_nonce_field( 'omapi_nonce_' . $id, 'omapi_nonce_' . $id ); ?>
177
  <input type="hidden" name="omapi_panel" value="<?php echo $id; ?>" />
178
  <input type="hidden" name="omapi_save" value="true" />
179
+ <?php if ( 'settings' === $this->view ) : ?>
180
  <input type="hidden" name="omapi[<?php echo esc_attr( $this->view ); ?>][wpform]" value="true" />
181
  <?php endif; ?>
182
  <h3>
183
+ <?php if ( 'edit' === $this->action ) : ?>
184
+ <?php if ( ! empty( $this->optin->ID ) ) : ?>
185
+ <?php printf( esc_html__( 'Output Settings for %s', 'optin-monster-api' ), esc_html( $this->optin->post_title ) ); ?>
186
+ <?php if ( ! empty( $this->optin->post_status ) && 'publish' !== $this->optin->post_status ) : ?>
187
+ <?php esc_html_e( ' (Paused)', 'optin-monster-api' ); ?>
188
+ <?php endif; ?>
189
+ <?php else : ?>
190
+ <?php esc_html_e( 'Missing Campaign!', 'optin-monster-api' ); ?>
191
+ <?php endif; ?>
192
+ <span class="omapi-back"><a class="button button-secondary button-small" href="<?php echo esc_url_raw( $this->base->menu->get_settings_link( 'optins' ) ); ?>" title="<?php esc_attr_e( 'Back to campaign overview', 'optin-monster-api' ); ?>"><?php esc_html_e( 'Back to Overview', 'optin-monster-api' ); ?></a></span>
193
+ <?php if ( ! empty( $this->optin->post_name ) ) : ?>
194
+ <span class="omapi-slug omapi-has-tooltip" data-toggle="tooltip" data-placement="bottom" title="<?php esc_html_e( 'The unique slug of this campaign. Used for shortcodes and embed scripts.', 'optin-monster-api' ); ?>"><?php echo $this->optin->post_name; ?></span>
195
+ <?php endif; ?>
196
  <?php else : ?>
197
+ <?php echo esc_html( $panel ); ?>
198
  <?php endif; ?>
199
  </h3>
200
+ <?php
201
  endif;
202
 
203
  // Action to load success/reset messages.
204
+ // Deprecated. We now use the WP hook (all_admin_notices).
205
  do_action( 'optin_monster_api_messages_' . $id );
 
206
  }
207
 
208
  /**
209
  * Loads the ending form HTML for the panel content.
210
  *
211
  * @since 1.0.0
212
+ *
213
+ * @param string $id The panel ID we are targeting.
214
+ * @param string $panel The panel name we are targeting.
215
+ * @param object $object The menu object.
216
+ * @param bool $active Whether current panel is active.
217
  */
218
+ public function form_end( $id, $panel, $object, $active ) {
219
+ if ( empty( $active ) ) {
220
+ return;
221
+ }
222
+
223
  $hide_submit_button_class = apply_filters( 'omapi_hide_submit_buttom', false ) ? 'omapi-hidden' : '';
224
+
225
  // Load different form buttons based on if credentials have been supplied or not.
226
  if ( ! $this->base->get_api_credentials() && 'support' !== $this->view ) :
227
+ ?>
228
  <p class="submit <?php echo $hide_submit_button_class; ?>">
229
+ <input class="button button-primary" type="submit" name="omapi_submit" value="<?php esc_attr_e( 'Connect to OptinMonster', 'optin-monster-api' ); ?>" />
230
  </p>
231
  </form>
232
+ <?php
233
+ elseif ( 'optins' === $this->view ) :
234
+ if ( 'edit' === $this->action ) :
235
+ ?>
236
  <p class="submit">
237
+ <input class="button button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Save Settings', 'optin-monster-api' ); ?>" />
238
  </p>
239
  </form>
240
+ <?php
241
  else :
242
+ ?>
243
  <p class="submit">
244
+ <input class="button button-primary" type="submit" name="omapi_refresh" value="<?php esc_attr_e( 'Refresh Campaigns', 'optin-monster-api' ); ?>" />
245
+ <a class="button button-secondary" href="<?php echo wp_nonce_url( esc_url_raw( $this->base->menu->get_settings_link( $this->view, array( 'optin_monster_api_action' => 'cookies' ) ) ), 'omapi-action' ); ?>" title="<?php esc_attr_e( 'Clear Local Cookies', 'optin-monster-api' ); ?>"><?php esc_html_e( 'Clear Local Cookies', 'optin-monster-api' ); ?></a>
246
  </p>
247
  </form>
248
+ <?php
249
  endif;
250
+ elseif ( 'migrate' === $this->view ) :
251
  ?>
252
  </form>
253
+ <?php
254
+ elseif ( 'support' === $this->view ) :
255
 
256
  // You get nothing.
257
 
258
  elseif ( 'woocommerce' === $this->view ) :
259
+ ?>
260
  <p class="submit">
261
  <?php if ( OMAPI_WooCommerce::is_minimum_version() ) : ?>
262
  <?php if ( OMAPI_WooCommerce::is_connected() ) : ?>
263
+ <input class="button button-secondary" type="submit" name="omapi_woocommerce_disconnect" value="<?php esc_attr_e( 'Disconnect WooCommerce', 'optin-monster-api' ); ?>" />
264
  <?php else : ?>
265
+ <input class="button button-primary" type="submit" name="omapi[woocommerce][autogenerate]" value="<?php esc_attr_e( 'Auto-Generate Keys + Connect WooCommerce', 'optin-monster-api' ); ?>" />
266
+ <span class="manually-connect-wc">
267
+ <?php printf( esc_html__( 'or %1$sclick here%2$s to enter the the consumer key/secret pair manually.', 'optin-monster-api' ), '<a href="#" id="omapiShowApiKeys">', '</a>' ); ?>
268
+ </span>
269
  <?php endif; ?>
270
  <?php endif; ?>
271
  </p>
272
  </form>
273
+ <?php
274
  else :
275
+ ?>
276
  <p class="submit <?php echo $hide_submit_button_class; ?>">
277
+ <input class="button button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Save Settings', 'optin-monster-api' ); ?>" />
278
  </p>
279
  </form>
280
+ <?php
281
  endif;
282
  }
283
 
287
  * @since 1.0.0
288
  *
289
  * @param string $panel The panel name we are targeting.
290
+ * @param object $object The menu object.
291
+ * @param bool $active Whether current panel is active.
292
  */
293
+ public function api( $panel, $object, $active ) {
294
+ if ( empty( $active ) ) {
295
+ return;
296
+ }
297
 
298
  $link = $this->base->menu->get_action_link();
299
  $text = $this->base->menu->has_trial_link()
302
 
303
  $credentials = $this->base->get_api_credentials();
304
 
305
+ if ( ! $credentials ) :
306
+ ?>
307
+ <?php if ( ! $credentials && ! isset( $_GET['om-bypass-api-check'] ) ) : ?>
308
+ <p class="omapi-red"><strong><?php esc_html_e( 'You must authenticate your OptinMonster account before you can use OptinMonster on this site.', 'optin-monster-api' ); ?></strong></p>
309
+ <?php endif; ?>
310
+ <p><em><?php printf( __( 'Need an OptinMonster account? <a href="%1$s" title="Click here to learn more about OptinMonster" target="_blank">%2$s</a>', 'optin-monster-api' ), $link, $text ); ?></em></p>
311
  <?php endif; ?>
312
 
313
  <?php echo $object->get_setting_ui( 'api', 'apikey' ); ?>
335
  * @since 1.0.0
336
  *
337
  * @param string $panel The panel name we are targeting.
338
+ * @param object $object The menu object.
339
+ * @param bool $active Whether current panel is active.
340
  */
341
+ public function optins( $panel, $object, $active ) {
342
+ if ( empty( $active ) ) {
343
+ return;
344
+ }
345
 
346
+ if ( 'edit' === $this->action ) {
347
+ return $this->optin_edit( $object );
 
 
 
348
  }
349
 
350
+ $this->optin_overview();
351
  }
352
 
353
  /**
354
  * Shows the optins loaded on the site.
355
  *
356
  * @since 1.0.0
 
 
357
  */
358
+ public function optin_overview() {
359
+ $first = true;
360
+ if ( ! empty( $this->campaigns ) ) : ?>
361
+ <?php foreach ( $this->campaigns as $optin ) :
362
+ $class = $first ? ' omapi-optin-first' : '';
363
+ if ( (bool) get_post_meta( $optin->ID, '_omapi_enabled', true ) ) {
364
+ $status = '<span>' . esc_html__( 'Enabled', 'optin-monster-api' ) . '</span>';
365
+ $status_tooltip = esc_html__( 'This campaign is enabled on this site.', 'optin-monster-api' );
366
+ } else {
367
+ $status = '<span style="opacity: .65;">' . esc_html__( 'Disabled', 'optin-monster-api' ) . '</span>';
368
+ $status_tooltip = esc_html__( 'This campaign is not embedded by the plugin anywhere on this site.', 'optin-monster-api' );
369
+ }
370
 
371
+ $url = $this->base->menu->get_settings_link(
372
+ $this->view,
373
+ array(
374
+ 'optin_monster_api_action' => 'edit',
375
+ 'optin_monster_api_id' => $optin->ID,
376
+ )
377
+ );
378
+ ?>
379
+ <div class="omapi-optin<?php echo $class; ?>">
380
+ <a href="<?php echo esc_url_raw( $url ); ?>" title="<?php printf( esc_attr__( 'Manage output settings for %s', 'optin-monster-api' ), $optin->post_title ); ?>"><?php echo $optin->post_title; ?></a>
381
+ <span tabindex="0" class="omapi-status omapi-has-tooltip" data-toggle="tooltip" data-placement="bottom" title="<?php echo $status_tooltip; ?>"><?php echo $status; ?></span><br>
382
+ <span tabindex="0" class="omapi-slug omapi-has-tooltip" data-toggle="tooltip" data-placement="bottom" title="<?php esc_html_e( 'The unique slug of this campaign. Used for shortcodes and embed scripts.', 'optin-monster-api' ); ?>"><?php echo $optin->post_name; ?></span>
383
+ <span class="omapi-links"><?php echo $this->get_optin_links( $optin->ID ); ?></span>
384
+ </div>
385
+ <?php $first = false; endforeach; ?>
 
 
 
 
 
386
  <?php else : ?>
387
+ <p><strong><?php esc_html_e( 'No campaigns could be retrieved for this site.', 'optin-monster-api' ); ?></strong></p>
388
+ <?php
389
  endif;
 
390
  }
391
 
392
  /**
395
  * @since 1.0.0
396
  *
397
  * @param string $panel The panel name we are targeting.
398
+ * @param object $object The menu object.
399
+ * @param bool $active Whether current panel is active.
400
  */
401
+ public function settings( $panel, $object, $active ) {
402
+ if ( empty( $active ) ) {
403
+ return;
404
+ }
405
 
406
  echo $object->get_setting_ui( 'settings', 'cookies' );
 
407
  }
408
 
409
  /**
412
  * @since 1.7.0
413
  *
414
  * @param string $panel The panel name we are targeting.
415
+ * @param object $object The menu object.
416
+ * @param bool $active Whether current panel is active.
417
  */
418
+ public function woocommerce( $panel, $object, $active ) {
419
  echo $object->get_setting_ui( 'woocommerce', 'settings' ); // WPCS: XSS ok.
420
  }
421
 
422
+ /**
423
+ * Loads the content output for the Support panel.
424
+ *
425
+ * @since 1.1.5
426
+ *
427
+ * @param string $panel The panel name we are targeting.
428
+ * @param object $object The menu object.
429
+ * @param bool $active Whether current panel is active.
430
+ */
431
+ public function support( $panel, $object, $active ) {
432
 
433
  echo $object->get_setting_ui( 'support', 'video' );
434
  echo $object->get_setting_ui( 'support', 'links' );
441
  *
442
  * @since 1.0.0
443
  *
444
+ * @param object $object The menu object.
445
+ * @param bool $active Whether current panel is active.
446
  */
447
  public function optin_edit( $object ) {
448
 
449
+ // Check for existing optins
450
  if ( $this->optin ) {
451
  $type = get_post_meta( $this->optin->ID, '_omapi_type', true );
452
  echo $object->get_setting_ui( 'optins', 'enabled' );
455
  if ( OMAPI_Utils::is_inline_type( $type ) ) {
456
  echo $object->get_setting_ui( 'optins', 'automatic' );
457
  echo $object->get_setting_ui( 'optins', 'automatic_shortcode' );
 
 
458
  }
459
+
460
  echo $object->get_setting_ui( 'optins', 'users' );
461
  }
462
 
506
  echo $object->get_setting_ui( 'toggle', 'advanced-end' );
507
  }
508
 
509
+ if ( 'sidebar' === $type || 'inline' === $type ) {
510
  echo $object->get_setting_ui( 'note', 'sidebar_widget_notice' );
511
  }
 
512
  } else {
513
  ?>
514
  <p><strong><?php esc_html_e( 'No campaign could be retrieved for the ID specified.', 'optin-monster-api' ); ?></strong></p>
532
  $status = (bool) get_post_meta( $optin_id, '_omapi_enabled', true );
533
  $status_link = $status ? esc_html__( 'Disable', 'optin-monster-api' ) : esc_html__( 'Go Live', 'optin-monster-api' );
534
  $status_desc = $status ? esc_attr__( 'Disable this campaign', 'optin-monster-api' ) : esc_attr__( 'Go live with this campaign', 'optin-monster-api' );
535
+
536
+ $edit_url = $this->base->menu->get_settings_link(
537
+ $this->view,
538
+ array(
539
+ 'optin_monster_api_action' => 'edit',
540
+ 'optin_monster_api_id' => $optin_id,
541
+ )
542
+ );
543
+ $status_url = $this->base->menu->get_settings_link(
544
+ $this->view,
545
+ array(
546
+ 'optin_monster_api_action' => 'status',
547
+ 'optin_monster_api_id' => $optin_id,
548
+ )
549
+ );
550
+ $status_url = wp_nonce_url( $status_url, 'omapi-action' );
551
+
552
+ $links = array();
553
  $links['editd'] = '<a href="' . esc_url_raw( OPTINMONSTER_APP_URL . '/campaigns/' . $slug . '/edit/' ) . '" title="' . esc_attr__( 'Edit this campaign on the OptinMonster App', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Edit Design', 'optin-monster-api' ) . '</a>';
554
+ $links['edito'] = '<a href="' . esc_url_raw( $edit_url ) . '" title="' . esc_attr__( 'Edit the output settings for this campaign', 'optin-monster-api' ) . '">' . esc_html__( 'Edit Output Settings', 'optin-monster-api' ) . '</a>';
555
+ $links['status'] = '<a href="' . esc_url_raw( $status_url ) . '" title="' . $status_desc . '">' . $status_link . '</a>';
556
 
557
  $links = apply_filters( 'optin_monster_api_action_links', $links, $optin_id );
 
558
 
559
+ return implode( ' | ', (array) $links );
560
  }
561
 
562
  public function migrate() {
OMAPI/InstallSkin.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * WordPress class extended for on-the-fly addon installations.
5
+ */
6
+ class OMAPI_InstallSkin extends WP_Upgrader_Skin {
7
+
8
+ /**
9
+ * Empty out the header of its HTML content and only check to see if it has
10
+ * been performed or not.
11
+ *
12
+ * @since 1.9.10
13
+ */
14
+ public function header() {}
15
+
16
+ /**
17
+ * Empty out the footer of its HTML contents.
18
+ *
19
+ * @since 1.9.10
20
+ */
21
+ public function footer() {}
22
+
23
+ /**
24
+ * Instead of outputting HTML for errors, json_encode the errors and send them
25
+ * back to the Ajax script for processing.
26
+ *
27
+ * @since 1.9.10
28
+ *
29
+ * @param array $errors Array of errors with the install process.
30
+ */
31
+ public function error( $errors ) {
32
+ if ( ! empty( $errors ) ) {
33
+ wp_send_json_error( $errors );
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Empty out the feedback method to prevent outputting HTML strings as the install
39
+ * is progressing.
40
+ *
41
+ * @since 1.9.10
42
+ *
43
+ * @param string $string The feedback string.
44
+ */
45
+ public function feedback( $string, $args = null ) {}
46
+
47
+ /**
48
+ * Empty out JavaScript output that calls function to decrement the update counts.
49
+ *
50
+ * @since 1.9.10
51
+ *
52
+ * @param string $type Type of update count to decrement.
53
+ */
54
+ public function decrement_update_count( $type ) {}
55
+ }
OMAPI/MailPoet.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Mailpoet integration class.
4
+ *
5
+ * @since 1.9.10
6
+ *
7
+ * @package OMAPI
8
+ * @author Justin Sternberg
9
+ */
10
+
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+
16
+ /**
17
+ * Mailpoet integration class.
18
+ *
19
+ * @since 1.9.10
20
+ */
21
+ class OMAPI_MailPoet {
22
+
23
+ /**
24
+ * Check to see if Mailpoet is active.
25
+ *
26
+ * @since 1.2.3
27
+ *
28
+ * @return bool
29
+ */
30
+ public static function is_active() {
31
+ return class_exists( 'WYSIJA_object' ) || class_exists( 'MailPoet\\API\\API' );
32
+ }
33
+
34
+ /**
35
+ * Returns the available MailPoet lists.
36
+ *
37
+ * @since 1.0.0
38
+ *
39
+ * @return array An array of MailPoet lists.
40
+ */
41
+ public static function get_lists() {
42
+
43
+ // Prepare variables.
44
+ $mailpoet = null;
45
+ $lists = array();
46
+ $ret = array();
47
+ $listIdKey = 'id';
48
+
49
+ // Get lists. Check for MailPoet 3 first. Default to legacy.
50
+ if ( class_exists( '\\MailPoet\\Config\\Initializer' ) ) {
51
+ $lists = \MailPoet\API\API::MP( 'v1' )->getLists();
52
+ } else {
53
+ $mailpoet = WYSIJA::get( 'list', 'model' );
54
+ $lists = $mailpoet->get( array( 'name', 'list_id' ), array( 'is_enabled' => 1 ) );
55
+ $listIdKey = 'list_id';
56
+ }
57
+
58
+ // Add default option.
59
+ $ret[] = array(
60
+ 'name' => esc_html__( 'Select your MailPoet list...', 'optin-monster-api' ),
61
+ 'value' => 'none',
62
+ );
63
+
64
+ // Loop through the list data and add to array.
65
+ foreach ( (array) $lists as $list ) {
66
+ $ret[] = array(
67
+ 'name' => $list['name'],
68
+ 'value' => $list[ $listIdKey ],
69
+ );
70
+ }
71
+
72
+ /**
73
+ * Filters the MailPoet lists.
74
+ *
75
+ * @param array $ret The MailPoet lists array.
76
+ * @param array $lists The raw MailPoet lists array. Format differs by plugin verison.
77
+ * @param WYSIJA|null $mailpoet The MailPoet object if using legacy. Null otherwise.
78
+ */
79
+ return apply_filters( 'optin_monster_api_mailpoet_lists', $ret, $lists, $mailpoet );
80
+ }
81
+
82
+ /**
83
+ * Returns the available MailPoet custom fields.
84
+ *
85
+ * @since 1.9.8
86
+ *
87
+ * @return array An array of MailPoet custom fields.
88
+ */
89
+ public static function get_custom_fields() {
90
+
91
+ // Prepare variables.
92
+ $ret = array();
93
+ $default_fields = array( 'email', 'first_name', 'last_name' );
94
+
95
+ // Get lists. Check for MailPoet 3.
96
+ $custom_fields = class_exists( '\\MailPoet\\Config\\Initializer' )
97
+ ? \MailPoet\API\API::MP( 'v1' )->getSubscriberFields()
98
+ : array();
99
+
100
+ // Add default option.
101
+ $ret[] = array(
102
+ 'name' => esc_html__( 'Select the phone number field...', 'optin-monster-api' ),
103
+ 'value' => '',
104
+ );
105
+
106
+ // Loop through the list data and add to array.
107
+ foreach ( (array) $custom_fields as $custom_field ) {
108
+ if ( in_array( $custom_field['id'], $default_fields ) ) {
109
+ continue;
110
+ }
111
+
112
+ $ret[] = array(
113
+ 'name' => $custom_field['name'],
114
+ 'value' => $custom_field['id'],
115
+ );
116
+ }
117
+
118
+ /**
119
+ * Filters the MailPoet custom fields.
120
+ *
121
+ * @param array. $ret The MailPoet custom fields array, except
122
+ * first name, last name and email
123
+ * @param array. $custom_fields The raw MailPoet custom fields array.
124
+ * Format differs by plugin verison.
125
+ */
126
+ return apply_filters( 'optin_monster_api_mailpoet_custom_fields', $ret, $custom_fields );
127
+ }
128
+
129
+ /**
130
+ * Opts the user into MailPoet.
131
+ *
132
+ * @since 1.0.0
133
+ */
134
+ public function handle_ajax_call() {
135
+ // Run a security check first.
136
+ check_ajax_referer( 'omapi', 'nonce' );
137
+
138
+ // Prepare variables.
139
+ $data = array_merge( $_REQUEST, $_REQUEST['optinData'] );
140
+ unset( $data['optinData'] );
141
+
142
+ $optin = OMAPI::get_instance()->get_optin_by_slug( stripslashes( $data['optin'] ) );
143
+ $list = get_post_meta( $optin->ID, '_omapi_mailpoet_list', true );
144
+ $phone_field = get_post_meta( $optin->ID, '_omapi_mailpoet_phone_field', true );
145
+ $email = ! empty( $data['email'] ) ? stripslashes( $data['email'] ) : false;
146
+ $name = ! empty( $data['name'] ) ? stripslashes( $data['name'] ) : false;
147
+ $user = array();
148
+
149
+ // Possibly split name into first and last.
150
+ if ( $name ) {
151
+ $names = explode( ' ', $name );
152
+ if ( isset( $names[0] ) ) {
153
+ $user['firstname'] = $names[0];
154
+ }
155
+
156
+ if ( isset( $names[1] ) ) {
157
+ $user['lastname'] = $names[1];
158
+ }
159
+ }
160
+
161
+ // Save the email address.
162
+ $user['email'] = $email;
163
+
164
+ // Save the phone number
165
+ if ( ! empty( $phone_field ) && ! empty( $data['phone'] ) ) {
166
+ $user[ $phone_field ] = stripslashes( $data['phone'] );
167
+ }
168
+
169
+ // Store the data.
170
+ $data = array(
171
+ 'user' => $user,
172
+ 'user_list' => array( 'list_ids' => array( $list ) ),
173
+ );
174
+ $data = apply_filters( 'optin_monster_pre_optin_mailpoet', $data, $_REQUEST, $list, null );
175
+
176
+ // Save the subscriber. Check for MailPoet 3 first. Default to legacy.
177
+ if ( class_exists( 'MailPoet\\API\\API' ) ) {
178
+ // Customize the lead data for MailPoet 3.
179
+ if ( isset( $user['firstname'] ) ) {
180
+ $user['first_name'] = $user['firstname'];
181
+ unset( $user['firstname'] );
182
+ }
183
+
184
+ if ( isset( $user['lastname'] ) ) {
185
+ $user['last_name'] = $user['lastname'];
186
+ unset( $user['lastname'] );
187
+ }
188
+
189
+ try {
190
+ $subscriber = \MailPoet\API\API::MP( 'v1' )->getSubscriber( $user['email'] );
191
+ } catch ( Exception $e ) {
192
+ $subscriber = false;
193
+ }
194
+
195
+ try {
196
+ if ( $subscriber ) {
197
+ \MailPoet\API\API::MP( 'v1' )->subscribeToList( $subscriber['email'], array( $list ) );
198
+ } else {
199
+ \MailPoet\API\API::MP( 'v1' )->addSubscriber( $user, array( $list ) );
200
+ }
201
+ } catch ( Exception $e ) {
202
+ return wp_send_json_error( $e->getMessage(), 400 );
203
+ }
204
+ } else {
205
+ $userHelper = WYSIJA::get( 'user', 'helper' );
206
+ $userHelper->addSubscriber( $data );
207
+ }
208
+
209
+ // Send back a response.
210
+ wp_send_json_success();
211
+ }
212
+ }
OMAPI/Menu.php CHANGED
@@ -65,6 +65,15 @@ class OMAPI_Menu {
65
  */
66
  public $tabindex = 429;
67
 
 
 
 
 
 
 
 
 
 
68
  /**
69
  * Panel slugs/names.
70
  *
@@ -74,6 +83,15 @@ class OMAPI_Menu {
74
  */
75
  public $panels = array();
76
 
 
 
 
 
 
 
 
 
 
77
  /**
78
  * The OM landing page url.
79
  *
@@ -96,11 +114,14 @@ class OMAPI_Menu {
96
 
97
  // Load actions and filters.
98
  add_action( 'admin_menu', array( $this, 'menu' ) );
 
99
  // Load helper body classes
100
  add_filter( 'admin_body_class', array( $this, 'admin_body_classes' ) );
101
 
102
- add_action( 'admin_notices', array( $this, 'maybe_output_cybermonday_notice' ), 2 );
103
- add_action( 'all_admin_notices', array( $this, 'maybe_output_cybermonday_notice' ), 2 );
 
 
104
  }
105
 
106
  $this->panels = array(
@@ -131,38 +152,82 @@ class OMAPI_Menu {
131
  * @since 1.0.0
132
  */
133
  public function menu() {
 
 
 
134
 
135
  // Filter to change the menu position if there is any conflict with another menu on the same position.
136
  $menu_position = apply_filters( 'optin_monster_api_menu_position', 26 );
137
 
138
- $this->hook = add_menu_page(
139
- esc_html__( 'OptinMonster', 'optin-monster-api' ),
140
- esc_html__( 'OptinMonster', 'optin-monster-api' ) . '<span class="om-pulse"></span>',
141
- apply_filters( 'optin_monster_api_menu_cap', 'manage_options', 'optin-monster-api-settings' ),
142
- 'optin-monster-api-settings',
143
- array( $this, 'page' ),
144
  'none',
145
  $menu_position
146
  );
147
 
148
- // Just add a placeholder secondary page.
149
- add_submenu_page(
150
- 'optin-monster-api-settings', // parent slug
151
- $this->panels[ $this->view ], //page title,
152
- $this->panels[ $this->view ],
153
- apply_filters( 'optin_monster_api_menu_cap', 'manage_options', 'optin-monster-api-settings' ), //cap
154
- 'optin-monster-api-settings', //slug
155
- array( $this, 'page' )
156
- );
 
 
 
 
 
 
 
 
 
 
 
157
 
158
  // Load global icon font styles.
159
- add_action( 'admin_head', array( $this, 'global_styles' ) );
 
160
 
161
- // Load settings page assets.
162
- if ( $this->hook ) {
163
- add_action( 'load-' . $this->hook, array( $this, 'assets' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
 
 
 
 
 
 
 
166
  }
167
 
168
  /**
@@ -170,63 +235,88 @@ class OMAPI_Menu {
170
  *
171
  * @since 1.0.0
172
  */
173
- public function global_styles() {
174
  $this->base->output_min_css( 'archie-css.php' );
175
 
176
- if ( ! $this->is_om_page() && $this->should_show_cybermonday_notice() ) {
177
- $this->base->output_min_css( 'cybermonday-pulse-css.php' );
 
178
  }
179
  }
180
 
181
  /**
182
- * Should we show the cybermonday promo/notice.
 
 
 
 
183
  *
184
  * @since 1.9.0
185
  *
186
  * @return bool
187
  */
188
- public function should_show_cybermonday_notice() {
189
- $now = time();
190
- $begins = strtotime( '2019-11-25 00:00:00' );
191
- // $begins = strtotime( '2019-11-19 00:00:00' );
192
- $ends = strtotime( '2019-12-03 11:59:59' );
193
- $in_window = $now > $begins && $now < $ends;
194
-
195
- return $in_window && 'off' !== get_user_setting( 'om_cybermonday_notice', 'on' );
196
  }
197
 
198
  /**
199
- * Outputs the cybermonday promo notice, if we can show it.
 
 
200
  *
201
  * @since 1.9.0
202
  */
203
- public function maybe_output_cybermonday_notice() {
204
  static $hooked = false;
205
  if (
206
  ! $hooked
207
- && $this->should_show_cybermonday_notice()
208
  && $this->is_om_page()
209
  ) {
210
 
211
- $url = $this->base->get_api_credentials()
212
- ? OPTINMONSTER_APP_URL . '/account/upgrade'
213
- : 'https://optinmonster.com/pricing';
214
- $url .= '/?utm_source=orgplugin&utm_medium=link&utm_campaign=bfcm2019';
215
-
216
- $this->base->output_min_css( 'cybermonday-notification-css.php' );
217
- $this->base->output_view( 'cybermonday-notification.php', compact( 'url' ) );
218
  add_action( 'admin_footer', array( $this, 'handle_closing_notice' ) );
219
  }
220
  $hooked = true;
221
  }
222
 
223
  /**
224
- * Handles the cybermondy notice-closing and setting the cookie.
 
 
225
  *
226
  * @since 1.9.0
227
  */
228
  public function handle_closing_notice() {
229
- $this->base->output_view( 'cybermonday-notification-js.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  }
231
 
232
  /**
@@ -234,7 +324,7 @@ class OMAPI_Menu {
234
  *
235
  * @since 1.3.4
236
  *
237
- * @param array $classes
238
  *
239
  * @return array
240
  */
@@ -264,15 +354,14 @@ class OMAPI_Menu {
264
 
265
  if ( function_exists( 'get_current_screen' ) ) {
266
  $screen = get_current_screen();
267
- $page = $screen->id;
268
- if ( 'toplevel_page_optin-monster-api-settings' === $page ) {
269
  return true;
270
  }
271
 
272
- if ( ! empty( $screen->parent_base ) && false !== strpos( $screen->parent_base, 'optin-monster-api-settings' ) ) {
273
  return true;
274
  }
275
-
276
  } else {
277
  $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
278
  }
@@ -286,7 +375,6 @@ class OMAPI_Menu {
286
  * @since 1.0.0
287
  */
288
  public function assets() {
289
-
290
  add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) );
291
  add_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );
292
  add_filter( 'admin_footer_text', array( $this, 'footer' ) );
@@ -301,10 +389,11 @@ class OMAPI_Menu {
301
  * @since 1.0.0
302
  */
303
  public function styles() {
 
304
 
305
- wp_register_style( $this->base->plugin_slug . '-select2', plugins_url( '/assets/css/select2.min.css', OMAPI_FILE ), array(), $this->base->version );
306
  wp_enqueue_style( $this->base->plugin_slug . '-select2' );
307
- wp_register_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/css/settings.css', OMAPI_FILE ), array(), $this->base->version );
308
  wp_enqueue_style( $this->base->plugin_slug . '-settings' );
309
 
310
  // Run a hook to load in custom styles.
@@ -320,11 +409,13 @@ class OMAPI_Menu {
320
  public function scripts() {
321
  global $wpdb;
322
 
 
 
323
  // Posts query.
324
  $postTypes = array_map( 'esc_sql', get_post_types( array( 'public' => true ) ) );
325
  $postTypes = implode( "','", $postTypes );
326
 
327
- $sql = "
328
  SELECT ID AS `id`, post_title AS `text`
329
  FROM $wpdb->posts
330
  WHERE post_type IN ( '{$postTypes}' )
@@ -334,7 +425,7 @@ class OMAPI_Menu {
334
  $posts = $wpdb->get_results( $sql, ARRAY_A );
335
 
336
  // Taxonomies query.
337
- $sql = "
338
  SELECT terms.term_id AS 'id', terms.name AS 'text'
339
  FROM {$wpdb->term_taxonomy} tax
340
  LEFT JOIN {$wpdb->terms} terms ON terms.term_id = tax.term_id
@@ -343,32 +434,44 @@ class OMAPI_Menu {
343
  ";
344
  $tags = $wpdb->get_results( $sql, ARRAY_A );
345
 
346
- wp_register_script( $this->base->plugin_slug . '-select2', plugins_url( '/assets/js/select2.min.js', OMAPI_FILE ), array( 'jquery' ), $this->base->version, true );
347
  wp_enqueue_script( $this->base->plugin_slug . '-select2' );
348
- wp_register_script( $this->base->plugin_slug . '-settings', plugins_url( '/assets/js/settings.js', OMAPI_FILE ), array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', $this->base->plugin_slug . '-select2' ), $this->base->version, true );
349
- wp_localize_script( $this->base->plugin_slug . '-settings', 'OMAPI', array(
350
- 'posts' => $posts,
351
- 'tags' => $tags,
352
- 'app_url' => trailingslashit( OPTINMONSTER_APP_URL ),
353
- ) );
354
- wp_enqueue_script( $this->base->plugin_slug . '-settings' );
355
- wp_register_script( $this->base->plugin_slug . '-clipboard', plugins_url( '/assets/js/clipboard.min.js', OMAPI_FILE ), array( $this->base->plugin_slug . '-settings' ), $this->base->version, true );
356
- wp_enqueue_script( $this->base->plugin_slug . '-clipboard' );
357
- wp_register_script( $this->base->plugin_slug . '-tooltip', plugins_url( '/assets/js/tooltip.min.js', OMAPI_FILE ), array( $this->base->plugin_slug . '-settings' ), $this->base->version, true );
358
- wp_enqueue_script( $this->base->plugin_slug . '-tooltip' );
359
- wp_register_script( $this->base->plugin_slug . '-jspdf', plugins_url( '/assets/js/jspdf.min.js', OMAPI_FILE ), array( $this->base->plugin_slug . '-settings' ), $this->base->version, true );
360
- wp_enqueue_script( $this->base->plugin_slug . '-jspdf' );
361
- wp_localize_script(
362
  $this->base->plugin_slug . '-settings',
363
- 'omapi',
364
  array(
365
- 'ajax' => admin_url( 'admin-ajax.php' ),
366
- 'nonce' => wp_create_nonce( 'omapi-query-nonce' ),
367
- 'confirm' => esc_html__( 'Are you sure you want to reset these settings?', 'optin-monster-api' ),
368
- 'date_format' => 'F j, Y',
369
- 'supportData' => $this->get_support_data(),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  )
371
  );
 
 
 
 
 
 
 
372
 
373
  // Run a hook to load in custom styles.
374
  do_action( 'optin_monster_api_admin_scripts', $this->view );
@@ -380,121 +483,12 @@ class OMAPI_Menu {
380
  *
381
  * @since 1.1.5.9
382
  */
383
- public function fix_plugin_js_conflicts(){
384
-
385
- // Get current screen.
386
- $screen = get_current_screen();
387
 
388
- // Bail if we're not on the OptinMonster Settings screen.
389
- if ( isset( $screen->id ) && 'toplevel_page_optin-monster-api-settings' !== $screen->id ) {
390
- return;
391
  }
392
-
393
- // Dequeue scripts that might cause our settings not to work properly.
394
- wp_dequeue_script( 'optimizely_config' );
395
-
396
- }
397
-
398
- /**
399
- * Combine Support data together to pass into localization
400
- *
401
- * @since 1.1.5
402
- * @return array
403
- */
404
- public function get_support_data() {
405
- $server_data = '';
406
- $optin_data = '';
407
-
408
- if ( isset( $_GET['optin_monster_api_view'] ) && 'support' === $_GET['optin_monster_api_view'] ) {
409
- $optin_data = $this->get_optin_data();
410
- $server_data = $this->get_server_data();
411
- }
412
- $data = array(
413
- 'server' => $server_data,
414
- 'optins' => $optin_data
415
- );
416
-
417
- return $data;
418
- }
419
-
420
- /**
421
- * Build Current Optin data array to localize
422
- *
423
- * @since 1.1.5
424
- *
425
- * @return array
426
- */
427
- private function get_optin_data() {
428
-
429
- $optins = $this->base->get_optins();
430
- $optin_data = array();
431
-
432
- if ( $optins ) {
433
- foreach ( $optins as $optin ) {
434
- $optin = get_post( $optin->ID );
435
- $slug = $optin->post_name;
436
- $design_type = get_post_meta( $optin->ID, '_omapi_type', true );
437
- $optin_data[ $slug ] = array(
438
- 'Campaign Type' => $design_type,
439
- 'WordPress ID' => $optin->ID,
440
- 'Associated IDs' => get_post_meta( $optin->ID, '_omapi_ids', true ),
441
- 'Current Status' => get_post_meta( $optin->ID, '_omapi_enabled', true ) ? 'Live' : 'Disabled',
442
- 'User Settings' => get_post_meta( $optin->ID, '_omapi_users', true ),
443
- 'Pages to Never show on' => get_post_meta( $optin->ID, '_omapi_never', true ),
444
- 'Pages to Only show on' => get_post_meta( $optin->ID, '_omapi_only', true ),
445
- 'Categories' => get_post_meta( $optin->ID, '_omapi_categories', true ),
446
- 'Taxonomies' => get_post_meta( $optin->ID, '_omapi_taxonomies', true ),
447
- 'Template types to Show on' => get_post_meta( $optin->ID, '_omapi_show', true ),
448
- 'Shortcodes Synced and Recognized' => get_post_meta( $optin->ID, '_omapi_shortcode', true ) ? htmlspecialchars_decode( get_post_meta( $optin->ID, '_omapi_shortcode_output', true ) ) : 'None recognized',
449
- );
450
- if ( OMAPI_Utils::is_inline_type( $design_type ) ) {
451
- $optin_data[$slug][ 'Automatic Output Status' ] = get_post_meta( $optin->ID, '_omapi_automatic', true ) ? 'Enabled' : 'Disabled';
452
- }
453
-
454
- }
455
- }
456
- return $optin_data;
457
- }
458
-
459
- /**
460
- * Build array of server information to localize
461
- *
462
- * @since 1.1.5
463
- *
464
- * @return array
465
- */
466
- private function get_server_data() {
467
-
468
- $theme_data = wp_get_theme();
469
- $theme = $theme_data->Name . ' ' . $theme_data->Version;
470
-
471
- $plugins = get_plugins();
472
- $active_plugins = get_option( 'active_plugins', array() );
473
- $used_plugins = "\n";
474
- $api_ping = wp_remote_request( OPTINMONSTER_APP_URL . '/v1/ping' );
475
- foreach ( $plugins as $plugin_path => $plugin ) {
476
- if ( ! in_array( $plugin_path, $active_plugins ) ) {
477
- continue;
478
- }
479
- $used_plugins .= $plugin['Name'] . ': ' . $plugin['Version'] . "\n";
480
- }
481
-
482
- $array = array(
483
- 'Server Info' => esc_html( $_SERVER['SERVER_SOFTWARE'] ),
484
- 'PHP Version' => function_exists( 'phpversion' ) ? esc_html( phpversion() ) : 'Unable to check.',
485
- 'Error Log Location' => function_exists( 'ini_get' ) ? ini_get( 'error_log' ) : 'Unable to locate.',
486
- 'Default Timezone' => date_default_timezone_get(),
487
- 'WordPress Home URL' => get_home_url(),
488
- 'WordPress Site URL' => get_site_url(),
489
- 'WordPress Version' => get_bloginfo( 'version' ),
490
- 'Multisite' => is_multisite() ? 'Multisite Enabled' : 'Not Multisite',
491
- 'Language' => get_locale(),
492
- 'API Ping Response' => wp_remote_retrieve_response_code( $api_ping ),
493
- 'Active Theme' => $theme,
494
- 'Active Plugins' => $used_plugins,
495
- );
496
-
497
- return $array;
498
  }
499
 
500
  /**
@@ -508,7 +502,7 @@ class OMAPI_Menu {
508
  public function footer( $text ) {
509
 
510
  $url = 'https://wordpress.org/support/plugin/optinmonster/reviews?filter=5#new-post';
511
- $text = sprintf( __( 'Please rate <strong>OptinMonster</strong> <a href="%s" target="_blank" rel="noopener">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href="%s" target="_blank" rel="noopener noreferrer">WordPress.org</a> to help us spread the word. Thank you from the OptinMonster team!', 'optin-monster-api' ), $url, $url );
512
  return $text;
513
 
514
  }
@@ -518,34 +512,34 @@ class OMAPI_Menu {
518
  *
519
  * @since 1.0.0
520
  */
521
- public function page() {
 
522
 
523
  ?>
524
-
525
  <div class="wrap omapi-page">
526
  <h2></h2>
527
  <div class="omapi-ui">
528
  <div class="omapi-tabs">
529
  <ul class="omapi-panels">
530
- <?php
531
- $i = 0; foreach ( $this->get_panels() as $id => $panel ) :
532
- $first = 0 == $i ? ' omapi-panel-first' : '';
533
  $active = $id == $this->view ? ' omapi-panel-active' : '';
534
  ?>
535
- <li class="omapi-panel omapi-panel-<?php echo sanitize_html_class( $id ); ?><?php echo $first . $active; ?>"><a href="<?php echo esc_url_raw( add_query_arg( 'optin_monster_api_view', $id, admin_url( 'admin.php?page=optin-monster-api-settings' ) ) ); ?>" class="omapi-panel-link" data-panel="<?php echo $id; ?>" data-panel-title="<?php echo $panel; ?>"><?php echo $panel; ?></a></li>
536
- <?php $i++; endforeach; ?>
537
  </ul>
538
  </div>
539
  <div class="omapi-tabs-content">
540
  <?php
541
- foreach ( $this->get_panels() as $id => $panel ) :
542
  $active = $id == $this->view ? ' omapi-content-active' : '';
543
  ?>
544
  <div class="omapi-content omapi-content-<?php echo sanitize_html_class( $id ); ?><?php echo $active; ?>">
545
  <?php
546
- do_action( 'optin_monster_api_content_before', $id, $panel, $this );
547
- do_action( 'optin_monster_api_content_' . $id, $panel, $this );
548
- do_action( 'optin_monster_api_content_after', $id, $panel, $this ); ?>
 
549
  </div>
550
  <?php endforeach; ?>
551
  </div>
@@ -578,11 +572,11 @@ class OMAPI_Menu {
578
  }
579
 
580
  // Set default panels.
581
- $panels['api'] = $this->panels['api'];
582
 
583
  // Set the WooCommerce panel.
584
  if ( $creds && ( $is_minimum_woo || OMAPI_WooCommerce::is_connected() ) && $can_manage_woo ) {
585
- $panels['woocommerce'] = $this->panels['woocommerce'];
586
  }
587
 
588
  // Set the Support panel
@@ -612,61 +606,61 @@ class OMAPI_Menu {
612
  $ret = '';
613
  $optin_id = isset( $_GET['optin_monster_api_id'] ) ? absint( $_GET['optin_monster_api_id'] ) : 0;
614
  $value = 'optins' == $id ? get_post_meta( $optin_id, '_omapi_' . $setting, true ) : $this->base->get_option( $id, $setting );
615
- $optin = get_post( $optin_id);
616
 
617
  // Load the type of setting UI based on the option.
618
  switch ( $id ) {
619
- case 'api' :
620
  switch ( $setting ) {
621
- case 'user' :
622
  $ret = $this->get_password_field( $setting, $value, $id, esc_html__( 'Legacy API Username', 'optin-monster-api' ), esc_html__( 'The Legacy API Username found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your Legacy API Username here...', 'optin-monster-api' ) );
623
- break 2;
624
 
625
- case 'key' :
626
  $ret = $this->get_password_field( $setting, $value, $id, esc_html__( 'Legacy API Key', 'optin-monster-api' ), esc_html__( 'The Legacy API Key found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your Legacy API Key here...', 'optin-monster-api' ) );
627
- break 2;
628
 
629
- case 'apikey' :
630
- $ret = $this->get_api_field( $setting, $value, 'omapiAuthorizeButton', esc_html__( 'Authorize OptinMonster', 'optin-monster-api' ), sprintf( esc_html__( 'Click to connect your OptinMonster Account, or %s click here to enter an API Key Manually.%s', 'optin-monster-api' ), '<a href="#" id="omapiShowApiKey">', '</a>' ) );
631
  $ret .= $this->get_password_field( $setting, $value, $id, esc_html__( 'API Key', 'optin-monster-api' ), esc_html__( 'A single API Key found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your API Key here...', 'optin-monster-api' ), array(), true );
632
  add_filter( 'omapi_hide_submit_buttom', '__return_true' );
633
- break 2;
634
 
635
- case 'omwpdebug' :
636
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Debugging Rules', 'optin-monster-api' ), __( 'Allow logged-out/non-admin debugging of plugin rules with the <code>omwpdebug</code> query variable?', 'optin-monster-api' ) );
637
- break 2;
638
  default:
639
- break 2;
640
  }
641
- break;
642
 
643
- case 'settings' :
644
  switch ( $setting ) {
645
- case 'cookies' :
646
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Clear local cookies on campaign update?', 'optin-monster-api' ), esc_html__( 'If checked, local cookies will be cleared for all campaigns after campaign settings are adjusted and saved.', 'optin-monster-api' ) );
647
- break 2;
648
  default:
649
- break 2;
650
  }
651
- break;
652
 
653
- case 'woocommerce' :
654
  switch ( $setting ) {
655
- case 'settings' :
656
  $ret = $this->get_woocommerce();
657
- break 2;
658
  default:
659
- break 2;
660
  }
661
- break;
662
 
663
- case 'support' :
664
  switch ( $setting ) {
665
- case 'video' :
666
  $ret = '<div class="omapi-half-column"><div class="omapi-video-container"><iframe width="640" height="360" src="https://www.youtube.com/embed/tUoJcp5Z9H0?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe></div></div>';
667
  break 2;
668
 
669
- case 'links' :
670
  $ret = $this->get_support_links( $setting, esc_html__( 'Helpful Links', 'optin-monster-api' ) );
671
  break 2;
672
 
@@ -674,41 +668,41 @@ class OMAPI_Menu {
674
  $ret = $this->get_plugin_report( $setting, esc_html__( 'Server / Plugin Report', 'optin-monster-api' ) );
675
  break 2;
676
  default:
677
- break 2;
678
  }
679
  break;
680
 
681
- case 'toggle' :
682
  switch ( $setting ) {
683
- case 'advanced-start' :
684
  $ret = $this->get_toggle_start( $setting, esc_html__( 'Advanced Settings', 'optin-monster-api' ), esc_html__( 'More specific settings available for campaign visibility.', 'optin-monster-api' ) );
685
- break 2;
686
- case 'advanced-end' :
687
  $ret = $this->get_toggle_end();
688
- break 2;
689
- case 'woocommerce-start' :
690
  $ret = $this->get_toggle_start( $setting, esc_html__( 'WooCommerce Settings', 'optin-monster-api' ), esc_html__( 'More specific settings available for WooCommerce integration.', 'optin-monster-api' ) );
691
  break 2;
692
- case 'woocommerce-end' :
693
  $ret = $this->get_toggle_end();
694
  break 2;
695
  default:
696
- break 2;
697
  }
698
- break;
699
 
700
- case 'optins' :
701
  switch ( $setting ) {
702
- case 'enabled' :
703
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Enable campaign on site?', 'optin-monster-api' ), esc_html__( 'The campaign will not be displayed on this site unless this setting is checked.', 'optin-monster-api' ) );
704
- break 2;
705
 
706
- case 'automatic' :
707
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Display the campaign automatically after blog posts', 'optin-monster-api' ), sprintf( __( 'If no advanced settings are selected below, the campaign will display after every post. You can turn this off and add it manually to your posts by <a href="%s" target="_blank" rel="noopener">clicking here and viewing the tutorial.</a>', 'optin-monster-api' ), 'https://optinmonster.com/docs/how-to-manually-add-an-after-post-or-inline-optin/' ), array( 'omapi-after-post-auto-select' ) );
708
- break 2;
709
- case 'automatic_shortcode' :
710
- $full_shortcode ='[optin-monster-shortcode id="'. $optin->post_name .'"]';
711
- $ret = $this->get_text_field(
712
  $setting,
713
  $full_shortcode,
714
  $id,
@@ -718,23 +712,23 @@ class OMAPI_Menu {
718
  array(),
719
  true
720
  );
721
- break 2;
722
 
723
- case 'users' :
724
  $ret = $this->get_dropdown_field( $setting, $value, $id, $this->get_user_output(), esc_html__( 'Who should see this campaign?', 'optin-monster-api' ), sprintf( __( 'Determines who should be able to view this campaign. Want to hide for newsletter subscribers? <a href="%s" target="_blank" rel="noopener">Click here to learn how.</a>', 'optin-monster-api' ), 'https://optinmonster.com/docs/how-to-hide-optinmonster-from-existing-newsletter-subscribers/' ) );
725
- break 2;
726
 
727
- case 'never' :
728
  $val = is_array( $value ) ? implode( ',', $value ) : $value;
729
  $ret = $this->get_custom_field( $setting, '<input type="hidden" value="' . esc_attr( $val ) . '" id="omapi-field-' . $setting . '" class="omapi-select" name="omapi[' . $id . '][' . $setting . ']" data-placeholder="' . esc_attr__( 'Type to search and select post(s)...', 'optin-monster-api' ) . '">', esc_html__( 'Never load campaign on:', 'optin-monster-api' ), esc_html__( 'Never loads the campaign on the selected posts and/or pages. Does not disable automatic Global output.', 'optin-monster-api' ) );
730
- break 2;
731
 
732
- case 'only' :
733
  $val = is_array( $value ) ? implode( ',', $value ) : $value;
734
  $ret = $this->get_custom_field( $setting, '<input type="hidden" value="' . esc_attr( $val ) . '" id="omapi-field-' . $setting . '" class="omapi-select" name="omapi[' . $id . '][' . $setting . ']" data-placeholder="' . esc_attr__( 'Type to search and select post(s)...', 'optin-monster-api' ) . '">', esc_html__( 'Load campaign specifically on:', 'optin-monster-api' ), esc_html__( 'Loads the campaign on the selected posts and/or pages.', 'optin-monster-api' ) );
735
- break 2;
736
 
737
- case 'categories' :
738
  $categories = get_categories();
739
  if ( $categories ) {
740
  ob_start();
@@ -742,9 +736,9 @@ class OMAPI_Menu {
742
  $cats = ob_get_clean();
743
  $ret = $this->get_custom_field( 'categories', $cats, esc_html__( 'Load campaign on post categories:', 'optin-monster-api' ) );
744
  }
745
- break;
746
 
747
- case 'taxonomies' :
748
  // Attempt to load post tags.
749
  $html = '';
750
  $tags = get_taxonomy( 'post_tag' );
@@ -758,12 +752,22 @@ class OMAPI_Menu {
758
  }
759
 
760
  // Possibly load taxonomies setting if they exist.
761
- $taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ) );
 
 
 
 
 
762
  $taxonomies['post_format'] = 'post_format';
763
  $data = array();
764
 
 
 
 
 
 
765
  // Allow returned taxonmies to be filtered before creating UI.
766
- $taxonomies = apply_filters('optin_monster_api_setting_ui_taxonomies', $taxonomies );
767
 
768
  if ( $taxonomies ) {
769
  foreach ( $taxonomies as $taxonomy ) {
@@ -775,11 +779,11 @@ class OMAPI_Menu {
775
  $tax = get_taxonomy( $taxonomy );
776
  $args = array(
777
  'descendants_and_self' => 0,
778
- 'selected_cats' => (array) $display,
779
- 'popular_cats' => false,
780
- 'walker' => null,
781
- 'taxonomy' => $taxonomy,
782
- 'checked_ontop' => true
783
  );
784
  wp_terms_checklist( 0, $args );
785
  $output = ob_get_clean();
@@ -799,93 +803,93 @@ class OMAPI_Menu {
799
 
800
  // Return the data.
801
  $ret = $html;
802
- break;
803
 
804
- case 'show' :
805
  $ret = $this->get_custom_field( 'show', $this->get_show_fields( $value ), esc_html__( 'Load campaign on post types and archives:', 'optin-monster-api' ) );
806
- break;
807
 
808
- case 'mailpoet' :
809
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Save lead to MailPoet?', 'optin-monster-api' ), esc_html__( 'If checked, successful campaign leads will be saved to MailPoet.', 'optin-monster-api' ) );
810
- break 2;
811
 
812
- case 'mailpoet_list' :
813
- $ret = $this->get_dropdown_field( $setting, $value, $id, $this->get_mailpoet_lists(), esc_html__( 'Add lead to this MailPoet list:', 'optin-monster-api' ), esc_html__( 'All successful leads for the campaign will be added to this particular MailPoet list.', 'optin-monster-api' ) );
814
- break 2;
815
 
816
  case 'mailpoet_use_phone':
817
  $phone_field = get_post_meta( $optin_id, '_omapi_mailpoet_phone_field', true );
818
 
819
  $ret = $this->get_checkbox_field( $setting, ! empty( $phone_field ), $id, esc_html__( 'Save phone number to MailPoet?', 'optin-monster-api' ), esc_html__( 'If checked, Phone number will be saved in Mailpoet.', 'optin-monster-api' ) );
820
- break 2;
821
 
822
- case 'mailpoet_phone_field' :
823
- $ret .= $this->get_dropdown_field( $setting, $value, $id, $this->get_mailpoet_custom_fields(), esc_html__( 'Select the custom field for phone:', 'optin-monster-api' ), esc_html__( 'If you have a custom field for phone numbers, select the field here.', 'optin-monster-api' ) );
824
- break 2;
825
 
826
  // Start WooCommerce settings.
827
- case 'show_on_woocommerce' :
828
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on all WooCommerce pages', 'optin-monster-api' ), esc_html__( 'The campaign will show on any page where WooCommerce templates are used.', 'optin-monster-api' ) );
829
  break 2;
830
 
831
- case 'is_wc_shop' :
832
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce shop', 'optin-monster-api' ), esc_html__( 'The campaign will show on the product archive page (shop).', 'optin-monster-api' ) );
833
  break 2;
834
 
835
- case 'is_wc_product' :
836
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce products', 'optin-monster-api' ), esc_html__( 'The campaign will show on any single product.', 'optin-monster-api' ) );
837
  break 2;
838
 
839
- case 'is_wc_cart' :
840
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Cart', 'optin-monster-api' ), esc_html__( 'The campaign will show on the cart page.', 'optin-monster-api' ) );
841
  break 2;
842
 
843
- case 'is_wc_checkout' :
844
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Checkout', 'optin-monster-api' ), esc_html__( 'The campaign will show on the checkout page.', 'optin-monster-api' ) );
845
  break 2;
846
 
847
- case 'is_wc_account' :
848
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Customer Account', 'optin-monster-api' ), esc_html__( 'The campaign will show on the WooCommerce customer account pages.', 'optin-monster-api' ) );
849
  break 2;
850
 
851
- case 'is_wc_endpoint' :
852
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on all WooCommerce Endpoints', 'optin-monster-api' ), esc_html__( 'The campaign will show when on any WooCommerce Endpoint.', 'optin-monster-api' ) );
853
  break 2;
854
- case 'is_wc_endpoint_order_pay' :
855
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Order Pay endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for order pay is displayed.', 'optin-monster-api' ) );
856
  break 2;
857
 
858
- case 'is_wc_endpoint_order_received' :
859
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Order Received endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for order received is displayed.', 'optin-monster-api' ) );
860
  break 2;
861
 
862
- case 'is_wc_endpoint_view_order' :
863
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce View Order endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for view order is displayed.', 'optin-monster-api' ) );
864
  break 2;
865
 
866
- case 'is_wc_endpoint_edit_account' :
867
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Edit Account endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for edit account is displayed.', 'optin-monster-api' ) );
868
  break 2;
869
 
870
- case 'is_wc_endpoint_edit_address' :
871
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Edit Address endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for edit address is displayed.', 'optin-monster-api' ) );
872
  break 2;
873
 
874
- case 'is_wc_endpoint_lost_password' :
875
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Lost Password endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for lost password is displayed.', 'optin-monster-api' ) );
876
  break 2;
877
 
878
- case 'is_wc_endpoint_customer_logout' :
879
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Customer Logout endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for customer logout is displayed.', 'optin-monster-api' ) );
880
  break 2;
881
 
882
- case 'is_wc_endpoint_add_payment_method' :
883
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Add Payment Method endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for add payment method is displayed.', 'optin-monster-api' ) );
884
  break 2;
885
 
886
- case 'is_wc_product_category' :
887
  $taxonomy = 'product_cat';
888
- $terms = get_terms( $taxonomy );
889
  if ( $terms ) {
890
  ob_start();
891
  $display = isset( $value ) ? (array) $value : array();
@@ -895,7 +899,7 @@ class OMAPI_Menu {
895
  'popular_cats' => false,
896
  'walker' => null,
897
  'taxonomy' => $taxonomy,
898
- 'checked_ontop' => true
899
  );
900
  wp_terms_checklist( 0, $args );
901
  $output = ob_get_clean();
@@ -905,9 +909,9 @@ class OMAPI_Menu {
905
  }
906
  break 2;
907
 
908
- case 'is_wc_product_tag' :
909
  $taxonomy = 'product_tag';
910
- $terms = get_terms( $taxonomy );
911
  if ( $terms ) {
912
  ob_start();
913
  $display = isset( $value ) ? (array) $value : array();
@@ -917,7 +921,7 @@ class OMAPI_Menu {
917
  'popular_cats' => false,
918
  'walker' => null,
919
  'taxonomy' => $taxonomy,
920
- 'checked_ontop' => true
921
  );
922
  wp_terms_checklist( 0, $args );
923
  $output = ob_get_clean();
@@ -928,20 +932,20 @@ class OMAPI_Menu {
928
  break 2;
929
 
930
  default:
931
- break 2;
932
  }
933
- break;
934
- case 'note' :
935
  switch ( $setting ) {
936
- case 'sidebar_widget_notice' :
937
  $ret = $this->get_optin_type_note( $setting, esc_html__( 'Use Widgets to set Sidebar output', 'optin-monster-api' ), esc_html__( 'You can set this campaign to show in your sidebars using the OptinMonster widget within your sidebars.', 'optin-monster-api' ), 'widgets.php', esc_html__( 'Go to Widgets', 'optin-monster-api' ) );
938
- break 2;
939
  default:
940
- break 2;
941
  }
942
- break;
943
  default:
944
- break;
945
  }
946
 
947
  // Return the setting output.
@@ -958,127 +962,31 @@ class OMAPI_Menu {
958
  */
959
  public function get_user_output() {
960
 
961
- return apply_filters( 'optin_monster_api_user_output',
 
962
  array(
963
  array(
964
  'name' => esc_html__( 'Show campaign to all visitors and users', 'optin-monster-api' ),
965
- 'value' => 'all'
966
  ),
967
  array(
968
  'name' => esc_html__( 'Show campaign to only visitors (not logged-in)', 'optin-monster-api' ),
969
- 'value' => 'out'
970
  ),
971
  array(
972
  'name' => esc_html__( 'Show campaign to only users (logged-in)', 'optin-monster-api' ),
973
- 'value' => 'in'
974
- )
975
  )
976
  );
977
 
978
  }
979
 
980
- /**
981
- * Returns the available MailPoet lists.
982
- *
983
- * @since 1.0.0
984
- *
985
- * @return array An array of MailPoet lists.
986
- */
987
- public function get_mailpoet_lists() {
988
-
989
- // Prepare variables.
990
- $mailpoet = null;
991
- $lists = array();
992
- $ret = array();
993
- $listIdKey = 'id';
994
-
995
- // Get lists. Check for MailPoet 3 first. Default to legacy.
996
- if ( class_exists( '\\MailPoet\\Config\\Initializer' ) ) {
997
- $lists = \MailPoet\API\API::MP( 'v1' )->getLists();
998
- } else {
999
- $mailpoet = WYSIJA::get( 'list', 'model' );
1000
- $lists = $mailpoet->get( array( 'name', 'list_id' ), array( 'is_enabled' => 1 ) );
1001
- $listIdKey = 'list_id';
1002
- }
1003
-
1004
- // Add default option.
1005
- $ret[] = array(
1006
- 'name' => esc_html__( 'Select your MailPoet list...', 'optin-monster-api' ),
1007
- 'value' => 'none',
1008
- );
1009
-
1010
- // Loop through the list data and add to array.
1011
- foreach ( (array) $lists as $list ) {
1012
- $ret[] = array(
1013
- 'name' => $list['name'],
1014
- 'value' => $list[ $listIdKey ],
1015
- );
1016
- }
1017
-
1018
- /**
1019
- * Filters the MailPoet lists.
1020
- *
1021
- *
1022
- * @param array $ret The MailPoet lists array.
1023
- * @param array $lists The raw MailPoet lists array. Format differs by plugin verison.
1024
- * @param WYSIJA|null $mailpoet The MailPoet object if using legacy. Null otherwise.
1025
- */
1026
- return apply_filters( 'optin_monster_api_mailpoet_lists', $ret, $lists, $mailpoet );
1027
-
1028
- }
1029
-
1030
- /**
1031
- * Returns the available MailPoet custom fields.
1032
- *
1033
- * @since 1.9.8
1034
- *
1035
- * @return array An array of MailPoet custom fields.
1036
- */
1037
- public function get_mailpoet_custom_fields() {
1038
- // Prepare variables.
1039
- $custom_fields = array();
1040
- $ret = array();
1041
- $default_fields = array( 'email', 'first_name', 'last_name' );
1042
-
1043
- // Get lists. Check for MailPoet 3.
1044
- if ( class_exists( '\\MailPoet\\Config\\Initializer' ) ) {
1045
- $custom_fields = \MailPoet\API\API::MP( 'v1' )->getSubscriberFields();
1046
- }
1047
-
1048
- // Add default option.
1049
- $ret[] = array(
1050
- 'name' => esc_html__( 'Select the phone number field...', 'optin-monster-api' ),
1051
- 'value' => '',
1052
- );
1053
-
1054
- // Loop through the list data and add to array.
1055
- foreach ( (array) $custom_fields as $custom_field ) {
1056
- if ( in_array( $custom_field['id'], $default_fields ) ) {
1057
- continue;
1058
- }
1059
-
1060
- $ret[] = array(
1061
- 'name' => $custom_field['name'],
1062
- 'value' => $custom_field['id'],
1063
- );
1064
- }
1065
-
1066
- /**
1067
- * Filters the MailPoet custom fields.
1068
- *
1069
- *
1070
- * @param array. $ret The MailPoet custom fields array, except
1071
- * first name, last name and email
1072
- * @param array. $custom_fields The raw MailPoet custom fields array.
1073
- * Format differs by plugin verison.
1074
- */
1075
- return apply_filters( 'optin_monster_api_mailpoet_custom_fields', $ret, $custom_fields );
1076
- }
1077
 
1078
  /**
1079
  * Retrieves the UI output for the single posts show setting.
1080
  *
1081
- * @since 2.0.0
1082
  *
1083
  * @param array $value The meta index value for the show setting.
1084
  * @return string $html HTML representation of the data.
@@ -1088,8 +996,8 @@ class OMAPI_Menu {
1088
  // Increment the global tabindex counter.
1089
  $this->tabindex++;
1090
 
1091
- $output = '<label for="omapi-field-show-index" class="omapi-custom-label">';
1092
- $output .= '<input type="checkbox" id="omapi-field-show-index" name="omapi[optins][show][]" value="index"' . checked( in_array( 'index', (array) $value ), 1, false ) . ' /> ' . esc_html__( 'Front Page and Search Pages', 'optin-monster-api' ) . '</label><br />';
1093
  $post_types = get_post_types( array( 'public' => true ) );
1094
  foreach ( (array) $post_types as $show ) {
1095
  $pt_object = get_post_type_object( $show );
@@ -1110,13 +1018,13 @@ class OMAPI_Menu {
1110
  *
1111
  * @since 1.0.0
1112
  *
1113
- * @param string $setting The name of the setting to be saved to the DB.
1114
- * @param mixed $value The value of the setting.
1115
- * @param string $id The setting ID to target for name field.
1116
- * @param string $label The label of the input field.
1117
- * @param string $desc The description for the input field.
1118
- * @param string $place Placeholder text for the field.
1119
- * @param array $classes Array of classes to add to the field.
1120
  * @param boolean $copy Turn on clipboard copy button and make field readonly
1121
  * @return string $html HTML representation of the data.
1122
  */
@@ -1129,17 +1037,17 @@ class OMAPI_Menu {
1129
  $readonly_output = $copy ? 'readonly' : '';
1130
 
1131
  // Build the HTML.
1132
- $field = '<div class="omapi-field-box omapi-text-field omapi-field-box-' . $setting . ' omapi-clear">';
1133
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1134
- $field .= '<input type="text" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . $readonly_output .' />';
1135
- if ( $copy ) {
1136
- $field .= '<span class="omapi-copy-button button" data-clipboard-target="#omapi-field-' . $setting . '">Copy to clipboard</span>';
1137
- }
1138
- if ( $desc ) {
1139
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1140
- }
1141
  $field .= '</p>';
1142
- $field .= '</div>';
1143
 
1144
  // Return the HTML.
1145
  return apply_filters( 'optin_monster_api_text_field', $field, $setting, $value, $id, $label );
@@ -1152,13 +1060,13 @@ class OMAPI_Menu {
1152
  * @since 1.0.0
1153
  *
1154
  * @param string $setting The name of the setting to be saved to the DB.
1155
- * @param mixed $value The value of the setting.
1156
  * @param string $id The setting ID to target for name field.
1157
  * @param string $label The label of the input field.
1158
  * @param string $desc The description for the input field.
1159
  * @param string $place Placeholder text for the field.
1160
- * @param array $classes Array of classes to add to the field.
1161
- * @param bool $hidden If the field should be hidden by default.
1162
  * @return string $html HTML representation of the data.
1163
  */
1164
  public function get_password_field( $setting, $value, $id, $label, $desc = false, $place = false, $classes = array(), $hidden = false ) {
@@ -1170,14 +1078,14 @@ class OMAPI_Menu {
1170
  $hidden_class = $hidden ? 'omapi-hidden' : '';
1171
 
1172
  // Build the HTML.
1173
- $field = '<div class="omapi-field-box omapi-password-field omapi-field-box-' . $setting . ' omapi-clear '. $hidden_class . '">';
1174
- $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1175
  $field .= '<input type="password" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . ' />';
1176
- if ( $desc ) {
1177
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1178
- }
1179
  $field .= '</p>';
1180
- $field .= '</div>';
1181
 
1182
  // Return the HTML.
1183
  return apply_filters( 'optin_monster_api_password_field', $field, $setting, $value, $id, $label );
@@ -1190,7 +1098,7 @@ class OMAPI_Menu {
1190
  * @since 1.8.0
1191
  *
1192
  * @param string $setting The name of the setting to be saved to the DB.
1193
- * @param mixed $value The value of the setting.
1194
  * @param string $id The setting ID to target for name field.
1195
  * @param string $label The label of the input field.
1196
  * @param string $desc The description for the input field.
@@ -1203,17 +1111,15 @@ class OMAPI_Menu {
1203
  $value = trim( $value );
1204
 
1205
  // Build the HTML.
1206
- $field = '<div class="omapi-field-box omapi-field-wrap omapi-api-field omapi-field-box-' . $setting . ' omapi-clear"><br/>';
1207
- if ( empty( $value ) ) {
1208
- $field .= "<input type='submit' id='{$id}' class='button button-omapi-gray button-hero' value='{$label}'>";
1209
- if ( $desc ) {
1210
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1211
- }
1212
- } else {
1213
- $field .= '<p>' . __( 'Your account is <strong>connected.</strong>', 'optin-monster-api' ) . '</p><button id="omapiDisconnectButton" class="button button-omapi-gray button-hero">' . esc_html__( 'Disconnect', 'optin-monster-api' ) . '</button>';
1214
- }
1215
-
1216
- $field .= '</p>';
1217
  $field .= '</div>';
1218
 
1219
  // Return the HTML.
@@ -1227,9 +1133,9 @@ class OMAPI_Menu {
1227
  * @since 1.0.0
1228
  *
1229
  * @param string $setting The name of the setting to be saved to the DB.
1230
- * @param mixed $value The value of the setting.
1231
  * @param string $id The setting ID to target for name field.
1232
- * @param array $classes Array of classes to add to the field.
1233
  * @return string $html HTML representation of the data.
1234
  */
1235
  public function get_hidden_field( $setting, $value, $id, $classes = array() ) {
@@ -1252,12 +1158,12 @@ class OMAPI_Menu {
1252
  * @since 1.0.0
1253
  *
1254
  * @param string $setting The name of the setting to be saved to the DB.
1255
- * @param mixed $value The value of the setting.
1256
  * @param string $id The setting ID to target for name field.
1257
  * @param string $label The label of the input field.
1258
  * @param string $desc The description for the input field.
1259
  * @param string $place Placeholder text for the field.
1260
- * @param array $classes Array of classes to add to the field.
1261
  * @return string $html HTML representation of the data.
1262
  */
1263
  public function get_textarea_field( $setting, $value, $id, $label, $desc = false, $place = false, $classes = array() ) {
@@ -1266,14 +1172,14 @@ class OMAPI_Menu {
1266
  $this->tabindex++;
1267
 
1268
  // Build the HTML.
1269
- $field = '<div class="omapi-field-box omapi-textarea-field omapi-field-box-' . $setting . ' omapi-clear">';
1270
- $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1271
  $field .= '<textarea id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" rows="5" tabindex="' . $this->tabindex . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . '>' . $value . '</textarea>';
1272
- if ( $desc ) {
1273
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1274
- }
1275
  $field .= '</p>';
1276
- $field .= '</div>';
1277
 
1278
  // Return the HTML.
1279
  return apply_filters( 'optin_monster_api_textarea_field', $field, $setting, $value, $id, $label );
@@ -1286,11 +1192,11 @@ class OMAPI_Menu {
1286
  * @since 1.0.0
1287
  *
1288
  * @param string $setting The name of the setting to be saved to the DB.
1289
- * @param mixed $value The value of the setting.
1290
  * @param string $id The setting ID to target for name field.
1291
  * @param string $label The label of the input field.
1292
  * @param string $desc The description for the input field.
1293
- * @param array $classes Array of classes to add to the field.
1294
  * @return string $html HTML representation of the data.
1295
  */
1296
  public function get_checkbox_field( $setting, $value, $id, $label, $desc = false, $classes = array() ) {
@@ -1299,14 +1205,14 @@ class OMAPI_Menu {
1299
  $this->tabindex++;
1300
 
1301
  // Build the HTML.
1302
- $field = '<div class="omapi-field-box omapi-checkbox-field omapi-field-box-' . $setting . ' omapi-clear">';
1303
- $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1304
  $field .= '<input type="checkbox" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . checked( $value, 1, false ) . ' /> ';
1305
- if ( $desc ) {
1306
- $field .= '<label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1307
- }
1308
  $field .= '</p>';
1309
- $field .= '</div>';
1310
 
1311
  // Return the HTML.
1312
  return apply_filters( 'optin_monster_api_checkbox_field', $field, $setting, $value, $id, $label );
@@ -1319,12 +1225,12 @@ class OMAPI_Menu {
1319
  * @since 1.0.0
1320
  *
1321
  * @param string $setting The name of the setting to be saved to the DB.
1322
- * @param mixed $value The value of the setting.
1323
  * @param string $id The setting ID to target for name field.
1324
- * @param array $data The data to be used for option fields.
1325
  * @param string $label The label of the input field.
1326
  * @param string $desc The description for the input field.
1327
- * @param array $classes Array of classes to add to the field.
1328
  * @return string $html HTML representation of the data.
1329
  */
1330
  public function get_dropdown_field( $setting, $value, $id, $data, $label, $desc = false, $classes = array() ) {
@@ -1333,18 +1239,18 @@ class OMAPI_Menu {
1333
  $this->tabindex++;
1334
 
1335
  // Build the HTML.
1336
- $field = '<div class="omapi-field-box omapi-dropdown-field omapi-field-box-' . $setting . ' omapi-clear">';
1337
- $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1338
  $field .= '<select id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '">';
1339
- foreach ( $data as $i => $info ) {
1340
- $field .= '<option value="' . esc_attr( $info['value'] ) . '"' . selected( $info['value'], $value, false ) . '>' . $info['name'] . '</option>';
1341
- }
1342
  $field .= '</select>';
1343
- if ( $desc ) {
1344
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1345
- }
1346
  $field .= '</p>';
1347
- $field .= '</div>';
1348
 
1349
  // Return the HTML.
1350
  return apply_filters( 'omapi_dropdown_field', $field, $setting, $value, $id, $label, $data );
@@ -1357,7 +1263,7 @@ class OMAPI_Menu {
1357
  * @since 1.0.0
1358
  *
1359
  * @param string $setting The name of the setting to be saved to the DB.
1360
- * @param mixed $value The value of the setting.
1361
  * @param string $label The label of the input field.
1362
  * @param string $desc The description for the input field.
1363
  * @return string $html HTML representation of the data.
@@ -1365,12 +1271,12 @@ class OMAPI_Menu {
1365
  public function get_custom_field( $setting, $value, $label, $desc = false ) {
1366
 
1367
  // Build the HTML.
1368
- $field = '<div class="omapi-field-box omapi-custom-field omapi-field-box-' . $setting . ' omapi-clear">';
1369
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label></p>';
1370
  $field .= $value;
1371
- if ( $desc ) {
1372
- $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1373
- }
1374
  $field .= '</div>';
1375
 
1376
  // Return the HTML.
@@ -1389,15 +1295,15 @@ class OMAPI_Menu {
1389
  * @return mixed|void
1390
  */
1391
  public function get_toggle_start( $setting, $label, $desc ) {
1392
- $field = '<div class="omapi-ui-toggle-controller">';
1393
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label></p>';
1394
- if ( $desc ) {
1395
- $field .= '<span class="omapi-field-desc">' . $desc . '</span>';
1396
- }
1397
  $field .= '</div>';
1398
  $field .= '<div class="omapi-ui-toggle-content">';
1399
 
1400
- return apply_filters( 'optin_monster_api_toggle_start_field', $field, $label, $desc );
1401
  }
1402
 
1403
  /**
@@ -1406,7 +1312,7 @@ class OMAPI_Menu {
1406
  * @since 1.1.5
1407
  * @return string HTML end for toggle start
1408
  */
1409
- public function get_toggle_end(){
1410
 
1411
  $field = '</div>';
1412
 
@@ -1429,10 +1335,10 @@ class OMAPI_Menu {
1429
  public function get_optin_type_note( $setting, $title, $text, $admin_page, $button ) {
1430
 
1431
  $field = '<div class="omapi-field-box omapi-inline-notice omapi-field-box-' . $setting . ' omapi-clear">';
1432
- if ($title ) {
1433
  $field .= '<p class="omapi-notice-title">' . $title . '</p>';
1434
  }
1435
- if ($text) {
1436
  $field .= '<p class="omapi-field-desc">' . $text . '</p>';
1437
  }
1438
  if ( $admin_page && $button ) {
@@ -1442,7 +1348,7 @@ class OMAPI_Menu {
1442
  }
1443
  $field .= '</div>';
1444
 
1445
- return apply_filters('optin_monster_api_inline_note_display', $field, $title, $text, $admin_page, $button );
1446
  }
1447
 
1448
  /**
@@ -1454,25 +1360,25 @@ class OMAPI_Menu {
1454
  */
1455
  public function get_support_links( $setting, $title ) {
1456
 
1457
- $field ='';
1458
 
1459
  $field .= '<div class="omapi-support-links ' . $setting . '"><h3>' . $title . '</h3><ul>';
1460
- $field .= '<li><a target="_blank" rel="noopener" href="' . esc_url( 'https://optinmonster.com/docs/' ) . '">'. esc_html__( 'Documentation', 'optin-monster-api' ) . '</a></li>';
1461
- $field .= '<li><a target="_blank" rel="noopener noreferrer" href="' . esc_url( 'https://wordpress.org/plugins/optinmonster/changelog/' ) . '">'. esc_html__( 'Changelog', 'optin-monster-api' ) . '</a></li>';
1462
- $field .= '<li><a target="_blank" rel="noopener" href="' . esc_url( OPTINMONSTER_APP_URL . '/account/support/' ) . '">'. esc_html__( 'Create a Support Ticket', 'optin-monster-api' ) . '</a></li>';
1463
  $field .= '</ul></div>';
1464
 
1465
- return apply_filters( 'optin_monster_api_support_links', $field, $setting);
1466
  }
1467
 
1468
  public function get_plugin_report( $setting, $title ) {
1469
 
1470
- $field ='';
1471
 
1472
  $field .= '<div class="omapi-support-data ' . $setting . '"><h3>' . $title . '</h3>';
1473
- $link = OPTINMONSTER_APP_URL . '/account/support/';
1474
- $field .= '<p>' . sprintf( wp_kses( __( 'Download the report and attach to your <a href="%s">support ticket</a> to help speed up the process.', 'optin-monster-api' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $link ) ) . '</p>';
1475
- $field .= '<a href="' . esc_url_raw( '#' ) . '" id="js--omapi-support-pdf" class="button button-primary button-large omapi-support-data-button" title="' . esc_html__( 'Download a PDF Report for Support', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Download PDF Report', 'optin-monster-api' ) . '</a>';
1476
  $field .= '</div>';
1477
 
1478
  return apply_filters( 'optin_monster_api_support_data', $field, $setting, $title );
@@ -1492,11 +1398,14 @@ class OMAPI_Menu {
1492
  $output = '';
1493
 
1494
  if ( ! OMAPI_WooCommerce::is_minimum_version() && OMAPI_WooCommerce::is_connected() ) {
 
1495
  $output .= '<p>' . esc_html( sprintf( __( 'OptinMonster requires WooCommerce %s or above.', 'optin-monster-api' ), OMAPI_WooCommerce::MINIMUM_VERSION ) ) . '</p>'
1496
  . '<p>' . esc_html_x( 'This site is currently running: ', 'the current version of WooCommerce: "WooCommerce x.y.z"', 'optin-monster-api' )
1497
  . '<code>WooCommerce ' . esc_html( OMAPI_WooCommerce::version() ) . '</code>.</p>'
1498
  . '<p>' . esc_html__( 'Please upgrade to the latest version of WooCommerce to enjoy deeper integration with OptinMonster.', 'optin-monster-api' ) . '</p>';
 
1499
  } elseif ( OMAPI_WooCommerce::is_connected() ) {
 
1500
  // Set some default key details.
1501
  $defaults = array(
1502
  'key_id' => '',
@@ -1519,9 +1428,11 @@ class OMAPI_Menu {
1519
  $output .= '<p>' . $key_string . ' <a href="' . $key_url . '">View key</a></p>';
1520
  $output .= '<p>' . esc_html__( 'You need to disconnect WooCommerce, below, to remove your keys from OptinMonster, or to change the consumer key/secret pair associated with OptinMonster.', 'optin-monster-api' ) . '</p>';
1521
  $output .= $this->get_hidden_field( 'disconnect', '1', 'woocommerce' );
 
1522
  } else {
1523
 
1524
- $output .= '<p>' . sprintf( __( 'In order to integrate WooCommerce with the Display Rules in the campaign builder, OptinMonster needs <a href="%s" target="_blank">WooCommerce REST API credentials</a>. OptinMonster only needs Read access permissions to work. Enter an existing consumer key/secret pair below, or we can auto-generate a new pair of keys for you.', 'optin-monster-api' ), esc_url( $keys_admin_url ) ) . '</p>';
 
1525
  $output .= $this->get_text_field(
1526
  'consumer_key',
1527
  '',
@@ -1538,109 +1449,20 @@ class OMAPI_Menu {
1538
  '',
1539
  'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
1540
  );
 
 
1541
  }
1542
 
1543
  return $output;
1544
  }
1545
 
1546
- /**
1547
- * Returns svg of OM Logo
1548
- *
1549
- * @return string The OptinMonster logo SVG data.
1550
- */
1551
- public function get_svg_logo() {
1552
- return '<svg class="omapi-svg-logo" viewBox="0 0 716 112" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41">
1553
- <path d="M527.78 91.4c0 1.1-.55 1.74-1.73 1.92-2.54.36-16 .36-18.35-.1-1.19-.26-1.82-1.08-1.82-2.45 0-3.27.36-13.99.36-17.26 0-2.54-.27-10.9-.27-13.45 0-5.54-2.36-8.27-7.18-8.27-2.9 0-8.9 3.36-8.9 6.63v32.72c0 1.36-.64 2.09-1.91 2.27-2.64.36-15.54.27-17.9-.09-1.28-.18-1.91-.91-1.91-2l.09-28.53c0-10.09-.82-18-2.36-23.72-.19-.82-.28-2 .81-2.27 2.55-.27 5.9-.73 10.18-1.37 6.45-1.27 10-1.9 10.81-1.9 1.18 0 .91 8.18 2.1 8.18.45 0 1.72-1.37 6.53-4.18 4.82-2.82 9-4.19 12.55-4.19 9.81 0 18.62 4.82 18.62 15.27 0 11.63 0 18.81.1 31.17 0 5.27.09 9.18.09 11.81l.09-.18zm40.35-47.24c0 .36-.28.9-.91 1.63-4.91-1.27-12.36.27-12.36 6.27 0 5.27 11.9 9.91 11.9 21.9 0 4-1.72 9.64-4.72 12.09-6 5.09-14.72 9.36-22.45 9.36-1.9 0-9.63-12.9-9.63-14.63 0-.37.27-.55.64-.64 2.81-.54 5.72-1.09 8.54-1.54 3.54-1.19 5.36-3 5.36-5.64 0-1.81-1-3.81-3.09-6.18a179.39 179.39 0 0 1-5.82-6.54C525.14 44.7 542.96 29.9 559.4 29.9c1.55 0 8.64 13 8.64 14.17l.09.1zm47.16 31.26c0 1.9-.91 9-.91 10.9 0 2.36-.27 2.45-2.36 3.64a35.86 35.86 0 0 1-17.36 4.27c-11.72 0-17.54-4.46-17.54-13.45 0-4.45.64-19.54.64-24.08 0-4.82-7-.82-7-4.27 0-1.1.27-4.91.27-5.9 0-1.46-.27-6.37-.27-7.73 0-.82 1.27-1.27 3.9-1.37 1.46 0 2.28-.45 2.37-1.18.27-1.54.36-4 .27-7.27l-.27-7.45c0-4.72.46-7 1.36-7 1.73 0 8 1.46 9.45 1.64 2.1.27 5.18.73 9.36 1.18 1 .1 1.55.45 1.55 1 0 2.73-.82 12-.82 14.72 0 2 .55 3 1.73 3 2.36 0 10.45-.36 12.9-.36.91 0 1.36.27 1.36.9 0 1.82-.63 6.55-.63 8.37l.09 8.45c0 .81-.55 1.27-1.73 1.27-4.18-.1-8.45-.18-12.63-.18-.64 0-.9.9-.9 2.63l.08 8.63c0 6.37.82 9.64 7.55 9.64 3.81 0 9.54-3.09 9.54-.1v.1zm37.53-18.9c0-8-9.9-13.18-15.36-6.28-1.54 2-2.27 4.28-2.27 7 0 1.1.54 1.64 1.73 1.64 3 0 7.63-.46 13.99-1.37 1.36-.18 2-.54 2-1h-.1zm21.26 3.72c0 4.1-1.36 6.45-4 7-.45.09-4.63.54-12.54 1.36-4.81.55-11.9 1.18-21.35 1.91 1.73 8.27 15.45 9.81 23.99 4.82 1.54-1 3.09-1.91 4.63-2.91 1.82.9 7.27 11.36 7.27 13.26 0 .28-.27.73-.9 1.37-4.91 5.27-12.55 7.9-23 7.9-19.08 0-32.35-12.08-32.35-31.26 0-18.35 11.63-32.08 30.35-32.08 7.73 0 14.36 2.82 19.81 8.55a28 28 0 0 1 8.18 20.17l-.09-.09zm41.07-4.82c0 3.1-3.45 2.37-6 2.19-3.72-.28-8.17-.28-10.17 1.45-1.18 1-1.82 3.18-1.82 6.36 0 2.91.19 12.9.19 15.81 0 1.91.45 8.54.45 10.45 0 1-.64 1.55-2 1.64-3.9.36-14.08.36-18.17-.1-1.37-.17-2-.81-2-2l.09-29.07c0-9.54-.91-17.36-2.64-23.45-.18-.81-.27-1.9.82-2.09 2.27-.27 5.45-.72 9.82-1.36 6.36-1.27 9.72-1.9 9.9-1.9 1.82 0 1.1 7.63 2.45 7.63.55 0 1.1-1.1 5-3.18 3.9-2.1 7.63-3.19 11.18-3.19 2.27 0 3.36.46 3.36 1.46 0 1.18-.1 2.82-.36 5-.64 5.9-.28 9.36-.28 14.35h.18zm-348.3 35.54c0 1.36-.64 2.18-1.82 2.36-2.45.36-15.72.36-18.17-.1-1.19-.26-1.82-1.26-1.82-3 0-3.17.36-13.53.36-16.62 0-7.09-.09-12.09-.27-15.09-.27-4.81-2.55-7.17-6.82-7.17-3.81 0-8.36 3.81-8.81 7.72-.18 1.73-.27 6.63-.27 14.9 0 3.18.36 14.09.36 17.36 0 1.36-.55 2-1.73 2h-18.35c-1.1 0-1.73-.82-1.73-2.46 0-3.27.36-13.9.36-17.17 0-2.54-.27-11.08-.27-13.63 0-14.9-15.8-7.27-15.8-1.9l.08 32.89c0 2.09-.18 2.18-2.27 2.36-4.36.36-11.72.36-17.27-.1-2-.17-2-.17-2-2.26l.1-29.08c0-6.63-.46-14.09-1.46-22.36-.18-1-.36-2.08.73-2.45 2-.82 9.09-1.18 10.45-1.45 1.36-.28 7.27-2.1 9.54-2.1 1.82 0 .9 8.55 1.73 8.46 2.45-.64 8.18-8.9 20.08-8.9 7.09 0 14.36 3.36 16.26 10.26 4.28-5.82 12.64-10.27 19.82-10.27 10.17 0 18.71 5 18.71 15.63 0 3.64-.36 15.72-.36 19.36 0 4.27.36 18.72.36 22.99l.28-.18zM41.44 63.15c0-6.09-4-12.09-10.63-12.09-9.91 0-14.09 13-7.91 20.54 6.18 7.54 18.54 3.36 18.54-8.45m66.33.54c0-11.72-12.81-16.26-18.72-8.45-4.9 6.54-3 20.72 8 20.72 7.09 0 10.72-4.09 10.72-12.27m22.45.1c0 16.99-10.9 30.35-28.35 30.35-6.73 0-15.09-4.64-14.82-4.64-.54 0-.81.64-.81 1.82 0 3.63.63 15 .63 18.63 0 1.27-.63 1.9-2 1.9-3.09 0-15.54.28-17.72-.27-1.18-.27-1.81-1-1.81-2.27l.09-46.7c0-9.46-.73-17.36-2.1-23.82-.18-.81-.27-1.9.64-2.27 3.27-1.27 14.82-3 18.45-3 3.73 0 2.36 6.27 3.54 6.27-.45 0 1.37-1.09 5.18-3.27 3.91-2.18 7.36-3.27 10.54-3.27 17.9 0 28.63 12.81 28.63 30.44l-.1.1zm46.34 11.44c0 2.64-.9 8.36-.9 10.9 0 2.2-.19 2.46-2.37 3.64a35.84 35.84 0 0 1-17.36 4.28c-11.72 0-17.53-4.46-17.53-13.45 0-4.64.63-19.45.63-24.08 0-4.91-7-.73-7-4.27 0-1.1.28-4.91.28-5.91 0-1.45-.27-6.36-.27-7.73 0-.81 1.27-1.27 3.9-1.36 1.46 0 2.27-.45 2.37-1.18.27-1.54.36-4 .27-7.27l-.27-7.45c0-4.73.45-7 1.36-7 2.18 0 7.18 1.37 9.45 1.64 2.09.27 5.18.72 9.36 1.18 1 .09 1.54.45 1.54 1 0 3.09-.81 11.63-.81 14.72 0 2 .54 3 1.72 3 2.36 0 10.45-.36 12.9-.36.91 0 1.37.27 1.37.9 0 1.82-.64 6.55-.64 8.36l.1 8.45c0 .82-.55 1.28-1.73 1.28-4.36-.1-8.27-.18-12.63-.18-.64 0-.91.9-.91 2.63l.09 8.63c0 6.36.9 9.64 7.54 9.64 4.27 0 9.54-3.19 9.54-.1v.1zm23.54-10.08c0 5 .36 21.35.36 26.35 0 .82-.54 1.36-1.54 1.55-2.82.45-15.82.54-18.63 0-.91-.19-1.46-.46-1.64-.82-.27-.55.27-24.9.27-27.08 0-11.45-.45-20.63-1.36-27.44-.36-3 .37-2.82 6.73-2.1 8.17.82 9.54-.27 15.8-.27 1.73 0 1.46 1.1 1.37 2.37-.9 7.9-1.36 16.99-1.36 27.44m1.54-45.07c0 7-4 10.54-11.9 10.54-12.54 0-15.36-12.54-8.27-18.27 7.45-6 20.17-1.9 20.17 7.73m65.07 71.15c0 1.09-.55 1.73-1.73 1.9-2.54.37-16 .37-18.36-.08-1.18-.28-1.81-1.1-1.81-2.46 0-3.27.36-14 .36-17.26 0-2.55-.27-10.9-.27-13.45 0-5.54-2.37-8.27-7.18-8.27-3.1 0-8.9 3.45-8.9 6.63v32.72c0 1.36-.64 2.09-1.92 2.27-3 .36-15.08.36-17.9-.1-1.27-.17-1.9-.9-1.9-2l.09-28.52c0-10.1-.82-18-2.37-23.72-.18-.91-.18-2 .82-2.27 2.55-.28 5.9-.73 10.18-1.37 6.45-1.27 10-1.9 10.81-1.9 1.18 0 .91 8.17 2.1 8.17-.46 0 1.72-1.36 6.53-4.18 4.82-2.81 9-4.18 12.55-4.18 9.81 0 18.62 4.82 18.62 15.27 0 11.63 0 18.81.1 31.17 0 5.27.09 9.18.09 11.81l.09-.18zM61.25 63.15c0 18.45-12.18 31.08-30.72 31.08C12.73 94.23 0 81.78 0 63.88c0-18.54 11.54-31.63 30.53-31.63 18.36 0 30.72 12.54 30.72 30.9" fill="#fff" fill-rule="nonzero"/>
1554
- <g opacity=".15" transform="translate(-37.66 -251.39)">
1555
- <clipPath id="a">
1556
- <path d="M385.88 344.16h139.94v15.09H385.88z"/>
1557
- </clipPath>
1558
- <g clip-path="url(#a)">
1559
- <path d="M455.85 344.16c38.62 0 69.97 3.36 69.97 7.54s-31.35 7.55-69.97 7.55-69.97-3.37-69.97-7.55 31.35-7.54 69.97-7.54" fill-rule="nonzero"/>
1560
- </g>
1561
- </g>
1562
- <path d="M460.26 32.8c.91-.55 1.1-3.91 1.18-4.9.28-2.28 3.1-3.28 4.91-2.1 3.18 2.27 4.82 6.63 5.27 10.36.46 3.82.1 8.9-2.63 11.9-2.91 3.28-10.27 4.28-14.63 3.82-1.18-.09-2.28-.36-3.37-.54l-2.09-18.72 2.28.45c2.27.45 6.9.91 9-.27h.08z" fill="#996" fill-rule="nonzero"/>
1563
- <path d="M467.35 29.16a7.6 7.6 0 0 0-1.9-1.9c-.74-.55-2.1-.1-2.2.81l-.08.64c1.36-.46 2.9-.1 4.18.45m2.54 12.82c.55-2.91.28-6.27-.72-9.18a6.36 6.36 0 0 0-2.82-2.18c-1.73-.73-2.64-.46-3.45.27-.1.73-.28 1.27-.46 1.82 4.73 1.54 6.73 6.08 7.46 9.36v-.1zm-13.8-6.73a24.9 24.9 0 0 1-5.1-.54l1.64 15.08c2.18.45 4.72.45 7 .18 1.63-5.81 0-12.63-3.64-14.8l.1.08zm5.08-1c-.63.36-1.55.64-2.63.82 3.27 3.45 4.27 9.72 3.08 14.63 2.73-.55 5-1.55 6.18-2.82.28-.27.46-.63.73-.9 0-5.19-2.09-10.73-7.09-11.82-.09.1-.09.1-.18.1h-.09z" fill="#c0c0a0" fill-rule="nonzero"/>
1564
- <path d="M460.26 44.06c-2.18.55-4.54.64-6.27.46-.73-.1-1.36-.18-2-.36l-1.09-9.36c1.73.36 3.46.54 5.1.54 2.35 1.46 3.9 4.9 4.17 8.72h.1zm6.64-13.17l.27 1.63c.18 1.1.18 2.37.09 3.64a10.65 10.65 0 0 0-4.82-3.45c.18-.55.37-1.1.46-1.82.72-.64 1.72-1 3.45-.27l.55.27m-1.37-3.55c.28.46.46.91.64 1.37-1-.27-2-.37-3.1-.1l.1-.63c.09-.9 1.45-1.36 2.18-.82l.18.1v.08zm-4.36 6.91c-.64.36-1.55.64-2.63.82 2 2.09 3.08 5.18 3.45 8.45a7.12 7.12 0 0 0 3.18-2c.73-.73-1.18-6.81-3.82-7.36-.09.1-.09.1-.18.1" fill="#fbfac4" fill-rule="nonzero"/>
1565
- <path d="M375.03 32.8c-.92-.55-1.1-3.91-1.19-4.9-.27-2.28-3.09-3.28-4.9-2.1-3.19 2.27-4.82 6.63-5.27 10.36-.46 3.82-.1 8.9 2.63 11.9 2.9 3.28 10.27 4.28 14.63 3.82 1.18-.09 2.27-.36 3.36-.54l2.1-18.72-2.28.45c-2.27.45-6.9.91-9-.27h-.08z" fill="#996" fill-rule="nonzero"/>
1566
- <path d="M367.94 29.16a7.61 7.61 0 0 1 1.9-1.9c.73-.55 2.1-.1 2.19.81l.09.64c-1.37-.46-2.91-.1-4.18.45m-2.55 12.82c-.54-2.91-.27-6.27.73-9.18a6.36 6.36 0 0 1 2.82-2.18c1.72-.73 2.63-.46 3.45.27.09.73.27 1.27.45 1.82-4.72 1.54-6.72 6.08-7.45 9.36v-.1zm13.82-6.73c1.63 0 3.36-.18 5.08-.54l-1.63 15.08c-2.18.45-4.73.45-7 .18-1.63-5.81 0-12.63 3.64-14.8l-.1.08zm-5.1-1c.64.36 1.55.64 2.64.82-3.27 3.45-4.27 9.72-3.09 14.63-2.72-.55-5-1.55-6.18-2.82-.27-.27-.45-.63-.72-.9 0-5.19 2.09-10.73 7.08-11.82.1.1.1.1.19.1h.09z" fill="#c0c0a0" fill-rule="nonzero"/>
1567
- <path d="M375.03 44.06c2.18.55 4.54.64 6.27.46.72-.1 1.36-.18 2-.36l1.08-9.36a24.9 24.9 0 0 1-5.08.54c-2.37 1.46-3.91 4.9-4.19 8.72h-.08zm-6.64-13.17l-.27 1.63c-.18 1.1-.18 2.37-.09 3.64a10.64 10.64 0 0 1 4.81-3.45c-.18-.55-.36-1.1-.45-1.82-.73-.64-1.72-1-3.45-.27l-.55.27m1.36-3.55c-.27.46-.45.91-.63 1.37 1-.27 2-.37 3.09-.1l-.1-.63c-.08-.9-1.44-1.36-2.17-.82l-.19.1v.08zm4.37 6.91c.63.36 1.54.64 2.63.82-2 2.09-3.09 5.18-3.45 8.45a7.12 7.12 0 0 1-3.18-2c-.73-.73 1.18-6.81 3.81-7.36.1.1.1.1.19.1" fill="#fbfac4" fill-rule="nonzero"/>
1568
- <path d="M385.11 29.16c-3.18-.27-6.27.37-9.36.82l2.73-2.64a38.36 38.36 0 0 1 9.54-6.45c5-2.54 10.72-4.45 16.45-5-4-1.72-8.55-2.54-12.82-3.54 16.45-3.45 37.53-4.72 52.62 8.09 8.63 7.36 13.36 21 13.36 33.35 0 46.62-79.42 46.62-79.42 0a37.4 37.4 0 0 1 4.45-17.72c-1.09.27-2.09.64-3.18 1.09l-4.82 2 3.45-3.9a28.05 28.05 0 0 1 7.18-5.91l-.18-.19z" fill="#8ed41e" fill-rule="nonzero"/>
1569
- <path d="M420.73 14.8c7.73.91 15.27 3.46 21.54 8.82 7.63 6.45 11.72 18.45 11.72 29.26 0 19.8-16.36 30.08-33.26 30.62V14.8z" fill="#70a91b" fill-rule="nonzero"/>
1570
- <path d="M391.47 24.9c6-4 15.81-5.28 27.63-4.64-2.1-2.46-4-4-6.82-5.36 5.36-.19 9.63 1 20.27 4.63a51.33 51.33 0 0 0-30.99-6.63 37.93 37.93 0 0 1 10.81 5.09c-10.8-1.19-23.26 4-28.26 8.26 3.27-.36 6.18.28 9.27 1.64-4.36 1.54-7.18 2.9-9.9 5.54 4.72-2.36 8.45-4.36 14.44-5.63-2.36-.82-3.63-2.27-6.45-2.9" fill="#a1e141" fill-rule="nonzero"/>
1571
- <path d="M417.82 13.9c10.91 0 19.72 8.54 19.72 19.17 0 10.54-8.8 19.17-19.72 19.17-10.9 0-19.71-8.54-19.71-19.17 0-10.54 8.81-19.17 19.71-19.17" fill="#70a91b" fill-rule="nonzero"/>
1572
- <path d="M386.57 50.97c.63-1.18 60.42-1.63 61.6 0 2.1 2.73.92 5.36 0 7.63h-61.6c-.55-2.45-1.46-5.08 0-7.63" fill="#70a91b" fill-rule="nonzero"/>
1573
- <path d="M387.38 52.7c.64-1.55 58.89-2.18 60.07 0 2 3.72.82 7.36 0 10.45h-60.07c-.54-3.37-1.36-6.9 0-10.45" fill="#4b7113" fill-rule="nonzero"/>
1574
- <path d="M435.82 13.08c-.82-15.54-21.72-17.18-27.17-5 9.63-5.27 19.44-3.36 27.17 5" fill="#70a91b" fill-rule="nonzero"/>
1575
- <path d="M424.19.17C418.1-.73 411.47 1.9 408.74 8c3.63-2 7.36-2.9 10.9-2.9.73-1.37 2.46-4 4.64-4.92h-.1z" fill="#85c51f" fill-rule="nonzero"/>
1576
- <path d="M417.82 11.9c9.82 0 17.72 7.9 17.72 17.72 0 9.81-7.9 17.72-17.72 17.72-9.8 0-17.71-7.9-17.71-17.72 0-9.82 7.9-17.72 17.71-17.72" fill="#d3e8ef" fill-rule="nonzero"/>
1577
- <path d="M406.65 16.44c5.9-4.9 14.17-4.9 18.35.18 4.18 5 2.73 13.09-3.18 18.09-5.9 4.9-14.17 4.9-18.35-.19-4.18-5-2.73-13.08 3.18-18.08" fill="#fff" fill-rule="nonzero"/>
1578
- <path d="M418.28 23.62c6.9 0 12.45 5.18 12.45 11.63 0 6.45-5.55 11.63-12.45 11.63-6.9 0-12.45-5.18-12.45-11.63 0-6.45 5.54-11.63 12.45-11.63" fill="#0d82df" fill-rule="nonzero"/>
1579
- <path d="M418.28 23.62c3.36 0 6.45 1.27 8.63 3.27a16.47 16.47 0 0 1-5.09 7.82c-4.9 4.08-11.45 4.72-15.9 2-.09-.46-.09-.91-.09-1.46 0-6.45 5.54-11.63 12.45-11.63" fill="#0399ed" fill-rule="nonzero"/>
1580
- <path d="M418.28 27.8c4.36 0 8 3.36 8 7.45 0 4.1-3.55 7.45-8 7.45-4.36 0-8-3.36-8-7.45s3.55-7.45 8-7.45" fill="#232323" fill-rule="nonzero"/>
1581
- <path d="M418.28 27.8a8.3 8.3 0 0 1 6.72 3.36 14.3 14.3 0 0 1-3.18 3.45 15.33 15.33 0 0 1-10.81 3.64c-.46-.9-.73-2-.73-3.09 0-4.09 3.55-7.45 8-7.45v.09z" fill="#323232" fill-rule="nonzero"/>
1582
- <path d="M411.28 24.26c3.27 0 5.9 2.45 5.9 5.54s-2.63 5.54-5.9 5.54c-3.27 0-5.9-2.45-5.9-5.54s2.63-5.54 5.9-5.54" fill="#fff" fill-rule="nonzero"/>
1583
- <path d="M376.48 57.06c27.44-4.09 54.98-3.73 82.42 0 2 14.36.9 27.99 0 41.7-27.44 1.1-54.98 1.28-82.42 0-1.64-13.9-1.82-27.8 0-41.7" fill="#9caeb3" fill-rule="nonzero"/>
1584
- <path d="M384.38 95.95c22.27.82 44.44.73 66.7 0-8-4.54-15.99-8.9-24.99-11.36-2.9 1.37-6 2.46-9.08 3.37-.46.09-.46.09-.91 0a76.34 76.34 0 0 1-7.55-2.91 97.44 97.44 0 0 0-24.26 11l.1-.1zm-5.27-34.17c-1.18 11-1 22.09.19 33.08 8-5 16.53-9 25.53-11.81-10.36-5.45-17.63-13.27-25.72-21.27M454 59.6c-24.26-2.9-48.61-3.18-72.88 0 10 11.18 21 20.36 35.63 25.17C432.27 80.32 443 70.6 453.99 59.6m2.1 35.26c.72-11 1.45-21.99.26-32.98-8.17 8.09-16.9 15.8-27.08 21.17 9.46 2.81 18.27 7 26.9 11.81h-.09z" fill="#d3e8ef" fill-rule="nonzero"/>
1585
- <path d="M384.38 95.95c10.73.37 21.45.55 32.26.55v-8.54c-.09 0-.18 0-.45-.1a75.27 75.27 0 0 1-7.54-2.9 97.5 97.5 0 0 0-24.27 11m-5.27-34.17c-1.18 11-1 22.08.19 33.07 8-5 16.53-9 25.53-11.81-10.36-5.45-17.63-13.27-25.72-21.27m37.53-4.45c-11.9 0-23.71.73-35.53 2.28 9.91 11.17 21 20.26 35.53 25.17V57.33z" fill="#fff" fill-rule="nonzero"/>
1586
- <path d="M401.2 63.88c-.1.36-.28.72-.46 1.09a3.26 3.26 0 0 1-1 1.45c-1.09.82-2.45.55-3.63.09-2.64-1.1-4.45-3.73-5.55-6.27-1.27-2.91-1.36-5-.63-8.18 18.35-1 37.16-1.18 54.97-.09v.1h.28c.27 3.08 0 4.35-.73 6.9-.82 2.9-2.54 6.45-5.45 7.81-1.1.55-2.36.82-3.36.1-.46-.37-.82-.91-1.1-1.46-.63-1-.8-2.45-1-3.54-.36.72-.8 1.18-1.54 1.36a26.4 26.4 0 0 1-3.72.54c-1.18.1-2.45.19-3.73.19-1.9 0-4-.19-5.81-.73-.28 1.1-.73 2.09-1.82 2.45-1.18.36-2.64.55-3.9.64-1.37.09-2.73.18-4 .18-2.1 0-4.46-.18-6.37-1a2.45 2.45 0 0 1-1.45-1.54v-.1z" fill="#996" fill-rule="nonzero"/>
1587
- <path d="M432 51.43c.73 4.09.55 9.36-.64 9.63-1.81.45-8.81 1.18-12.26-.1-.91-1.72-.91-6.08-.82-9.62 4.72 0 9.45 0 13.72.09m-29.35.81a82.01 82.01 0 0 0-1.9 6.73c-.37 1.64-.65 3.27-.92 4.45-.36 1.64-1.18 1.91-2.73 1.27-4-1.72-6.08-8.45-5.9-12.54 2.72-.18 6.81-.36 11.45-.54 4.45-.1 9.45-.18 14.45-.18.45 5 .45 11-.64 12.26-1.9.64-9.36 1.55-13-.09-1.63-.72-1-6.81-.9-11.26l.09-.1zm30.08-.81c.54 2.18 1.18 4.45 1.81 7.36.37 1.81.55 3.54.82 4.72.37 1.82 1.1 2.1 2.55 1.37 3.54-1.82 5.54-8.55 5.45-13-2.64-.18-6.36-.36-10.63-.45" fill="#c0c0a0" fill-rule="nonzero"/>
1588
- <path d="M418.28 53.88c4.27 0 8.54 0 12.45.09.63 2.27.63 6.36-2.1 7.36-2.9.27-7.08.36-9.53-.54-.64-1.28-.82-4.1-.82-6.91m-15.72.27c3.9-.09 8.36-.18 12.81-.18.45 3.27 1.27 9.81-2.82 10.18-3 .27-6.72.27-9.08-.73-1.36-.64-1.18-5.18-1-9.18l.09-.09zm-11.18.55c1.91-.18 4.45-.28 7.45-.37.36 0 1.1 9 1.1 9-.37 1.64-1.19 1.9-2.73 1.27-3.19-1.36-5.18-5.9-5.73-9.81l-.09-.1zm43.98 8.81c.37 1.82 1.1 2.1 2.55 1.37 2.9-1.46 4.72-6.18 5.27-10.27a97.38 97.38 0 0 0-6.27-.37c-1.46 1.1-1.73 8.64-1.55 9.27" fill="#fbfac4" fill-rule="nonzero"/>
1589
- <path d="M410.46 54.06c.19 3.55 0 7.09-.45 7.36-.9.55-4.27 1.27-5.9-.09-.64-.45-.55-3.9-.46-7.18 2.18-.09 4.45-.09 6.9-.18l-.09.1zm15.27-.09c.1 2.64-.09 5.09-.45 5.27-.82.45-4 1-5.64-.09-.54-.36-.54-2.82-.45-5.27h6.54v.09zm-28.71.45c-.1 1-.1 2.19-.1 3.37v3.63c0 1.36-.36 1.64-1.09 1-1.45-1.09-2.72-4.54-3.27-7.72 1.27-.1 2.82-.18 4.46-.28m45.07.1c-1.19-.1-2.55-.19-4.1-.19 0 1 .1 2.1.1 3.28v3.9c0 1.46.27 1.73 1 1.1 1.27-1.19 2.45-4.64 3-8.1" fill="#fff" fill-rule="nonzero"/>
1590
- <path d="M381.93 96.68c-1 4.54-5.54 7.54-10.09 7.36-6.27-.27-15.99-7.18-15.8-14 .08-3.81 2.9-7.27 5.8-9.44 2.83-2.19 7.55-4.46 11.19-3.46 3.63 1 6.17 6 7.36 9.27 1.09 2.82 2.18 7.27 1.45 10.27h.1z" fill="#85c51f" fill-rule="nonzero"/>
1591
- <path d="M380.39 96.22c.09-.54.18-1.09.18-1.72-1.18-5-4-10.72-7.18-11.63-4.9-1.46-14.81 5.09-14.27 11.81 2.73 4.18 8.55 7.63 12.72 7.81 3.82.19 7.73-2.36 8.55-6.18v-.09z" fill="#70a91b" fill-rule="nonzero"/>
1592
- <path d="M375.84 91.14c1.27-2.55-.81-7-4-6.64-3.36.46-10.63 5.46-10.63 9.36 0 2.46 3.36 4.18 6.9 3.18 2.64-.72 6.73-3.81 7.73-5.9m2.82 6.36c.64-1.55-.27-4.27-2.09-4-1.9.36-6.45 3.63-6.27 5.45.09 1.46 2.63 2.73 4.63 2a7.69 7.69 0 0 0 3.73-3.45" fill="#5d8d17" fill-rule="nonzero"/>
1593
- <path d="M370.84 79.32c.1 1.64-3.09 3.1-4.36 1.91-1.09-2.09-.81-4.63.1-5.18 1-.54 3.45.46 4.26 3.27M364.67 82.32c.36 1.82-2.1 3.36-3.28 2.55-1.54-1.55-2.09-4.27-1.36-4.91.73-.64 3.36.36 4.64 2.36M360.03 86.87c.55 1.18-.64 2.81-2 2.72-1.45-1.09-2.81-3.63-2.27-4.27.55-.72 3 0 4.27 1.55M383.3 69.96c.72-1.36-1.28-2.27-2.91-2.9-1.64-.55-2.46-.55-3.1.81-.72 1.37-1.08 3.46.64 4 1.64.55 4.73-.54 5.46-1.9h-.1z" fill="#2c440c" fill-rule="nonzero"/>
1594
- <path d="M384.75 64.88c.18 1.54-2 2.36-3.82 2.72-1.72.37-2.45.18-2.63-1.36-.19-1.55.27-4 2.09-4.36 1.72-.37 4.18 1.45 4.36 3" fill="#2c440c" fill-rule="nonzero"/>
1595
- <path d="M385.11 59.79c.19 1.45-2 2.18-3.81 2.54-1.73.36-2.46.18-2.64-1.36-.18-1.45.27-3.73 2-4.09 1.73-.36 4.18 1.36 4.36 2.82l.1.09zM370.84 56.42c.28 1.19 2.55.91 4.28.55 1.72-.45 2.36-.82 2-2-.28-1.18-1.37-2.81-3.1-2.36-1.72.45-3.45 2.63-3.18 3.9v-.09z" fill="#2c440c" fill-rule="nonzero"/>
1596
- <path d="M369.3 70.87l.54 1.55-1.18-.91c-.54-.46-1-1.1-1.36-1.82.09.73.18 1.18.36 1.82-1.72-2.82-3.27-5.9-2.27-10 .91-3.72 4.64-5.45 7.27-6.18a13.9 13.9 0 0 1 5.09-.54c1 .09 2.73.36 3.45 1.27.73.91 1.1 2.82 1.27 4.09.28 2 .19 4.09-.08 6.09a13.1 13.1 0 0 1-1.73 5 5.98 5.98 0 0 1-2.64 2.36 6.42 6.42 0 0 1-3.9.36c-1.82-.36-3.46-1.45-4.91-3l.1-.09z" fill="#85c51f" fill-rule="nonzero"/>
1597
- <path d="M380.3 57.33c1.09 1.28 1.63 6.64.36 10.54a7.22 7.22 0 0 1-6.45-1.63c.09.55.27.9.45 1.18-1.09-.45-2-1.81-2.63-3.36.08 1.27.27 1.82.45 2.55-1.36-.46-2.45-2-3.27-3.64-.73-1.45-.64-3.54.63-4.45 3.37-2.46 9.1-2.64 10.36-1.1l.1-.09z" fill="#a1e141" fill-rule="nonzero"/>
1598
- <path d="M453.45 96.68c1 4.54 5.54 7.54 10.08 7.36 6.27-.27 16-7.18 15.81-14-.09-3.81-2.9-7.27-5.81-9.44-2.82-2.19-7.55-4.46-11.18-3.46s-6.18 6-7.36 9.27c-1.09 2.82-2.18 7.27-1.45 10.27h-.1z" fill="#85c51f" fill-rule="nonzero"/>
1599
- <path d="M454.9 96.22c-.09-.54-.18-1.09-.18-1.72 1.18-5 4-10.72 7.18-11.63 4.9-1.46 14.8 5.09 14.26 11.81-2.72 4.18-8.54 7.63-12.72 7.81-3.82.19-7.72-2.36-8.54-6.18v-.09z" fill="#70a91b" fill-rule="nonzero"/>
1600
- <path d="M459.53 91.14c-1.27-2.55.82-7 4-6.64 3.37.46 10.63 5.46 10.63 9.36 0 2.46-3.36 4.18-6.9 3.18-2.64-.72-6.73-3.81-7.73-5.9m-2.81 6.36c-.64-1.55.27-4.27 2.09-4 1.9.36 6.45 3.63 6.27 5.45-.1 1.46-2.64 2.73-4.64 2a7.68 7.68 0 0 1-3.72-3.45" fill="#5d8d17" fill-rule="nonzero"/>
1601
- <path d="M464.44 79.32c-.09 1.64 3.1 3.1 4.36 1.91 1.1-2.09.82-4.63-.09-5.18-1-.54-3.45.46-4.27 3.27M470.62 82.32c-.36 1.82 2.1 3.36 3.27 2.55 1.55-1.55 2.1-4.27 1.37-4.91-.73-.64-3.37.36-4.64 2.36M475.26 86.87c-.55 1.18.63 2.81 2 2.72 1.45-1.09 2.81-3.63 2.27-4.27-.55-.72-3 0-4.27 1.55M452 69.96c-.74-1.36 1.26-2.27 2.9-2.9 1.64-.55 2.45-.55 3.09.81.73 1.37 1.1 3.46-.64 4-1.63.55-4.72-.54-5.45-1.9h.1z" fill="#2c440c" fill-rule="nonzero"/>
1602
- <path d="M450.63 64.88c-.18 1.54 2 2.36 3.82 2.72 1.72.37 2.45.18 2.63-1.36.18-1.55-.27-4-2.09-4.36-1.73-.37-4.18 1.45-4.36 3" fill="#2c440c" fill-rule="nonzero"/>
1603
- <path d="M450.18 59.79c-.19 1.45 2 2.18 3.81 2.54 1.73.36 2.45.18 2.63-1.36.19-1.45-.27-3.73-2-4.09-1.72-.36-4.17 1.36-4.36 2.82l-.08.09zM464.53 56.42c-.27 1.19-2.54.91-4.27.55-1.72-.45-2.36-.82-2-2 .28-1.18 1.36-2.81 3.09-2.36 1.73.45 3.45 2.63 3.18 3.9v-.09z" fill="#2c440c" fill-rule="nonzero"/>
1604
- <path d="M465.99 70.87l-.55 1.55 1.18-.91c.55-.46 1-1.1 1.37-1.82a10.5 10.5 0 0 1-.37 1.82c1.73-2.82 3.28-5.9 2.28-10-.91-3.72-4.64-5.45-7.28-6.18a13.91 13.91 0 0 0-5.08-.54c-1 .09-2.73.36-3.46 1.27-.72.91-1.09 2.82-1.27 4.09-.27 2-.18 4.09.1 6.09.27 1.81.8 3.54 1.72 5a5.97 5.97 0 0 0 2.63 2.36c1.28.54 2.55.63 3.91.36 1.82-.36 3.45-1.45 4.91-3l-.1-.09z" fill="#85c51f" fill-rule="nonzero"/>
1605
- <path d="M455 57.33c-1.1 1.28-1.65 6.64-.37 10.54a7.22 7.22 0 0 0 6.45-1.63c-.1.55-.27.9-.46 1.18 1.1-.45 2-1.81 2.64-3.36-.09 1.27-.27 1.82-.45 2.55 1.36-.46 2.45-2 3.27-3.64.72-1.45.63-3.54-.64-4.45-3.36-2.46-9.09-2.64-10.36-1.1l-.09-.09z" fill="#a1e141" fill-rule="nonzero"/>
1606
- </svg>';
1607
- }
1608
-
1609
- /**
1610
- * Return html of header banner
1611
- *
1612
- * @return string
1613
- */
1614
- public function get_plugin_screen_banner() {
1615
-
1616
- $screen = get_current_screen();
1617
-
1618
- $html = '';
1619
-
1620
- $html .= '<div class="omapi-static-banner">';
1621
- $html .= '<div class="inner-container">';
1622
- $html .= '<div class="logo-wrapper">' . $this->get_svg_logo() . '<span class="omapi-logo-version">' . sprintf( esc_html__( 'v%s', 'optin-monster-api' ), $this->base->version ) . '</span></div>';
1623
- $html .= '<div class="static-menu"><ul>';
1624
- $html .= '<li><a target="_blank" rel="noopener" href="' . esc_url_raw( 'https://optinmonster.com/docs/' ) . '">' . esc_html__( 'Need Help?', 'optin-monster-api' ) . '</a></li>';
1625
- $html .= '<li><a href="' . esc_url_raw( 'https://optinmonster.com/contact-us/' ) . '" target="_blank" rel="noopener">' . esc_html__( 'Send Us Feedback', 'optin-monster-api' ) . '</a></li>';
1626
- if( $screen->id === 'toplevel_page_optin-monster-api-settings' ) {
1627
- $html .= '<li class="omapi-menu-button"><a id="omapi-create-new-optin-button" href="' . OPTINMONSTER_APP_URL . '/campaigns/new/" class="button button-secondary omapi-new-optin" title="' . esc_html__( 'Create New Campaign', 'optin-monster-api' ) . '" target="_blank" rel="noopener">' . esc_html__( 'Create New Campaign', 'optin-monster-api' ) . '</a></li>';
1628
- }
1629
- $html .= '</ul></div>';
1630
- $html .= '</div>';
1631
- $html .= '</div>';
1632
-
1633
- return $html;
1634
-
1635
- }
1636
-
1637
  /**
1638
  * Echo out plugin header banner
1639
  *
1640
  * @since 1.1.5.2
1641
  */
1642
  public function output_plugin_screen_banner() {
1643
- echo $this->get_plugin_screen_banner();
1644
  }
1645
 
1646
  /**
@@ -1683,10 +1505,14 @@ class OMAPI_Menu {
1683
  $url = $this->get_affiliate_url( $omSasId );
1684
  }
1685
 
1686
- return apply_filters( 'optin_monster_action_link', $url, array(
1687
- 'type' => 'sas',
1688
- 'id' => $omSasId,
1689
- ) );
 
 
 
 
1690
  }
1691
 
1692
  /**
@@ -1730,10 +1556,14 @@ class OMAPI_Menu {
1730
  . '%2Ffree-trial%2F%3Fid%3D' . urlencode( trim( $omTrialId ) );
1731
  }
1732
 
1733
- return apply_filters( 'optin_monster_action_link', $url, array(
1734
- 'type' => 'trial',
1735
- 'id' => $omTrialId,
1736
- ) );
 
 
 
 
1737
  }
1738
 
1739
  /**
@@ -1741,7 +1571,7 @@ class OMAPI_Menu {
1741
  *
1742
  * @since 1.8.4
1743
  *
1744
- * @param mixed $reference_id The reference ID.
1745
  *
1746
  * @return string The affilaite url.
1747
  */
@@ -1763,16 +1593,89 @@ class OMAPI_Menu {
1763
  }
1764
 
1765
  public function has_trial_link() {
1766
-
1767
  $link = $this->get_trial_link();
 
1768
  return strpos( $link, 'optinmonster.com/wp' ) === false;
 
1769
 
 
 
 
 
 
 
 
 
 
1770
  }
1771
 
1772
- public function get_dashboard_link() {
 
 
 
 
 
 
 
 
 
 
 
 
1773
 
1774
- return $this->has_trial_link() ? esc_url_raw( admin_url( 'admin.php?page=optin-monster-api-welcome' ) ) : esc_url_raw( admin_url( 'admin.php?page=optin-monster-api-settings' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1775
 
 
1776
  }
1777
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1778
  }
65
  */
66
  public $tabindex = 429;
67
 
68
+ /**
69
+ * The OMAPI_Pages object.
70
+ *
71
+ * @since 1.9.10
72
+ *
73
+ * @var OMAPI_Pages
74
+ */
75
+ public $pages = null;
76
+
77
  /**
78
  * Panel slugs/names.
79
  *
83
  */
84
  public $panels = array();
85
 
86
+ /**
87
+ * Registered page hooks.
88
+ *
89
+ * @since 1.9.10
90
+ *
91
+ * @var array
92
+ */
93
+ public $hooks = array();
94
+
95
  /**
96
  * The OM landing page url.
97
  *
114
 
115
  // Load actions and filters.
116
  add_action( 'admin_menu', array( $this, 'menu' ) );
117
+ add_action( 'admin_menu', array( $this, 'after_menu_registration' ), 999 );
118
  // Load helper body classes
119
  add_filter( 'admin_body_class', array( $this, 'admin_body_classes' ) );
120
 
121
+ add_action( 'admin_notices', array( $this, 'maybe_output_notice' ), 2 );
122
+ add_action( 'all_admin_notices', array( $this, 'maybe_output_notice' ), 2 );
123
+
124
+ add_filter( 'plugin_action_links_' . plugin_basename( OMAPI_FILE ), array( $this, 'output_plugin_links' ) );
125
  }
126
 
127
  $this->panels = array(
152
  * @since 1.0.0
153
  */
154
  public function menu() {
155
+ $this->pages = new OMAPI_Pages();
156
+
157
+ $parent = $this->base->menu->parent_slug();
158
 
159
  // Filter to change the menu position if there is any conflict with another menu on the same position.
160
  $menu_position = apply_filters( 'optin_monster_api_menu_position', 26 );
161
 
162
+ $this->hooks[] = $this->hook = add_menu_page(
163
+ 'OptinMonster',
164
+ 'OptinMonster<span class="om-pulse"></span>',
165
+ apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $parent ),
166
+ $parent,
167
+ array( $this, 'settings_page' ),
168
  'none',
169
  $menu_position
170
  );
171
 
172
+ if ( $this->base->get_api_credentials() ) {
173
+
174
+ $title = isset( $this->panels[ $this->view ] )
175
+ ? $this->panels[ $this->view ]
176
+ : __( 'Campaigns', 'optin-monster-api' );
177
+
178
+ // Just add a placeholder secondary page.
179
+ $this->hooks[] = add_submenu_page(
180
+ $parent, // parent slug
181
+ $title, // page title,
182
+ __( 'Campaigns', 'optin-monster-api' ),
183
+ apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $parent ), // cap
184
+ $parent, // slug
185
+ array( $this, 'settings_page' )
186
+ );
187
+
188
+ $this->hooks = array_merge( $this->hooks, $this->pages->register_submenu_pages( $parent ) );
189
+ } else {
190
+ $this->pages->register_submenu_redirects( $parent );
191
+ }
192
 
193
  // Load global icon font styles.
194
+ add_action( 'admin_head', array( $this, 'global_admin_styles' ) );
195
+ }
196
 
197
+ /**
198
+ * Handles enqueueing assets for registered pages, and ensuring about page is at bottom.
199
+ *
200
+ * @since 1.9.10
201
+ *
202
+ * @return void
203
+ */
204
+ public function after_menu_registration() {
205
+ global $submenu;
206
+ $parent = $this->base->menu->parent_slug();
207
+
208
+ // Make sure the about page is still the last page.
209
+ if ( isset( $submenu[ $parent ] ) ) {
210
+ $after = array();
211
+ $at_end = array( 'optin-monster-about' );
212
+ foreach ( $submenu[ $parent ] as $key => $menu ) {
213
+ if ( isset( $menu[2] ) && in_array( $menu[2], $at_end ) ) {
214
+ $after[] = $menu;
215
+ unset( $submenu[ $parent ][ $key ] );
216
+ }
217
+ }
218
+ $submenu[ $parent ] = array_values( $submenu[ $parent ] );
219
+ foreach ( $after as $menu ) {
220
+ $submenu[ $parent ][] = $menu;
221
+ }
222
  }
223
 
224
+ // Load settings page assets.
225
+ foreach ( $this->hooks as $hook ) {
226
+ if ( ! empty( $hook ) ) {
227
+ add_action( 'load-' . $hook, array( $this, 'assets' ) );
228
+ add_action( 'load-' . $hook, array( $this->pages, 'load_general_styles' ) );
229
+ }
230
+ }
231
  }
232
 
233
  /**
235
  *
236
  * @since 1.0.0
237
  */
238
+ public function global_admin_styles() {
239
  $this->base->output_min_css( 'archie-css.php' );
240
 
241
+ // Note: Completed 2019.
242
+ if ( ! $this->is_om_page() && $this->should_show_notification_pulse() ) {
243
+ $this->base->output_min_css( 'notification-pulse-css.php' );
244
  }
245
  }
246
 
247
  /**
248
+ * Should we show the OM menu item notification pulse.
249
+ *
250
+ * Disabled for now.
251
+ *
252
+ * @see https://github.com/awesomemotive/optin-monster-wp-api/pull/179
253
  *
254
  * @since 1.9.0
255
  *
256
  * @return bool
257
  */
258
+ public function should_show_notification_pulse() {
259
+ return false;
 
 
 
 
 
 
260
  }
261
 
262
  /**
263
+ * Outputs a notice, if allowed.
264
+ *
265
+ * @see https://github.com/awesomemotive/optin-monster-wp-api/pull/179
266
  *
267
  * @since 1.9.0
268
  */
269
+ public function maybe_output_notice() {
270
  static $hooked = false;
271
  if (
272
  ! $hooked
273
+ && $this->should_show_notification_pulse()
274
  && $this->is_om_page()
275
  ) {
276
 
277
+ $url = '';
278
+ $this->base->output_min_css( 'notification-css.php' );
279
+ $this->base->output_view( 'notification.php', compact( 'url' ) );
 
 
 
 
280
  add_action( 'admin_footer', array( $this, 'handle_closing_notice' ) );
281
  }
282
  $hooked = true;
283
  }
284
 
285
  /**
286
+ * Handles the notice-closing and setting the cookie.
287
+ *
288
+ * @see https://github.com/awesomemotive/optin-monster-wp-api/pull/179
289
  *
290
  * @since 1.9.0
291
  */
292
  public function handle_closing_notice() {
293
+ $this->base->output_view( 'notification-close-js.php' );
294
+ }
295
+
296
+ /**
297
+ * Add pages to plugin action links in the Plugins table.
298
+ *
299
+ * @since 1.9.10
300
+ *
301
+ * @param array $links Default plugin action links.
302
+ *
303
+ * @return array $links Amended plugin action links.
304
+ */
305
+ public function output_plugin_links( $links ) {
306
+
307
+ $new_links = $this->base->get_api_credentials()
308
+ ? array(
309
+ sprintf( '<a href="%s">%s</a>', $this->get_dashboard_link(), __( 'Campaigns', 'optin-monster-api' ) ),
310
+ sprintf( '<a href="%s">%s</a>', $this->get_settings_link(), __( 'Settings', 'optin-monster-api' ) ),
311
+ sprintf( '<a href="%s">%s</a>', $this->admin_page_url( array( 'page' => 'optin-monster-templates' ) ), __( 'Create New Campaign', 'optin-monster-api' ) ),
312
+ )
313
+ : array(
314
+ sprintf( '<a href="%s">%s</a>', $this->get_dashboard_link(), __( 'Connect', 'optin-monster-api' ) ),
315
+ );
316
+
317
+ $links = array_merge( $new_links, $links );
318
+
319
+ return $links;
320
  }
321
 
322
  /**
324
  *
325
  * @since 1.3.4
326
  *
327
+ * @param array $classes
328
  *
329
  * @return array
330
  */
354
 
355
  if ( function_exists( 'get_current_screen' ) ) {
356
  $screen = get_current_screen();
357
+ $page = $screen->id;
358
+ if ( false !== strpos( $page, 'toplevel_page_optin-monster-' ) ) {
359
  return true;
360
  }
361
 
362
+ if ( ! empty( $screen->parent_base ) && false !== strpos( $screen->parent_base, 'optin-monster-' ) ) {
363
  return true;
364
  }
 
365
  } else {
366
  $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
367
  }
375
  * @since 1.0.0
376
  */
377
  public function assets() {
 
378
  add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) );
379
  add_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );
380
  add_filter( 'admin_footer_text', array( $this, 'footer' ) );
389
  * @since 1.0.0
390
  */
391
  public function styles() {
392
+ $version = $this->base->asset_version();
393
 
394
+ wp_register_style( $this->base->plugin_slug . '-select2', $this->base->url . 'assets/css/select2.min.css', array(), $version );
395
  wp_enqueue_style( $this->base->plugin_slug . '-select2' );
396
+ wp_register_style( $this->base->plugin_slug . '-settings', $this->base->url . 'assets/dist/css/settings.min.css', array(), $version );
397
  wp_enqueue_style( $this->base->plugin_slug . '-settings' );
398
 
399
  // Run a hook to load in custom styles.
409
  public function scripts() {
410
  global $wpdb;
411
 
412
+ $version = $this->base->asset_version();
413
+
414
  // Posts query.
415
  $postTypes = array_map( 'esc_sql', get_post_types( array( 'public' => true ) ) );
416
  $postTypes = implode( "','", $postTypes );
417
 
418
+ $sql = "
419
  SELECT ID AS `id`, post_title AS `text`
420
  FROM $wpdb->posts
421
  WHERE post_type IN ( '{$postTypes}' )
425
  $posts = $wpdb->get_results( $sql, ARRAY_A );
426
 
427
  // Taxonomies query.
428
+ $sql = "
429
  SELECT terms.term_id AS 'id', terms.name AS 'text'
430
  FROM {$wpdb->term_taxonomy} tax
431
  LEFT JOIN {$wpdb->terms} terms ON terms.term_id = tax.term_id
434
  ";
435
  $tags = $wpdb->get_results( $sql, ARRAY_A );
436
 
437
+ wp_register_script( $this->base->plugin_slug . '-select2', $this->base->url . 'assets/js/select2.min.js', array( 'jquery' ), $version, true );
438
  wp_enqueue_script( $this->base->plugin_slug . '-select2' );
439
+ wp_register_script( $this->base->plugin_slug . '-connect', $this->base->url . 'assets/dist/js/connect.min.js', array( 'jquery' ), $version, true );
440
+ wp_register_script(
 
 
 
 
 
 
 
 
 
 
 
 
441
  $this->base->plugin_slug . '-settings',
442
+ $this->base->url . 'assets/dist/js/settings.min.js',
443
  array(
444
+ 'jquery',
445
+ 'jquery-ui-core',
446
+ 'jquery-ui-datepicker',
447
+ 'underscore',
448
+ $this->base->plugin_slug . '-select2',
449
+ $this->base->plugin_slug . '-connect',
450
+ ),
451
+ $version,
452
+ true
453
+ );
454
+
455
+ wp_localize_script(
456
+ $this->base->plugin_slug . '-connect',
457
+ 'OMAPI',
458
+ array(
459
+ 'posts' => $posts,
460
+ 'tags' => $tags,
461
+ 'app_url' => trailingslashit( OPTINMONSTER_APP_URL ),
462
+ 'blogname' => esc_attr( get_option( 'blogname' ) ),
463
+ 'root' => esc_url_raw( rest_url() ),
464
+ 'nonce' => wp_create_nonce( 'wp_rest' ),
465
+ 'confirm' => __( 'Are you sure you want to reset these settings?', 'optin-monster-api' ),
466
  )
467
  );
468
+ wp_enqueue_script( $this->base->plugin_slug . '-settings' );
469
+ wp_register_script( $this->base->plugin_slug . '-clipboard', $this->base->url . 'assets/js/clipboard.min.js', array( $this->base->plugin_slug . '-settings' ), $version, true );
470
+ wp_enqueue_script( $this->base->plugin_slug . '-clipboard' );
471
+ wp_register_script( $this->base->plugin_slug . '-tooltip', $this->base->url . 'assets/js/tooltip.min.js', array( $this->base->plugin_slug . '-settings' ), $version, true );
472
+ wp_enqueue_script( $this->base->plugin_slug . '-tooltip' );
473
+ wp_register_script( $this->base->plugin_slug . '-jspdf', $this->base->url . 'assets/js/jspdf.min.js', array( $this->base->plugin_slug . '-settings' ), $version, true );
474
+ wp_enqueue_script( $this->base->plugin_slug . '-jspdf' );
475
 
476
  // Run a hook to load in custom styles.
477
  do_action( 'optin_monster_api_admin_scripts', $this->view );
483
  *
484
  * @since 1.1.5.9
485
  */
486
+ public function fix_plugin_js_conflicts() {
487
+ if ( $this->is_om_page() ) {
 
 
488
 
489
+ // Dequeue scripts that might cause our settings not to work properly.
490
+ wp_dequeue_script( 'optimizely_config' );
 
491
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492
  }
493
 
494
  /**
502
  public function footer( $text ) {
503
 
504
  $url = 'https://wordpress.org/support/plugin/optinmonster/reviews?filter=5#new-post';
505
+ $text = sprintf( __( 'Please rate <strong>OptinMonster</strong> <a href="%1$s" target="_blank" rel="noopener">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href="%2$s" target="_blank" rel="noopener noreferrer">WordPress.org</a> to help us spread the word. Thank you from the OptinMonster team!', 'optin-monster-api' ), $url, $url );
506
  return $text;
507
 
508
  }
512
  *
513
  * @since 1.0.0
514
  */
515
+ public function settings_page() {
516
+ $first = true;
517
 
518
  ?>
 
519
  <div class="wrap omapi-page">
520
  <h2></h2>
521
  <div class="omapi-ui">
522
  <div class="omapi-tabs">
523
  <ul class="omapi-panels">
524
+ <?php foreach ( $this->get_panels() as $id => $panel ) :
525
+ $first = $first ? ' omapi-panel-first' : '';
 
526
  $active = $id == $this->view ? ' omapi-panel-active' : '';
527
  ?>
528
+ <li class="omapi-panel omapi-panel-<?php echo sanitize_html_class( $id ); ?><?php echo $first . $active; ?>"><a href="<?php echo esc_url_raw( $this->get_settings_link( $id ) ); ?>" class="omapi-panel-link" data-panel="<?php echo $id; ?>" data-panel-title="<?php echo $panel; ?>"><?php echo $panel; ?></a></li>
529
+ <?php $first = false; endforeach; ?>
530
  </ul>
531
  </div>
532
  <div class="omapi-tabs-content">
533
  <?php
534
+ foreach ( $this->get_panels() as $id => $panel ) :
535
  $active = $id == $this->view ? ' omapi-content-active' : '';
536
  ?>
537
  <div class="omapi-content omapi-content-<?php echo sanitize_html_class( $id ); ?><?php echo $active; ?>">
538
  <?php
539
+ do_action( 'optin_monster_api_content_before', $id, $panel, $this, $active );
540
+ do_action( 'optin_monster_api_content_' . $id, $panel, $this, $active );
541
+ do_action( 'optin_monster_api_content_after', $id, $panel, $this, $active );
542
+ ?>
543
  </div>
544
  <?php endforeach; ?>
545
  </div>
572
  }
573
 
574
  // Set default panels.
575
+ $panels['api'] = $this->panels['api'];
576
 
577
  // Set the WooCommerce panel.
578
  if ( $creds && ( $is_minimum_woo || OMAPI_WooCommerce::is_connected() ) && $can_manage_woo ) {
579
+ $panels['woocommerce'] = $this->panels['woocommerce'];
580
  }
581
 
582
  // Set the Support panel
606
  $ret = '';
607
  $optin_id = isset( $_GET['optin_monster_api_id'] ) ? absint( $_GET['optin_monster_api_id'] ) : 0;
608
  $value = 'optins' == $id ? get_post_meta( $optin_id, '_omapi_' . $setting, true ) : $this->base->get_option( $id, $setting );
609
+ $optin = get_post( $optin_id );
610
 
611
  // Load the type of setting UI based on the option.
612
  switch ( $id ) {
613
+ case 'api':
614
  switch ( $setting ) {
615
+ case 'user':
616
  $ret = $this->get_password_field( $setting, $value, $id, esc_html__( 'Legacy API Username', 'optin-monster-api' ), esc_html__( 'The Legacy API Username found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your Legacy API Username here...', 'optin-monster-api' ) );
617
+ break 2;
618
 
619
+ case 'key':
620
  $ret = $this->get_password_field( $setting, $value, $id, esc_html__( 'Legacy API Key', 'optin-monster-api' ), esc_html__( 'The Legacy API Key found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your Legacy API Key here...', 'optin-monster-api' ) );
621
+ break 2;
622
 
623
+ case 'apikey':
624
+ $ret = $this->get_api_field( $setting, $value, 'omapiAuthorizeButton', esc_html__( 'Authorize OptinMonster', 'optin-monster-api' ), sprintf( esc_html__( 'Click to connect your OptinMonster Account, or %1$s click here to enter an API Key Manually.%2$s', 'optin-monster-api' ), '<a href="#" id="omapiShowApiKey">', '</a>' ) );
625
  $ret .= $this->get_password_field( $setting, $value, $id, esc_html__( 'API Key', 'optin-monster-api' ), esc_html__( 'A single API Key found in your OptinMonster Account API area.', 'optin-monster-api' ), esc_html__( 'Enter your API Key here...', 'optin-monster-api' ), array(), true );
626
  add_filter( 'omapi_hide_submit_buttom', '__return_true' );
627
+ break 2;
628
 
629
+ case 'omwpdebug':
630
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Debugging Rules', 'optin-monster-api' ), __( 'Allow logged-out/non-admin debugging of plugin rules with the <code>omwpdebug</code> query variable?', 'optin-monster-api' ) );
631
+ break 2;
632
  default:
633
+ break 2;
634
  }
635
+ break;
636
 
637
+ case 'settings':
638
  switch ( $setting ) {
639
+ case 'cookies':
640
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Clear local cookies on campaign update?', 'optin-monster-api' ), esc_html__( 'If checked, local cookies will be cleared for all campaigns after campaign settings are adjusted and saved.', 'optin-monster-api' ) );
641
+ break 2;
642
  default:
643
+ break 2;
644
  }
645
+ break;
646
 
647
+ case 'woocommerce':
648
  switch ( $setting ) {
649
+ case 'settings':
650
  $ret = $this->get_woocommerce();
651
+ break 2;
652
  default:
653
+ break 2;
654
  }
655
+ break;
656
 
657
+ case 'support':
658
  switch ( $setting ) {
659
+ case 'video':
660
  $ret = '<div class="omapi-half-column"><div class="omapi-video-container"><iframe width="640" height="360" src="https://www.youtube.com/embed/tUoJcp5Z9H0?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe></div></div>';
661
  break 2;
662
 
663
+ case 'links':
664
  $ret = $this->get_support_links( $setting, esc_html__( 'Helpful Links', 'optin-monster-api' ) );
665
  break 2;
666
 
668
  $ret = $this->get_plugin_report( $setting, esc_html__( 'Server / Plugin Report', 'optin-monster-api' ) );
669
  break 2;
670
  default:
671
+ break 2;
672
  }
673
  break;
674
 
675
+ case 'toggle':
676
  switch ( $setting ) {
677
+ case 'advanced-start':
678
  $ret = $this->get_toggle_start( $setting, esc_html__( 'Advanced Settings', 'optin-monster-api' ), esc_html__( 'More specific settings available for campaign visibility.', 'optin-monster-api' ) );
679
+ break 2;
680
+ case 'advanced-end':
681
  $ret = $this->get_toggle_end();
682
+ break 2;
683
+ case 'woocommerce-start':
684
  $ret = $this->get_toggle_start( $setting, esc_html__( 'WooCommerce Settings', 'optin-monster-api' ), esc_html__( 'More specific settings available for WooCommerce integration.', 'optin-monster-api' ) );
685
  break 2;
686
+ case 'woocommerce-end':
687
  $ret = $this->get_toggle_end();
688
  break 2;
689
  default:
690
+ break 2;
691
  }
692
+ break;
693
 
694
+ case 'optins':
695
  switch ( $setting ) {
696
+ case 'enabled':
697
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Enable campaign on site?', 'optin-monster-api' ), esc_html__( 'The campaign will not be displayed on this site unless this setting is checked.', 'optin-monster-api' ) );
698
+ break 2;
699
 
700
+ case 'automatic':
701
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Display the campaign automatically after blog posts', 'optin-monster-api' ), sprintf( __( 'If no advanced settings are selected below, the campaign will display after every post. You can turn this off and add it manually to your posts by <a href="%s" target="_blank" rel="noopener">clicking here and viewing the tutorial.</a>', 'optin-monster-api' ), 'https://optinmonster.com/docs/how-to-manually-add-an-after-post-or-inline-optin/' ), array( 'omapi-after-post-auto-select' ) );
702
+ break 2;
703
+ case 'automatic_shortcode':
704
+ $full_shortcode = '[optin-monster slug="' . $optin->post_name . '"]';
705
+ $ret = $this->get_text_field(
706
  $setting,
707
  $full_shortcode,
708
  $id,
712
  array(),
713
  true
714
  );
715
+ break 2;
716
 
717
+ case 'users':
718
  $ret = $this->get_dropdown_field( $setting, $value, $id, $this->get_user_output(), esc_html__( 'Who should see this campaign?', 'optin-monster-api' ), sprintf( __( 'Determines who should be able to view this campaign. Want to hide for newsletter subscribers? <a href="%s" target="_blank" rel="noopener">Click here to learn how.</a>', 'optin-monster-api' ), 'https://optinmonster.com/docs/how-to-hide-optinmonster-from-existing-newsletter-subscribers/' ) );
719
+ break 2;
720
 
721
+ case 'never':
722
  $val = is_array( $value ) ? implode( ',', $value ) : $value;
723
  $ret = $this->get_custom_field( $setting, '<input type="hidden" value="' . esc_attr( $val ) . '" id="omapi-field-' . $setting . '" class="omapi-select" name="omapi[' . $id . '][' . $setting . ']" data-placeholder="' . esc_attr__( 'Type to search and select post(s)...', 'optin-monster-api' ) . '">', esc_html__( 'Never load campaign on:', 'optin-monster-api' ), esc_html__( 'Never loads the campaign on the selected posts and/or pages. Does not disable automatic Global output.', 'optin-monster-api' ) );
724
+ break 2;
725
 
726
+ case 'only':
727
  $val = is_array( $value ) ? implode( ',', $value ) : $value;
728
  $ret = $this->get_custom_field( $setting, '<input type="hidden" value="' . esc_attr( $val ) . '" id="omapi-field-' . $setting . '" class="omapi-select" name="omapi[' . $id . '][' . $setting . ']" data-placeholder="' . esc_attr__( 'Type to search and select post(s)...', 'optin-monster-api' ) . '">', esc_html__( 'Load campaign specifically on:', 'optin-monster-api' ), esc_html__( 'Loads the campaign on the selected posts and/or pages.', 'optin-monster-api' ) );
729
+ break 2;
730
 
731
+ case 'categories':
732
  $categories = get_categories();
733
  if ( $categories ) {
734
  ob_start();
736
  $cats = ob_get_clean();
737
  $ret = $this->get_custom_field( 'categories', $cats, esc_html__( 'Load campaign on post categories:', 'optin-monster-api' ) );
738
  }
739
+ break;
740
 
741
+ case 'taxonomies':
742
  // Attempt to load post tags.
743
  $html = '';
744
  $tags = get_taxonomy( 'post_tag' );
752
  }
753
 
754
  // Possibly load taxonomies setting if they exist.
755
+ $taxonomies = get_taxonomies(
756
+ array(
757
+ 'public' => true,
758
+ '_builtin' => false,
759
+ )
760
+ );
761
  $taxonomies['post_format'] = 'post_format';
762
  $data = array();
763
 
764
+ if ( $this->base->is_woocommerce_active() ) {
765
+ unset( $taxonomies['product_cat'] );
766
+ unset( $taxonomies['product_tag'] );
767
+ }
768
+
769
  // Allow returned taxonmies to be filtered before creating UI.
770
+ $taxonomies = apply_filters( 'optin_monster_api_setting_ui_taxonomies', $taxonomies );
771
 
772
  if ( $taxonomies ) {
773
  foreach ( $taxonomies as $taxonomy ) {
779
  $tax = get_taxonomy( $taxonomy );
780
  $args = array(
781
  'descendants_and_self' => 0,
782
+ 'selected_cats' => (array) $display,
783
+ 'popular_cats' => false,
784
+ 'walker' => null,
785
+ 'taxonomy' => $taxonomy,
786
+ 'checked_ontop' => true,
787
  );
788
  wp_terms_checklist( 0, $args );
789
  $output = ob_get_clean();
803
 
804
  // Return the data.
805
  $ret = $html;
806
+ break;
807
 
808
+ case 'show':
809
  $ret = $this->get_custom_field( 'show', $this->get_show_fields( $value ), esc_html__( 'Load campaign on post types and archives:', 'optin-monster-api' ) );
810
+ break;
811
 
812
+ case 'mailpoet':
813
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Save lead to MailPoet?', 'optin-monster-api' ), esc_html__( 'If checked, successful campaign leads will be saved to MailPoet.', 'optin-monster-api' ) );
814
+ break 2;
815
 
816
+ case 'mailpoet_list':
817
+ $ret = $this->get_dropdown_field( $setting, $value, $id, $this->base->mailpoet->get_lists(), esc_html__( 'Add lead to this MailPoet list:', 'optin-monster-api' ), esc_html__( 'All successful leads for the campaign will be added to this particular MailPoet list.', 'optin-monster-api' ) );
818
+ break 2;
819
 
820
  case 'mailpoet_use_phone':
821
  $phone_field = get_post_meta( $optin_id, '_omapi_mailpoet_phone_field', true );
822
 
823
  $ret = $this->get_checkbox_field( $setting, ! empty( $phone_field ), $id, esc_html__( 'Save phone number to MailPoet?', 'optin-monster-api' ), esc_html__( 'If checked, Phone number will be saved in Mailpoet.', 'optin-monster-api' ) );
824
+ break 2;
825
 
826
+ case 'mailpoet_phone_field':
827
+ $ret .= $this->get_dropdown_field( $setting, $value, $id, $this->base->mailpoet->get_custom_fields(), esc_html__( 'Select the custom field for phone:', 'optin-monster-api' ), esc_html__( 'If you have a custom field for phone numbers, select the field here.', 'optin-monster-api' ) );
828
+ break 2;
829
 
830
  // Start WooCommerce settings.
831
+ case 'show_on_woocommerce':
832
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on all WooCommerce pages', 'optin-monster-api' ), esc_html__( 'The campaign will show on any page where WooCommerce templates are used.', 'optin-monster-api' ) );
833
  break 2;
834
 
835
+ case 'is_wc_shop':
836
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce shop', 'optin-monster-api' ), esc_html__( 'The campaign will show on the product archive page (shop).', 'optin-monster-api' ) );
837
  break 2;
838
 
839
+ case 'is_wc_product':
840
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce products', 'optin-monster-api' ), esc_html__( 'The campaign will show on any single product.', 'optin-monster-api' ) );
841
  break 2;
842
 
843
+ case 'is_wc_cart':
844
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Cart', 'optin-monster-api' ), esc_html__( 'The campaign will show on the cart page.', 'optin-monster-api' ) );
845
  break 2;
846
 
847
+ case 'is_wc_checkout':
848
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Checkout', 'optin-monster-api' ), esc_html__( 'The campaign will show on the checkout page.', 'optin-monster-api' ) );
849
  break 2;
850
 
851
+ case 'is_wc_account':
852
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Customer Account', 'optin-monster-api' ), esc_html__( 'The campaign will show on the WooCommerce customer account pages.', 'optin-monster-api' ) );
853
  break 2;
854
 
855
+ case 'is_wc_endpoint':
856
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on all WooCommerce Endpoints', 'optin-monster-api' ), esc_html__( 'The campaign will show when on any WooCommerce Endpoint.', 'optin-monster-api' ) );
857
  break 2;
858
+ case 'is_wc_endpoint_order_pay':
859
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Order Pay endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for order pay is displayed.', 'optin-monster-api' ) );
860
  break 2;
861
 
862
+ case 'is_wc_endpoint_order_received':
863
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Order Received endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for order received is displayed.', 'optin-monster-api' ) );
864
  break 2;
865
 
866
+ case 'is_wc_endpoint_view_order':
867
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce View Order endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for view order is displayed.', 'optin-monster-api' ) );
868
  break 2;
869
 
870
+ case 'is_wc_endpoint_edit_account':
871
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Edit Account endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for edit account is displayed.', 'optin-monster-api' ) );
872
  break 2;
873
 
874
+ case 'is_wc_endpoint_edit_address':
875
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Edit Address endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for edit address is displayed.', 'optin-monster-api' ) );
876
  break 2;
877
 
878
+ case 'is_wc_endpoint_lost_password':
879
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Lost Password endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for lost password is displayed.', 'optin-monster-api' ) );
880
  break 2;
881
 
882
+ case 'is_wc_endpoint_customer_logout':
883
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Customer Logout endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for customer logout is displayed.', 'optin-monster-api' ) );
884
  break 2;
885
 
886
+ case 'is_wc_endpoint_add_payment_method':
887
  $ret = $this->get_checkbox_field( $setting, $value, $id, esc_html__( 'Show on WooCommerce Add Payment Method endpoint', 'optin-monster-api' ), esc_html__( 'The campaign will show when the endpoint page for add payment method is displayed.', 'optin-monster-api' ) );
888
  break 2;
889
 
890
+ case 'is_wc_product_category':
891
  $taxonomy = 'product_cat';
892
+ $terms = get_terms( $taxonomy );
893
  if ( $terms ) {
894
  ob_start();
895
  $display = isset( $value ) ? (array) $value : array();
899
  'popular_cats' => false,
900
  'walker' => null,
901
  'taxonomy' => $taxonomy,
902
+ 'checked_ontop' => true,
903
  );
904
  wp_terms_checklist( 0, $args );
905
  $output = ob_get_clean();
909
  }
910
  break 2;
911
 
912
+ case 'is_wc_product_tag':
913
  $taxonomy = 'product_tag';
914
+ $terms = get_terms( $taxonomy );
915
  if ( $terms ) {
916
  ob_start();
917
  $display = isset( $value ) ? (array) $value : array();
921
  'popular_cats' => false,
922
  'walker' => null,
923
  'taxonomy' => $taxonomy,
924
+ 'checked_ontop' => true,
925
  );
926
  wp_terms_checklist( 0, $args );
927
  $output = ob_get_clean();
932
  break 2;
933
 
934
  default:
935
+ break 2;
936
  }
937
+ break;
938
+ case 'note':
939
  switch ( $setting ) {
940
+ case 'sidebar_widget_notice':
941
  $ret = $this->get_optin_type_note( $setting, esc_html__( 'Use Widgets to set Sidebar output', 'optin-monster-api' ), esc_html__( 'You can set this campaign to show in your sidebars using the OptinMonster widget within your sidebars.', 'optin-monster-api' ), 'widgets.php', esc_html__( 'Go to Widgets', 'optin-monster-api' ) );
942
+ break 2;
943
  default:
944
+ break 2;
945
  }
946
+ break;
947
  default:
948
+ break;
949
  }
950
 
951
  // Return the setting output.
962
  */
963
  public function get_user_output() {
964
 
965
+ return apply_filters(
966
+ 'optin_monster_api_user_output',
967
  array(
968
  array(
969
  'name' => esc_html__( 'Show campaign to all visitors and users', 'optin-monster-api' ),
970
+ 'value' => 'all',
971
  ),
972
  array(
973
  'name' => esc_html__( 'Show campaign to only visitors (not logged-in)', 'optin-monster-api' ),
974
+ 'value' => 'out',
975
  ),
976
  array(
977
  'name' => esc_html__( 'Show campaign to only users (logged-in)', 'optin-monster-api' ),
978
+ 'value' => 'in',
979
+ ),
980
  )
981
  );
982
 
983
  }
984
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
985
 
986
  /**
987
  * Retrieves the UI output for the single posts show setting.
988
  *
989
+ * @since 1.9.10
990
  *
991
  * @param array $value The meta index value for the show setting.
992
  * @return string $html HTML representation of the data.
996
  // Increment the global tabindex counter.
997
  $this->tabindex++;
998
 
999
+ $output = '<label for="omapi-field-show-index" class="omapi-custom-label">';
1000
+ $output .= '<input type="checkbox" id="omapi-field-show-index" name="omapi[optins][show][]" value="index"' . checked( in_array( 'index', (array) $value ), 1, false ) . ' /> ' . esc_html__( 'Front Page and Search Pages', 'optin-monster-api' ) . '</label><br />';
1001
  $post_types = get_post_types( array( 'public' => true ) );
1002
  foreach ( (array) $post_types as $show ) {
1003
  $pt_object = get_post_type_object( $show );
1018
  *
1019
  * @since 1.0.0
1020
  *
1021
+ * @param string $setting The name of the setting to be saved to the DB.
1022
+ * @param mixed $value The value of the setting.
1023
+ * @param string $id The setting ID to target for name field.
1024
+ * @param string $label The label of the input field.
1025
+ * @param string $desc The description for the input field.
1026
+ * @param string $place Placeholder text for the field.
1027
+ * @param array $classes Array of classes to add to the field.
1028
  * @param boolean $copy Turn on clipboard copy button and make field readonly
1029
  * @return string $html HTML representation of the data.
1030
  */
1037
  $readonly_output = $copy ? 'readonly' : '';
1038
 
1039
  // Build the HTML.
1040
+ $field = '<div class="omapi-field-box omapi-text-field omapi-field-box-' . $setting . ' omapi-clear">';
1041
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1042
+ $field .= '<input type="text" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . $readonly_output . ' />';
1043
+ if ( $copy ) {
1044
+ $field .= '<span class="omapi-copy-button button" data-clipboard-target="#omapi-field-' . $setting . '">Copy to clipboard</span>';
1045
+ }
1046
+ if ( $desc ) {
1047
+ $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1048
+ }
1049
  $field .= '</p>';
1050
+ $field .= '</div>';
1051
 
1052
  // Return the HTML.
1053
  return apply_filters( 'optin_monster_api_text_field', $field, $setting, $value, $id, $label );
1060
  * @since 1.0.0
1061
  *
1062
  * @param string $setting The name of the setting to be saved to the DB.
1063
+ * @param mixed $value The value of the setting.
1064
  * @param string $id The setting ID to target for name field.
1065
  * @param string $label The label of the input field.
1066
  * @param string $desc The description for the input field.
1067
  * @param string $place Placeholder text for the field.
1068
+ * @param array $classes Array of classes to add to the field.
1069
+ * @param bool $hidden If the field should be hidden by default.
1070
  * @return string $html HTML representation of the data.
1071
  */
1072
  public function get_password_field( $setting, $value, $id, $label, $desc = false, $place = false, $classes = array(), $hidden = false ) {
1078
  $hidden_class = $hidden ? 'omapi-hidden' : '';
1079
 
1080
  // Build the HTML.
1081
+ $field = '<div class="omapi-field-box omapi-password-field omapi-field-box-' . $setting . ' omapi-clear ' . $hidden_class . '">';
1082
+ $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1083
  $field .= '<input type="password" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . ' />';
1084
+ if ( $desc ) {
1085
+ $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1086
+ }
1087
  $field .= '</p>';
1088
+ $field .= '</div>';
1089
 
1090
  // Return the HTML.
1091
  return apply_filters( 'optin_monster_api_password_field', $field, $setting, $value, $id, $label );
1098
  * @since 1.8.0
1099
  *
1100
  * @param string $setting The name of the setting to be saved to the DB.
1101
+ * @param mixed $value The value of the setting.
1102
  * @param string $id The setting ID to target for name field.
1103
  * @param string $label The label of the input field.
1104
  * @param string $desc The description for the input field.
1111
  $value = trim( $value );
1112
 
1113
  // Build the HTML.
1114
+ $field = '<div class="omapi-field-box omapi-field-wrap omapi-api-field omapi-field-box-' . $setting . ' omapi-clear">';
1115
+ if ( empty( $value ) ) {
1116
+ $field .= "<p><input type='submit' id='{$id}' class='button button-primary button-large button-hero' value='{$label}'></p>";
1117
+ if ( $desc ) {
1118
+ $field .= '<p><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label></p>';
1119
+ }
1120
+ } else {
1121
+ $field .= '<p>' . __( 'Your account is <strong>connected.</strong>', 'optin-monster-api' ) . '</p><p><button id="omapiDisconnectButton" class="button button-omapi-gray button-hero">' . esc_html__( 'Disconnect', 'optin-monster-api' ) . '</button></p>';
1122
+ }
 
 
1123
  $field .= '</div>';
1124
 
1125
  // Return the HTML.
1133
  * @since 1.0.0
1134
  *
1135
  * @param string $setting The name of the setting to be saved to the DB.
1136
+ * @param mixed $value The value of the setting.
1137
  * @param string $id The setting ID to target for name field.
1138
+ * @param array $classes Array of classes to add to the field.
1139
  * @return string $html HTML representation of the data.
1140
  */
1141
  public function get_hidden_field( $setting, $value, $id, $classes = array() ) {
1158
  * @since 1.0.0
1159
  *
1160
  * @param string $setting The name of the setting to be saved to the DB.
1161
+ * @param mixed $value The value of the setting.
1162
  * @param string $id The setting ID to target for name field.
1163
  * @param string $label The label of the input field.
1164
  * @param string $desc The description for the input field.
1165
  * @param string $place Placeholder text for the field.
1166
+ * @param array $classes Array of classes to add to the field.
1167
  * @return string $html HTML representation of the data.
1168
  */
1169
  public function get_textarea_field( $setting, $value, $id, $label, $desc = false, $place = false, $classes = array() ) {
1172
  $this->tabindex++;
1173
 
1174
  // Build the HTML.
1175
+ $field = '<div class="omapi-field-box omapi-textarea-field omapi-field-box-' . $setting . ' omapi-clear">';
1176
+ $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1177
  $field .= '<textarea id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" rows="5" tabindex="' . $this->tabindex . '"' . ( $place ? ' placeholder="' . $place . '"' : '' ) . '>' . $value . '</textarea>';
1178
+ if ( $desc ) {
1179
+ $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1180
+ }
1181
  $field .= '</p>';
1182
+ $field .= '</div>';
1183
 
1184
  // Return the HTML.
1185
  return apply_filters( 'optin_monster_api_textarea_field', $field, $setting, $value, $id, $label );
1192
  * @since 1.0.0
1193
  *
1194
  * @param string $setting The name of the setting to be saved to the DB.
1195
+ * @param mixed $value The value of the setting.
1196
  * @param string $id The setting ID to target for name field.
1197
  * @param string $label The label of the input field.
1198
  * @param string $desc The description for the input field.
1199
+ * @param array $classes Array of classes to add to the field.
1200
  * @return string $html HTML representation of the data.
1201
  */
1202
  public function get_checkbox_field( $setting, $value, $id, $label, $desc = false, $classes = array() ) {
1205
  $this->tabindex++;
1206
 
1207
  // Build the HTML.
1208
+ $field = '<div class="omapi-field-box omapi-checkbox-field omapi-field-box-' . $setting . ' omapi-clear">';
1209
+ $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1210
  $field .= '<input type="checkbox" id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '" value="' . esc_attr( $value ) . '"' . checked( $value, 1, false ) . ' /> ';
1211
+ if ( $desc ) {
1212
+ $field .= '<label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1213
+ }
1214
  $field .= '</p>';
1215
+ $field .= '</div>';
1216
 
1217
  // Return the HTML.
1218
  return apply_filters( 'optin_monster_api_checkbox_field', $field, $setting, $value, $id, $label );
1225
  * @since 1.0.0
1226
  *
1227
  * @param string $setting The name of the setting to be saved to the DB.
1228
+ * @param mixed $value The value of the setting.
1229
  * @param string $id The setting ID to target for name field.
1230
+ * @param array $data The data to be used for option fields.
1231
  * @param string $label The label of the input field.
1232
  * @param string $desc The description for the input field.
1233
+ * @param array $classes Array of classes to add to the field.
1234
  * @return string $html HTML representation of the data.
1235
  */
1236
  public function get_dropdown_field( $setting, $value, $id, $data, $label, $desc = false, $classes = array() ) {
1239
  $this->tabindex++;
1240
 
1241
  // Build the HTML.
1242
+ $field = '<div class="omapi-field-box omapi-dropdown-field omapi-field-box-' . $setting . ' omapi-clear">';
1243
+ $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label><br />';
1244
  $field .= '<select id="omapi-field-' . $setting . '" class="' . implode( ' ', (array) $classes ) . '" name="omapi[' . $id . '][' . $setting . ']" tabindex="' . $this->tabindex . '">';
1245
+ foreach ( $data as $i => $info ) {
1246
+ $field .= '<option value="' . esc_attr( $info['value'] ) . '"' . selected( $info['value'], $value, false ) . '>' . $info['name'] . '</option>';
1247
+ }
1248
  $field .= '</select>';
1249
+ if ( $desc ) {
1250
+ $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1251
+ }
1252
  $field .= '</p>';
1253
+ $field .= '</div>';
1254
 
1255
  // Return the HTML.
1256
  return apply_filters( 'omapi_dropdown_field', $field, $setting, $value, $id, $label, $data );
1263
  * @since 1.0.0
1264
  *
1265
  * @param string $setting The name of the setting to be saved to the DB.
1266
+ * @param mixed $value The value of the setting.
1267
  * @param string $label The label of the input field.
1268
  * @param string $desc The description for the input field.
1269
  * @return string $html HTML representation of the data.
1271
  public function get_custom_field( $setting, $value, $label, $desc = false ) {
1272
 
1273
  // Build the HTML.
1274
+ $field = '<div class="omapi-field-box omapi-custom-field omapi-field-box-' . $setting . ' omapi-clear">';
1275
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label></p>';
1276
  $field .= $value;
1277
+ if ( $desc ) {
1278
+ $field .= '<br /><label for="omapi-field-' . $setting . '"><span class="omapi-field-desc">' . $desc . '</span></label>';
1279
+ }
1280
  $field .= '</div>';
1281
 
1282
  // Return the HTML.
1295
  * @return mixed|void
1296
  */
1297
  public function get_toggle_start( $setting, $label, $desc ) {
1298
+ $field = '<div class="omapi-ui-toggle-controller">';
1299
  $field .= '<p class="omapi-field-wrap"><label for="omapi-field-' . $setting . '">' . $label . '</label></p>';
1300
+ if ( $desc ) {
1301
+ $field .= '<span class="omapi-field-desc">' . $desc . '</span>';
1302
+ }
1303
  $field .= '</div>';
1304
  $field .= '<div class="omapi-ui-toggle-content">';
1305
 
1306
+ return apply_filters( 'optin_monster_api_toggle_start_field', $field, $label, $desc );
1307
  }
1308
 
1309
  /**
1312
  * @since 1.1.5
1313
  * @return string HTML end for toggle start
1314
  */
1315
+ public function get_toggle_end() {
1316
 
1317
  $field = '</div>';
1318
 
1335
  public function get_optin_type_note( $setting, $title, $text, $admin_page, $button ) {
1336
 
1337
  $field = '<div class="omapi-field-box omapi-inline-notice omapi-field-box-' . $setting . ' omapi-clear">';
1338
+ if ( $title ) {
1339
  $field .= '<p class="omapi-notice-title">' . $title . '</p>';
1340
  }
1341
+ if ( $text ) {
1342
  $field .= '<p class="omapi-field-desc">' . $text . '</p>';
1343
  }
1344
  if ( $admin_page && $button ) {
1348
  }
1349
  $field .= '</div>';
1350
 
1351
+ return apply_filters( 'optin_monster_api_inline_note_display', $field, $title, $text, $admin_page, $button );
1352
  }
1353
 
1354
  /**
1360
  */
1361
  public function get_support_links( $setting, $title ) {
1362
 
1363
+ $field = '';
1364
 
1365
  $field .= '<div class="omapi-support-links ' . $setting . '"><h3>' . $title . '</h3><ul>';
1366
+ $field .= '<li><a target="_blank" rel="noopener" href="' . esc_url( 'https://optinmonster.com/docs/' ) . '">' . esc_html__( 'Documentation', 'optin-monster-api' ) . '</a></li>';
1367
+ $field .= '<li><a target="_blank" rel="noopener noreferrer" href="' . esc_url( 'https://wordpress.org/plugins/optinmonster/changelog/' ) . '">' . esc_html__( 'Changelog', 'optin-monster-api' ) . '</a></li>';
1368
+ $field .= '<li><a target="_blank" rel="noopener" href="' . esc_url( OPTINMONSTER_APP_URL . '/account/support/' ) . '">' . esc_html__( 'Create a Support Ticket', 'optin-monster-api' ) . '</a></li>';
1369
  $field .= '</ul></div>';
1370
 
1371
+ return apply_filters( 'optin_monster_api_support_links', $field, $setting );
1372
  }
1373
 
1374
  public function get_plugin_report( $setting, $title ) {
1375
 
1376
+ $field = '';
1377
 
1378
  $field .= '<div class="omapi-support-data ' . $setting . '"><h3>' . $title . '</h3>';
1379
+ $link = OPTINMONSTER_APP_URL . '/account/support/';
1380
+ $field .= '<p>' . sprintf( wp_kses( __( 'Download the report and attach to your <a href="%s">support ticket</a> to help speed up the process.', 'optin-monster-api' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $link ) ) . '</p>';
1381
+ $field .= '<a href="#" id="js--omapi-support-pdf" class="button button-primary button-large button-hero omapi-support-data-button" title="' . esc_attr__( 'Download a PDF Report for Support', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Download PDF Report', 'optin-monster-api' ) . '</a>';
1382
  $field .= '</div>';
1383
 
1384
  return apply_filters( 'optin_monster_api_support_data', $field, $setting, $title );
1398
  $output = '';
1399
 
1400
  if ( ! OMAPI_WooCommerce::is_minimum_version() && OMAPI_WooCommerce::is_connected() ) {
1401
+
1402
  $output .= '<p>' . esc_html( sprintf( __( 'OptinMonster requires WooCommerce %s or above.', 'optin-monster-api' ), OMAPI_WooCommerce::MINIMUM_VERSION ) ) . '</p>'
1403
  . '<p>' . esc_html_x( 'This site is currently running: ', 'the current version of WooCommerce: "WooCommerce x.y.z"', 'optin-monster-api' )
1404
  . '<code>WooCommerce ' . esc_html( OMAPI_WooCommerce::version() ) . '</code>.</p>'
1405
  . '<p>' . esc_html__( 'Please upgrade to the latest version of WooCommerce to enjoy deeper integration with OptinMonster.', 'optin-monster-api' ) . '</p>';
1406
+
1407
  } elseif ( OMAPI_WooCommerce::is_connected() ) {
1408
+
1409
  // Set some default key details.
1410
  $defaults = array(
1411
  'key_id' => '',
1428
  $output .= '<p>' . $key_string . ' <a href="' . $key_url . '">View key</a></p>';
1429
  $output .= '<p>' . esc_html__( 'You need to disconnect WooCommerce, below, to remove your keys from OptinMonster, or to change the consumer key/secret pair associated with OptinMonster.', 'optin-monster-api' ) . '</p>';
1430
  $output .= $this->get_hidden_field( 'disconnect', '1', 'woocommerce' );
1431
+
1432
  } else {
1433
 
1434
+ $output .= '<p>' . sprintf( __( 'In order to integrate WooCommerce with the Display Rules in the campaign builder, OptinMonster needs <a href="%s" target="_blank">WooCommerce REST API credentials</a>. OptinMonster only needs Read access permissions to work. Click below to have us auto-generate the consumer key/secret pair, you can manually enter your own.', 'optin-monster-api' ), esc_url( $keys_admin_url ) ) . '</p>';
1435
+ $output .= '<div class="omapi-hidden">';
1436
  $output .= $this->get_text_field(
1437
  'consumer_key',
1438
  '',
1449
  '',
1450
  'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
1451
  );
1452
+ $output .= '<span class="omapi-hidden"><input class="button button-secondary" type="submit" name="omapi_woocommerce_connect" value="' . esc_attr__( 'Connect WooCommerce', 'optin-monster-api' ) . '" /></span>';
1453
+ $output .= '</div>';
1454
  }
1455
 
1456
  return $output;
1457
  }
1458
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1459
  /**
1460
  * Echo out plugin header banner
1461
  *
1462
  * @since 1.1.5.2
1463
  */
1464
  public function output_plugin_screen_banner() {
1465
+ $this->base->output_view( 'plugin-banner.php' );
1466
  }
1467
 
1468
  /**
1505
  $url = $this->get_affiliate_url( $omSasId );
1506
  }
1507
 
1508
+ return apply_filters(
1509
+ 'optin_monster_action_link',
1510
+ $url,
1511
+ array(
1512
+ 'type' => 'sas',
1513
+ 'id' => $omSasId,
1514
+ )
1515
+ );
1516
  }
1517
 
1518
  /**
1556
  . '%2Ffree-trial%2F%3Fid%3D' . urlencode( trim( $omTrialId ) );
1557
  }
1558
 
1559
+ return apply_filters(
1560
+ 'optin_monster_action_link',
1561
+ $url,
1562
+ array(
1563
+ 'type' => 'trial',
1564
+ 'id' => $omTrialId,
1565
+ )
1566
+ );
1567
  }
1568
 
1569
  /**
1571
  *
1572
  * @since 1.8.4
1573
  *
1574
+ * @param mixed $reference_id The reference ID.
1575
  *
1576
  * @return string The affilaite url.
1577
  */
1593
  }
1594
 
1595
  public function has_trial_link() {
 
1596
  $link = $this->get_trial_link();
1597
+
1598
  return strpos( $link, 'optinmonster.com/wp' ) === false;
1599
+ }
1600
 
1601
+ /**
1602
+ * Get the parent slug (contextual based on beta being enabled).
1603
+ *
1604
+ * @since 1.9.10
1605
+ *
1606
+ * @return string
1607
+ */
1608
+ public function parent_slug() {
1609
+ return 'optin-monster-api-settings';
1610
  }
1611
 
1612
+ /**
1613
+ * Get the OM settings url.
1614
+ *
1615
+ * @since 1.9.10
1616
+ *
1617
+ * @param string $view The view query arg.
1618
+ * @param array $args Array of query args.
1619
+ *
1620
+ * @return string
1621
+ */
1622
+ public function get_settings_link( $view = '', $args = array() ) {
1623
+ return $this->get_dashboard_link( $view, $args );
1624
+ }
1625
 
1626
+ /**
1627
+ * Get the contextual OM dashboard url.
1628
+ *
1629
+ * @since 1.9.10
1630
+ *
1631
+ * @param string $view The view query arg.
1632
+ * @param array $args Array of query args.
1633
+ *
1634
+ * @return string
1635
+ */
1636
+ public function get_dashboard_link( $view = '', $args = array() ) {
1637
+ $page = $this->has_trial_link() || ( ! $this->base->get_api_credentials() && ! isset( $_GET['om-bypass-api-check'] ) )
1638
+ ? 'optin-monster-api-welcome'
1639
+ : $this->parent_slug();
1640
+
1641
+ $defaults = array( 'page' => $page );
1642
+ if ( $view && 'optin-monster-api-settings' === $page ) {
1643
+ $defaults['optin_monster_api_view'] = $view;
1644
+ }
1645
 
1646
+ return $this->admin_page_url( wp_parse_args( $args, $defaults ) );
1647
  }
1648
 
1649
+ /**
1650
+ * Get an admin page url.
1651
+ *
1652
+ * @since 1.9.10
1653
+ *
1654
+ * @param array $args Array of query args.
1655
+ *
1656
+ * @return string
1657
+ */
1658
+ public function admin_page_url( $args = array() ) {
1659
+ $url = add_query_arg( $args, admin_url( 'admin.php' ) );
1660
+
1661
+ return esc_url_raw( $url );
1662
+ }
1663
+
1664
+ /**
1665
+ * Redirects to main OM page.
1666
+ *
1667
+ * @since 1.9.10
1668
+ *
1669
+ * @param string $view The view query arg.
1670
+ * @param array $args Array of query args.
1671
+ *
1672
+ * @return void
1673
+ */
1674
+ public function redirect_to_dashboard( $view = '', $args = array() ) {
1675
+ $url = $this->get_dashboard_link( $view, $args );
1676
+ wp_safe_redirect( esc_url_raw( $url ) );
1677
+ exit;
1678
+ }
1679
+
1680
+
1681
  }
OMAPI/Output.php CHANGED
@@ -101,7 +101,7 @@ class OMAPI_Output {
101
 
102
  // Checking if AMP is enabled.
103
  if ( OMAPI_Utils::is_amp_enabled() ) {
104
- return;
105
  }
106
 
107
  // Set our object.
@@ -138,7 +138,7 @@ class OMAPI_Output {
138
  $rules = new OMAPI_Rules();
139
 
140
  // Keep these around for back-compat.
141
- $this->fields = $rules->fields;
142
 
143
  }
144
 
@@ -148,7 +148,11 @@ class OMAPI_Output {
148
  * @since 1.0.0
149
  */
150
  public function api_script() {
151
- wp_enqueue_script( $this->base->plugin_slug . '-api-script', $this->base->get_api_url(), array(), null );
 
 
 
 
152
 
153
  if ( version_compare( get_bloginfo( 'version' ), '4.1.0', '>=' ) ) {
154
  add_filter( 'script_loader_tag', array( $this, 'filter_api_script' ), 10, 2 );
@@ -175,9 +179,11 @@ class OMAPI_Output {
175
  }
176
 
177
  // Adjust the output to the JS version embed and to add our custom script ID.
178
- return $this->om_script_tag( array(
179
- 'id' => 'omapi-script',
180
- ) );
 
 
181
  }
182
 
183
  /**
@@ -287,7 +293,7 @@ class OMAPI_Output {
287
 
288
  // Prepare variables.
289
  $post_id = self::current_id();
290
- $optins = $this->base->get_optins();
291
 
292
  // If no optins are found, return early.
293
  if ( empty( $optins ) ) {
@@ -448,7 +454,12 @@ class OMAPI_Output {
448
 
449
  // Output the JS variables to signify shortcode parsing is needed.
450
  ?>
451
- <script type="text/javascript"><?php foreach ( $this->slugs as $slug => $data ) { echo 'var ' . $slug . '_shortcode = true;'; } ?></script>
 
 
 
 
 
452
  <?php
453
 
454
  }
@@ -489,9 +500,9 @@ class OMAPI_Output {
489
  if ( $this->base->is_mailpoet_active() ) {
490
  wp_enqueue_script(
491
  $this->base->plugin_slug . '-wp-mailpoet',
492
- plugins_url( 'assets/js/mailpoet.js', OMAPI_FILE ),
493
  array( 'jquery' ),
494
- $this->base->version . ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? time() : '' ),
495
  true
496
  );
497
  }
@@ -505,9 +516,9 @@ class OMAPI_Output {
505
  public function wp_helper() {
506
  wp_enqueue_script(
507
  $this->base->plugin_slug . '-wp-helper',
508
- plugins_url( 'assets/js/helper.js', OMAPI_FILE ),
509
  array(),
510
- $this->base->version . ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? time() : '' ),
511
  true
512
  );
513
  }
@@ -594,7 +605,7 @@ class OMAPI_Output {
594
  *
595
  * @since 1.5.0
596
  *
597
- * @param object $optin The option post object.
598
  *
599
  * @return string The optin campaign html.
600
  */
@@ -609,7 +620,7 @@ class OMAPI_Output {
609
  *
610
  * @since 1.5.0
611
  *
612
- * @param bool $should_output Whether it should output.
613
  * @param OMAPI_Rules $rules OMAPI_Rules object
614
  *
615
  * @return array
@@ -711,8 +722,8 @@ class OMAPI_Output {
711
  *
712
  * @since 1.9.8
713
  *
714
- * @param array $args Array of arguments for the script, including
715
- * optional user id, account id, and script id.
716
  *
717
  * @return string The embed script JS.
718
  */
@@ -736,18 +747,18 @@ class OMAPI_Output {
736
  ? sprintf( 's.dataset.env="%s";', esc_attr( OPTINMONSTER_ENV ) )
737
  : '';
738
 
739
- $tag = '<script>';
740
- $tag .= '(function(d){';
741
- $tag .= 'var s=d.createElement("script");';
742
- $tag .= 's.type="text/javascript";';
743
- $tag .= 's.src="%1$s";';
744
- $tag .= 's.async=true;';
745
- $tag .= '%2$s';
746
- $tag .= '%3$s';
747
- $tag .= '%4$s';
748
- $tag .= '%5$s';
749
- $tag .= 'd.getElementsByTagName("head")[0].appendChild(s);';
750
- $tag .= '})(document);';
751
  $tag .= '</script>';
752
 
753
  return sprintf(
101
 
102
  // Checking if AMP is enabled.
103
  if ( OMAPI_Utils::is_amp_enabled() ) {
104
+ return;
105
  }
106
 
107
  // Set our object.
138
  $rules = new OMAPI_Rules();
139
 
140
  // Keep these around for back-compat.
141
+ $this->fields = $rules->fields;
142
 
143
  }
144
 
148
  * @since 1.0.0
149
  */
150
  public function api_script() {
151
+
152
+ // A hook to change the API location. Using this hook, we can force to load in header; default location is footer
153
+ $in_footer = apply_filters( 'optin_monster_api_loading_location', true );
154
+
155
+ wp_enqueue_script( $this->base->plugin_slug . '-api-script', $this->base->get_api_url(), array(), null, $in_footer );
156
 
157
  if ( version_compare( get_bloginfo( 'version' ), '4.1.0', '>=' ) ) {
158
  add_filter( 'script_loader_tag', array( $this, 'filter_api_script' ), 10, 2 );
179
  }
180
 
181
  // Adjust the output to the JS version embed and to add our custom script ID.
182
+ return $this->om_script_tag(
183
+ array(
184
+ 'id' => 'omapi-script',
185
+ )
186
+ );
187
  }
188
 
189
  /**
293
 
294
  // Prepare variables.
295
  $post_id = self::current_id();
296
+ $optins = $this->base->get_optins();
297
 
298
  // If no optins are found, return early.
299
  if ( empty( $optins ) ) {
454
 
455
  // Output the JS variables to signify shortcode parsing is needed.
456
  ?>
457
+ <script type="text/javascript">
458
+ <?php
459
+ foreach ( $this->slugs as $slug => $data ) {
460
+ echo 'var ' . $slug . '_shortcode = true;'; }
461
+ ?>
462
+ </script>
463
  <?php
464
 
465
  }
500
  if ( $this->base->is_mailpoet_active() ) {
501
  wp_enqueue_script(
502
  $this->base->plugin_slug . '-wp-mailpoet',
503
+ $this->base->url . 'assets/js/mailpoet.js',
504
  array( 'jquery' ),
505
+ $this->base->asset_version(),
506
  true
507
  );
508
  }
516
  public function wp_helper() {
517
  wp_enqueue_script(
518
  $this->base->plugin_slug . '-wp-helper',
519
+ $this->base->url . 'assets/js/helper.js',
520
  array(),
521
+ $this->base->asset_version(),
522
  true
523
  );
524
  }
605
  *
606
  * @since 1.5.0
607
  *
608
+ * @param object $optin The option post object.
609
  *
610
  * @return string The optin campaign html.
611
  */
620
  *
621
  * @since 1.5.0
622
  *
623
+ * @param bool $should_output Whether it should output.
624
  * @param OMAPI_Rules $rules OMAPI_Rules object
625
  *
626
  * @return array
722
  *
723
  * @since 1.9.8
724
  *
725
+ * @param array $args Array of arguments for the script, including
726
+ * optional user id, account id, and script id.
727
  *
728
  * @return string The embed script JS.
729
  */
747
  ? sprintf( 's.dataset.env="%s";', esc_attr( OPTINMONSTER_ENV ) )
748
  : '';
749
 
750
+ $tag = '<script>';
751
+ $tag .= '(function(d){';
752
+ $tag .= 'var s=d.createElement("script");';
753
+ $tag .= 's.type="text/javascript";';
754
+ $tag .= 's.src="%1$s";';
755
+ $tag .= 's.async=true;';
756
+ $tag .= '%2$s';
757
+ $tag .= '%3$s';
758
+ $tag .= '%4$s';
759
+ $tag .= '%5$s';
760
+ $tag .= 'd.getElementsByTagName("head")[0].appendChild(s);';
761
+ $tag .= '})(document);';
762
  $tag .= '</script>';
763
 
764
  return sprintf(
OMAPI/Pages.php ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Menu class.
4
+ *
5
+ * @since 1.9.10
6
+ *
7
+ * @package OMAPI
8
+ * @author Erik Jonasson
9
+ */
10
+ class OMAPI_Pages {
11
+
12
+ /**
13
+ * Holds the class object.
14
+ *
15
+ * @since 1.9.10
16
+ *
17
+ * @var object
18
+ */
19
+ public static $instance;
20
+
21
+ /**
22
+ * Path to the file.
23
+ *
24
+ * @since 1.9.10
25
+ *
26
+ * @var string
27
+ */
28
+ public $file = __FILE__;
29
+
30
+ /**
31
+ * Holds the base class object.
32
+ *
33
+ * @since 1.9.10
34
+ *
35
+ * @var OMAPI
36
+ */
37
+ public $base;
38
+
39
+ /**
40
+ * Sets our object instance and base class instance.
41
+ *
42
+ * @since 1.9.10
43
+ */
44
+ public function __construct() {
45
+ self::$instance = $this;
46
+ $this->base = OMAPI::get_instance();
47
+ }
48
+
49
+ /**
50
+ * Loads Stylesheets that should only be loaded on a specific page
51
+ *
52
+ * @return void
53
+ */
54
+ public function load_general_styles() {
55
+ wp_enqueue_style( $this->base->plugin_slug . '-common', $this->base->url . 'assets/dist/css/common.min.css', false, $this->base->asset_version() );
56
+ }
57
+
58
+ /**
59
+ * Returns an array of our registered pages.
60
+ * If we need more pages, add them to this array
61
+ *
62
+ * @return void
63
+ */
64
+ public function get_registered_pages() {
65
+ $pages = array(
66
+ array(
67
+ 'name' => __( 'TrustPulse', 'optin-monster-api' ),
68
+ 'slug' => 'optin-monster-trustpulse',
69
+ ),
70
+ array(
71
+ 'name' => __( 'About Us', 'optin-monster-api' ),
72
+ 'slug' => 'optin-monster-about',
73
+ 'callback' => array( $this, 'render_about_us_page' ),
74
+ ),
75
+ );
76
+
77
+ return $pages;
78
+ }
79
+
80
+ /**
81
+ * Registers our submenu pages
82
+ *
83
+ * @param string $parent_page_name The Parent Page Name
84
+ * @return void
85
+ */
86
+ public function register_submenu_pages( $parent_page_name ) {
87
+ $pages = $this->get_registered_pages();
88
+ $hooks = array();
89
+
90
+ foreach ( $pages as $page ) {
91
+ if ( ! empty( $page['callback'] ) ) {
92
+ $hooks[] = add_submenu_page(
93
+ $parent_page_name, // $parent_slug
94
+ $page['name'], // $page_title
95
+ ! empty( $page['menu'] ) ? $page['menu'] : $page['name'], // $menu_title
96
+ apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $page['slug'] ),
97
+ $page['slug'],
98
+ $page['callback']
99
+ );
100
+ }
101
+ }
102
+
103
+ return $hooks;
104
+ }
105
+
106
+ /**
107
+ * Registers our submenu pages, but redirects to main page when navigating to them.
108
+ *
109
+ * @since 1.9.10
110
+ *
111
+ * @param string $parent_page_name The Parent Page Name
112
+ * @return void
113
+ */
114
+ public function register_submenu_redirects( $parent_page_name ) {
115
+ $hooks = $this->register_submenu_pages( $parent_page_name . '-hidden' );
116
+ foreach ( $hooks as $hook ) {
117
+ add_action( 'load-' . $hook, array( $this->base->menu, 'redirect_to_dashboard' ) );
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Outputs the OptinMonster about-us page.
123
+ *
124
+ * @since 1.9.10
125
+ */
126
+ public function render_about_us_page() {
127
+ $all_plugins = get_plugins();
128
+
129
+ $data = array(
130
+ 'google-analytics-for-wordpress/googleanalytics.php' => array(
131
+ 'icon' => $this->base->url . 'assets/images/about/plugin-mi.png',
132
+ 'class' => 'google-analytics-for-wordpressgoogleanalyticsphp',
133
+ 'name' => 'MonsterInsights',
134
+ 'desc' => sprintf( esc_html__( '%s makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'optin-monster-api' ), 'MonsterInsights' ),
135
+ 'url' => 'https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.zip',
136
+ 'pro' => array(
137
+ 'plugin' => 'google-analytics-premium/googleanalytics-premium.php',
138
+ 'name' => 'MonsterInsights Pro',
139
+ 'url' => 'https://www.monsterinsights.com/?utm_source=proplugin&utm_medium=pluginheader&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
140
+ ),
141
+ ),
142
+ 'wpforms-lite/wpforms.php' => array(
143
+ 'icon' => $this->base->url . 'assets/images/about/plugin-wp-forms.png',
144
+ 'class' => 'wpforms-litewpformsphp',
145
+ 'name' => 'WP Forms',
146
+ 'desc' => sprintf( esc_html__( '%s allows you to create beautiful contact forms, feedback form, subscription forms, payment forms, and other type of forms for your site in minutes, not hours!', 'optin-monster-api' ), 'WP Forms' ),
147
+ 'url' => 'https://downloads.wordpress.org/plugin/wpforms-lite.zip',
148
+ 'pro' => array(
149
+ 'plugin' => 'wpforms-premium/wpforms.php',
150
+ 'name' => 'WP Forms Pro',
151
+ 'url' => 'https://www.wpforms.com/?utm_source=proplugin&utm_medium=pluginheader&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
152
+ ),
153
+ ),
154
+ );
155
+
156
+ foreach ( $data as $plugin_id => $plugin ) {
157
+
158
+ $installed = array_key_exists( $plugin_id, $all_plugins ) || array_key_exists( $plugin['pro']['plugin'], $all_plugins );
159
+ $active = is_plugin_active( $plugin_id ) || is_plugin_active( $plugin['pro']['plugin'] );
160
+
161
+ $data[ $plugin_id ]['status'] = $installed ?
162
+ $active ?
163
+ __( 'Active', 'optin-monster-api' ) :
164
+ __( 'Installed', 'optin-monster-api' )
165
+ : __( 'Not Installed', 'optin-monster-api' );
166
+
167
+ $data[ $plugin_id ]['installed'] = $installed;
168
+ $data[ $plugin_id ]['active'] = $active;
169
+ }
170
+
171
+ $this->base->output_view(
172
+ 'about.php',
173
+ array(
174
+ 'all_plugins' => $all_plugins,
175
+ 'plugins' => $data,
176
+ )
177
+ );
178
+ }
179
+ }
OMAPI/Pointer.php CHANGED
@@ -58,26 +58,35 @@ class OMAPI_Pointer {
58
  * @since 1.6.5
59
  */
60
  public function load_pointer() {
 
61
  // Don't run on WP < 3.3.
62
  if ( get_bloginfo( 'version' ) < '3.3' ) {
63
  return;
64
  }
 
65
  $screen = get_current_screen();
 
66
  // If we're not on the dashboard, or we already have an API key, don't trigger the pointer.
67
  if ( 'dashboard' !== $screen->id || $this->base->get_api_credentials() ) {
68
  return;
69
  }
70
 
 
 
 
 
 
 
71
  $content = '<h3>' . esc_html__( 'Get More Leads, Subscribers and Sales Today!', 'optin-monster-api' ) . '</h3>';
72
  $content .= '<div class="om-pointer-close-link"><a class="close" href="#"></a></div>';
73
  $content .= '<h4>' . esc_html__( 'Grow Your Business with OptinMonster', 'optin-monster-api' ) . '</h4>';
74
  $content .= '<p>' . esc_html__( 'Turn your website visitors into subscribers and customers with OptinMonster, the #1 conversion optimization toolkit in the world.', 'optin-monster-api' ) . '</p>';
75
  $content .= '<p>' . esc_html__( 'For a limited time, get 50% off any plan AND get instant access to OptinMonster University - our exclusive training portal with over $2,000 worth of courses, courses, content and videos', 'optin-monster-api' ) . '<strong> ' . esc_html__( '100% Free!', 'optin-monster-api' ) . '</strong></p>';
76
- $content .= '<p><a class="button button-primary" id="omPointerButton" href="admin.php?page=optin-monster-api-welcome">' . esc_html__( 'Click Here to Learn More', 'optin-monster-api' ) . '</a>';
77
 
78
  $pointer = array(
79
  'id' => 'om-welcome-pointer',
80
- 'target' => '#toplevel_page_optin-monster-api-settings',
81
  'options' => array(
82
  'content' => $content,
83
  'position' => array(
@@ -87,20 +96,23 @@ class OMAPI_Pointer {
87
  ),
88
  );
89
 
90
- // Make sure the pointer hasn't been dismissed.
91
- $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
92
- if ( in_array( $pointer['id'], $dismissed ) ) {
93
- return;
94
- }
95
-
96
- // Add pointers style to queue.
97
- wp_enqueue_style( 'wp-pointer' );
98
  // Add pointers script to queue. Add custom script.
99
- wp_enqueue_script( $this->base->plugin_slug . '-pointer', plugins_url( 'assets/js/pointer.js', OMAPI_FILE ), array( 'wp-pointer' ), $this->base->version, true );
100
- wp_enqueue_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/css/pointer.css', OMAPI_FILE ), array(), $this->base->version );
 
 
 
 
 
 
 
 
 
 
 
 
101
 
102
  // Add pointer options to script.
103
  wp_localize_script( $this->base->plugin_slug . '-pointer', 'omapiPointer', $pointer );
104
-
105
  }
106
  }
58
  * @since 1.6.5
59
  */
60
  public function load_pointer() {
61
+
62
  // Don't run on WP < 3.3.
63
  if ( get_bloginfo( 'version' ) < '3.3' ) {
64
  return;
65
  }
66
+
67
  $screen = get_current_screen();
68
+
69
  // If we're not on the dashboard, or we already have an API key, don't trigger the pointer.
70
  if ( 'dashboard' !== $screen->id || $this->base->get_api_credentials() ) {
71
  return;
72
  }
73
 
74
+ // Make sure the pointer hasn't been dismissed.
75
+ $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
76
+ if ( in_array( 'om-welcome-pointer', $dismissed, true ) ) {
77
+ return;
78
+ }
79
+
80
  $content = '<h3>' . esc_html__( 'Get More Leads, Subscribers and Sales Today!', 'optin-monster-api' ) . '</h3>';
81
  $content .= '<div class="om-pointer-close-link"><a class="close" href="#"></a></div>';
82
  $content .= '<h4>' . esc_html__( 'Grow Your Business with OptinMonster', 'optin-monster-api' ) . '</h4>';
83
  $content .= '<p>' . esc_html__( 'Turn your website visitors into subscribers and customers with OptinMonster, the #1 conversion optimization toolkit in the world.', 'optin-monster-api' ) . '</p>';
84
  $content .= '<p>' . esc_html__( 'For a limited time, get 50% off any plan AND get instant access to OptinMonster University - our exclusive training portal with over $2,000 worth of courses, courses, content and videos', 'optin-monster-api' ) . '<strong> ' . esc_html__( '100% Free!', 'optin-monster-api' ) . '</strong></p>';
85
+ $content .= '<p><a class="button button-primary" id="omPointerButton" href="' . $this->base->welcome->get_link() . '">' . esc_html__( 'Click Here to Learn More', 'optin-monster-api' ) . '</a>';
86
 
87
  $pointer = array(
88
  'id' => 'om-welcome-pointer',
89
+ 'target' => '#toplevel_page_' . $this->base->menu->parent_slug(),
90
  'options' => array(
91
  'content' => $content,
92
  'position' => array(
96
  ),
97
  );
98
 
 
 
 
 
 
 
 
 
99
  // Add pointers script to queue. Add custom script.
100
+ wp_enqueue_script(
101
+ $this->base->plugin_slug . '-pointer',
102
+ $this->base->url . 'assets/dist/js/pointer.min.js',
103
+ array( 'wp-pointer' ),
104
+ $this->base->asset_version(),
105
+ true
106
+ );
107
+
108
+ wp_enqueue_style(
109
+ $this->base->plugin_slug . '-pointer',
110
+ $this->base->url . 'assets/css/pointer.css',
111
+ array( 'wp-pointer' ),
112
+ $this->base->asset_version()
113
+ );
114
 
115
  // Add pointer options to script.
116
  wp_localize_script( $this->base->plugin_slug . '-pointer', 'omapiPointer', $pointer );
 
117
  }
118
  }
OMAPI/Refresh.php CHANGED
@@ -54,7 +54,24 @@ class OMAPI_Refresh {
54
  *
55
  * @var array
56
  */
57
- protected $api_args = array( 'limit' => 100 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  /**
60
  * Primary class constructor.
@@ -104,28 +121,24 @@ class OMAPI_Refresh {
104
  /**
105
  * Refresh the optins.
106
  *
107
- * @since 1.0.0
 
 
 
 
108
  */
109
- public function refresh() {
110
- $api = OMAPI_Api::build( 'v1', 'optins', 'GET' );
111
-
112
- // Set additional flags.
113
- $this->api_args['wp'] = $GLOBALS['wp_version'];
114
- $this->api_args['restUrl'] = esc_url_raw( get_rest_url() );
115
- $this->api_args['homeUrl'] = esc_url_raw( home_url() );
116
-
117
- if ( OMAPI::is_woocommerce_active() ) {
118
- $this->api_args['wc'] = OMAPI_WooCommerce::version();
119
- }
120
 
121
  $results = array();
122
- $body = $api->request( $this->api_args, false );
123
 
124
  // Loop through paginated requests until we have fetched all the campaigns.
125
  while ( ! is_wp_error( $body ) || empty( $body ) ) {
126
- $limit = absint( wp_remote_retrieve_header( $api->response, 'limit' ) );
127
- $page = absint( wp_remote_retrieve_header( $api->response, 'page' ) );
128
- $total = absint( wp_remote_retrieve_header( $api->response, 'total' ) );
129
  $total_pages = ceil( $total / $limit );
130
  $results = array_merge( $results, (array) $body );
131
 
@@ -134,44 +147,85 @@ class OMAPI_Refresh {
134
  break;
135
  }
136
 
137
- $args = $this->api_args;
138
  $args['page'] = $page + 1;
139
 
140
  // Request the next page.
141
- $body = $api->request( $args, false );
142
  }
143
 
144
  if ( is_wp_error( $body ) ) {
145
- // If no optins available, make sure they get deleted.
146
- if ( in_array( $body->get_error_code(), array( 'optins', 'no-campaigns-error' ), true ) ) {
147
- $this->base->save->store_optins( array() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  }
149
 
150
- // Set an error message.
151
- $this->error = $body->get_error_message();
152
- add_action( 'optin_monster_api_messages_' . $this->view, array( $this, 'error' ) );
153
- return;
 
 
 
 
 
154
  }
155
 
156
- // Store the optin data.
157
- $this->base->save->store_optins( $results );
158
 
159
- // Update our sites as well
160
- $sites = $this->base->sites->fetch();
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
- // Update the option to remove stale error messages.
163
- $option = $this->base->get_option();
164
- $option['is_invalid'] = false;
165
- $option['is_expired'] = false;
166
- $option['is_disabled'] = false;
167
- $option['connected'] = time();
168
- $option['siteIds'] = $sites['ids'];
169
- $option['customApiUrl'] = $sites['customApiUrl'];
170
 
171
- $this->base->save->update_option( $option, $this->view );
172
 
173
- // Set a message.
174
- add_action( 'optin_monster_api_messages_' . $this->view, array( $this, 'message' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  }
176
 
177
  /**
@@ -180,10 +234,11 @@ class OMAPI_Refresh {
180
  * @since 1.0.0
181
  */
182
  public function error() {
183
-
184
- ?>
185
- <div class="updated error"><p><?php echo $this->error; ?></p></div>
186
- <?php
 
187
  }
188
 
189
  /**
@@ -197,4 +252,72 @@ class OMAPI_Refresh {
197
  <div class="updated"><p><?php esc_html_e( 'Your campaigns have been refreshed successfully.', 'optin-monster-api' ); ?></p></div>
198
  <?php
199
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  }
54
  *
55
  * @var array
56
  */
57
+ protected $api_args = array(
58
+ 'limit' => 100,
59
+ 'status' => 'all',
60
+ );
61
+
62
+ /**
63
+ * OMAPI_Api object
64
+ *
65
+ * @var null|OMAPI_Api
66
+ */
67
+ public $api = null;
68
+
69
+ /**
70
+ * WP_Error object if refresh fails.
71
+ *
72
+ * @var null|WP_Error
73
+ */
74
+ public $error = null;
75
 
76
  /**
77
  * Primary class constructor.
121
  /**
122
  * Refresh the optins.
123
  *
124
+ * @since 1.0.0
125
+ *
126
+ * @param string $api_key API key.
127
+ *
128
+ * @return WP_Error|bool True if successful.
129
  */
130
+ public function refresh( $api_key = null ) {
131
+ $this->api = OMAPI_Api::build( 'v1', 'optins', 'GET', $api_key ? array( 'apikey' => $api_key ) : $api_key );
132
+ $args = $this->setup_api( $api_key, $this->api_args );
 
 
 
 
 
 
 
 
133
 
134
  $results = array();
135
+ $body = $this->api->request( $args );
136
 
137
  // Loop through paginated requests until we have fetched all the campaigns.
138
  while ( ! is_wp_error( $body ) || empty( $body ) ) {
139
+ $limit = absint( wp_remote_retrieve_header( $this->api->response, 'limit' ) );
140
+ $page = absint( wp_remote_retrieve_header( $this->api->response, 'page' ) );
141
+ $total = absint( wp_remote_retrieve_header( $this->api->response, 'total' ) );
142
  $total_pages = ceil( $total / $limit );
143
  $results = array_merge( $results, (array) $body );
144
 
147
  break;
148
  }
149
 
 
150
  $args['page'] = $page + 1;
151
 
152
  // Request the next page.
153
+ $body = $this->api->request( $args );
154
  }
155
 
156
  if ( is_wp_error( $body ) ) {
157
+ $this->handle_error( $body );
158
+ } else {
159
+ // Store the optin data.
160
+ $this->base->save->store_optins( $results );
161
+
162
+ // Update our sites as well
163
+ $result = $this->base->sites->fetch( $api_key );
164
+
165
+ // Update the option to remove stale error messages.
166
+ $option = $this->base->get_option();
167
+ $option['is_invalid'] = false;
168
+ $option['is_expired'] = false;
169
+ $option['is_disabled'] = false;
170
+ $option['connected'] = time();
171
+ if ( is_wp_error( $result ) ) {
172
+ $this->error = $result;
173
+ } else {
174
+ $option = array_merge( $option, $result );
175
  }
176
 
177
+ $this->base->save->update_option( $option, $this->view );
178
+ }
179
+
180
+ add_action( 'all_admin_notices', array( $this, 'error' ) );
181
+
182
+ if ( ! $this->error ) {
183
+
184
+ // Set success message.
185
+ add_action( 'all_admin_notices', array( $this, 'message' ) );
186
  }
187
 
188
+ return $this->error ? $this->error : true;
189
+ }
190
 
191
+ /**
192
+ * Trigger a refresh for given campaign.
193
+ *
194
+ * @since 1.9.10
195
+ *
196
+ * @param string $campaign_id The campaign id (slug).
197
+ * @param mixed $is_legacy Whether campaign is legacy.
198
+ *
199
+ * @return WP_Error|bool True if successful.
200
+ */
201
+ public function sync( $campaign_id, $is_legacy ) {
202
+ $path = "for-wp/{$campaign_id}";
203
+ if ( $is_legacy ) {
204
+ $path .= '?legacy=true';
205
+ }
206
 
207
+ $this->api = OMAPI_Api::build( 'v1', $path, 'GET' );
 
 
 
 
 
 
 
208
 
209
+ $body = $this->api->request( $this->setup_api() );
210
 
211
+ if ( is_wp_error( $body ) ) {
212
+
213
+ // If campaign is gone, delete the optin.
214
+ if (
215
+ 'campaign-error' === $body->get_error_code()
216
+ && (string) '404' === (string) $body->get_error_data()
217
+ ) {
218
+ $result = $this->base->save->delete_optin( $campaign_id, true );
219
+ }
220
+
221
+ $this->handle_error( $body );
222
+ } else {
223
+
224
+ // Store the optin data.
225
+ $this->base->save->add_optins( (array) $body, false );
226
+ }
227
+
228
+ return $this->error ? $this->error : true;
229
  }
230
 
231
  /**
234
  * @since 1.0.0
235
  */
236
  public function error() {
237
+ if ( is_wp_error( $this->error ) ) {
238
+ ?>
239
+ <div class="updated error"><p><?php echo $this->error->get_error_message(); ?></p></div>
240
+ <?php
241
+ }
242
  }
243
 
244
  /**
252
  <div class="updated"><p><?php esc_html_e( 'Your campaigns have been refreshed successfully.', 'optin-monster-api' ); ?></p></div>
253
  <?php
254
  }
255
+
256
+ /**
257
+ * Gets contextual info for API requests.
258
+ *
259
+ * @since 1.9.10
260
+ *
261
+ * @param array $args Array of args.
262
+ *
263
+ * @return arry Modified array of args.
264
+ */
265
+ public function get_info_args( $args = array() ) {
266
+
267
+ // Set additional flags.
268
+ $args['wp'] = $GLOBALS['wp_version'];
269
+ $args['v'] = $this->base->asset_version();
270
+ $args['restUrl'] = esc_url_raw( get_rest_url() );
271
+ $args['homeUrl'] = esc_url_raw( home_url() );
272
+
273
+ if ( OMAPI::is_woocommerce_active() ) {
274
+ $args['wc'] = OMAPI_WooCommerce::version();
275
+ }
276
+
277
+ return $args;
278
+ }
279
+
280
+ /**
281
+ * Handles setting up the API request.
282
+ *
283
+ * @since 1.9.10
284
+ *
285
+ * @param string $api_key API key.
286
+ * @param array $args Array of request args.
287
+ *
288
+ * @return arry Modified array of request args.
289
+ */
290
+ protected function setup_api( $api_key = null, $args = array() ) {
291
+ if ( $api_key ) {
292
+ $this->api->set( 'apikey', $api_key );
293
+ }
294
+
295
+ $this->api->clear_additional_data();
296
+
297
+ // Set additional flags.
298
+ return $this->get_info_args( $args );
299
+ }
300
+
301
+ /**
302
+ * Handles errors occurring during refresh.
303
+ *
304
+ * @since 1.9.10
305
+ *
306
+ * @param WP_Error $error WP_Error object.
307
+ *
308
+ * @return OMAPI_Refresh
309
+ */
310
+ protected function handle_error( $error ) {
311
+
312
+ // If no optins available, make sure they get deleted.
313
+ if ( in_array( $error->get_error_code(), array( 'optins', 'no-campaigns-error' ), true ) ) {
314
+ $this->base->save->store_optins( array() );
315
+ }
316
+
317
+ // Set an error message.
318
+ $this->error = $error;
319
+
320
+ return $this;
321
+ }
322
+
323
  }
OMAPI/RestApi.php CHANGED
@@ -35,8 +35,8 @@ class OMAPI_RestApi {
35
  */
36
  protected $namespace = 'omapp/v1';
37
 
38
- public function __construct( ) {
39
- $this->base = OMAPI::get_instance();
40
  $this->register_rest_routes();
41
  }
42
 
@@ -48,44 +48,410 @@ class OMAPI_RestApi {
48
  * @return void
49
  */
50
  public function register_rest_routes() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  register_rest_route(
52
  $this->namespace,
53
- '/optins/refresh',
54
  array(
55
- 'methods' => 'POST',
56
- 'callback' => array( $this, 'fetch_campaigns' )
 
57
  )
58
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
60
 
61
  /**
62
- * Refresh our campaigns
63
  *
64
- * @since 1.8.0
65
  *
66
  * @param WP_REST_Request The REST Request
67
  * @return WP_REST_Response The API Response
68
  */
69
- public function fetch_campaigns( $request ) {
70
- $header = $request->get_header( 'X-OptinMonster-ApiKey' );
 
 
 
 
 
 
71
 
72
- // Use this API Key to make a request
73
- if ( $this->validate_api_key( $header ) ) {
 
 
 
 
 
 
 
 
 
 
 
74
 
75
- $this->base->refresh->refresh();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  return new WP_REST_Response(
78
- array( 'message' => esc_html__( 'OK', 'optin-monster-api' ) ),
79
- 200
80
  );
81
  }
82
 
 
 
83
  return new WP_REST_Response(
84
- array( 'message' => esc_html__( 'Could not verify this API Key.', 'optin-monster-api' ) ),
85
- 401
86
  );
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * Validate this API Key
91
  * We validate an API Key by fetching the Sites this key can fetch
@@ -94,11 +460,15 @@ class OMAPI_RestApi {
94
  * @since 1.8.0
95
  *
96
  * @param string $api_key
 
97
  * @return bool True if the Key can be validated
98
  */
99
  public function validate_api_key( $api_key ) {
100
- $option = $this->base->get_option();
101
- $site_ids = ! empty( $option['siteIds'] ) ? $option['siteIds'] : array();
 
 
 
102
 
103
  if ( empty( $site_ids ) ) {
104
  return false;
@@ -106,12 +476,12 @@ class OMAPI_RestApi {
106
 
107
  $api_key_sites = $this->base->sites->fetch( $api_key );
108
 
109
- if ( empty( $api_key_sites ) ) {
110
  return false;
111
  }
112
 
113
  foreach ( $site_ids as $site_id ) {
114
- if ( in_array( $site_id, $api_key_sites['ids'] ) ) {
115
  return true;
116
  }
117
  }
35
  */
36
  protected $namespace = 'omapp/v1';
37
 
38
+ public function __construct() {
39
+ $this->base = OMAPI::get_instance();
40
  $this->register_rest_routes();
41
  }
42
 
48
  * @return void
49
  */
50
  public function register_rest_routes() {
51
+
52
+ add_filter( 'rest_pre_serve_request', array( $this, 'allow_headers' ) );
53
+
54
+ // Fetch some quick info about this WP installation
55
+ register_rest_route(
56
+ $this->namespace,
57
+ 'info',
58
+ array(
59
+ 'methods' => 'GET',
60
+ 'permission_callback' => array( $this, 'logged_in_or_has_api_key' ),
61
+ 'callback' => array( $this, 'output_info' ),
62
+ )
63
+ );
64
+
65
+ // Fetch in-depth support info about this WP installation.
66
  register_rest_route(
67
  $this->namespace,
68
+ 'support',
69
  array(
70
+ 'methods' => 'GET',
71
+ 'permission_callback' => array( $this, 'logged_in_or_has_api_key' ),
72
+ 'callback' => array( $this, 'support_info' ),
73
  )
74
  );
75
+
76
+ // Route for triggering refreshing/syncing of all campaigns.
77
+ // TODO: Keeping for future settings revamp.
78
+ register_rest_route(
79
+ $this->namespace,
80
+ '/campaigns/refresh',
81
+ array(
82
+ 'methods' => 'POST',
83
+ 'permission_callback' => array( $this, 'has_valid_api_key' ),
84
+ 'callback' => array( $this, 'refresh_campaigns' ),
85
+ )
86
+ );
87
+
88
+ // Route for fetching the campaign data for specific campaign.
89
+ // TODO: Keeping for future settings revamp.
90
+ register_rest_route(
91
+ $this->namespace,
92
+ '/campaigns/(?P<id>\w+)',
93
+ array(
94
+ 'methods' => 'GET',
95
+ 'permission_callback' => array( $this, 'logged_in_or_has_api_key' ),
96
+ 'callback' => array( $this, 'get_campaign_data' ),
97
+ )
98
+ );
99
+
100
+ // Route for updating the campaign data
101
+ // TODO: Keeping for future settings revamp.
102
+ register_rest_route(
103
+ $this->namespace,
104
+ '/campaigns/(?P<id>\w+)',
105
+ array(
106
+ 'methods' => 'PUT',
107
+ 'permission_callback' => array( $this, 'has_valid_api_key' ),
108
+ 'callback' => array( $this, 'update_campaign_data' ),
109
+ )
110
+ );
111
+
112
+ // Route for triggering refreshing/syncing of a single campaign.
113
+ // TODO: Keeping for future settings revamp.
114
+ register_rest_route(
115
+ $this->namespace,
116
+ '/campaigns/(?P<id>[\w-]+)/sync',
117
+ array(
118
+ 'methods' => 'POST',
119
+ 'permission_callback' => array( $this, 'has_valid_api_key' ),
120
+ 'callback' => array( $this, 'sync_campaign' ),
121
+ )
122
+ );
123
+
124
+ // Route for fetching the campaign data
125
+ // TODO: Keeping for future settings revamp.
126
+ register_rest_route(
127
+ $this->namespace,
128
+ '/campaign-dashboard',
129
+ array(
130
+ 'methods' => 'GET',
131
+ 'permission_callback' => array( $this, 'logged_in_or_has_api_key' ),
132
+ 'callback' => array( $this, 'get_campaigns_data' ),
133
+ )
134
+ );
135
+ }
136
+
137
+ public function allow_headers() {
138
+ header( 'Access-Control-Allow-Headers: X-OptinMonster-ApiKey, content-type' );
139
  }
140
 
141
  /**
142
+ * Triggers refreshing our campaigns.
143
  *
144
+ * @since 1.9.10
145
  *
146
  * @param WP_REST_Request The REST Request
147
  * @return WP_REST_Response The API Response
148
  */
149
+ public function refresh_campaigns( $request ) {
150
+ $this->base->refresh->refresh();
151
+
152
+ return new WP_REST_Response(
153
+ array( 'message' => esc_html__( 'OK', 'optin-monster-api' ) ),
154
+ 200
155
+ );
156
+ }
157
 
158
+ /**
159
+ * Fetch some quick info about this WP installation
160
+ * (WP version, plugin version, rest url, home url, WooCommerce version)
161
+ *
162
+ * @since 1.9.10
163
+ *
164
+ * @param WP_REST_Request The REST Request
165
+ *
166
+ * @return WP_REST_Response
167
+ */
168
+ public function output_info( $request ) {
169
+ return new WP_REST_Response( $this->base->refresh->get_info_args(), 200 );
170
+ }
171
 
172
+ /**
173
+ * Fetch in-depth support info about this WP installation.
174
+ * Used for the debug PDF, but can also be requested by support staff with the right api key.
175
+ *
176
+ * @since 1.9.10
177
+ *
178
+ * @param WP_REST_Request The REST Request
179
+ *
180
+ * @return WP_REST_Response
181
+ */
182
+ public function support_info( $request ) {
183
+ $support = new OMAPI_Support();
184
+
185
+ $format = $request->get_param( 'format' );
186
+ if ( empty( $format ) ) {
187
+ $format = 'raw';
188
+ }
189
 
190
+ return new WP_REST_Response( $support->get_support_data( $format ), 200 );
191
+ }
192
+
193
+ /**
194
+ * Triggering refreshing/syncing of a single campaign.
195
+ *
196
+ * @since 1.9.10
197
+ *
198
+ * @param WP_REST_Request The REST Request
199
+ * @return WP_REST_Response The API Response
200
+ */
201
+ public function sync_campaign( $request ) {
202
+ $campaign_id = $request->get_param( 'id' );
203
+
204
+ if ( empty( $campaign_id ) ) {
205
  return new WP_REST_Response(
206
+ array( 'message' => esc_html__( 'No campaign ID given.', 'optin-monster-api' ) ),
207
+ 401
208
  );
209
  }
210
 
211
+ $this->base->refresh->sync( $campaign_id, $request->get_param( 'legacy' ) );
212
+
213
  return new WP_REST_Response(
214
+ array( 'message' => esc_html__( 'OK', 'optin-monster-api' ) ),
215
+ 200
216
  );
217
  }
218
 
219
+ /**
220
+ * Gets all the data needed for the campaign dashboard for a given campaign.
221
+ *
222
+ * @since 1.9.10
223
+ *
224
+ * @param WP_REST_Request The REST Request
225
+ * @return WP_REST_Response The API Response
226
+ */
227
+ public function get_campaign_data( $request ) {
228
+ $campaign_id = $request->get_param( 'id' );
229
+
230
+ if ( empty( $campaign_id ) ) {
231
+ return new WP_REST_Response(
232
+ array( 'message' => esc_html__( 'No campaign ID given.', 'optin-monster-api' ) ),
233
+ 401
234
+ );
235
+ }
236
+
237
+ $campaign = $this->base->get_optin_by_slug( $campaign_id );
238
+ if ( empty( $campaign->ID ) ) {
239
+ return new WP_REST_Response(
240
+ array(
241
+ 'message' => sprintf( esc_html__( 'Could not find campaign by given ID: %s.', 'optin-monster-api' ), $campaign_id ),
242
+ ),
243
+ 401
244
+ );
245
+ }
246
+
247
+ // Get Campaigns Data
248
+ $data = $this->base->collect_campaign_data( $campaign );
249
+ $data = apply_filters( 'optin_monster_api_setting_ui_data_for_campaign', $data, $campaign );
250
+
251
+ return new WP_REST_Response( $data, 200 );
252
+ }
253
+
254
+ /**
255
+ * Updates data for given campaign.
256
+ *
257
+ * @since 1.9.10
258
+ *
259
+ * @param WP_REST_Request The REST Request
260
+ *
261
+ * @return WP_REST_Response The API Response
262
+ */
263
+ public function update_campaign_data( $request ) {
264
+ $campaign_id = $request->get_param( 'id' );
265
+
266
+ // If no campaign_id, return error
267
+
268
+ $campaign = $this->base->get_optin_by_slug( $campaign_id );
269
+
270
+ // If no campaign, return 404
271
+
272
+ // Get the Request Params
273
+ $fields = json_decode( $request->get_body(), true );
274
+
275
+ if ( ! empty( $fields['taxonomies'] ) ) {
276
+
277
+ if ( isset( $fields['taxonomies']['categories'] ) ) {
278
+ $fields['categories'] = $fields['taxonomies']['categories'];
279
+ }
280
+
281
+ // Save the data from the regular taxonomies fields into the WC specific tax field.
282
+ // For back-compatibility.
283
+ $fields['is_wc_product_category'] = isset( $fields['taxonomies']['product_cat'] )
284
+ ? $fields['taxonomies']['product_cat']
285
+ : array();
286
+ $fields['is_wc_product_tag'] = isset( $fields['taxonomies']['product_tag'] )
287
+ ? $fields['taxonomies']['product_tag']
288
+ : array();
289
+ }
290
+
291
+ // Escape Parameters as needed
292
+ // Update Post Meta
293
+ foreach ( $fields as $key => $value ) {
294
+ $value = $this->sanitize( $value );
295
+
296
+ switch ( $key ) {
297
+ default:
298
+ update_post_meta( $campaign->ID, '_omapi_' . $key, $value );
299
+ }
300
+ }
301
+
302
+ return new WP_REST_Response(
303
+ array( 'message' => esc_html__( 'OK', 'optin-monster-api' ) ),
304
+ 200
305
+ );
306
+ }
307
+
308
+ /**
309
+ * Gets all the data needed for the campaigns.
310
+ *
311
+ * @since 1.9.10
312
+ *
313
+ * @param WP_REST_Request The REST Request
314
+ * @return WP_REST_Response The API Response
315
+ */
316
+ public function get_campaigns_data( $request ) {
317
+ global $wpdb;
318
+
319
+ if ( $request->get_param( 'refresh' ) ) {
320
+ $this->base->refresh->refresh();
321
+ }
322
+
323
+ // Get Campaigns Data
324
+ $campaigns = $this->base->get_optins();
325
+ $campaigns = ! empty( $campaigns ) ? $campaigns : array();
326
+ $campaign_data = array();
327
+
328
+ foreach ( $campaigns as $campaign ) {
329
+ $campaign_data[] = $this->base->collect_campaign_data( $campaign );
330
+ }
331
+
332
+ $woo = $this->base->is_woocommerce_active();
333
+ $mp = $this->base->is_mailpoet_active();
334
+
335
+ // Get Taxonomies Data
336
+ $taxonomies = get_taxonomies( array( 'public' => true ), 'objects' );
337
+ $taxonomies = apply_filters( 'optin_monster_api_setting_ui_taxonomies', $taxonomies );
338
+ $taxonomy_map = array();
339
+ $cats = get_categories();
340
+ $taxonomy_map['categories'] = array(
341
+ 'name' => 'categories',
342
+ 'label' => 'Post categories',
343
+ 'terms' => is_array( $cats ) ? array_values( $cats ) : array(),
344
+ 'wc' => false,
345
+ );
346
+
347
+ $ignore = array(
348
+ 'category' => 1,
349
+ );
350
+ foreach ( $taxonomies as $taxonomy ) {
351
+ if ( isset( $ignore[ $taxonomy->name ] ) ) {
352
+ continue;
353
+ }
354
+ $terms = get_terms(
355
+ array(
356
+ 'taxonomy' => $taxonomy->name,
357
+ 'get' => 'all',
358
+ )
359
+ );
360
+ $taxonomy_map[ $taxonomy->name ] = array(
361
+ 'name' => $taxonomy->name,
362
+ 'label' => ucwords( $taxonomy->label ),
363
+ 'terms' => is_array( $terms ) ? array_values( $terms ) : array(),
364
+ 'wc' => $woo && 0 === strpos( $taxonomy->name, 'product_' ),
365
+ );
366
+ }
367
+
368
+ // Get "Config" data
369
+ $config = array(
370
+ 'hasMailPoet' => $mp,
371
+ 'hasWooCommerce' => $woo,
372
+ 'mailPoetLists' => $mp ? $this->base->mailpoet->get_lists() : array(),
373
+ );
374
+
375
+ // Posts query.
376
+ $post_types = implode( '","', get_post_types( array( 'public' => true ) ) );
377
+ $posts = $wpdb->get_results( "SELECT ID AS `value`, post_title AS `name` FROM {$wpdb->prefix}posts WHERE post_type IN (\"{$post_types}\") AND post_status IN('publish', 'future') ORDER BY post_title ASC", ARRAY_A );
378
+
379
+ $response_data = apply_filters(
380
+ 'optin_monster_api_setting_ui_data',
381
+ array(
382
+ 'campaigns' => $campaign_data,
383
+ 'taxonomies' => $taxonomy_map,
384
+ 'config' => $config,
385
+ 'posts' => $posts,
386
+ 'post_types' => array_values( get_post_types( array( 'public' => true ), 'object' ) ),
387
+ )
388
+ );
389
+
390
+ return new WP_REST_Response( $response_data, 200 );
391
+ }
392
+
393
+ /**
394
+ * Sanitize value recursively.
395
+ *
396
+ * @since 1.9.10
397
+ *
398
+ * @param mixed $value
399
+ *
400
+ * @return mixed
401
+ */
402
+ public function sanitize( $value ) {
403
+ if ( empty( $value ) ) {
404
+ return $value;
405
+ }
406
+
407
+ if ( is_scalar( $value ) ) {
408
+ return sanitize_text_field( $value );
409
+ }
410
+
411
+ if ( is_array( $value ) ) {
412
+ return array_map( array( $this, 'sanitize' ), $value );
413
+ }
414
+ }
415
+
416
+ /**
417
+ * Determine if OM API key is provided and valid.
418
+ *
419
+ * @since 1.9.10
420
+ *
421
+ * @param WP_REST_Request The REST Request
422
+ *
423
+ * @return bool
424
+ */
425
+ public function has_valid_api_key( $request ) {
426
+ $header = $request->get_header( 'X-OptinMonster-ApiKey' );
427
+
428
+ // Use this API Key to validate
429
+ if ( ! $this->validate_api_key( $header ) ) {
430
+ return new WP_Error(
431
+ 'omapp_rest_forbidden',
432
+ esc_html__( 'Could not verify your API Key.', 'optin-monster-api' ),
433
+ array(
434
+ 'status' => rest_authorization_required_code(),
435
+ )
436
+ );
437
+ }
438
+
439
+ return true;
440
+ }
441
+
442
+ /**
443
+ * Determine if logged in or OM API key is provided and valid.
444
+ *
445
+ * @since 1.9.10
446
+ *
447
+ * @param WP_REST_Request The REST Request
448
+ *
449
+ * @return bool
450
+ */
451
+ public function logged_in_or_has_api_key( $request ) {
452
+ return is_user_logged_in() || true === $this->has_valid_api_key( $request );
453
+ }
454
+
455
  /**
456
  * Validate this API Key
457
  * We validate an API Key by fetching the Sites this key can fetch
460
  * @since 1.8.0
461
  *
462
  * @param string $api_key
463
+ *
464
  * @return bool True if the Key can be validated
465
  */
466
  public function validate_api_key( $api_key ) {
467
+ if ( empty( $api_key ) ) {
468
+ return false;
469
+ }
470
+
471
+ $site_ids = $this->base->get_site_ids();
472
 
473
  if ( empty( $site_ids ) ) {
474
  return false;
476
 
477
  $api_key_sites = $this->base->sites->fetch( $api_key );
478
 
479
+ if ( is_wp_error( $api_key_sites ) || empty( $api_key_sites['siteIds'] ) ) {
480
  return false;
481
  }
482
 
483
  foreach ( $site_ids as $site_id ) {
484
+ if ( in_array( $site_id, $api_key_sites['siteIds'] ) ) {
485
  return true;
486
  }
487
  }
OMAPI/Review.php CHANGED
@@ -117,45 +117,15 @@ class OMAPI_Review {
117
  // We have a candidate! Output a review message.
118
 
119
  wp_enqueue_script( $this->base->plugin_slug . '-notice', plugins_url( 'assets/js/notice.js', OMAPI_FILE ), array( 'jquery' ), $this->base->version, true );
120
- wp_localize_script( $this->base->plugin_slug . '-notice', 'omNotice', array(
121
- 'nonce' => wp_create_nonce( 'om-review-nonce' ),
122
- ) );
123
-
124
- ?>
125
- <div class="notice notice-info is-dismissible om-review-notice">
126
- <div class="om-notice-wrap">
127
- <h3><?php esc_html_e( 'Are you enjoying OptinMonster?', 'optin-monster-api' ); ?></h3>
128
- <p style="margin-bottom:0">
129
- <a href="#" class="button button-primary om-review-btns" data-res="yes" rel="noopener"><?php esc_html_e( 'Yes!', 'optin-monster-api' ); ?> 🙂</a>
130
- <a href="#" class="button button-secondary om-review-btns" data-res="no" target="_blank" rel="noopener"><?php esc_html_e( 'Not Really!', 'optin-monster-api' ); ?></a>
131
- <?php if ( ! $this->base->get_api_credentials() ) : ?>
132
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=optin-monster-api-welcome' ) ); ?>" class="om-dismiss-review-notice om-dismiss-review-notice-delay button button-secondary" rel="noopener">
133
- <?php esc_html_e( 'What is OptinMonster?', 'optin-monster-api' ); ?>
134
- </a>
135
- <?php endif; ?>
136
- </p>
137
- </div>
138
- <br>
139
- <div class="om-notice-review">
140
- <div class="om-steps om-step-yes" style="display: none">
141
- <p><?php esc_html_e( 'That\'s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'optin-monster-api' ); ?></p>
142
- <p><strong>~ Thomas Griffin<br><?php printf( esc_html__( 'Co-Founder of %1$s', 'optin-monster-api' ), 'OptinMonster' ); ?></strong></p>
143
- <p>
144
- <a href="https://wordpress.org/support/plugin/optinmonster/reviews/?filter=5#new-post" class="om-dismiss-review-notice button button-primary" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Ok, you deserve it', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
145
- <a href="#" class="om-dismiss-review-notice om-dismiss-review-notice-delay" rel="noopener noreferrer"><?php esc_html_e( 'Nope, maybe later!', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
146
- <a href="#" class="om-dismiss-review-notice" rel="noopener noreferrer"><?php esc_html_e( 'I already did!', 'optin-monster-api' ); ?></a>
147
- </p>
148
- </div>
149
- <div class="om-steps om-step-no" style="display: none">
150
- <p><?php printf( esc_html__( 'We\'re sorry to hear you aren\'t enjoying %1$s. We would love a chance to improve. Could you take a minute and let us know what we can do better?', 'optin-monster-api' ), 'OptinMonster' ); ?></p>
151
- <p>
152
- <a href="https://optinmonster.com/plugin-review-feedback/" class="om-dismiss-review-notice button button-primary" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Give feedback', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
153
- <a href="#" class="om-dismiss-review-notice" rel="noopener noreferrer"><?php esc_html_e( 'No thanks!', 'optin-monster-api' ); ?></a>
154
- </p>
155
- </div>
156
- </div>
157
- </div>
158
- <?php
159
  }
160
 
161
  /**
117
  // We have a candidate! Output a review message.
118
 
119
  wp_enqueue_script( $this->base->plugin_slug . '-notice', plugins_url( 'assets/js/notice.js', OMAPI_FILE ), array( 'jquery' ), $this->base->version, true );
120
+ wp_localize_script(
121
+ $this->base->plugin_slug . '-notice',
122
+ 'omNotice',
123
+ array(
124
+ 'nonce' => wp_create_nonce( 'om-review-nonce' ),
125
+ )
126
+ );
127
+
128
+ $this->base->output_view( 'review.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  }
130
 
131
  /**
OMAPI/Rules.php CHANGED
@@ -20,10 +20,11 @@ if ( ! defined( 'ABSPATH' ) ) {
20
  */
21
  class OMAPI_Rules_Exception extends Exception {
22
  protected $bool = null;
 
23
  public function __construct( $message = null, $code = 0, Exception $previous = null ) {
24
  if ( is_bool( $message ) ) {
25
  $this->bool = $message;
26
- $message = null;
27
  }
28
  parent::__construct( $message, $code, $previous );
29
  }
@@ -31,6 +32,15 @@ class OMAPI_Rules_Exception extends Exception {
31
  public function get_bool() {
32
  return $this->bool;
33
  }
 
 
 
 
 
 
 
 
 
34
  }
35
  class OMAPI_Rules_False extends OMAPI_Rules_Exception {
36
  protected $bool = false;
@@ -66,9 +76,6 @@ class OMAPI_Rules {
66
  'taxonomies',
67
  'show',
68
  'type',
69
- 'shortcode',
70
- 'shortcode_output',
71
- 'mailpoet',
72
  'test',
73
  'show_on_woocommerce',
74
  'is_wc_shop',
@@ -157,6 +164,13 @@ class OMAPI_Rules {
157
  */
158
  public static $last_instance = null;
159
 
 
 
 
 
 
 
 
160
  /**
161
  * Primary class constructor.
162
  *
@@ -175,7 +189,7 @@ class OMAPI_Rules {
175
  $this->is_inline_check = $is_inline_check;
176
  $this->global_override = ! $is_inline_check;
177
 
178
- self::$last_instance = $this;
179
  }
180
 
181
  /**
@@ -297,18 +311,23 @@ class OMAPI_Rules {
297
  $this->include_if_inline_and_automatic_and_no_advanced_settings();
298
  $this->output_if_global_override();
299
 
300
- // If we get this far, include it.
301
- throw new OMAPI_Rules_False( 'default no show' );
 
 
 
 
 
302
 
303
  } catch ( OMAPI_Rules_Exception $e ) {
304
- $this->caught = $e;
305
  $should_output = $e instanceof OMAPI_Rules_True;
306
  }
307
 
308
  $rules_debug = ! empty( $_GET['omwpdebug'] );
309
 
310
  if ( $rules_debug ) {
311
- $option = OMAPI::get_instance()->get_option();
312
  $rules_debug = ! empty( $option['api']['omwpdebug'] ) || is_user_logged_in() && apply_filters( 'optin_monster_api_menu_cap', 'manage_options', '' );
313
  }
314
 
@@ -424,7 +443,7 @@ class OMAPI_Rules {
424
 
425
  // Set flag for possibly not loading globally.
426
  if ( $this->field_not_empty_array( 'only' ) ) {
427
- $this->global_override = false;
428
  $this->advanced_settings['show'] = $this->get_field_value( 'only' );
429
 
430
  // If the optin is only to be shown on specific post IDs...
@@ -446,6 +465,7 @@ class OMAPI_Rules {
446
  if ( $e instanceof OMAPI_Rules_True ) {
447
  throw new OMAPI_Rules_True( 'include on categories', 0, $e );
448
  }
 
449
  }
450
 
451
  try {
@@ -455,11 +475,12 @@ class OMAPI_Rules {
455
  if ( $e instanceof OMAPI_Rules_True ) {
456
  throw new OMAPI_Rules_True( 'include on taxonomies', 0, $e );
457
  }
 
458
  }
459
 
460
  if ( $this->field_not_empty_array( 'show' ) ) {
461
  // Set flag for not loading globally.
462
- $this->global_override = false;
463
  $this->advanced_settings['show'] = $this->get_field_value( 'show' );
464
  }
465
 
@@ -504,6 +525,7 @@ class OMAPI_Rules {
504
  if ( $e instanceof OMAPI_Rules_True ) {
505
  throw new OMAPI_Rules_True( 'include woocommerce', 0, $e );
506
  }
 
507
  }
508
  }
509
  }
@@ -567,15 +589,10 @@ class OMAPI_Rules {
567
 
568
  if ( $this->field_not_empty_array( 'categories' ) ) {
569
  // Set flag for possibly not loading globally.
570
- $this->global_override = false;
571
  $this->advanced_settings['categories'] = $categories;
572
  }
573
 
574
- // If the optin is only to be shown on particular categories...
575
- if ( 'post' !== get_post_type() ) {
576
- throw new OMAPI_Rules_False( 'not post post_type' );
577
- }
578
-
579
  // If this is the home page, check to see if they have decided to load on certain archive pages.
580
  // Run a check for archive-type pages.
581
  // If showing on home and we are on an index page, show the optin.
@@ -589,8 +606,8 @@ class OMAPI_Rules {
589
  // But has not worked for 3+ years as the is_home() condition was precluding it.
590
  // Also applies to logic in check_taxonomies_field
591
  // if ( in_array( 'post', (array) $fields['show'] ) && ! ( is_front_page() || is_home() || is_archive() || is_search() ) ) {
592
- // $omapi_output->set_slug( $optin );
593
- // return $html;
594
  // }
595
 
596
  if ( $this->post_id ) {
@@ -632,7 +649,7 @@ class OMAPI_Rules {
632
  if ( $values ) {
633
  foreach ( $values as $i => $value ) {
634
  if ( OMAPI_Utils::field_not_empty_array( $values, $i ) ) {
635
- $this->global_override = false;
636
  $this->advanced_settings['taxonomies'] = $values;
637
  break;
638
  }
@@ -715,7 +732,7 @@ class OMAPI_Rules {
715
  continue;
716
  }
717
 
718
- $this->global_override = false;
719
  $this->advanced_settings[ $field ] = $this->get_field_value( $field );
720
 
721
  if ( call_user_func_array( array_shift( $callback ), $callback ) ) {
@@ -747,7 +764,7 @@ class OMAPI_Rules {
747
  case 'advanced_settings':
748
  return $this->$property;
749
  default:
750
- break;
751
  }
752
 
753
  throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'optin-monster-api' ), __CLASS__, $property ) );
@@ -763,19 +780,31 @@ class OMAPI_Rules {
763
  protected function output_debug() {
764
  $show = $this->caught instanceof OMAPI_Rules_True;
765
 
766
- echo '<xmp class="_om-campaign-status" style="color: '. ( $show ? 'green' : 'red' ) . ';">'. $this->optin->post_name . ":\n" . print_r( $this->caught->getMessage(), true ) .'</xmp>';
 
 
 
 
 
 
 
 
 
 
 
 
767
 
768
  if ( ! empty( $this->advanced_settings ) ) {
769
- echo '<xmp class="_om-advanced-settings">$advanced_settings: '. print_r( $this->advanced_settings, true ) .'</xmp>';
770
  }
771
 
772
  if ( ! empty( $this->field_values ) ) {
773
- echo '<xmp class="_om-field-values" style="display:none;">$field_values: '. print_r( $this->field_values, true ) .'</xmp>';
774
  }
775
 
776
- echo '<xmp class="_om-is-inline-check" style="display:none;">$is_inline_check?: '. print_r( $this->is_inline_check, true ) .'</xmp>';
777
- echo '<xmp class="_om-global-override" style="display:none;">$global_override?: '. print_r( $this->global_override, true ) .'</xmp>';
778
- echo '<xmp class="_om-optin" style="display:none;">$optin: '. print_r( $this->optin, true ) .'</xmp>';
779
  }
780
 
781
  }
20
  */
21
  class OMAPI_Rules_Exception extends Exception {
22
  protected $bool = null;
23
+ protected $exceptions = array();
24
  public function __construct( $message = null, $code = 0, Exception $previous = null ) {
25
  if ( is_bool( $message ) ) {
26
  $this->bool = $message;
27
+ $message = null;
28
  }
29
  parent::__construct( $message, $code, $previous );
30
  }
32
  public function get_bool() {
33
  return $this->bool;
34
  }
35
+
36
+ public function add_exceptions( array $exceptions ) {
37
+ $this->exceptions = $exceptions;
38
+ }
39
+
40
+ public function get_exceptions() {
41
+ return (array) $this->exceptions;
42
+ }
43
+
44
  }
45
  class OMAPI_Rules_False extends OMAPI_Rules_Exception {
46
  protected $bool = false;
76
  'taxonomies',
77
  'show',
78
  'type',
 
 
 
79
  'test',
80
  'show_on_woocommerce',
81
  'is_wc_shop',
164
  */
165
  public static $last_instance = null;
166
 
167
+ /**
168
+ * Exceptions which were not caught/were ignored and may be the reason for the final exclusion.
169
+ *
170
+ * @var array
171
+ */
172
+ public $reasons = array();
173
+
174
  /**
175
  * Primary class constructor.
176
  *
189
  $this->is_inline_check = $is_inline_check;
190
  $this->global_override = ! $is_inline_check;
191
 
192
+ self::$last_instance = $this;
193
  }
194
 
195
  /**
311
  $this->include_if_inline_and_automatic_and_no_advanced_settings();
312
  $this->output_if_global_override();
313
 
314
+ $e = new OMAPI_Rules_False( 'default no show' );
315
+
316
+ if ( ! empty( $this->reasons ) ) {
317
+ $e->add_exceptions( $this->reasons );
318
+ }
319
+
320
+ throw $e;
321
 
322
  } catch ( OMAPI_Rules_Exception $e ) {
323
+ $this->caught = $e;
324
  $should_output = $e instanceof OMAPI_Rules_True;
325
  }
326
 
327
  $rules_debug = ! empty( $_GET['omwpdebug'] );
328
 
329
  if ( $rules_debug ) {
330
+ $option = OMAPI::get_instance()->get_option();
331
  $rules_debug = ! empty( $option['api']['omwpdebug'] ) || is_user_logged_in() && apply_filters( 'optin_monster_api_menu_cap', 'manage_options', '' );
332
  }
333
 
443
 
444
  // Set flag for possibly not loading globally.
445
  if ( $this->field_not_empty_array( 'only' ) ) {
446
+ $this->global_override = false;
447
  $this->advanced_settings['show'] = $this->get_field_value( 'only' );
448
 
449
  // If the optin is only to be shown on specific post IDs...
465
  if ( $e instanceof OMAPI_Rules_True ) {
466
  throw new OMAPI_Rules_True( 'include on categories', 0, $e );
467
  }
468
+ $this->reasons[] = $e;
469
  }
470
 
471
  try {
475
  if ( $e instanceof OMAPI_Rules_True ) {
476
  throw new OMAPI_Rules_True( 'include on taxonomies', 0, $e );
477
  }
478
+ $this->reasons[] = $e;
479
  }
480
 
481
  if ( $this->field_not_empty_array( 'show' ) ) {
482
  // Set flag for not loading globally.
483
+ $this->global_override = false;
484
  $this->advanced_settings['show'] = $this->get_field_value( 'show' );
485
  }
486
 
525
  if ( $e instanceof OMAPI_Rules_True ) {
526
  throw new OMAPI_Rules_True( 'include woocommerce', 0, $e );
527
  }
528
+ $this->reasons[] = $e;
529
  }
530
  }
531
  }
589
 
590
  if ( $this->field_not_empty_array( 'categories' ) ) {
591
  // Set flag for possibly not loading globally.
592
+ $this->global_override = false;
593
  $this->advanced_settings['categories'] = $categories;
594
  }
595
 
 
 
 
 
 
596
  // If this is the home page, check to see if they have decided to load on certain archive pages.
597
  // Run a check for archive-type pages.
598
  // If showing on home and we are on an index page, show the optin.
606
  // But has not worked for 3+ years as the is_home() condition was precluding it.
607
  // Also applies to logic in check_taxonomies_field
608
  // if ( in_array( 'post', (array) $fields['show'] ) && ! ( is_front_page() || is_home() || is_archive() || is_search() ) ) {
609
+ // $omapi_output->set_slug( $optin );
610
+ // return $html;
611
  // }
612
 
613
  if ( $this->post_id ) {
649
  if ( $values ) {
650
  foreach ( $values as $i => $value ) {
651
  if ( OMAPI_Utils::field_not_empty_array( $values, $i ) ) {
652
+ $this->global_override = false;
653
  $this->advanced_settings['taxonomies'] = $values;
654
  break;
655
  }
732
  continue;
733
  }
734
 
735
+ $this->global_override = false;
736
  $this->advanced_settings[ $field ] = $this->get_field_value( $field );
737
 
738
  if ( call_user_func_array( array_shift( $callback ), $callback ) ) {
764
  case 'advanced_settings':
765
  return $this->$property;
766
  default:
767
+ break;
768
  }
769
 
770
  throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'optin-monster-api' ), __CLASS__, $property ) );
780
  protected function output_debug() {
781
  $show = $this->caught instanceof OMAPI_Rules_True;
782
 
783
+ echo '<xmp class="_om-post-id">$post_id: ' . print_r( $this->post_id, true ) . '</xmp>';
784
+ echo '<xmp class="_om-campaign-status" style="color: ' . ( $show ? 'green' : 'red' ) . ';">' . $this->optin->post_name . ":\n" . print_r( $this->caught->getMessage(), true );
785
+ $reasons = $this->caught->get_exceptions();
786
+ if ( ! empty( $reasons ) ) {
787
+ $messages = array();
788
+ foreach ( $reasons as $e ) {
789
+ $messages[] = $e->getMessage();
790
+ }
791
+
792
+ echo ":\n\t- " . implode( "\n\t- ", $messages );
793
+ }
794
+ echo '</xmp>';
795
+
796
 
797
  if ( ! empty( $this->advanced_settings ) ) {
798
+ echo '<xmp class="_om-advanced-settings">$advanced_settings: ' . print_r( $this->advanced_settings, true ) . '</xmp>';
799
  }
800
 
801
  if ( ! empty( $this->field_values ) ) {
802
+ echo '<xmp class="_om-field-values" style="display:none;">$field_values: ' . print_r( $this->field_values, true ) . '</xmp>';
803
  }
804
 
805
+ echo '<xmp class="_om-is-inline-check" style="display:none;">$is_inline_check?: ' . print_r( $this->is_inline_check, true ) . '</xmp>';
806
+ echo '<xmp class="_om-global-override" style="display:none;">$global_override?: ' . print_r( $this->global_override, true ) . '</xmp>';
807
+ echo '<xmp class="_om-optin" style="display:none;">$optin: ' . print_r( $this->optin, true ) . '</xmp>';
808
  }
809
 
810
  }
OMAPI/Save.php CHANGED
@@ -125,7 +125,7 @@ class OMAPI_Save {
125
 
126
  // Save the data.
127
  switch ( $this->view ) {
128
- case 'api' :
129
  // Create a new API instance to verify API credentials.
130
  $option = $this->base->get_option();
131
  $apikey = isset( $data['apikey'] ) ? $data['apikey'] : false;
@@ -142,38 +142,71 @@ class OMAPI_Save {
142
 
143
  // Check for new single apikey and break early with only that data check
144
  if ( $apikey ) {
 
 
 
145
  // Verify this new API Key works but posting to the Legacy route
146
- $api = new OMAPI_Api( 'verify/', array( 'apikey' => $apikey ) );
147
- $ret = $api->request();
148
 
149
- if ( is_wp_error( $ret ) ) {
150
- $this->errors['error'] = $ret->get_error_message();
151
- } else {
152
- $option['api']['apikey'] = $apikey;
153
 
154
- // Go ahead and remove the old user and key so we get the 'new' user stuff
155
- $option['api']['user'] = '';
156
- $option['api']['key'] = '';
157
 
158
- // Remove any error messages.
159
- $option['is_invalid'] = false;
160
- $option['is_expired'] = false;
161
- $option['is_disabled'] = false;
162
- $option['connected'] = time();
163
 
164
- // Store the optin data.
165
- $this->store_optins( $ret );
 
166
 
167
- // Save the option.
168
- $this->update_optin_monster_api_option( $option, $data );
169
- wp_safe_redirect( admin_url( 'admin.php?page=optin-monster-api-settings&optin_monster_api_view=optins' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  }
171
- // End since we are working with the new apikey
172
- break;
 
 
 
 
 
 
 
 
173
  }
174
 
175
  // Catch apikey not set errors
176
- if ( ! $apikey ) {
177
 
178
  // Did we used to have one and user is trying to remove it?
179
  if ( $old_apikey ) {
@@ -183,7 +216,7 @@ class OMAPI_Save {
183
  update_option( 'optin_monster_api', $option );
184
 
185
  // Explicitly end here so we don't accidentally try grabbing the next round of checks on $user and $key
186
- break;
187
  }
188
  }
189
 
@@ -201,7 +234,13 @@ class OMAPI_Save {
201
  $this->errors['error'] = esc_html__( 'You must provide a valid API Key to authenticate with OptinMonster.', 'optin-monster-api' );
202
  }
203
  } else {
204
- $api = new OMAPI_Api( 'verify/', array( 'user' => $user, 'key' => $key ) );
 
 
 
 
 
 
205
  $ret = $api->request();
206
  if ( is_wp_error( $ret ) ) {
207
  $this->errors['error'] = $ret->get_error_message();
@@ -223,15 +262,15 @@ class OMAPI_Save {
223
  $this->update_optin_monster_api_option( $option, $data );
224
  }
225
  }
226
- break;
227
 
228
- case 'optins' :
229
  // Prepare variables.
230
- $data['categories'] = isset( $_POST['post_category'] ) ? stripslashes_deep( $_POST['post_category'] ) : array();
231
- $data['taxonomies'] = isset( $_POST['tax_input'] ) ? stripslashes_deep( $_POST['tax_input'] ) : array();
232
- $optin_id = absint( $_GET['optin_monster_api_id'] );
233
- $fields = array();
234
- $fields['enabled'] = isset( $data['enabled'] ) ? 1 : 0;
235
 
236
  $fields['automatic'] = isset( $data['automatic'] ) ? 1 : 0;
237
  $fields['users'] = isset( $data['users'] ) ? esc_attr( $data['users'] ) : 'all';
@@ -259,8 +298,8 @@ class OMAPI_Save {
259
  $fields['is_wc_endpoint_add_payment_method'] = isset( $data['is_wc_endpoint_add_payment_method'] ) ? 1 : 0;
260
 
261
  // Save the data from the regular taxonomies fields into the WC specific tax field.
262
- $fields['is_wc_product_category'] = isset( $data['taxonomies']['product_cat'] ) ? $data['taxonomies']['product_cat'] : array();
263
- $fields['is_wc_product_tag'] = isset( $data['taxonomies']['product_tag'] ) ? $data['taxonomies']['product_tag'] : array();
264
 
265
  // Convert old test mode data and remove.
266
  $test_mode = get_post_meta( $optin_id, '_omapi_test', true );
@@ -282,15 +321,15 @@ class OMAPI_Save {
282
  foreach ( $fields as $key => $val ) {
283
  update_post_meta( $optin_id, '_omapi_' . $key, $val );
284
  }
285
- break;
286
 
287
- case 'settings' :
288
- $option = $this->base->get_option();
289
  $option['settings']['cookies'] = isset( $data['cookies'] ) ? 1 : 0;
290
 
291
  // Save the option.
292
  $this->update_optin_monster_api_option( $option, $data );
293
- break;
294
 
295
  case 'woocommerce':
296
  if ( ! empty( $data['autogenerate'] ) ) {
@@ -312,7 +351,7 @@ class OMAPI_Save {
312
  }
313
  break;
314
  default:
315
- break;
316
  }
317
 
318
  // If selected, clear out all local cookies.
@@ -322,10 +361,10 @@ class OMAPI_Save {
322
 
323
  // Add message to show error or success messages.
324
  if ( ! empty( $this->errors ) ) {
325
- add_action( 'optin_monster_api_messages_' . $this->view, array( $this, 'errors' ) );
326
  } else {
327
  // Add a success message.
328
- add_action( 'optin_monster_api_messages_' . $this->view, array( $this, 'message' ) );
329
  }
330
 
331
  }
@@ -335,9 +374,10 @@ class OMAPI_Save {
335
  *
336
  * @since 1.0.0
337
  *
338
- * @param array $optins Array of optin objects to store.
 
339
  */
340
- public function store_optins( $optins ) {
341
  /**
342
  * Allows the filtering of what campaigns are stored locally.
343
  *
@@ -358,9 +398,9 @@ class OMAPI_Save {
358
  // Loop through all of the local optins so we can try to match and update.
359
  $local_optins = $this->base->get_optins();
360
  if ( ! empty( $local_optins ) ) {
361
- $this->sync_optins( $local_optins, $optins );
362
  } else {
363
- $this->add_optins( $optins );
364
  }
365
 
366
  }
@@ -370,16 +410,17 @@ class OMAPI_Save {
370
  *
371
  * @since 1.3.5
372
  *
373
- * @param array $optins Array of optin objects to store.
 
374
  */
375
- public function add_optins( $optins ) {
376
  foreach ( (array) $optins as $slug => $optin ) {
377
  // Maybe update an optin rather than add a new one.
378
  $local = $this->base->get_optin_by_slug( $slug );
379
  if ( $local ) {
380
  $this->update_optin( $local, $optin );
381
  } else {
382
- $this->new_optin( $slug, $optin );
383
  }
384
  }
385
  }
@@ -391,8 +432,9 @@ class OMAPI_Save {
391
  *
392
  * @param array $local_optins Array of local optin objects to sync.
393
  * @param array $optins Array of optin objects to store.
 
394
  */
395
- public function sync_optins( $local_optins, $remote_optins ) {
396
  foreach ( $local_optins as $local ) {
397
 
398
  if ( isset( $remote_optins[ $local->post_name ] ) ) {
@@ -401,8 +443,9 @@ class OMAPI_Save {
401
 
402
  unset( $remote_optins[ $local->post_name ] );
403
  } else {
 
404
  // Delete the local optin. It does not exist remotely.
405
- wp_delete_post( $local->ID, true );
406
  unset( $remote_optins[ $local->post_name ] );
407
  }
408
  }
@@ -410,7 +453,7 @@ class OMAPI_Save {
410
  // If we still have optins, they are new and we need to add them.
411
  if ( ! empty( $remote_optins ) ) {
412
  foreach ( (array) $remote_optins as $slug => $optin ) {
413
- $this->new_optin( $slug, $optin );
414
  }
415
  }
416
  }
@@ -420,18 +463,25 @@ class OMAPI_Save {
420
  *
421
  * @since 1.3.5
422
  *
423
- * @param object $local The local optin post object.
424
- * @param object $optin The optin object.
425
  *
426
  * @return void
427
  */
428
  public function update_optin( $local, $optin ) {
429
- wp_update_post( array(
430
- 'ID' => $local->ID, // Existing ID
431
- 'post_title' => $optin->title,
432
- 'post_content' => $optin->output,
433
- 'post_status' => 'publish',
434
- ) );
 
 
 
 
 
 
 
435
 
436
  $this->update_optin_meta( $local->ID, $optin );
437
  }
@@ -441,30 +491,87 @@ class OMAPI_Save {
441
  *
442
  * @since 1.3.5
443
  *
444
- * @param string $slug The campaign slug.
445
- * @param object $optin The optin object.
 
446
  *
447
  * @return void
448
  */
449
- public function new_optin( $slug, $optin ) {
450
- $post_id = wp_insert_post( array(
451
- 'post_name' => $slug,
452
- 'post_title' => $optin->title,
453
- 'post_excerpt' => $optin->id,
454
- 'post_content' => $optin->output,
455
- 'post_status' => 'publish',
456
- 'post_type' => 'omapi',
457
- ) );
 
 
 
 
 
 
 
458
 
459
  if ( 'post' === $optin->type ) {
460
  update_post_meta( $post_id, '_omapi_automatic', 1 );
461
  }
462
 
463
- update_post_meta( $post_id, '_omapi_enabled', true );
 
 
 
464
 
465
  $this->update_optin_meta( $post_id, $optin );
466
  }
467
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
  /**
469
  * Update the optin post object's post-meta with an API object's values.
470
  *
@@ -489,8 +596,8 @@ class OMAPI_Save {
489
  *
490
  * @since 1.3.5
491
  *
492
- * @param int $post_id The post (optin) ID.
493
- * @param string|array|null The shortcodes to store to meta, or delete from meta if null.
494
  *
495
  * @return void
496
  */
@@ -583,13 +690,14 @@ class OMAPI_Save {
583
  'user' => get_current_user_id(),
584
  'security' => wp_create_nonce( 'update-api-key' ),
585
  ),
 
586
  'headers' => array(
587
  'cookie' => $cookies,
588
  ),
589
  );
590
- $response = wp_remote_post( admin_url( 'admin-ajax.php' ), $request_args );
591
- $code = wp_remote_retrieve_response_code( $response );
592
- $body = json_decode( wp_remote_retrieve_body( $response ) );
593
 
594
  if (
595
  200 === intval( $code )
@@ -704,9 +812,9 @@ class OMAPI_Save {
704
  public function errors() {
705
 
706
  foreach ( $this->errors as $id => $message ) :
707
- ?>
708
  <div class="<?php echo sanitize_html_class( $id, 'error' ); ?>"><p><?php echo $message; ?></p></div>
709
- <?php
710
  endforeach;
711
 
712
  }
125
 
126
  // Save the data.
127
  switch ( $this->view ) {
128
+ case 'api':
129
  // Create a new API instance to verify API credentials.
130
  $option = $this->base->get_option();
131
  $apikey = isset( $data['apikey'] ) ? $data['apikey'] : false;
142
 
143
  // Check for new single apikey and break early with only that data check
144
  if ( $apikey ) {
145
+
146
+ $creds = array( 'apikey' => $apikey );
147
+
148
  // Verify this new API Key works but posting to the Legacy route
149
+ $result = OMAPI_Api::build( 'v1', 'verify/', 'POST', $creds )->request();
 
150
 
151
+ if ( is_wp_error( $result ) ) {
152
+ $this->errors['error'] = $result->get_error_message();
153
+ break;
154
+ }
155
 
156
+ // Store the optin data.
157
+ $this->store_optins( $result );
 
158
 
159
+ $option['api']['apikey'] = $apikey;
 
 
 
 
160
 
161
+ // Go ahead and remove the old user and key so we get the 'new' user stuff
162
+ $option['api']['user'] = '';
163
+ $option['api']['key'] = '';
164
 
165
+ // Remove any error messages.
166
+ $option['is_invalid'] = false;
167
+ $option['is_expired'] = false;
168
+ $option['is_disabled'] = false;
169
+ $option['connected'] = time();
170
+
171
+ // Remove any pre-saved site/user/account data, so we re-fetch it elsewhere
172
+ unset( $option['userId'] );
173
+ unset( $option['accountId'] );
174
+ unset( $option['siteId'] );
175
+ unset( $option['siteIds'] );
176
+ unset( $option['customApiUrl'] );
177
+
178
+ // Fetch the userId and accountId now.
179
+ $result = OMAPI_Api::build( 'v2', 'me', 'GET', $creds )->request();
180
+ if ( is_wp_error( $result ) ) {
181
+ $this->errors['error'] = $result->get_error_message();
182
+ break;
183
+ }
184
+
185
+ if ( isset( $result->id, $result->accountId ) ) {
186
+ $option['userId'] = $result->id;
187
+ $option['accountId'] = $result->accountId;
188
+ }
189
+
190
+ // Fetch the SiteIds for this site now.
191
+ $result = $this->base->sites->fetch( $apikey );
192
+ if ( is_wp_error( $result ) ) {
193
+ $this->errors['error'] = $result->get_error_message();
194
+ break;
195
  }
196
+
197
+ $option = array_merge( $option, $result );
198
+
199
+ // Fetch the campaigns for this site now.
200
+ $this->base->refresh->refresh( $apikey );
201
+
202
+ // Save the option.
203
+ $this->update_optin_monster_api_option( $option, $data );
204
+
205
+ $this->base->menu->redirect_to_dashboard( 'optins' );
206
  }
207
 
208
  // Catch apikey not set errors
209
+ else {
210
 
211
  // Did we used to have one and user is trying to remove it?
212
  if ( $old_apikey ) {
216
  update_option( 'optin_monster_api', $option );
217
 
218
  // Explicitly end here so we don't accidentally try grabbing the next round of checks on $user and $key
219
+ $this->base->menu->redirect_to_dashboard();
220
  }
221
  }
222
 
234
  $this->errors['error'] = esc_html__( 'You must provide a valid API Key to authenticate with OptinMonster.', 'optin-monster-api' );
235
  }
236
  } else {
237
+ $api = new OMAPI_Api(
238
+ 'verify/',
239
+ array(
240
+ 'user' => $user,
241
+ 'key' => $key,
242
+ )
243
+ );
244
  $ret = $api->request();
245
  if ( is_wp_error( $ret ) ) {
246
  $this->errors['error'] = $ret->get_error_message();
262
  $this->update_optin_monster_api_option( $option, $data );
263
  }
264
  }
265
+ break;
266
 
267
+ case 'optins':
268
  // Prepare variables.
269
+ $data['categories'] = isset( $_POST['post_category'] ) ? stripslashes_deep( $_POST['post_category'] ) : array();
270
+ $data['taxonomies'] = isset( $_POST['tax_input'] ) ? stripslashes_deep( $_POST['tax_input'] ) : array();
271
+ $optin_id = absint( $_GET['optin_monster_api_id'] );
272
+ $fields = array();
273
+ $fields['enabled'] = isset( $data['enabled'] ) ? 1 : 0;
274
 
275
  $fields['automatic'] = isset( $data['automatic'] ) ? 1 : 0;
276
  $fields['users'] = isset( $data['users'] ) ? esc_attr( $data['users'] ) : 'all';
298
  $fields['is_wc_endpoint_add_payment_method'] = isset( $data['is_wc_endpoint_add_payment_method'] ) ? 1 : 0;
299
 
300
  // Save the data from the regular taxonomies fields into the WC specific tax field.
301
+ $fields['is_wc_product_category'] = isset( $data['taxonomies']['product_cat'] ) ? $data['taxonomies']['product_cat'] : array();
302
+ $fields['is_wc_product_tag'] = isset( $data['taxonomies']['product_tag'] ) ? $data['taxonomies']['product_tag'] : array();
303
 
304
  // Convert old test mode data and remove.
305
  $test_mode = get_post_meta( $optin_id, '_omapi_test', true );
321
  foreach ( $fields as $key => $val ) {
322
  update_post_meta( $optin_id, '_omapi_' . $key, $val );
323
  }
324
+ break;
325
 
326
+ case 'settings':
327
+ $option = $this->base->get_option();
328
  $option['settings']['cookies'] = isset( $data['cookies'] ) ? 1 : 0;
329
 
330
  // Save the option.
331
  $this->update_optin_monster_api_option( $option, $data );
332
+ break;
333
 
334
  case 'woocommerce':
335
  if ( ! empty( $data['autogenerate'] ) ) {
351
  }
352
  break;
353
  default:
354
+ break;
355
  }
356
 
357
  // If selected, clear out all local cookies.
361
 
362
  // Add message to show error or success messages.
363
  if ( ! empty( $this->errors ) ) {
364
+ add_action( 'all_admin_notices', array( $this, 'errors' ) );
365
  } else {
366
  // Add a success message.
367
+ add_action( 'all_admin_notices', array( $this, 'message' ) );
368
  }
369
 
370
  }
374
  *
375
  * @since 1.0.0
376
  *
377
+ * @param array $optins Array of optin objects to store.
378
+ * @param bool $enabled Whether newly-added campaigns are auto-enabled. Default is true.
379
  */
380
+ public function store_optins( $optins, $enabled = true ) {
381
  /**
382
  * Allows the filtering of what campaigns are stored locally.
383
  *
398
  // Loop through all of the local optins so we can try to match and update.
399
  $local_optins = $this->base->get_optins();
400
  if ( ! empty( $local_optins ) ) {
401
+ $this->sync_optins( $local_optins, $optins, $enabled );
402
  } else {
403
+ $this->add_optins( $optins, $enabled );
404
  }
405
 
406
  }
410
  *
411
  * @since 1.3.5
412
  *
413
+ * @param array $optins Array of optin objects to store.
414
+ * @param bool $enabled Whether newly-added campaigns are auto-enabled. Default is true.
415
  */
416
+ public function add_optins( $optins, $enabled = true ) {
417
  foreach ( (array) $optins as $slug => $optin ) {
418
  // Maybe update an optin rather than add a new one.
419
  $local = $this->base->get_optin_by_slug( $slug );
420
  if ( $local ) {
421
  $this->update_optin( $local, $optin );
422
  } else {
423
+ $this->new_optin( $slug, $optin, $enabled );
424
  }
425
  }
426
  }
432
  *
433
  * @param array $local_optins Array of local optin objects to sync.
434
  * @param array $optins Array of optin objects to store.
435
+ * @param bool $enabled Whether newly-added campaigns are auto-enabled. Default is true.
436
  */
437
+ public function sync_optins( $local_optins, $remote_optins, $enabled = true ) {
438
  foreach ( $local_optins as $local ) {
439
 
440
  if ( isset( $remote_optins[ $local->post_name ] ) ) {
443
 
444
  unset( $remote_optins[ $local->post_name ] );
445
  } else {
446
+
447
  // Delete the local optin. It does not exist remotely.
448
+ $this->delete_optin( $local );
449
  unset( $remote_optins[ $local->post_name ] );
450
  }
451
  }
453
  // If we still have optins, they are new and we need to add them.
454
  if ( ! empty( $remote_optins ) ) {
455
  foreach ( (array) $remote_optins as $slug => $optin ) {
456
+ $this->new_optin( $slug, $optin, $enabled );
457
  }
458
  }
459
  }
463
  *
464
  * @since 1.3.5
465
  *
466
+ * @param object $local The local optin post object.
467
+ * @param object $optin The optin object.
468
  *
469
  * @return void
470
  */
471
  public function update_optin( $local, $optin ) {
472
+ $status = 'publish';
473
+ if ( ! empty( $optin->status ) && 'active' !== $optin->status ) {
474
+ $status = 'draft';
475
+ }
476
+
477
+ $this->optin_to_db(
478
+ array(
479
+ 'ID' => $local->ID, // Existing ID
480
+ 'post_title' => $optin->title,
481
+ 'post_content' => $optin->output,
482
+ 'post_status' => $status,
483
+ )
484
+ );
485
 
486
  $this->update_optin_meta( $local->ID, $optin );
487
  }
491
  *
492
  * @since 1.3.5
493
  *
494
+ * @param string $slug The campaign slug.
495
+ * @param object $optin. The optin object.
496
+ * @param bool $enabled Whether the new campaigns are auto-enabled. Default is true.
497
  *
498
  * @return void
499
  */
500
+ public function new_optin( $slug, $optin, $enabled = true ) {
501
+ $status = 'publish';
502
+ if ( ! empty( $optin->status ) && 'active' !== $optin->status ) {
503
+ $status = 'draft';
504
+ }
505
+
506
+ $post_id = $this->optin_to_db(
507
+ array(
508
+ 'post_name' => $slug,
509
+ 'post_title' => $optin->title,
510
+ 'post_excerpt' => $optin->id,
511
+ 'post_content' => $optin->output,
512
+ 'post_status' => $status,
513
+ 'post_type' => 'omapi',
514
+ )
515
+ );
516
 
517
  if ( 'post' === $optin->type ) {
518
  update_post_meta( $post_id, '_omapi_automatic', 1 );
519
  }
520
 
521
+ $enabled = apply_filters( 'optin_monster_auto_enable_campaign', $enabled );
522
+ if ( $enabled ) {
523
+ update_post_meta( $post_id, '_omapi_enabled', true );
524
+ }
525
 
526
  $this->update_optin_meta( $post_id, $optin );
527
  }
528
 
529
+ /**
530
+ * Adds/updates the optin post-object in the DB.
531
+ *
532
+ * @since 1.9.10
533
+ *
534
+ * @param array $args Array of args for post object.
535
+ *
536
+ * @return mixed Result
537
+ */
538
+ protected function optin_to_db( $args ) {
539
+ $priority = has_filter( 'content_save_pre', 'wp_filter_post_kses' );
540
+ if ( false !== $priority ) {
541
+ remove_filter( 'content_save_pre', 'wp_filter_post_kses', $priority );
542
+ }
543
+
544
+ if ( ! empty( $args['ID'] ) ) {
545
+ $result = wp_update_post( $args );
546
+ } else {
547
+ $result = wp_insert_post( $args );
548
+ }
549
+
550
+ if ( false !== $priority ) {
551
+ add_filter( 'content_save_pre', 'wp_filter_post_kses', $priority );
552
+ }
553
+
554
+ return $result;
555
+ }
556
+
557
+ /**
558
+ * Deletes the optin post-type object from the DB.
559
+ *
560
+ * @since 1.9.10
561
+ *
562
+ * @param mixed $id WP_Post object, or post ID, or campaign slug (post_name).
563
+ * @param boolean $by_slug Whether id passed in was the campaign slug.
564
+ *
565
+ * @return mixed Result of wp_delete_post.
566
+ */
567
+ public function delete_optin( $id, $by_slug = false ) {
568
+ if ( $by_slug ) {
569
+ $id = $this->base->get_optin_by_slug( $id );
570
+ }
571
+
572
+ return wp_delete_post( absint( ! empty( $id->ID ) ? $id->ID : $id ), true );
573
+ }
574
+
575
  /**
576
  * Update the optin post object's post-meta with an API object's values.
577
  *
596
  *
597
  * @since 1.3.5
598
  *
599
+ * @param int $post_id The post (optin) ID.
600
+ * @param string|array|null $shortcodes The shortcodes to store to meta, or delete from meta if null.
601
  *
602
  * @return void
603
  */
690
  'user' => get_current_user_id(),
691
  'security' => wp_create_nonce( 'update-api-key' ),
692
  ),
693
+ 'timeout' => 60,
694
  'headers' => array(
695
  'cookie' => $cookies,
696
  ),
697
  );
698
+ $response = wp_remote_post( admin_url( 'admin-ajax.php' ), $request_args );
699
+ $code = wp_remote_retrieve_response_code( $response );
700
+ $body = json_decode( wp_remote_retrieve_body( $response ) );
701
 
702
  if (
703
  200 === intval( $code )
812
  public function errors() {
813
 
814
  foreach ( $this->errors as $id => $message ) :
815
+ ?>
816
  <div class="<?php echo sanitize_html_class( $id, 'error' ); ?>"><p><?php echo $message; ?></p></div>
817
+ <?php
818
  endforeach;
819
 
820
  }
OMAPI/Shortcode.php CHANGED
@@ -73,7 +73,7 @@ class OMAPI_Shortcode {
73
  public function set() {
74
 
75
  self::$instance = $this;
76
- $this->base = OMAPI::get_instance();
77
 
78
  }
79
 
@@ -91,27 +91,31 @@ class OMAPI_Shortcode {
91
 
92
  // Checking if AMP is enabled.
93
  if ( OMAPI_Utils::is_amp_enabled() ) {
94
- return;
95
  }
96
 
97
  global $post;
98
 
99
  // Merge default attributes with passed attributes.
100
- $atts = shortcode_atts( array(
101
- 'slug' => '',
102
- 'followrules' => 'false',
103
- // id attribute is deprecated.
104
- 'id' => '',
105
- ), $atts, 'optin-monster' );
 
 
 
 
106
 
107
  $optin_id = false;
108
  if ( ! empty( $atts['id'] ) ) {
109
  $optin_id = absint( $atts['id'] );
110
  } elseif ( isset( $atts['slug'] ) ) {
111
- $optin = get_page_by_path( $atts['slug'], OBJECT, 'omapi' );
112
- if ( $optin ) {
113
- $optin_id = $optin->ID;
114
- }
115
  } else {
116
  // A custom attribute must have been passed. Allow it to be filtered to grab the optin ID from a custom source.
117
  $optin_id = apply_filters( 'optin_monster_api_custom_optin_id', false, $atts, $post );
@@ -125,9 +129,12 @@ class OMAPI_Shortcode {
125
  return false;
126
  }
127
 
 
 
 
 
128
  // Try to grab the stored HTML.
129
- $optin = $this->base->get_optin( $optin_id );
130
- $html = $this->base->output->prepare_campaign( $optin );
131
  if ( ! $html ) {
132
  return false;
133
  }
@@ -161,7 +168,7 @@ class OMAPI_Shortcode {
161
 
162
  // Checking if AMP is enabled.
163
  if ( OMAPI_Utils::is_amp_enabled() ) {
164
- return;
165
  }
166
 
167
  // Run the v2 implementation.
73
  public function set() {
74
 
75
  self::$instance = $this;
76
+ $this->base = OMAPI::get_instance();
77
 
78
  }
79
 
91
 
92
  // Checking if AMP is enabled.
93
  if ( OMAPI_Utils::is_amp_enabled() ) {
94
+ return;
95
  }
96
 
97
  global $post;
98
 
99
  // Merge default attributes with passed attributes.
100
+ $atts = shortcode_atts(
101
+ array(
102
+ 'slug' => '',
103
+ 'followrules' => 'false',
104
+ // id attribute is deprecated.
105
+ 'id' => '',
106
+ ),
107
+ $atts,
108
+ 'optin-monster'
109
+ );
110
 
111
  $optin_id = false;
112
  if ( ! empty( $atts['id'] ) ) {
113
  $optin_id = absint( $atts['id'] );
114
  } elseif ( isset( $atts['slug'] ) ) {
115
+ $optin = $this->base->get_optin_by_slug( $atts['slug'] );
116
+ if ( $optin ) {
117
+ $optin_id = $optin->ID;
118
+ }
119
  } else {
120
  // A custom attribute must have been passed. Allow it to be filtered to grab the optin ID from a custom source.
121
  $optin_id = apply_filters( 'optin_monster_api_custom_optin_id', false, $atts, $post );
129
  return false;
130
  }
131
 
132
+ if ( empty( $optin->ID ) || (int) $optin_id !== (int) $optin->ID ) {
133
+ $optin = $this->base->get_optin( $optin_id );
134
+ }
135
+
136
  // Try to grab the stored HTML.
137
+ $html = $this->base->output->prepare_campaign( $optin );
 
138
  if ( ! $html ) {
139
  return false;
140
  }
168
 
169
  // Checking if AMP is enabled.
170
  if ( OMAPI_Utils::is_amp_enabled() ) {
171
+ return;
172
  }
173
 
174
  // Run the v2 implementation.
OMAPI/Sites.php CHANGED
@@ -26,7 +26,7 @@ class OMAPI_Sites {
26
  */
27
  protected $base;
28
 
29
- public function __construct( ) {
30
  $this->base = OMAPI::get_instance();
31
  }
32
 
@@ -40,43 +40,150 @@ class OMAPI_Sites {
40
  * @return array|null $sites An array of sites if the request is successful
41
  */
42
  public function fetch( $api_key = null ) {
43
- $api = OMAPI_Api::build( 'v2', 'sites/origin', 'GET' );
 
44
 
45
- if ( $api_key ) {
46
- $api->set( 'apikey', $api_key );
47
  }
48
 
49
- $body = $api->request();
50
- $sites = array(
51
- 'ids' => array(),
52
- 'customApiUrl' => ''
53
  );
54
 
55
- if ( ! is_wp_error( $body ) && ! empty( $body->data ) ) {
 
 
56
  foreach ( $body->data as $site ) {
57
- $checkCnames = true;
58
- $sites['ids'][] = (int) $site->numericId;
59
 
60
- $homeUrl = str_replace( array( 'https://', 'www.' ), '', esc_url_raw( home_url( '', 'https' ) ) );
 
 
61
 
62
- // If we have a custom CNAME, let's enable it and add the data to the output array.
63
- // We need to make sure that it matches the home_url to ensure that the correct domain
64
- // is loaded.
65
  $wildcardDomain = '*.' === substr( $site->domain, 0, 2 );
66
- if ( ( $homeUrl === $site->domain || $wildcardDomain ) && $site->settings->enableCustomCnames && $checkCnames ) {
67
- if ( ! $wildcardDomain ) {
68
- $checkCnames = false;
69
- }
 
 
 
 
 
 
 
 
 
 
 
 
70
  if ( $site->settings->cdnCname && $site->settings->cdnCnameVerified ) {
71
- $sites['customApiUrl'] = 'https://' . $site->settings->cdnUrl . '/app/js/api.min.js';
72
- } else if ( $site->settings->apiCname && $site->settings->apiCnameVerified ) {
 
 
 
 
73
  // Not sure if this will wreak havoc during verification of the domains, so leaving it commented out for now.
74
- // $sites['customApiUrl'] = 'https://' . $site->settings->apiUrl . '/a/app/js/api.min.js';
 
 
 
 
 
 
 
75
  }
76
  }
77
  }
78
  }
79
 
80
- return $sites;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
 
82
  }
26
  */
27
  protected $base;
28
 
29
+ public function __construct() {
30
  $this->base = OMAPI::get_instance();
31
  }
32
 
40
  * @return array|null $sites An array of sites if the request is successful
41
  */
42
  public function fetch( $api_key = null ) {
43
+ $creds = ! empty( $api_key ) ? array( 'apikey' => $api_key ) : array();
44
+ $body = OMAPI_Api::build( 'v2', 'sites/origin', 'GET', $creds )->request();
45
 
46
+ if ( is_wp_error( $body ) ) {
47
+ return $this->handle_error( $body );
48
  }
49
 
50
+ $results = array(
51
+ 'siteId' => '',
52
+ 'siteIds' => array(),
53
+ 'customApiUrl' => '',
54
  );
55
 
56
+ $domain = $this->get_domain();
57
+ if ( ! empty( $body->data ) ) {
58
+ $checkCnames = true;
59
  foreach ( $body->data as $site ) {
60
+ $results['siteIds'][] = (string) $site->siteId;
 
61
 
62
+ if ( empty( $site->domain ) ) {
63
+ continue;
64
+ }
65
 
66
+ $matches = $domain === (string) $site->domain;
 
 
67
  $wildcardDomain = '*.' === substr( $site->domain, 0, 2 );
68
+
69
+ if ( ! $matches && ! $wildcardDomain ) {
70
+ continue;
71
+ }
72
+
73
+ // If we don't have a siteId yet, set it to this one.
74
+ // If we DO already have a siteId and this one is NOT a wildcard,
75
+ // we want to overwrite with this one.
76
+ if ( empty( $results['siteId'] ) || ! $wildcardDomain ) {
77
+ $results['siteId'] = (string) $site->siteId;
78
+ }
79
+
80
+ // Do we have a custom cnamed api url to use?
81
+ if ( $site->settings->enableCustomCnames && $checkCnames ) {
82
+
83
+ $found = false;
84
  if ( $site->settings->cdnCname && $site->settings->cdnCnameVerified ) {
85
+
86
+ // If we have a custom CNAME, let's enable it and add the data to the output array.
87
+ $results['customApiUrl'] = 'https://' . $site->settings->cdnUrl . '/app/js/api.min.js';
88
+ $found = true;
89
+
90
+ } elseif ( $site->settings->apiCname && $site->settings->apiCnameVerified ) {
91
  // Not sure if this will wreak havoc during verification of the domains, so leaving it commented out for now.
92
+ // $results['customApiUrl'] = 'https://' . $site->settings->apiUrl . '/a/app/js/api.min.js';
93
+ // $found = true;
94
+ }
95
+
96
+ // If this isn't a wildcard domain, and we found a custom api url, we don't
97
+ // need to continue checking cnames.
98
+ if ( $found && ! $wildcardDomain ) {
99
+ $checkCnames = false;
100
  }
101
  }
102
  }
103
  }
104
 
105
+ if ( empty( $results['siteId'] ) ) {
106
+ $site = $this->attempt_create_site( $creds );
107
+ if ( is_wp_error( $site ) ) {
108
+ return $this->handle_error( $site );
109
+ }
110
+
111
+ if ( ! empty( $site->siteId ) ) {
112
+ $results['siteId'] = (string) $site->siteId;
113
+ }
114
+ }
115
+
116
+ return $results;
117
+ }
118
+
119
+ /**
120
+ * Attempt to create the associated site in the app.
121
+ *
122
+ * @since 1.9.10
123
+ *
124
+ * @param array $creds Array of credentials for request.
125
+ *
126
+ * @return mixed Site-created response or WP_Error.
127
+ */
128
+ public function attempt_create_site( $creds ) {
129
+ $site_args = array(
130
+ 'domain' => esc_url_raw( site_url() ),
131
+ 'name' => esc_attr( get_option( 'blogname' ) ),
132
+ 'settings' => array(
133
+ 'wordpress' => 1,
134
+ 'homeUrl' => esc_url_raw( home_url() ),
135
+ 'restUrl' => esc_url_raw( get_rest_url() ),
136
+ ),
137
+ );
138
+
139
+ // Create/update the site for this WordPress site.
140
+ $result = OMAPI_Api::build( 'v2', 'sites', 'POST', $creds )
141
+ ->request( $site_args );
142
+
143
+ return 201 === (int) OMAPI_Api::instance()->response_code
144
+ ? OMAPI_Api::instance()->response_body
145
+ : $result;
146
+ }
147
+
148
+ /**
149
+ * Get the domain for this WP site.
150
+ * Borrowed heavily from AwesomeMotive\OptinMonsterApp\Utils\Url
151
+ *
152
+ * @since 1.9.10
153
+ *
154
+ * @return string
155
+ */
156
+ public function get_domain() {
157
+ $url = site_url();
158
+ $parsed = parse_url( $url );
159
+ $hostname = ! empty( $parsed['host'] ) ? $parsed['host'] : $url;
160
+ $domain = preg_replace( '/^www\./', '', $hostname );
161
+
162
+ return $domain;
163
+ }
164
+
165
+ /**
166
+ * Updates the error text when we try to auto-create this WP site, but it fails.
167
+ *
168
+ * @since 1.9.10
169
+ *
170
+ * @param WP_Error $error The error object.
171
+ *
172
+ * @return WP_Error
173
+ */
174
+ public function handle_error( $error ) {
175
+ if ( 402 === (int) $error->get_error_data() && ! empty( OMAPI_Api::instance()->response_body->siteAmount ) ) {
176
+
177
+ $message = sprintf(
178
+ __( 'We tried to register your WordPress site with OptinMonster, but You have reached the maximum number of registered sites for your current OptinMonster plan.<br>Additional sites can be added to your account by <a href="%1$s" target="_blank" rel="noopener">upgrading</a> or <a href="%2$s" target="_blank" rel="noopener">purchasing additional site licenses</a>.', 'optin-monster-api' ),
179
+ esc_url_raw( OPTINMONSTER_APP_URL . '/account/upgrade/?utm_source=app&utm_medium=upsell&utm_campaign=header&feature=sites/' ),
180
+ esc_url_raw( OPTINMONSTER_APP_URL . '/account/billing/#additional-licenses' )
181
+ );
182
+
183
+ $error = new WP_Error( $error->get_error_code(), $message, 402 );
184
+ }
185
+
186
+ return $error;
187
  }
188
+
189
  }
OMAPI/Support.php ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Suppor Class, handles generating info for support.
4
+ *
5
+ * @since 1.9.10
6
+ */
7
+
8
+ // Exit if accessed directly.
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ /**
14
+ * Rest Api class.
15
+ *
16
+ * @since 1.9.10
17
+ */
18
+ class OMAPI_Support {
19
+
20
+ /**
21
+ * The Base OMAPI Object
22
+ *
23
+ * @since 1.9.10
24
+ *
25
+ * @var OMAPI
26
+ */
27
+ protected $base;
28
+
29
+ /**
30
+ * Class constructor.
31
+ *
32
+ * @since 1.9.10
33
+ */
34
+ public function __construct() {
35
+ $this->base = OMAPI::get_instance();
36
+ }
37
+
38
+ /**
39
+ * Combine Support data together.
40
+ *
41
+ * @since 1.9.10
42
+ * @return array
43
+ */
44
+ public function get_support_data( $format = 'raw' ) {
45
+ return array(
46
+ 'server' => $this->get_server_data( $format ),
47
+ 'campaigns' => $this->get_campaign_data( $format ),
48
+ );
49
+ }
50
+
51
+ /**
52
+ * Build Current Optin data array to localize
53
+ *
54
+ * @since 1.9.10
55
+ *
56
+ * @return array
57
+ */
58
+ public function get_campaign_data( $format = 'raw' ) {
59
+
60
+ $campaigns = $this->base->get_optins();
61
+ $data = array();
62
+
63
+ if ( empty( $campaigns ) ) {
64
+ return $data;
65
+ }
66
+
67
+ foreach ( (array) $campaigns as $campaign ) {
68
+ if ( empty( $campaign->ID ) ) {
69
+ continue;
70
+ }
71
+
72
+ $slug = $campaign->post_name;
73
+ $design_type = get_post_meta( $campaign->ID, '_omapi_type', true );
74
+
75
+ $data[ $slug ] = array(
76
+ 'Campaign Type' => $design_type,
77
+ 'WordPress ID' => $campaign->ID,
78
+ 'Associated IDs' => get_post_meta( $campaign->ID, '_omapi_ids', true ),
79
+ 'Current Status' => get_post_meta( $campaign->ID, '_omapi_enabled', true ) ? 'Enabled' : 'Disabled',
80
+ 'User Settings' => get_post_meta( $campaign->ID, '_omapi_users', true ),
81
+ 'Pages to Never show on' => get_post_meta( $campaign->ID, '_omapi_never', true ),
82
+ 'Pages to Only show on' => get_post_meta( $campaign->ID, '_omapi_only', true ),
83
+ 'Categories' => get_post_meta( $campaign->ID, '_omapi_categories', true ),
84
+ 'Taxonomies' => get_post_meta( $campaign->ID, '_omapi_taxonomies', true ),
85
+ 'Template types to Show on' => get_post_meta( $campaign->ID, '_omapi_show', true ),
86
+ 'Shortcodes Synced and Recognized' => get_post_meta( $campaign->ID, '_omapi_shortcode', true ) ? htmlspecialchars_decode( get_post_meta( $campaign->ID, '_omapi_shortcode_output', true ) ) : 'None recognized',
87
+ );
88
+
89
+ if ( OMAPI_Utils::is_inline_type( $design_type ) ) {
90
+ $data[ $slug ]['Automatic Output Status'] = get_post_meta( $campaign->ID, '_omapi_automatic', true ) ? 'Enabled' : 'Disabled';
91
+ }
92
+
93
+ if ( 'raw' === $format ) {
94
+ $data[ $slug ]['raw'] = $this->base->collect_campaign_data( $campaign );
95
+ }
96
+ }
97
+
98
+ return $data;
99
+ }
100
+
101
+ /**
102
+ * Build array of server information to localize
103
+ *
104
+ * @since 1.9.10
105
+ *
106
+ * @return array
107
+ */
108
+ public function get_server_data( $format = 'raw' ) {
109
+ if ( ! function_exists( 'get_plugins' ) ) {
110
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
111
+ }
112
+
113
+ $theme_data = wp_get_theme();
114
+ $theme = 'raw' === $format
115
+ ? array(
116
+ 'Name' => $theme_data->Name,
117
+ 'Author' => $theme_data->Author,
118
+ 'Author Name' => $theme_data->{'Author Name'},
119
+ 'Author URI' => $theme_data->{'Author URI'},
120
+ 'Description' => $theme_data->Description,
121
+ 'Version' => $theme_data->Version,
122
+ 'Template' => $theme_data->Template,
123
+ 'Stylesheet' => $theme_data->Stylesheet,
124
+ 'Template Files' => $theme_data->{'Template Files'},
125
+ 'Stylesheet Files' => $theme_data->{'Stylesheet Files'},
126
+ 'Template Dir' => $theme_data->{'Template Dir'},
127
+ 'Stylesheet Dir' => $theme_data->{'Stylesheet Dir'},
128
+ 'Screenshot' => $theme_data->Screenshot,
129
+ 'Tags' => $theme_data->Tags,
130
+ 'Theme Root' => $theme_data->{'Theme Root'},
131
+ 'Theme Root URI' => $theme_data->{'Theme Root URI'},
132
+ 'Parent Theme' => $theme_data->{'Parent Theme'},
133
+ )
134
+ : $theme_data->Name . ' ' . $theme_data->Version;
135
+
136
+ $active_plugins = get_option( 'active_plugins', array() );
137
+ $plugins = 'raw' === $format ? array() : "\n";
138
+ foreach ( get_plugins() as $plugin_path => $plugin ) {
139
+ if ( ! in_array( $plugin_path, $active_plugins ) ) {
140
+ continue;
141
+ }
142
+
143
+ if ( 'raw' === $format ) {
144
+ $plugins[] = $plugin;
145
+ } else {
146
+ $plugins .= $plugin['Name'] . ': ' . $plugin['Version'] . "\n";
147
+ }
148
+ }
149
+
150
+ $api_ping = wp_remote_request( OPTINMONSTER_APP_URL . '/v1/ping' );
151
+
152
+ $array = array(
153
+ 'Plugin Version' => esc_html( $this->base->version ),
154
+ 'Server Info' => esc_html( $_SERVER['SERVER_SOFTWARE'] ),
155
+ 'PHP Version' => function_exists( 'phpversion' ) ? esc_html( phpversion() ) : 'Unable to check.',
156
+ 'Error Log Location' => function_exists( 'ini_get' ) ? ini_get( 'error_log' ) : 'Unable to locate.',
157
+ 'Default Timezone' => date_default_timezone_get(),
158
+ 'WordPress Home URL' => esc_url_raw( get_home_url() ),
159
+ 'WordPress Site URL' => esc_url_raw( get_site_url() ),
160
+ 'WordPress REST URL' => esc_url_raw( get_rest_url() ),
161
+ 'WordPress Version' => $GLOBALS['wp_version'],
162
+ 'Multisite' => is_multisite(),
163
+ 'Language' => get_locale(),
164
+ 'API Ping Response' => wp_remote_retrieve_response_code( $api_ping ),
165
+ 'Active Theme' => $theme,
166
+ 'Active Plugins' => $plugins,
167
+ );
168
+
169
+ if ( 'raw' !== $format ) {
170
+ $array['Multisite'] = $array['Multisite'] ? 'Multisite Enabled' : 'Not Multisite';
171
+ }
172
+
173
+ return $array;
174
+ }
175
+ }
OMAPI/TrustPulse.php CHANGED
@@ -94,7 +94,7 @@ class OMAPI_TrustPulse {
94
  }
95
 
96
  // If user is in admin ajax or doing cron, return.
97
- if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
98
  return;
99
  }
100
 
@@ -126,7 +126,7 @@ class OMAPI_TrustPulse {
126
 
127
  $this->trustpulse_active = function_exists( 'trustpulse_dir_uri' );
128
 
129
- $account_id = get_option( 'trustpulse_script_id', null );
130
  $this->trustpulse_setup = ! empty( $account_id );
131
  }
132
 
@@ -139,8 +139,8 @@ class OMAPI_TrustPulse {
139
  $this->hook = add_submenu_page(
140
  // If trustpulse is active/setup, don't show the TP sub-menu item under OM.
141
  $this->trustpulse_active && $this->trustpulse_setup
142
- ? 'optin-monster-api-settings-no-menu'
143
- : 'optin-monster-api-settings', // Parent slug
144
  esc_html__( 'TrustPulse', 'optin-monster-api' ), // Page title
145
  esc_html__( 'Social Proof Widget', 'optin-monster-api' ),
146
  apply_filters( 'optin_monster_api_menu_cap', 'manage_options', 'optin-monster-trustpulse' ), // Cap
@@ -174,7 +174,13 @@ class OMAPI_TrustPulse {
174
  * @since 1.9.0
175
  */
176
  public function display_page() {
177
- $this->base->output_view( 'trustpulse-settings-page.php' );
 
 
 
 
 
 
178
  }
179
 
180
  /**
@@ -184,10 +190,10 @@ class OMAPI_TrustPulse {
184
  */
185
  public function assets() {
186
  add_filter( 'admin_body_class', array( $this, 'add_body_classes' ) );
 
 
187
 
188
- wp_enqueue_style( $this->base->plugin_slug . '-settings', $this->base->url . 'assets/css/settings.css', array(), $this->base->version );
189
-
190
- wp_enqueue_style( 'om-tp-admin-css', $this->base->url . 'assets/css/trustpulse-admin.min.css', false, $this->base->version );
191
  add_action( 'in_admin_header', array( $this, 'render_banner' ) );
192
  }
193
 
94
  }
95
 
96
  // If user is in admin ajax or doing cron, return.
97
+ if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
98
  return;
99
  }
100
 
126
 
127
  $this->trustpulse_active = function_exists( 'trustpulse_dir_uri' );
128
 
129
+ $account_id = get_option( 'trustpulse_script_id', null );
130
  $this->trustpulse_setup = ! empty( $account_id );
131
  }
132
 
139
  $this->hook = add_submenu_page(
140
  // If trustpulse is active/setup, don't show the TP sub-menu item under OM.
141
  $this->trustpulse_active && $this->trustpulse_setup
142
+ ? $this->base->menu->parent_slug() . '-no-menu'
143
+ : $this->base->menu->parent_slug(), // Parent slug
144
  esc_html__( 'TrustPulse', 'optin-monster-api' ), // Page title
145
  esc_html__( 'Social Proof Widget', 'optin-monster-api' ),
146
  apply_filters( 'optin_monster_api_menu_cap', 'manage_options', 'optin-monster-trustpulse' ), // Cap
174
  * @since 1.9.0
175
  */
176
  public function display_page() {
177
+ $all = get_plugins();
178
+ $this->base->output_view(
179
+ 'trustpulse-settings-page.php',
180
+ array(
181
+ 'has_plugin' => ! empty( $all['trustpulse-api/trustpulse.php'] ),
182
+ )
183
+ );
184
  }
185
 
186
  /**
190
  */
191
  public function assets() {
192
  add_filter( 'admin_body_class', array( $this, 'add_body_classes' ) );
193
+ $this->base->menu->styles();
194
+ $this->base->menu->scripts();
195
 
196
+ wp_enqueue_style( 'om-tp-admin-css', $this->base->url . 'assets/dist/css/trustpulse.min.css', false, $this->base->asset_version() );
 
 
197
  add_action( 'in_admin_header', array( $this, 'render_banner' ) );
198
  }
199
 
OMAPI/Type.php CHANGED
@@ -83,7 +83,7 @@ class OMAPI_Type {
83
  register_post_type(
84
  'omapi',
85
  array(
86
- 'labels' => apply_filters(
87
  'optin_monster_api_post_type_labels',
88
  array(
89
  'name' => _x( 'Campaigns', 'post type general name', 'optin-monster-api' ),
83
  register_post_type(
84
  'omapi',
85
  array(
86
+ 'labels' => apply_filters(
87
  'optin_monster_api_post_type_labels',
88
  array(
89
  'name' => _x( 'Campaigns', 'post type general name', 'optin-monster-api' ),
OMAPI/Utils.php CHANGED
@@ -77,4 +77,23 @@ class OMAPI_Utils {
77
  return function_exists( 'is_amp_endpoint' ) && is_amp_endpoint();
78
  }
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
77
  return function_exists( 'is_amp_endpoint' ) && is_amp_endpoint();
78
  }
79
 
80
+ /**
81
+ * Ensures a unique array.
82
+ *
83
+ * @since 1.9.10
84
+ *
85
+ * @param array $val Array to clean.
86
+ *
87
+ * @return array Cleaned array.
88
+ */
89
+ public static function unique_array( $val ) {
90
+ if ( empty( $val ) ) {
91
+ return array();
92
+ }
93
+
94
+ $val = array_filter( $val );
95
+
96
+ return array_unique( $val );
97
+ }
98
+
99
  }
OMAPI/Validate.php CHANGED
@@ -117,39 +117,45 @@ class OMAPI_Validate {
117
 
118
  // Check for new apikey and only use the old user/key if we don't have it
119
  if ( ! $creds['apikey'] ) {
120
- $api = new OMAPI_Api( 'validate/', array( 'user' => $creds['user'], 'key' => $creds['key'] ) );
 
 
 
 
 
 
121
  } else {
122
- $api = new OMAPI_Api( 'verify/', array( 'apikey' => $creds['apikey'] ) );
123
  }
124
 
125
- $ret = $api->request();
126
  if ( is_wp_error( $ret ) ) {
127
  $option = $this->base->get_option();
128
  $type = $ret->get_error_code();
129
  switch ( $type ) {
130
- case 'missing' :
131
- case 'auth' :
132
  // Set option values.
133
  $option['is_invalid'] = true;
134
  $option['is_expired'] = false;
135
  $option['is_disabled'] = false;
136
- break;
137
 
138
- case 'disabled' :
139
  // Set option values.
140
  $option['is_invalid'] = false;
141
  $option['is_expired'] = false;
142
  $option['is_disabled'] = true;
143
- break;
144
 
145
- case 'expired' :
146
  // Set option values.
147
  $option['is_invalid'] = false;
148
  $option['is_expired'] = true;
149
  $option['is_disabled'] = false;
150
- break;
151
  default:
152
- break;
153
  }
154
 
155
  // Update option.
@@ -178,7 +184,7 @@ class OMAPI_Validate {
178
  if ( 'optin-monster-api-settings' !== $page && 'optin-monster-api-welcome' !== $page ) {
179
  if ( ! $this->base->menu->has_trial_link() ) {
180
  echo '<div class="notice notice-error"><p>' . esc_html__( 'There was an error verifying your OptinMonster API credentials. They are either missing or they are no longer valid.', 'optin-monster-api' ) . '</p>';
181
- echo '<p><a href="' . esc_url_raw( admin_url( 'admin.php?page=optin-monster-api-settings' ) ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '">' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '</a></p></div>';
182
  }
183
  }
184
  } elseif ( isset( $option['is_disabled'] ) && $option['is_disabled'] ) {
@@ -188,14 +194,11 @@ class OMAPI_Validate {
188
  echo '<div class="notice notice-error"><p>' . esc_html__( 'The subscription to this OptinMonster account has expired. Please renew your subscription to use the OptinMonster API.', 'optin-monster-api' ) . '</p>';
189
  echo '<p><a href="' . OPTINMONSTER_APP_URL . '/account/billing/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '</a></p></div>';
190
  } else {
191
- // If user has dismissed before no point going through page checks
192
  if ( $this->should_user_see_connect_nag() ) {
193
- if ( 'optin-monster-api-settings' !== $page && 'optin-monster-api-welcome' !== $page && 'index.php' !== $pagenow && ! $this->base->get_api_credentials() ) {
194
- echo '<div id="omapi-please-connect-notice" class="notice notice-success is-dismissible"><h3 style="padding:2px;font-weight:normal;margin:.5em 0 0;">' . esc_html__( 'Get More Email Subscribers with OptinMonster', 'optin-monster-api' ) . '</h3><p>' . esc_html__( 'Please connect to or create an OptinMonster account to start using OptinMonster. This will enable you to start turning website visitors into subscribers & customers.', 'optin-monster-api' ) . '</p>';
195
- echo '<p><a href="' . esc_url_raw( $this->base->menu->get_dashboard_link() ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Connect OptinMonster', 'optin-monster-api' ) . '">' . esc_html__( 'Connect OptinMonster' ) . '</a></p></div>';
196
- }
197
- }
198
 
 
 
 
199
  }
200
 
201
  }
@@ -209,7 +212,7 @@ class OMAPI_Validate {
209
  jQuery(document).on( 'click', '#omapi-please-connect-notice .notice-dismiss', function( event ) {
210
  event.preventDefault();
211
 
212
- //Set the pointer to be closed for this user
213
  jQuery.post( ajaxurl, {
214
  pointer: 'omapi_please_connect_notice',
215
  action: 'dismiss-wp-pointer'
@@ -230,26 +233,34 @@ class OMAPI_Validate {
230
  * @return bool default false and true only if the 'omapi_please_connect_notice' is not in the wp dismissed pointers usermeta
231
  */
232
  public function should_user_see_connect_nag() {
 
 
233
 
234
- // Assume user has dissmissed
235
- $show_the_nag = false;
 
 
 
 
 
 
236
 
237
  // Get array list of dismissed pointers for current user and convert it to array
238
- $dismissed_pointers = explode( ',', get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
239
 
240
  // Check if our pointer is not among dismissed ones and that the user should see this
241
- if( ! in_array( 'omapi_please_connect_notice', $dismissed_pointers ) && current_user_can( 'activate_plugins' ) ) {
242
- $show_the_nag = true;
 
 
 
243
  // Add footer script to save when user dismisses
244
  add_action( 'admin_print_footer_scripts', array( $this, 'hide_connect_notice_script' ) );
245
- }
246
 
247
- if ( $show_the_nag ) {
248
  return true;
249
  }
250
 
251
  return false;
252
-
253
  }
254
 
255
  }
117
 
118
  // Check for new apikey and only use the old user/key if we don't have it
119
  if ( ! $creds['apikey'] ) {
120
+ $api = new OMAPI_Api(
121
+ 'validate/',
122
+ array(
123
+ 'user' => $creds['user'],
124
+ 'key' => $creds['key'],
125
+ )
126
+ );
127
  } else {
128
+ $api = new OMAPI_Api( 'verify/', array( 'apikey' => $creds['apikey'] ) );
129
  }
130
 
131
+ $ret = $api->request();
132
  if ( is_wp_error( $ret ) ) {
133
  $option = $this->base->get_option();
134
  $type = $ret->get_error_code();
135
  switch ( $type ) {
136
+ case 'missing':
137
+ case 'auth':
138
  // Set option values.
139
  $option['is_invalid'] = true;
140
  $option['is_expired'] = false;
141
  $option['is_disabled'] = false;
142
+ break;
143
 
144
+ case 'disabled':
145
  // Set option values.
146
  $option['is_invalid'] = false;
147
  $option['is_expired'] = false;
148
  $option['is_disabled'] = true;
149
+ break;
150
 
151
+ case 'expired':
152
  // Set option values.
153
  $option['is_invalid'] = false;
154
  $option['is_expired'] = true;
155
  $option['is_disabled'] = false;
156
+ break;
157
  default:
158
+ break;
159
  }
160
 
161
  // Update option.
184
  if ( 'optin-monster-api-settings' !== $page && 'optin-monster-api-welcome' !== $page ) {
185
  if ( ! $this->base->menu->has_trial_link() ) {
186
  echo '<div class="notice notice-error"><p>' . esc_html__( 'There was an error verifying your OptinMonster API credentials. They are either missing or they are no longer valid.', 'optin-monster-api' ) . '</p>';
187
+ echo '<p><a href="' . esc_url_raw( $this->base->menu->get_settings_link() ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '">' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '</a></p></div>';
188
  }
189
  }
190
  } elseif ( isset( $option['is_disabled'] ) && $option['is_disabled'] ) {
194
  echo '<div class="notice notice-error"><p>' . esc_html__( 'The subscription to this OptinMonster account has expired. Please renew your subscription to use the OptinMonster API.', 'optin-monster-api' ) . '</p>';
195
  echo '<p><a href="' . OPTINMONSTER_APP_URL . '/account/billing/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '</a></p></div>';
196
  } else {
 
197
  if ( $this->should_user_see_connect_nag() ) {
 
 
 
 
 
198
 
199
+ echo '<div id="omapi-please-connect-notice" class="notice notice-success is-dismissible"><h3 style="padding:2px;font-weight:normal;margin:.5em 0 0;">' . esc_html__( 'Get More Email Subscribers with OptinMonster', 'optin-monster-api' ) . '</h3><p>' . esc_html__( 'Please connect to or create an OptinMonster account to start using OptinMonster. This will enable you to start turning website visitors into subscribers & customers.', 'optin-monster-api' ) . '</p>';
200
+ echo '<p><a href="' . esc_url_raw( $this->base->menu->get_dashboard_link() ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Connect OptinMonster', 'optin-monster-api' ) . '">' . esc_html__( 'Connect OptinMonster' ) . '</a></p></div>';
201
+ }
202
  }
203
 
204
  }
212
  jQuery(document).on( 'click', '#omapi-please-connect-notice .notice-dismiss', function( event ) {
213
  event.preventDefault();
214
 
215
+ // Set the pointer to be closed for this user
216
  jQuery.post( ajaxurl, {
217
  pointer: 'omapi_please_connect_notice',
218
  action: 'dismiss-wp-pointer'
233
  * @return bool default false and true only if the 'omapi_please_connect_notice' is not in the wp dismissed pointers usermeta
234
  */
235
  public function should_user_see_connect_nag() {
236
+ global $pagenow;
237
+ $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
238
 
239
+ if (
240
+ $this->base->menu->is_om_page()
241
+ || 'index.php' === $pagenow
242
+ || $this->base->get_api_credentials()
243
+
244
+ ) {
245
+ return false;
246
+ }
247
 
248
  // Get array list of dismissed pointers for current user and convert it to array
249
+ $dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
250
 
251
  // Check if our pointer is not among dismissed ones and that the user should see this
252
+ if (
253
+ ! in_array( 'omapi_please_connect_notice', $dismissed_pointers, true )
254
+ && current_user_can( 'activate_plugins' )
255
+ ) {
256
+
257
  // Add footer script to save when user dismisses
258
  add_action( 'admin_print_footer_scripts', array( $this, 'hide_connect_notice_script' ) );
 
259
 
 
260
  return true;
261
  }
262
 
263
  return false;
 
264
  }
265
 
266
  }
OMAPI/Welcome.php CHANGED
@@ -68,7 +68,7 @@ class OMAPI_Welcome {
68
  }
69
 
70
  // If user is in admin ajax or doing cron, return.
71
- if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
72
  return;
73
  }
74
 
@@ -85,13 +85,13 @@ class OMAPI_Welcome {
85
  // Set our object.
86
  $this->set();
87
 
88
- //Load the Welcome screen
89
- add_action( 'admin_menu', array($this, 'register_welcome_page' ) );
90
 
91
- //maybe redirect
92
  add_action( 'admin_init', array( $this, 'maybe_welcome_redirect' ) );
93
 
94
- //maybe add body classes
95
  add_action( 'current_screen', array( $this, 'welcome_screen_helpers' ) );
96
 
97
  // Maybe load a dashboard widget.
@@ -114,17 +114,16 @@ class OMAPI_Welcome {
114
  public function welcome_screen_helpers() {
115
 
116
  $screen = get_current_screen();
117
-
118
- if ( 'admin_page_optin-monster-api-welcome' === $screen->id ) {
119
- update_option( 'optin_monster_viewed_welcome', true );
120
  add_filter( 'admin_body_class', array( $this, 'add_body_classes' ) );
121
  }
122
 
123
  // Make sure welcome page is always first page to view.
124
- if ( 'toplevel_page_optin-monster-api-settings' === $screen->id ) {
 
125
  // If We don't have the OM API Key set, and the "Bypass welcome screen" query string isn't set
126
  if ( ! $this->base->get_api_credentials() && ! isset( $_GET['om-bypass-api-check'] ) ) {
127
- die( wp_redirect( 'admin.php?page=optin-monster-api-welcome' ) );
128
  }
129
  }
130
  }
@@ -147,31 +146,29 @@ class OMAPI_Welcome {
147
 
148
  $options = $this->base->get_option();
149
 
150
- //Check for the new option
151
- if ( ! empty( $options['welcome']['status'] ) ){
152
 
153
  // Check if they have been welcomed
154
  if ( 'none' === $options['welcome']['status'] ) {
155
 
156
  // Update the option.
157
  $options['welcome']['status'] = 'welcomed';
158
- update_option('optin_monster_api', $options );
159
 
160
  // If this was not a bulk activate send them to the page
161
  if ( ! isset( $_GET['activate-multi'] ) ) {
162
  // Only redirect if no trial is found.
163
  $trial = $this->base->menu->has_trial_link();
164
  if ( ! $trial ) {
165
- wp_redirect( 'admin.php?page=optin-monster-api-welcome' );
166
  }
167
  }
168
-
169
  }
170
-
171
  } else {
172
- //welcome option didn't exist so must be pre-existing user updating
173
  $options['welcome']['status'] = 'welcomed';
174
- update_option('optin_monster_api', $options );
175
  }
176
 
177
  }
@@ -182,159 +179,70 @@ class OMAPI_Welcome {
182
  * @since 1.1.4.2
183
  */
184
  public function register_welcome_page() {
185
- $slug = 'optin-monster-api-welcome';
186
  $is_current = isset( $_GET['page'] ) && $slug === $_GET['page'];
187
 
188
  $this->hook = add_submenu_page(
189
- $is_current ? 'optin-monster-api-settings' : 'optin-monster-api-settings-no-menu', //parent slug
190
- esc_html__( 'Welcome to OptinMonster', 'optin-monster-api' ), //page title,
191
  esc_html__( 'Welcome', 'optin-monster-api' ),
192
- apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $slug ), //cap
193
- $slug, //slug
194
- array( $this, 'callback_to_display_page' ) //callback
195
  );
196
 
197
  // Load settings page assets.
198
  if ( $this->hook ) {
 
199
  add_action( 'load-' . $this->hook, array( $this, 'assets' ) );
200
  }
201
 
202
  }
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  /**
205
  * Outputs the OptinMonster settings page.
206
  *
207
  * @since 1.1.4.2
208
  */
209
  public function callback_to_display_page() {
 
 
 
 
 
 
 
210
 
211
- $text = $this->base->menu->has_trial_link() ? esc_html__( 'Get Started for Free', 'optin-monster-api' ) : esc_html__( 'Get OptinMonster Now', 'optin-monster-api' );
212
- $link = esc_url( $this->base->menu->get_action_link() );
213
- $api_link = esc_url_raw( admin_url( 'admin.php?page=optin-monster-api-settings&om-bypass-api-check=true' ) );
214
- ?>
215
- <div class="omapi-welcome-content">
216
- <div class="inner-container">
217
- <h1><?php esc_html_e( 'Welcome to OptinMonster', 'optin-monster-api' ); ?></h1>
218
-
219
- <div class="omapi-well welcome-connect">
220
- <p><?php esc_html_e( 'Please connect to or create an OptinMonster account to start using OptinMonster. This will enable you to start turning website visitors into subscribers & customers.', 'optin-monster-api' ); ?></p>
221
- <div class="actions">
222
- <a class="button button-omapi-green button-hero" href="<?php echo $link; ?>" target="_blank"><?php echo $text; ?></a>
223
- <span class="or">or</span>
224
- <a class="button button-omapi-gray button-hero" href="<?php echo $api_link; ?>"><?php esc_html_e( 'Connect Your Account', 'optin-monster-api' ) ?></a>
225
- </div>
226
- </div>
227
- <div id="js__omapi-video-well" class="omapi-well welcome-data-vid">
228
- <h2><?php esc_html_e( 'Get More Email Subscribers, FAST!', 'optin-monster-api' ); ?></h2>
229
- <p><?php esc_html_e( 'OptinMonster helps you convert abandoning website visitors into email subscribers with smart web forms and behavior personalization.', 'optin-monster-api' ); ?></p>
230
- <div class="actions">
231
- <a id="js_omapi-welcome-video-link" class="omapi-video-link" href="https://www.youtube.com/embed/jbP9C9bQtv4?rel=0&amp;controls=0&amp;showinfo=0&amp;autoplay=1">
232
- <img width="188" src="<?php echo plugins_url( '/assets/css/images/video-cta-button.png', OMAPI_FILE ) ?>">
233
- </a>
234
- </div>
235
- <div class="omapi-welcome-video-holder">
236
- <iframe id="js__omapi-welcome-video-frame" width="640" height="360" src="" frameborder="0" allowfullscreen></iframe>
237
- </div>
238
- </div>
239
-
240
- <div class="omapi-sub-title">
241
- <h2><?php esc_html_e( 'Top 4 Reasons Why People Love OptinMonster', 'optin-monster-api' ); ?></h2>
242
- <p><?php esc_html_e( 'Here\'s why smart business owners love OptinMonster, and you will too!', 'optin-monster-api' ); ?></p>
243
- </div>
244
- <div class="divider"></div>
245
-
246
- <div class="omapi-feature-box omapi-clear">
247
- <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-builder.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Form Builder', 'optin-monster-api' ); ?>" /></div>
248
- <div class="omapi-feature-text">
249
- <h3><?php esc_html_e( 'Build high converting forms in minutes, not hours', 'optin-monster-api' ); ?></h3>
250
- <p><?php esc_html_e( 'Create visually stunning optin forms that are optimized for the highest conversion rates.', 'optin-monster-api' ); ?></p>
251
- <p><?php esc_html_e( 'You can create various types of optin forms such as lightbox popups, floating bars, slide-ins, and more.', 'optin-monster-api' ); ?></p>
252
- </div>
253
- </div>
254
-
255
- <div class="omapi-feature-box omapi-clear">
256
- <div class="omapi-feature-text">
257
- <h3><?php esc_html_e( 'Convert abandoning visitors into subscribers & customers', 'optin-monster-api' ); ?></h3>
258
- <p><?php esc_html_e( 'Did you know that over 70% of visitors who abandon your website will never return?', 'optin-monster-api' ); ?></p>
259
- <p><?php esc_html_e( 'Our exit-intent&reg; technology detects user behavior and prompts them with a targeted campaign at the precise moment they are about to leave.', 'optin-monster-api' ); ?></p>
260
- </div>
261
- <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-exit-animated.gif', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Exit Intent Technology', 'optin-monster-api' ); ?>" /></div>
262
- </div>
263
-
264
- <div class="omapi-feature-box omapi-clear">
265
- <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-ab-testing.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster uses smart A/B testing', 'optin-monster-api' ); ?>" /></div>
266
- <div class="omapi-feature-text">
267
- <h3><?php esc_html_e( 'Easily A/B test your ideas and increase conversions', 'optin-monster-api' ); ?></h3>
268
- <p><?php esc_html_e( 'A/B testing helps you eliminate the guess work and make data-driven decisions on what works best.', 'optin-monster-api' ); ?></p>
269
- <p><?php esc_html_e( 'Try different content, headlines, layouts, and styles to see what converts best with our smart and easy to use A/B testing tool.', 'optin-monster-api' ); ?></p>
270
- </div>
271
- </div>
272
-
273
- <div class="omapi-feature-box omapi-clear">
274
- <div class="omapi-feature-text">
275
- <h3><?php esc_html_e( 'Measuring your results has never been easier', 'optin-monster-api' ); ?></h3>
276
- <p><?php esc_html_e( 'Get the stats that matter and take action to imrpove your lead-generation strategy.', 'optin-monster-api' ); ?></p>
277
- <p><?php esc_html_e( 'Our built-in analytics help you analyze clicks, views, and overall conversion rates for each page and optin form.', 'optin-monster-api' ); ?></p>
278
- </div>
279
- <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-analytics.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Segmenting with Page Level Targeting', 'optin-monster-api' ); ?>" /></div>
280
- </div>
281
-
282
- <div class="omapi-single-cta">
283
- <a class="button button-omapi-green button-hero" href="<?php echo $link; ?>" target="_blank"><?php echo $text; ?></a>
284
- </div>
285
- <div class="omapi-well welcome-featuredin">
286
- <h2><?php esc_html_e( 'OptinMonster has been featured in:', 'optin-monster-api' ); ?></h2>
287
- <img src="<?php echo plugins_url( '/assets/css/images/featured-logos.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster has been featured in Inc., Forbes, VB, Yahoo, Entrepreneur, Huff Post, and more', 'optin-monster-api' ); ?>" />
288
- </div>
289
-
290
- <div class="omapi-reviews">
291
- <div class="omapi-well omapi-mini-well">
292
- <div class="omapi-talking-head">
293
- <img src="<?php echo plugins_url( '/assets/css/images/michaelstelzner.png', OMAPI_FILE ); ?>">
294
- </div>
295
- <p class="ompai-review">
296
- <?php _e( '<strong>We added more than 95,000 names to our email list</strong> using OptinMonster\'s Exit Intent&reg; technology. We strongly recommend it!', 'optin-monster-api' ); ?>
297
- <span class="reviewer-name"><?php esc_html_e( 'Michael Stelzner', 'optin-monster-api' ); ?></span>
298
- <span class="reviewer-title"><?php esc_html_e( 'Founder Social Media Examiner', 'optin-monster-api' ); ?></span>
299
- </p>
300
- </div>
301
- <div class="omapi-well omapi-mini-well">
302
- <div class="omapi-talking-head">
303
- <img src="<?php echo plugins_url( '/assets/css/images/neilpatel.png', OMAPI_FILE ); ?>">
304
- </div>
305
- <p class="ompai-review">
306
- <?php _e( 'Exit Intent&reg; popups have doubled my email opt-in rate. <strong>When done right, you can see an instant 10% lift on driving sales.</strong> I highly recommend that you use OptinMonster for growing your email list and sales.', 'optin-monster-api' ); ?>
307
- <span class="reviewer-name"><?php esc_html_e( 'Neil Patel', 'optin-monster-api' ); ?></span>
308
- <span class="reviewer-title"><?php esc_html_e( 'Founder QuickSprout', 'optin-monster-api' ); ?></span>
309
- </p>
310
- </div>
311
- <div class="omapi-well omapi-mini-well">
312
- <div class="omapi-talking-head">
313
- <img src="<?php echo plugins_url( '/assets/css/images/matthewwoodward.png', OMAPI_FILE ); ?>">
314
- </div>
315
- <p class="ompai-review">
316
- <?php _e( 'OptinMonster played a critical role in increasing my email optin conversion rate by 469%. In real numbers, <strong>that is the difference between $7,765 and $47,748 per month.</strong>', 'optin-monster-api' ); ?>
317
- <span class="reviewer-name"><?php esc_html_e( 'Matthew Woodward', 'optin-monster-api' ); ?></span>
318
- <span class="reviewer-title"><?php esc_html_e( 'SEO Expert', 'optin-monster-api' ); ?></span>
319
- </p>
320
- </div>
321
- </div>
322
-
323
- <div class="omapi-well welcome-connect">
324
- <p><?php esc_html_e( 'Join the thousands of users who use OptinMonster to convert abandoning website visitors into subscribers and customers.', 'optin-monster-api' ); ?></p>
325
- <div class="actions">
326
- <a class="button button-omapi-green button-hero" href="<?php echo $link; ?>" target="_blank"><?php echo $text; ?></a>
327
- <span class="or">or</span>
328
- <a class="button button-omapi-gray button-hero" href="<?php echo $api_link; ?>"><?php esc_html_e( 'Connect Your Account', 'optin-monster-api' ) ?></a>
329
- </div>
330
- </div>
331
-
332
- </div>
333
-
334
- </div>
335
-
336
- <?php
337
 
 
 
 
 
 
 
 
 
338
  }
339
 
340
  /**
@@ -354,10 +262,10 @@ class OMAPI_Welcome {
354
  );
355
 
356
  global $wp_meta_boxes;
357
- $normal_dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
358
  $example_widget_backup = array( 'optin_monster_db_widget' => $normal_dashboard['optin_monster_db_widget'] );
359
  unset( $normal_dashboard['optin_monster_db_widget'] );
360
- $sorted_dashboard = array_merge( $example_widget_backup, $normal_dashboard );
361
  $wp_meta_boxes['dashboard']['normal']['core'] = $sorted_dashboard;
362
  }
363
 
@@ -398,7 +306,7 @@ class OMAPI_Welcome {
398
  */
399
  public function styles() {
400
 
401
- wp_register_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/css/settings.css', OMAPI_FILE ), array(), $this->base->version );
402
  wp_enqueue_style( $this->base->plugin_slug . '-settings' );
403
 
404
  }
@@ -410,7 +318,7 @@ class OMAPI_Welcome {
410
  .on( 'click', function ( e ) {
411
  e.preventDefault();
412
  jQuery( this ).parents( '#js__omapi-video-well' ).addClass( 'active' );
413
- jQuery( '#js__omapi-welcome-video-frame' ).prop( 'src', jQuery( e.currentTarget ).attr( 'href' ) );
414
  })
415
  </script>
416
  <?php
@@ -426,11 +334,43 @@ class OMAPI_Welcome {
426
  */
427
  public function footer( $text ) {
428
 
429
- $new_text = sprintf( __( 'Thank you for using <a href="%1$s" target="_blank">OptinMonster</a>!', 'optin-monster-api' ),
 
430
  'https://optinmonster.com'
431
  );
432
  return str_replace( '</span>', '', $text ) . ' | ' . $new_text . '</span>';
433
 
434
  }
435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
436
  }
68
  }
69
 
70
  // If user is in admin ajax or doing cron, return.
71
+ if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
72
  return;
73
  }
74
 
85
  // Set our object.
86
  $this->set();
87
 
88
+ // Load the Welcome screen
89
+ add_action( 'admin_menu', array( $this, 'register_welcome_page' ) );
90
 
91
+ // maybe redirect
92
  add_action( 'admin_init', array( $this, 'maybe_welcome_redirect' ) );
93
 
94
+ // maybe add body classes
95
  add_action( 'current_screen', array( $this, 'welcome_screen_helpers' ) );
96
 
97
  // Maybe load a dashboard widget.
114
  public function welcome_screen_helpers() {
115
 
116
  $screen = get_current_screen();
117
+ if ( 'optinmonster_page_optin-monster-api-welcome' === $screen->id ) {
 
 
118
  add_filter( 'admin_body_class', array( $this, 'add_body_classes' ) );
119
  }
120
 
121
  // Make sure welcome page is always first page to view.
122
+ if ( 'toplevel_page_' . $this->base->menu->parent_slug() === $screen->id ) {
123
+
124
  // If We don't have the OM API Key set, and the "Bypass welcome screen" query string isn't set
125
  if ( ! $this->base->get_api_credentials() && ! isset( $_GET['om-bypass-api-check'] ) ) {
126
+ $this->redirect_to();
127
  }
128
  }
129
  }
146
 
147
  $options = $this->base->get_option();
148
 
149
+ // Check for the new option
150
+ if ( ! empty( $options['welcome']['status'] ) ) {
151
 
152
  // Check if they have been welcomed
153
  if ( 'none' === $options['welcome']['status'] ) {
154
 
155
  // Update the option.
156
  $options['welcome']['status'] = 'welcomed';
157
+ update_option( 'optin_monster_api', $options );
158
 
159
  // If this was not a bulk activate send them to the page
160
  if ( ! isset( $_GET['activate-multi'] ) ) {
161
  // Only redirect if no trial is found.
162
  $trial = $this->base->menu->has_trial_link();
163
  if ( ! $trial ) {
164
+ $this->redirect_to();
165
  }
166
  }
 
167
  }
 
168
  } else {
169
+ // welcome option didn't exist so must be pre-existing user updating
170
  $options['welcome']['status'] = 'welcomed';
171
+ update_option( 'optin_monster_api', $options );
172
  }
173
 
174
  }
179
  * @since 1.1.4.2
180
  */
181
  public function register_welcome_page() {
182
+ $slug = 'optin-monster-api-welcome';
183
  $is_current = isset( $_GET['page'] ) && $slug === $_GET['page'];
184
 
185
  $this->hook = add_submenu_page(
186
+ $is_current ? 'optin-monster-api-settings' : 'optin-monster-api-settings-no-menu', // parent slug
187
+ esc_html__( 'Welcome to OptinMonster', 'optin-monster-api' ), // page title,
188
  esc_html__( 'Welcome', 'optin-monster-api' ),
189
+ apply_filters( 'optin_monster_api_menu_cap', 'manage_options', $slug ), // cap
190
+ $slug, // slug
191
+ array( $this, 'callback_to_display_page' ) // callback
192
  );
193
 
194
  // Load settings page assets.
195
  if ( $this->hook ) {
196
+ add_action( 'load-' . $this->hook, array( $this, 'maybe_redirect' ) );
197
  add_action( 'load-' . $this->hook, array( $this, 'assets' ) );
198
  }
199
 
200
  }
201
 
202
+ /**
203
+ * If user already has credentials set, redirect them to the main page.
204
+ *
205
+ * @since 1.9.10
206
+ *
207
+ * @return void
208
+ */
209
+ public function maybe_redirect() {
210
+ if ( $this->base->get_api_credentials() ) {
211
+ $this->base->menu->redirect_to_dashboard();
212
+ }
213
+ }
214
+
215
  /**
216
  * Outputs the OptinMonster settings page.
217
  *
218
  * @since 1.1.4.2
219
  */
220
  public function callback_to_display_page() {
221
+ wp_enqueue_script(
222
+ $this->base->plugin_slug . '-connect',
223
+ $this->base->url . 'assets/dist/js/connect.min.js',
224
+ array( 'jquery' ),
225
+ $this->base->asset_version(),
226
+ true
227
+ );
228
 
229
+ wp_localize_script(
230
+ $this->base->plugin_slug . '-connect',
231
+ 'OMAPI',
232
+ array(
233
+ 'app_url' => trailingslashit( OPTINMONSTER_APP_URL ),
234
+ 'blogname' => esc_attr( get_option( 'blogname' ) ),
235
+ )
236
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
+ $this->base->output_view(
239
+ 'welcome.php',
240
+ array(
241
+ 'button_text' => $this->base->menu->has_trial_link() ? __( 'Get Started for Free', 'optin-monster-api' ) : __( 'Get OptinMonster Now', 'optin-monster-api' ),
242
+ 'button_link' => esc_url( $this->base->menu->get_action_link() ),
243
+ 'api_link' => esc_url_raw( admin_url( 'admin.php?page=' . $this->base->menu->parent_slug() . '&om-bypass-api-check=true' ) ),
244
+ )
245
+ );
246
  }
247
 
248
  /**
262
  );
263
 
264
  global $wp_meta_boxes;
265
+ $normal_dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
266
  $example_widget_backup = array( 'optin_monster_db_widget' => $normal_dashboard['optin_monster_db_widget'] );
267
  unset( $normal_dashboard['optin_monster_db_widget'] );
268
+ $sorted_dashboard = array_merge( $example_widget_backup, $normal_dashboard );
269
  $wp_meta_boxes['dashboard']['normal']['core'] = $sorted_dashboard;
270
  }
271
 
306
  */
307
  public function styles() {
308
 
309
+ wp_register_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/dist/css/settings.min.css', OMAPI_FILE ), array(), $this->base->asset_version() );
310
  wp_enqueue_style( $this->base->plugin_slug . '-settings' );
311
 
312
  }
318
  .on( 'click', function ( e ) {
319
  e.preventDefault();
320
  jQuery( this ).parents( '#js__omapi-video-well' ).addClass( 'active' );
321
+ jQuery( '#js__omapi-welcome-video-frame' ).show().prop( 'src', jQuery( e.currentTarget ).attr( 'href' ) );
322
  })
323
  </script>
324
  <?php
334
  */
335
  public function footer( $text ) {
336
 
337
+ $new_text = sprintf(
338
+ __( 'Thank you for using <a href="%1$s" target="_blank">OptinMonster</a>!', 'optin-monster-api' ),
339
  'https://optinmonster.com'
340
  );
341
  return str_replace( '</span>', '', $text ) . ' | ' . $new_text . '</span>';
342
 
343
  }
344
 
345
+ /**
346
+ * Get the OM welcome url.
347
+ *
348
+ * @since 1.9.10
349
+ *
350
+ * @return string
351
+ */
352
+ public function get_link() {
353
+ return $this->base->menu->admin_page_url(
354
+ array(
355
+ 'page' => 'optin-monster-api-welcome',
356
+ )
357
+ );
358
+ }
359
+
360
+ /**
361
+ * Redirect to the welcome page.
362
+ *
363
+ * @since 1.9.10
364
+ *
365
+ * @return void
366
+ */
367
+ public function redirect_to() {
368
+ $this->base->menu->redirect_to_dashboard(
369
+ '',
370
+ array(
371
+ 'page' => 'optin-monster-api-welcome',
372
+ )
373
+ );
374
+ }
375
+
376
  }
OMAPI/Widget.php CHANGED
@@ -57,18 +57,20 @@ class OMAPI_Widget extends WP_Widget {
57
  // Load the base class object.
58
  $this->base = OMAPI::get_instance();
59
 
60
- $widget_ops = apply_filters( 'optin_monster_api_widget_ops',
 
61
  array(
62
  'classname' => 'optin-monster-api',
63
- 'description' => esc_html__( 'Place an OptinMonster campaign into a widgetized area.', 'optin-monster-api' )
64
  )
65
  );
66
 
67
- $control_ops = apply_filters( 'optin_monster_api_widget_control_ops',
 
68
  array(
69
  'id_base' => 'optin-monster-api',
70
  'height' => 350,
71
- 'width' => 225
72
  )
73
  );
74
 
@@ -124,9 +126,13 @@ class OMAPI_Widget extends WP_Widget {
124
  }
125
 
126
  // Load the optin.
127
- optin_monster( $optin->ID, 'id', array(
128
- 'followrules' => ! empty( $instance['followrules'] ) ? 'true' : 'false',
129
- ) );
 
 
 
 
130
  }
131
 
132
  do_action( 'optin_monster_api_widget_after_optin', $args, $instance );
57
  // Load the base class object.
58
  $this->base = OMAPI::get_instance();
59
 
60
+ $widget_ops = apply_filters(
61
+ 'optin_monster_api_widget_ops',
62
  array(
63
  'classname' => 'optin-monster-api',
64
+ 'description' => esc_html__( 'Place an OptinMonster campaign into a widgetized area.', 'optin-monster-api' ),
65
  )
66
  );
67
 
68
+ $control_ops = apply_filters(
69
+ 'optin_monster_api_widget_control_ops',
70
  array(
71
  'id_base' => 'optin-monster-api',
72
  'height' => 350,
73
+ 'width' => 225,
74
  )
75
  );
76
 
126
  }
127
 
128
  // Load the optin.
129
+ optin_monster(
130
+ $optin->ID,
131
+ 'id',
132
+ array(
133
+ 'followrules' => ! empty( $instance['followrules'] ) ? 'true' : 'false',
134
+ )
135
+ );
136
  }
137
 
138
  do_action( 'optin_monster_api_widget_after_optin', $args, $instance );
assets/css/images/constant-contact-OM.png ADDED
Binary file
assets/css/images/constant_OM.png DELETED
Binary file
assets/css/images/dashboard-icon.png CHANGED
File without changes
assets/css/images/featured-logos.png CHANGED
File without changes
assets/css/images/features-ab-testing.png CHANGED
File without changes
assets/css/images/features-analytics.png CHANGED
File without changes
assets/css/images/features-builder.png CHANGED
File without changes
assets/css/images/features-exit-animated.gif CHANGED
File without changes
assets/css/images/logo-color-large.png CHANGED
File without changes
assets/css/images/logo-color-large@2x.png CHANGED
File without changes
assets/css/images/matthewwoodward.png CHANGED
File without changes
assets/css/images/menu-icon@2x.png CHANGED
File without changes
assets/css/images/michaelstelzner.png CHANGED
File without changes
assets/css/images/neilpatel.png CHANGED
File without changes
assets/css/images/omapi-graph.png CHANGED
File without changes
assets/css/images/title-icon@2x.png CHANGED
File without changes
assets/css/images/video-cta-button.png CHANGED
File without changes
assets/css/select2-spinner.gif CHANGED
File without changes
assets/css/select2.min.css CHANGED
File without changes
assets/css/select2.png CHANGED
File without changes
assets/css/select2x2.png CHANGED
File without changes
assets/css/settings.css DELETED
@@ -1,916 +0,0 @@
1
- /* ==========================================================================
2
- Settings Styles
3
- ========================================================================== */
4
-
5
- .omapi-screen div.updated,
6
- .omapi-screen div.error {
7
- margin-top: 15px;
8
- }
9
-
10
- .omapi-hidden {
11
- display: none;
12
- visibility: hidden;
13
- opacity: 0;
14
- height: 0;
15
- line-height: 0;
16
- }
17
-
18
- .omapi-clear {
19
- clear: both;
20
- }
21
-
22
- .omapi-clear:after {
23
- clear: both;
24
- content: '.';
25
- display: block;
26
- height: 0;
27
- line-height: 0;
28
- overflow: auto;
29
- visibility: hidden;
30
- zoom: 1;
31
- }
32
-
33
- .omapi-red {
34
- color: red !important;
35
- }
36
-
37
- .omapi-green {
38
- color: green !important;
39
- }
40
- /* Remove default WP padding */
41
- .omapi-screen #wpcontent {
42
- padding-left: 0;
43
- }
44
- .omapi-screen h2 {
45
- padding-right: 0 !important;
46
- }
47
-
48
- .omapi-screen h2 span {
49
- font-size: 13px;
50
- color: #666;
51
- }
52
-
53
- /* Static Banner */
54
- .omapi-screen .omapi-static-banner {
55
- background: #0d82df;
56
- height: 50px;
57
- line-height: 1;
58
- }
59
- .omapi-static-banner .logo-wrapper {
60
- padding: 12px 0;
61
- line-height: 1;
62
- display: inline-block;
63
- }
64
- .omapi-static-banner .omapi-svg-logo {
65
- height: 24px;
66
- width: 159px;
67
- }
68
- .logo-wrapper span.omapi-logo-version {
69
- color: #fff;
70
- vertical-align: middle;
71
- margin-bottom: 10px;
72
- margin-left: 5px;
73
- display: inline-block;
74
- }
75
- .omapi-screen .static-menu {
76
- float: right;
77
- }
78
- .omapi-screen .static-menu ul {
79
- margin: 0;
80
- }
81
- .omapi-screen .static-menu ul li {
82
- display: inline-block;
83
- padding: 18px 0;
84
- margin: 0;
85
- font-size: 14px;
86
- }
87
- .omapi-screen .static-menu ul li:last-of-type {
88
- padding-right: 0;
89
- }
90
- .omapi-screen .static-menu ul li a {
91
- text-decoration: none;
92
- color: #fff;
93
- font-size: 13px;
94
- font-weight: 400;
95
- letter-spacing: .04em;
96
- padding: 5px 10px;
97
- }
98
- /* Cleaner screen even when updates needed */
99
- .omapi-screen .update-nag{
100
- display: none;
101
- }
102
- /* Only shown on main plugin view */
103
- .omapi-screen .static-menu ul li.omapi-menu-button {
104
- padding: 0 !important;
105
- margin-top: -3px !important;
106
- vertical-align: middle;
107
- margin-left: 10px;
108
- }
109
- .omapi-screen #omapi-create-new-optin-button {
110
- padding: 0 10px;
111
- background: #83c11f;
112
- box-shadow: none;
113
- border: 0;
114
- }
115
- .omapi-screen #omapi-create-new-optin-button:hover {
116
- color: #f5f5f5;
117
- }
118
- .omapi-screen .static-menu ul li a:hover {
119
- background: rgba(0, 0, 0, 0.08);
120
- }
121
-
122
- .omapi-screen .omapi-static-banner .inner-container {
123
- padding: 0 1.2rem;
124
- max-width: 100%;
125
- }
126
-
127
- /* Welcome Page*/
128
- body.omapi-welcome {
129
- background: #f3f6f8;
130
- }
131
- .omapi-welcome-content a.button.button-hero {
132
- line-height: 50px;
133
- height: 50px;
134
- }
135
- .omapi-welcome-content a.button.button-hero.button-omapi-green {
136
- background: #83c11f;
137
- color: #fff;
138
- text-transform: uppercase;
139
- letter-spacing: .05em;
140
- font-weight: 400;
141
- border-color: #659519;
142
- box-shadow: none;
143
- }
144
- .omapi-welcome .inner-container {
145
- max-width: 45rem;
146
- margin: 0 auto;
147
- padding: 0;
148
- }
149
- .omapi-welcome .logo-wrapper span.omapi-logo-version {
150
- display: none;
151
- }
152
- .omapi-welcome-content h1 {
153
- font-weight: 400;
154
- color: #23282d;
155
- text-align: center;
156
- margin: 44px 0;
157
- margin-bottom: 30px;
158
- }
159
- .omapi-welcome-content .omapi-sub-title {
160
- text-align: center;
161
- padding-top: 30px;
162
- padding-bottom: 20px;
163
- }
164
- .omapi-welcome-content h2 {
165
- color: #23282d;
166
- }
167
- .omapi-welcome-content p {
168
- font-size: 16px;
169
- font-weight: 300;
170
- color: #444;
171
- margin: 10px 0;
172
- }
173
- .omapi-welcome-content .divider {
174
- height: 1px;
175
- background: #dee4e9;
176
- box-shadow: 0px 0px 1px #e8edf0;
177
- width: 320px;
178
- margin: 0 auto;
179
- }
180
- .omapi-welcome-content .welcome-connect .actions {
181
- margin: 40px 0;
182
- margin-bottom: 8px;
183
- }
184
-
185
- .omapi-welcome-content .omapi-well span.or {
186
- padding: 1em;
187
- text-align: center;
188
- vertical-align: middle;
189
- display: inline-block;
190
- }
191
- .omapi-welcome-content .welcome-data-vid {
192
- background-image: url(images/omapi-graph.png);
193
- background-size: contain;
194
- background-position-y: bottom;
195
- min-height: 338px;
196
- background-repeat: no-repeat;
197
- position: relative;
198
- }
199
- .omapi-welcome-content .welcome-data-vid.active {
200
- background-image: none;
201
- }
202
- .omapi-welcome-content .welcome-data-vid .actions {
203
- margin-top: 45px;
204
- z-index: 200;
205
- position: relative;
206
- }
207
- .omapi-welcome-content .welcome-data-vid.active .actions {
208
- display: none;
209
- }
210
- .omapi-welcome-content .omapi-welcome-video-holder {
211
- height: 1px;
212
- margin: 0 auto;
213
- width: 100%;
214
- }
215
- .omapi-welcome-content .welcome-data-vid.active .omapi-welcome-video-holder {
216
- height: auto;
217
- }
218
-
219
-
220
- .omapi-welcome-content .omapi-feature-box {
221
- margin: 50px 0;
222
- }
223
- .omapi-welcome-content .omapi-feature-image,
224
- .omapi-welcome-content .omapi-feature-text {
225
- width: 47%;
226
- display: inline-block;
227
- vertical-align: middle;
228
- }
229
-
230
- .omapi-welcome-content .omapi-feature-image img {
231
- max-width: 100%;
232
- height: auto;
233
- }
234
- .omapi-welcome-content .omapi-feature-text p {
235
- font-size: 14px;
236
- }
237
- .omapi-welcome-content .omapi-feature-text {
238
- margin-left: 5%;
239
- }
240
- .omapi-welcome-content .omapi-feature-box:nth-of-type(even) .omapi-feature-image {
241
-
242
- }
243
- .omapi-welcome-content .omapi-feature-box:nth-of-type(even) .omapi-feature-text {
244
- margin-right: 5%;
245
- margin-left: 0;
246
- }
247
-
248
- .omapi-welcome-content .omapi-well img {
249
- max-width: 100%;
250
- }
251
-
252
- .omapi-welcome-content .omapi-single-cta {
253
- margin: 5rem;
254
- text-align: center;
255
- }
256
-
257
- .omapi-welcome-content .welcome-featuredin img {
258
- margin: 40px 0;
259
- width: 475px;
260
- }
261
-
262
- .omapi-welcome-content .welcome-featuredin h2 {
263
- font-size: 20px;
264
- font-weight: 600;
265
- }
266
-
267
- .omapi-welcome-content .omapi-reviews {
268
- display: flex;
269
- flex-direction: row;
270
- }
271
- .omapi-welcome-content .omapi-reviews p {
272
- font-size: 14px;
273
- }
274
- .omapi-welcome-content .omapi-talking-head {
275
- height: 60px;
276
- width: 60px;
277
- margin: 0 auto;
278
- }
279
- .omapi-welcome-content .omapi-reviews span.reviewer-name {
280
- margin-top: 15px;
281
- display: block;
282
- font-weight: 500;
283
- }
284
-
285
- .omapi-welcome-content .omapi-reviews span.reviewer-title {
286
- font-weight: 300;
287
- }
288
-
289
- .omapi-welcome-content .omapi-mini-well {
290
- margin-right: 15px;
291
- flex: 1;
292
- }
293
- .omapi-welcome-content .omapi-mini-well:last-of-type {
294
- margin-right: 0;
295
- }
296
-
297
- /* Keep WordPress Page Styling */
298
- .omapi-page {
299
- padding-left: 20px;
300
- margin-left: 0;
301
- }
302
-
303
- /* Build out UI */
304
- .omapi-screen .inner-container {
305
- max-width: 45rem;
306
- margin: 0 auto;
307
- padding: 0;
308
- }
309
- .omapi-well {
310
- padding: 2.1rem;
311
- text-align: center;
312
- background: #fff;
313
- border: 1px solid #e9eff3;
314
- margin-bottom: 15px;
315
- }
316
- .omapi-well img {
317
- max-width: 100%;
318
- height: auto;
319
- }
320
- .omapi-mini-well {
321
- padding: 1rem;
322
- }
323
-
324
- .omapi-ui {
325
- margin-top: 20px;
326
- background: #f1f1f1;
327
- border: 1px solid #ddd;
328
- border-top: 0;
329
- height: 100%;
330
- width: 100%;
331
- display: inline-block;
332
- }
333
-
334
- .omapi-ui,
335
- .omapi-ui * {
336
- box-sizing: border-box;
337
- -moz-box-sizing: border-box;
338
- -webkit-box-sizing: border-box;
339
- }
340
-
341
- .omapi-tabs {
342
- float: left;
343
- width: 25%;
344
- min-width: 175px;
345
- margin: 0;
346
- background: #fff;
347
- display: inline-block;
348
- height: 100%;
349
- }
350
-
351
- .omapi-panels {
352
- list-style: none;
353
- margin: 0;
354
- padding: 0;
355
- }
356
-
357
- .omapi-panels li {
358
- list-style: none;
359
- padding: 0;
360
- margin: 0;
361
- }
362
-
363
- .omapi-panels li a {
364
- display: block;
365
- padding: 15px 10px;
366
- border-bottom: 1px solid #ddd;
367
- text-decoration: none;
368
- font-size: 16px;
369
- outline: none;
370
- background: #f1f1f1;
371
- }
372
-
373
- .omapi-panels li a:focus {
374
- outline: none !important;
375
- box-shadow: none;
376
- -webkit-box-shadow: none;
377
- }
378
-
379
- .omapi-panels li.omapi-panel-first a {
380
- border-top: 1px solid #ddd;
381
- }
382
-
383
- .omapi-panels li.omapi-panel-active a,
384
- .omapi-panels li a:hover {
385
- background: #ffffff;
386
- }
387
-
388
- .omapi-panels li.omapi-panel-active a {
389
- color: #222;
390
- }
391
-
392
- .omapi-panels li.omapi-panel-button-item {
393
- padding: 20px 10px;
394
- background: #f1f1f1;
395
- }
396
-
397
- .omapi-panels li.omapi-panel-button-item #omapi-create-new-optin-button {
398
- width: 100%;
399
- text-align: center;
400
- }
401
-
402
- .omapi-tabs-content {
403
- float: left;
404
- width: 75%;
405
- border: 1px solid #ddd;
406
- border-bottom: 0;
407
- border-right: 0;
408
- background: #fff;
409
- padding: 15px 30px;
410
- display: inline-block;
411
- /* Match the minimum height of our tabs */
412
- min-height: 197px;
413
- }
414
-
415
- .omapi-content {
416
- display: none;
417
- }
418
-
419
- .omapi-content.omapi-content-active {
420
- display: block;
421
- }
422
-
423
- .omapi-content h3 {
424
- padding: 0;
425
- margin: 0;
426
- }
427
-
428
- .omapi-field-box {
429
- margin: 1.5em 0;
430
- }
431
-
432
- .omapi-field-wrap {
433
- margin: 0;
434
- }
435
-
436
- .omapi-field-box li {
437
- list-style: none;
438
- margin: 0;
439
- }
440
-
441
- .omapi-field-box ul.children {
442
- margin: 1px 0 1px 20px;
443
- }
444
-
445
- .omapi-field-box .wp-hidden-children {
446
- display: none;
447
- }
448
-
449
- .omapi-field-box > div {
450
- max-width: 350px;
451
- }
452
-
453
- .omapi-field-box p.hide-if-no-js,
454
- .omapi-field-box li.hide-if-no-js {
455
- display: none;
456
- }
457
-
458
- .omapi-field-wrap label {
459
- font-size: 14px;
460
- font-weight: 600;
461
- margin-bottom: 2px;
462
- }
463
-
464
- .omapi-field-wrap input[type=email],
465
- .omapi-field-wrap input[type=number],
466
- .omapi-field-wrap input[type=password],
467
- .omapi-field-wrap input[type=search],
468
- .omapi-field-wrap input[type=text],
469
- .omapi-field-wrap select {
470
- min-width: 350px;
471
- padding: 6px 8px;
472
- }
473
-
474
- .omapi-field-box .select2-container {
475
- min-width: 350px;
476
- }
477
-
478
- .omapi-field-wrap textarea {
479
- width: 100%;
480
- padding: 6px 8px;
481
- }
482
-
483
- .omapi-field-wrap .omapi-field-desc {
484
- font-size: 12px;
485
- font-style: italic;
486
- font-weight: normal;
487
- color: #666;
488
- vertical-align: middle;
489
- margin-bottom: 0;
490
- }
491
-
492
- .omapi-back {
493
- float: right;
494
- font-size: 13px;
495
- font-weight: normal;
496
- }
497
-
498
- .omapi-optin {
499
- padding: 20px 27px 20px 10px;
500
- border-bottom: 1px solid #eee;
501
- font-size: 15px;
502
- margin: 0;
503
- }
504
-
505
- .omapi-optin-first {
506
- border-top: 1px solid #eee;
507
- margin-top: 1em;
508
- }
509
-
510
- .omapi-optin.omapi-test-mode {
511
- background: #fcf8e3 !important;
512
- }
513
-
514
- .omapi-optin a {
515
- text-decoration: none;
516
- border-bottom: 0 none;
517
- }
518
-
519
- .omapi-optin .omapi-test {
520
- color: #8a6d3b;
521
- font-size: 11px;
522
- text-transform: uppercase;
523
- font-weight: 700;
524
- }
525
-
526
- .omapi-optin .omapi-status,
527
- .omapi-optin .omapi-slug {
528
- float: right;
529
- }
530
-
531
- .omapi-optin .omapi-slug {
532
- font-size: 13px;
533
- color: #999;
534
- margin-top: 3px;
535
- }
536
-
537
- .omapi-optin .omapi-links,
538
- .omapi-optin .omapi-links a {
539
- font-size: 12px;
540
- }
541
-
542
- /* Inline Note */
543
- .omapi-inline-notice .omapi-notice-title {
544
- font-size: 14px;
545
- font-weight: 600;
546
- margin-bottom: 2px;
547
- margin-top: 0;
548
- }
549
-
550
- .omapi-inline-notice .omapi-field-desc {
551
- margin: 0;
552
- margin-bottom: 5px;
553
- }
554
-
555
- .omapi-inline-notice {
556
- padding: 15px 0;
557
- position: relative;
558
- border: 1px solid #ddd;
559
- border-left: 0;
560
- border-right: 0;
561
- }
562
-
563
-
564
-
565
- /* Toggler */
566
- .omapi-ui-toggle-controller {
567
- margin-right: 8px;
568
- cursor: pointer;
569
- margin: 1.5em 0;
570
- font-size: 13px;
571
- position: relative;
572
- }
573
- .omapi-ui-toggle-controller .omapi-field-desc {
574
- padding-left: 25px;
575
- }
576
- .omapi-ui-toggle-controller:after {
577
- content: "\f132";
578
- position: absolute;
579
- height: 15px;
580
- width: 20px;
581
- top: 24px;
582
- left: -2px;
583
- font-size: 20px;
584
- line-height: 1;
585
- font-family: dashicons;
586
- }
587
- .omapi-ui-toggle-controller.toggled:after {
588
- content: '\f460';
589
- position: absolute;
590
- height: 15px;
591
- width: 20px;
592
- top: 23px;
593
- left: -2px;
594
- font-size: 20px;
595
- line-height: 1;
596
- font-family: dashicons;
597
- }
598
-
599
- .omapi-ui-toggle-content {
600
- display: none;
601
- }
602
- .visible.omapi-ui-toggle-content {
603
- display: block;
604
- }
605
-
606
- .omapi-video-container {
607
- position: relative;
608
- padding-bottom: 50%;
609
- padding-top: 25px;
610
- height: 0;
611
- }
612
- .omapi-video-container iframe {
613
- position: absolute;
614
- top: 0;
615
- left: 0;
616
- width: 100%;
617
- height: 100%;
618
- }
619
- .omapi-support-links {
620
- width: 40%;
621
- margin-top: 1.25em;
622
- display: inline-block;
623
- }
624
- .omapi-support-links li {
625
- font-size: 15px;
626
- }
627
- .omapi-support-data {
628
- width: 60%;
629
- display: inline-block;
630
- }
631
- .omapi-half-column {
632
- margin-top: 1.25em;
633
- }
634
-
635
- @media all and (min-width: 1400px){
636
- .omapi-half-column {
637
- width: 50%;
638
- display: inline-block;
639
- float: left;
640
- }
641
- .omapi-support-links,
642
- .omapi-support-data {
643
- width: calc(50% - 30px);
644
- margin-left: 30px;
645
- float: right;
646
- }
647
- }
648
-
649
- .omapi-copy-button.button {
650
- margin-left: 10px;
651
- }
652
-
653
-
654
-
655
- /* DatePicker Container */
656
- .ui-datepicker {
657
- width: auto;
658
- height: auto;
659
- margin: 5px auto 0;
660
- font: 9pt Arial, sans-serif;
661
- -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, .5);
662
- box-shadow: 0 1px 4px 1px rgba(0, 0, 0, .4);
663
- background-color: #eee;
664
- border: 1px solid #ddd;
665
- }
666
- .ui-datepicker a {
667
- text-decoration: none;
668
- position: relative;
669
- }
670
-
671
- .ui-datepicker table {
672
- width: 100%;
673
- padding: 0px;
674
- }
675
- .ui-datepicker-header {
676
- color: #e0e0e0;
677
- font-weight: bold;
678
- -webkit-box-shadow: inset 0 1px 1px 0 rgba(250, 250, 250, 2);
679
- box-shadow: inset 0 1px 1px 0 rgba(250, 250, 250, .2);
680
- text-shadow: 1px -1px 0px #000;
681
- line-height: 30px;
682
- border-width: 1px 0 0 0;
683
- border-style: solid;
684
- border-color: #444;
685
- }
686
- .ui-datepicker-title {
687
- text-align: center;
688
- background: #444;
689
- }
690
- .ui-datepicker-prev, .ui-datepicker-next {
691
- display: inline-block;
692
- width: 30px;
693
- height: 30px;
694
- text-align: center;
695
- cursor: pointer;
696
- overflow: hidden;
697
- padding-right: 10px;
698
- padding-left: 10px;
699
- color: #FFF;
700
- text-indent: 100%;
701
- }
702
- .ui-datepicker-prev {
703
- float: left;
704
- }
705
- .ui-datepicker-next {
706
- float: right;
707
- }
708
- .ui-datepicker-prev:before {
709
- content: '<';
710
- position: absolute;
711
- left: -10px;
712
- height: 10px;
713
- width: 10px;
714
- }
715
- .ui-datepicker-next:before {
716
- content: '>';
717
- position: absolute;
718
- left: -10px;
719
- height: 10px;
720
- width: 10px;
721
- }
722
- .ui-datepicker thead {
723
- background-color: #f7f7f7;
724
- border-bottom: 1px solid #000;
725
- }
726
- .ui-datepicker th {
727
- text-transform: uppercase;
728
- font-size: 6pt;
729
- padding: 5px 0;
730
- margin-bottom: 1px;
731
- color: #666666;
732
- text-shadow: 1px 0px 0px #fff;
733
- box-shadow: 0px 1px 0px 1px #E0E0E0;
734
- }
735
- .ui-datepicker tbody td {
736
- box-shadow: 0px 1px 0px 1px #E0E0E0;
737
- padding: 0px;
738
- }
739
- .ui-datepicker tbody td:last-child {
740
- border-right: 0px;
741
- }
742
- .ui-datepicker tbody tr {
743
- border-bottom: 1px solid #bbb;
744
- }
745
- .ui-datepicker td span, .ui-datepicker td a {
746
- display: inline-block;
747
- font-weight: bold;
748
- text-align: center;
749
- width: 30px;
750
- height: 30px;
751
- line-height: 30px;
752
- color: #666666;
753
- }
754
- .ui-datepicker-calendar .ui-state-default {
755
- background: #ededed;
756
- }
757
- .ui-datepicker-calendar .ui-state-hover {
758
- background: #8ed41e;
759
- color: #fff;
760
- }
761
- .ui-datepicker-calendar .ui-state-active {
762
- background: #0d82df;
763
- color: #fff;
764
- position: relative;
765
- }
766
- .ui-datepicker-unselectable .ui-state-default {
767
- background: #f4f4f4;
768
- color: #b4b3b3;
769
- }
770
- .ui-datepicker-calendar td:first-child .ui-state-active {
771
- width: 29px;
772
- margin-left: 0;
773
- }
774
- .ui-datepicker-calendar td:last-child .ui-state-active {
775
- width: 29px;
776
- margin-right: 0;
777
- }
778
-
779
- /** Tooltips **/
780
- .omapi-has-tooltip:after {
781
- content: '\f223';
782
- color: #ccc;
783
- position: absolute;
784
- display: inline-block;
785
- width: 17px;
786
- height: 17px;
787
- font-size: 17px;
788
- line-height: 1;
789
- font-family: dashicons;
790
- text-decoration: inherit;
791
- font-weight: 400;
792
- font-style: normal;
793
- vertical-align: middle;
794
- text-align: center;
795
- -webkit-transition: color .1s ease-in 0;
796
- transition: color .1s ease-in 0;
797
- -webkit-font-smoothing: antialiased;
798
- -moz-osx-font-smoothing: grayscale;
799
- padding-left: 3px;
800
- padding-top: 2px;
801
- }
802
-
803
- .tooltip {
804
- position: absolute;
805
- z-index: 1070;
806
- display: block;
807
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
808
- font-style: normal;
809
- font-weight: normal;
810
- letter-spacing: normal;
811
- line-break: auto;
812
- line-height: 1.42857143;
813
- text-align: left;
814
- text-align: start;
815
- text-decoration: none;
816
- text-shadow: none;
817
- text-transform: none;
818
- white-space: normal;
819
- word-break: normal;
820
- word-spacing: normal;
821
- word-wrap: normal;
822
- font-size: 12px;
823
- opacity: 0;
824
- filter: alpha(opacity=0);
825
- }
826
- .tooltip.in {
827
- opacity: 0.9;
828
- filter: alpha(opacity=90);
829
- }
830
- .tooltip.top {
831
- margin-top: -3px;
832
- padding: 5px 0;
833
- }
834
- .tooltip.right {
835
- margin-left: 3px;
836
- padding: 0 5px;
837
- }
838
- .tooltip.bottom {
839
- margin-top: 3px;
840
- padding: 5px 0;
841
- }
842
- .tooltip.left {
843
- margin-left: -3px;
844
- padding: 0 5px;
845
- }
846
- .tooltip-inner {
847
- max-width: 200px;
848
- padding: 10px 10px 9px;
849
- color: #ffffff;
850
- text-align: center;
851
- background-color: #000000;
852
- border-radius: 4px;
853
- }
854
- .tooltip-arrow {
855
- position: absolute;
856
- width: 0;
857
- height: 0;
858
- border-color: transparent;
859
- border-style: solid;
860
- }
861
- .tooltip.top .tooltip-arrow {
862
- bottom: 0;
863
- left: 50%;
864
- margin-left: -5px;
865
- border-width: 5px 5px 0;
866
- border-top-color: #000000;
867
- }
868
- .tooltip.top-left .tooltip-arrow {
869
- bottom: 0;
870
- right: 5px;
871
- margin-bottom: -5px;
872
- border-width: 5px 5px 0;
873
- border-top-color: #000000;
874
- }
875
- .tooltip.top-right .tooltip-arrow {
876
- bottom: 0;
877
- left: 5px;
878
- margin-bottom: -5px;
879
- border-width: 5px 5px 0;
880
- border-top-color: #000000;
881
- }
882
- .tooltip.right .tooltip-arrow {
883
- top: 50%;
884
- left: 0;
885
- margin-top: -5px;
886
- border-width: 5px 5px 5px 0;
887
- border-right-color: #000000;
888
- }
889
- .tooltip.left .tooltip-arrow {
890
- top: 50%;
891
- right: 0;
892
- margin-top: -5px;
893
- border-width: 5px 0 5px 5px;
894
- border-left-color: #000000;
895
- }
896
- .tooltip.bottom .tooltip-arrow {
897
- top: 0;
898
- left: 50%;
899
- margin-left: -5px;
900
- border-width: 0 5px 5px;
901
- border-bottom-color: #000000;
902
- }
903
- .tooltip.bottom-left .tooltip-arrow {
904
- top: 0;
905
- right: 5px;
906
- margin-top: -5px;
907
- border-width: 0 5px 5px;
908
- border-bottom-color: #000000;
909
- }
910
- .tooltip.bottom-right .tooltip-arrow {
911
- top: 0;
912
- left: 5px;
913
- margin-top: -5px;
914
- border-width: 0 5px 5px;
915
- border-bottom-color: #000000;
916
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/trustpulse-admin.min.css DELETED
@@ -1,416 +0,0 @@
1
- #wpcontent #wpcontent{
2
- padding-left:0
3
- }
4
- #wpcontent .main-navigation{
5
- display:-webkit-box;
6
- display:-ms-flexbox;
7
- display:flex;
8
- -webkit-box-pack:end;
9
- -ms-flex-pack:end;
10
- justify-content:flex-end
11
- }
12
- #wpcontent .navbar-header{
13
- width:100%;
14
- background-color:#fff;
15
- border-bottom:1px solid #e5ecf6
16
- }
17
- #wpcontent .navbar-brand{
18
- height:38px
19
- }
20
- #wpcontent .navbar{
21
- display:-webkit-box;
22
- display:-ms-flexbox;
23
- display:flex;
24
- margin:0 auto;
25
- font-size:16px;
26
- -webkit-box-align:center;
27
- -ms-flex-align:center;
28
- align-items:center;
29
- background:transparent;
30
- -webkit-box-pack:justify;
31
- -ms-flex-pack:justify;
32
- justify-content:space-between;
33
- padding:10px 20px;
34
- line-height:1
35
- }
36
- #wpcontent .navbar img{
37
- max-height:100%
38
- }
39
- #wpcontent .navbar .hover-underline{
40
- border-bottom:2px solid transparent
41
- }
42
- #wpcontent .navbar .navbar-menu{
43
- text-align:right
44
- }
45
- #wpcontent .navbar a{
46
- font-weight:400
47
- }
48
- #wpcontent .navbar .menu-top-navbar-menu-container{
49
- height:38px
50
- }
51
- #wpcontent a.navbar-item{
52
- text-decoration:none;
53
- color:#364150;
54
- margin-right:10px
55
- }
56
- #wpcontent a.navbar-item.is-active,#wpcontent a.navbar-item:hover{
57
- background-color:transparent;
58
- height:calc($navbar-height + 2px);
59
- color:#3a546f
60
- }
61
- #wpcontent a.navbar-item.is-active .hover-underline,#wpcontent a.navbar-item:hover .hover-underline{
62
- border-bottom:2px solid #0db1eb
63
- }
64
- @media screen and (max-width:1087px){
65
- #wpcontent .navbar-brand{
66
- width:100%
67
- }
68
-
69
- }
70
- @media screen and (max-width:1087px){
71
- #wpcontent .navbar-menu.is-active{
72
- display:block;
73
- position:absolute;
74
- top:65px
75
- }
76
- #wpcontent .navbar-menu.is-active .navbar{
77
- display:-webkit-box;
78
- display:-ms-flexbox;
79
- display:flex;
80
- -webkit-box-orient:vertical;
81
- -webkit-box-direction:normal;
82
- -ms-flex-direction:column;
83
- flex-direction:column;
84
- width:100vw;
85
- text-align:left;
86
- -webkit-box-align:start;
87
- -ms-flex-align:start;
88
- align-items:flex-start;
89
- padding-right:0
90
- }
91
- #wpcontent .navbar-menu.is-active .navbar-item{
92
- width:100%;
93
- border-top:1px solid #e5ecf6
94
- }
95
-
96
- }
97
- #adminmenu .toplevel-page-trustpulse-settings div.wp-menu-image{
98
- height:30px
99
- }
100
- .tp-works-on{
101
- margin-top:60px
102
- }
103
- .tp-works-on .tp-heading{
104
- line-height:36px
105
- }
106
- .tp-works-on__icons{
107
- display:-webkit-box;
108
- display:-ms-flexbox;
109
- display:flex;
110
- -ms-flex-wrap:wrap;
111
- flex-wrap:wrap;
112
- -webkit-box-pack:justify;
113
- -ms-flex-pack:justify;
114
- justify-content:space-between;
115
- -webkit-box-align:center;
116
- -ms-flex-align:center;
117
- align-items:center;
118
- margin-bottom:30px
119
- }
120
- .tp-works-on__icon{
121
- width:200px;
122
- height:auto;
123
- margin-bottom:20px
124
- }
125
- #tpVideo{
126
- display:none
127
- }
128
- .omapi-trustpulse #wpwrap{
129
- background:#f7faff
130
- }
131
- .omapi-trustpulse #wpcontent{
132
- padding:0
133
- }
134
- .omapi-trustpulse #wpbody{
135
- font-family:Averta,Helvetica,sans-serif;
136
- color:#364150
137
- }
138
- .omapi-trustpulse #wpbody .text-center{
139
- text-align:center
140
- }
141
- .omapi-trustpulse #wpbody .notice{
142
- margin-top:20px
143
- }
144
- .omapi-trustpulse #wpbody .update-nag{
145
- display:none
146
- }
147
- .omapi-trustpulse #wpbody p{
148
- font-size:16px
149
- }
150
- .omapi-trustpulse #wpbody a{
151
- color:#364150;
152
- -webkit-text-decoration-color:#0db1eb;
153
- text-decoration-color:#0db1eb;
154
- font-weight:500
155
- }
156
- .omapi-trustpulse #wpbody a:hover{
157
- color:#0db1eb
158
- }
159
- .omapi-trustpulse #wpbody .trustpulse-wrap{
160
- max-width:720px;
161
- margin:0 auto
162
- }
163
- .omapi-trustpulse #wpbody .tp-admin-box{
164
- position:relative;
165
- -webkit-box-sizing:border-box;
166
- box-sizing:border-box;
167
- background:#fff;
168
- max-width:840px;
169
- margin:0 auto;
170
- padding:30px;
171
- border-radius:10px;
172
- border:1px solid #e5ecf6;
173
- text-align:center
174
- }
175
- .omapi-trustpulse #wpbody .tp-admin-box p{
176
- margin-bottom:30px
177
- }
178
- .omapi-trustpulse #wpbody .tp-admin-box--video{
179
- margin-top:40px;
180
- height:360px
181
- }
182
- .omapi-trustpulse #wpbody .tp-admin-box--video .tp-video-button{
183
- cursor:pointer;
184
- position:absolute;
185
- left:calc(50% - 125px);
186
- top:calc(50% - 40px);
187
- width:250px;
188
- z-index:1
189
- }
190
- .omapi-trustpulse #wpbody .tp-admin-box--video .tp-video-background{
191
- position:absolute;
192
- left:0;
193
- bottom:0;
194
- width:100%;
195
- opacity:.3
196
- }
197
- .omapi-trustpulse #wpbody .tp-admin-box--video p{
198
- margin-top:0
199
- }
200
- .omapi-trustpulse #wpbody .tp-or-line{
201
- margin:5px auto
202
- }
203
- .omapi-trustpulse #wpbody .tp-admin-box-group{
204
- display:-webkit-box;
205
- display:-ms-flexbox;
206
- display:flex;
207
- -webkit-box-pack:justify;
208
- -ms-flex-pack:justify;
209
- justify-content:space-between;
210
- width:840px;
211
- margin:20px auto
212
- }
213
- .omapi-trustpulse #wpbody .tp-admin-box-group .tp-admin-box{
214
- width:32%
215
- }
216
- .omapi-trustpulse #wpbody .tp-heading{
217
- font-size:28px;
218
- font-weight:700;
219
- letter-spacing:-1px;
220
- text-align:center;
221
- margin-top:50px
222
- }
223
- .omapi-trustpulse #wpbody .tp-subheading{
224
- text-align:center;
225
- margin-top:-15px;
226
- margin-bottom:70px
227
- }
228
- .omapi-trustpulse #wpbody .tp-features{
229
- max-width:840px;
230
- margin:0 auto
231
- }
232
- .omapi-trustpulse #wpbody .tp-features .tp-feature{
233
- display:-webkit-box;
234
- display:-ms-flexbox;
235
- display:flex;
236
- -ms-flex-wrap:wrap;
237
- flex-wrap:wrap;
238
- -webkit-box-pack:justify;
239
- -ms-flex-pack:justify;
240
- justify-content:space-between;
241
- margin-bottom:20px
242
- }
243
- .omapi-trustpulse #wpbody .tp-features .tp-feature.tp-feature--text-left{
244
- -webkit-box-orient:horizontal;
245
- -webkit-box-direction:reverse;
246
- -ms-flex-direction:row-reverse;
247
- flex-direction:row-reverse
248
- }
249
- .omapi-trustpulse #wpbody .tp-features .tp-feature__image{
250
- width:325px
251
- }
252
- @media screen and (max-width:400px){
253
- .omapi-trustpulse #wpbody .tp-features .tp-feature__image{
254
- width:100%;
255
- margin-bottom:20px
256
- }
257
-
258
- }
259
- .omapi-trustpulse #wpbody .tp-features .tp-feature__text{
260
- display:-webkit-box;
261
- display:-ms-flexbox;
262
- display:flex;
263
- -webkit-box-orient:vertical;
264
- -webkit-box-direction:normal;
265
- -ms-flex-direction:column;
266
- flex-direction:column;
267
- -webkit-box-pack:center;
268
- -ms-flex-pack:center;
269
- justify-content:center;
270
- width:350px
271
- }
272
- @media screen and (max-width:400px){
273
- .omapi-trustpulse #wpbody .tp-features .tp-feature__text{
274
- width:100%
275
- }
276
-
277
- }
278
- .omapi-trustpulse #wpbody .tp-features .tp-feature__text h3{
279
- font-size:22px;
280
- font-weight:700;
281
- margin-bottom:0
282
- }
283
- .omapi-trustpulse #wpbody .tp-content-row{
284
- display:-webkit-box;
285
- display:-ms-flexbox;
286
- display:flex;
287
- -ms-flex-line-pack:center;
288
- align-content:center;
289
- -webkit-box-pack:center;
290
- -ms-flex-pack:center;
291
- justify-content:center
292
- }
293
- .omapi-trustpulse #wpbody .tp-content-row__item{
294
- display:-webkit-box;
295
- display:-ms-flexbox;
296
- display:flex;
297
- -webkit-box-align:center;
298
- -ms-flex-align:center;
299
- align-items:center;
300
- margin:0 5px
301
- }
302
- .omapi-trustpulse #wpbody .tp-button{
303
- cursor:pointer;
304
- display:-webkit-inline-box;
305
- display:-ms-inline-flexbox;
306
- display:inline-flex;
307
- font-weight:700;
308
- background-color:#16bd83;
309
- font-size:18px;
310
- border-radius:100px;
311
- border-color:transparent;
312
- color:#fff;
313
- -webkit-box-align:center;
314
- -ms-flex-align:center;
315
- align-items:center;
316
- -webkit-box-pack:center;
317
- -ms-flex-pack:center;
318
- justify-content:center;
319
- padding:10px 25px;
320
- text-align:center;
321
- white-space:nowrap;
322
- min-width:100px;
323
- text-decoration:none
324
- }
325
- .omapi-trustpulse #wpbody .tp-button:hover{
326
- background-color:#19d191;
327
- color:#fff
328
- }
329
- .omapi-trustpulse #wpbody .tp-button--full{
330
- width:100%
331
- }
332
- .omapi-trustpulse #wpbody .tp-button--large{
333
- padding:15px 60px;
334
- font-size:22px
335
- }
336
- .omapi-trustpulse #wpbody .tp-button--blue{
337
- cursor:pointer;
338
- background:#fff;
339
- border:1px solid #e5ecf6;
340
- border-radius:100px;
341
- padding:10px 25px;
342
- color:#364150;
343
- font-weight:700
344
- }
345
- .omapi-trustpulse #wpbody .tp-button--blue:hover{
346
- background-color:#205fbd;
347
- border-color:#205fbd
348
- }
349
- .omapi-trustpulse #wpbody .tp-button--white{
350
- color:#364150;
351
- background-color:#fff;
352
- border:1px solid #e5ecf6
353
- }
354
- .omapi-trustpulse #wpbody .tp-button--white:hover{
355
- background-color:#205fbd
356
- }
357
- @font-face {
358
- font-family: 'Averta';
359
- src: url( '../fonts/Averta-Regular.eot');
360
- src: url( '../fonts/Averta-Regular.eot?#iefix') format('embedded-opentype'),
361
- url( '../fonts/Averta-Regular.woff') format('woff'),
362
- url( '../fonts/Averta-Regular.ttf') format('truetype');
363
- font-weight: normal;
364
- font-style: normal;
365
- }
366
- @font-face {
367
- font-family: 'Averta';
368
- src: url( '../fonts/Averta-Light.eot');
369
- src: url( '../fonts/Averta-Light.eot?#iefix') format('embedded-opentype'),
370
- url( '../fonts/Averta-Light.woff') format('woff'),
371
- url( '../fonts/Averta-Light.ttf') format('truetype');
372
- font-weight: 300;
373
- font-style: normal;
374
- }
375
-
376
- @font-face {
377
- font-family: 'Averta';
378
- src: url( '../fonts/Averta-Semibold.eot');
379
- src: url( '../fonts/Averta-Semibold.eot?#iefix') format('embedded-opentype'),
380
- url( '../fonts/Averta-Semibold.woff') format('woff'),
381
- url( '../fonts/Averta-Semibold.ttf') format('truetype');
382
- font-weight: 500;
383
- font-style: normal;
384
- }
385
-
386
- @font-face {
387
- font-family: 'Averta';
388
- src: url( '../fonts/Averta-Semibold.eot');
389
- src: url( '../fonts/Averta-Semibold.eot?#iefix') format('embedded-opentype'),
390
- url( '../fonts/Averta-Semibold.woff') format('woff'),
391
- url( '../fonts/Averta-Semibold.ttf') format('truetype');
392
- font-weight: 600;
393
- font-style: normal;
394
- }
395
-
396
- @font-face {
397
- font-family: 'Averta';
398
- src: url( '../fonts/Averta-Bold.eot');
399
- src: url( '../fonts/Averta-Bold.eot?#iefix') format('embedded-opentype'),
400
- url( '../fonts/Averta-Bold.woff') format('woff'),
401
- url( '../fonts/Averta-Bold.ttf') format('truetype');
402
- font-weight: bold;
403
- font-style: normal;
404
- }
405
-
406
- @font-face {
407
- font-family: 'Averta';
408
- src: url( '../fonts/Averta-ExtraBoldItalic.eot');
409
- src: url( '../fonts/Averta-ExtraBoldItalic.eot?#iefix') format('embedded-opentype'),
410
- url( '../fonts/Averta-ExtraBoldItalic.woff') format('woff'),
411
- url( '../fonts/Averta-ExtraBoldItalic.ttf') format('truetype');
412
- font-weight: bold;
413
- font-style: italic, oblique;
414
- }
415
-
416
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dist/css/blocks-admin.min.css ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .optinmonster-gutenberg-campaign-selector-wrap {
2
+ text-align: center !important;
3
+ -webkit-box-align: center !important;
4
+ -ms-flex-align: center !important;
5
+ align-items: center !important; }
6
+ .optinmonster-gutenberg-campaign-selector-wrap h2 {
7
+ margin-bottom: 0.65em !important;
8
+ padding-top: 20px !important; }
9
+ .optinmonster-gutenberg-campaign-selector-wrap .components-base-control {
10
+ width: 100% !important; }
11
+ .optinmonster-gutenberg-campaign-selector-wrap .components-base-control select {
12
+ display: block;
13
+ max-width: 90%;
14
+ margin: 0 auto; }
15
+
16
+ .om-archie-loader circle {
17
+ -webkit-animation: 2s linear infinite circle-animation;
18
+ animation: 2s linear infinite circle-animation;
19
+ display: block;
20
+ fill: transparent;
21
+ stroke: #858b98;
22
+ stroke-dasharray: 157;
23
+ stroke-width: 2;
24
+ -webkit-transform-origin: 50% 50%;
25
+ transform-origin: 50% 50%; }
26
+
27
+ @-webkit-keyframes circle-animation {
28
+ 0% {
29
+ stroke-dashoffset: 33;
30
+ -webkit-transform: rotate(0deg);
31
+ transform: rotate(0deg); }
32
+ 50% {
33
+ stroke-dashoffset: 157;
34
+ -webkit-transform: rotate(720deg);
35
+ transform: rotate(720deg); }
36
+ 100% {
37
+ stroke-dashoffset: 33;
38
+ -webkit-transform: rotate(1080deg);
39
+ transform: rotate(1080deg); } }
40
+
41
+ @keyframes circle-animation {
42
+ 0% {
43
+ stroke-dashoffset: 33;
44
+ -webkit-transform: rotate(0deg);
45
+ transform: rotate(0deg); }
46
+ 50% {
47
+ stroke-dashoffset: 157;
48
+ -webkit-transform: rotate(720deg);
49
+ transform: rotate(720deg); }
50
+ 100% {
51
+ stroke-dashoffset: 33;
52
+ -webkit-transform: rotate(1080deg);
53
+ transform: rotate(1080deg); } }
assets/dist/css/blocks-admin.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=102)})({102:function(){}});
assets/dist/css/common.min.css ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .optinmonster_page_optin-monster-about * {
2
+ font-family: 'proxima-nova'; }
3
+
4
+ .optinmonster_page_optin-monster-about .dashicons {
5
+ font-family: 'dashicons'; }
6
+
7
+ .optinmonster_page_optin-monster-about p, .optinmonster_page_optin-monster-about ul {
8
+ color: #60656f; }
9
+
10
+ .optinmonster_page_optin-monster-about h1, .optinmonster_page_optin-monster-about h2, .optinmonster_page_optin-monster-about h3, .optinmonster_page_optin-monster-about h4, .optinmonster_page_optin-monster-about h5 {
11
+ color: #41495b; }
12
+
13
+ .optinmonster_page_optin-monster-about h1 {
14
+ font-weight: 400; }
15
+
16
+ .optinmonster_page_optin-monster-about p, .optinmonster_page_optin-monster-about li {
17
+ font-size: 15px;
18
+ margin: 10px 0;
19
+ font-weight: 400; }
20
+
21
+ .optinmonster_page_optin-monster-about #wpbody-content > .notice {
22
+ margin: 28px 30px 30px; }
23
+
24
+ .optinmonster_page_optin-monster-about .omapi-box {
25
+ border: 0;
26
+ border-radius: 5px; }
27
+
28
+ .omapi-plugin-recommendations {
29
+ display: -webkit-box;
30
+ display: -ms-flexbox;
31
+ display: flex;
32
+ -webkit-box-pack: justify;
33
+ -ms-flex-pack: justify;
34
+ justify-content: space-between;
35
+ margin: 30px; }
36
+ .omapi-plugin-recommendations .omapi-plugin-recommendation {
37
+ width: 49%;
38
+ background-color: #fff;
39
+ border-radius: 5px;
40
+ margin: 0 0 40px 0; }
41
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__name {
42
+ font-size: 22px; }
43
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__details {
44
+ display: -webkit-box;
45
+ display: -ms-flexbox;
46
+ display: flex;
47
+ -webkit-box-orient: horizontal;
48
+ -webkit-box-direction: normal;
49
+ -ms-flex-direction: row;
50
+ flex-direction: row;
51
+ padding: 30px 30px 15px;
52
+ border-bottom: 2px solid #eee; }
53
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__details h5 {
54
+ font-weight: 600;
55
+ margin: 0 0 20px 0; }
56
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__text-wrapper {
57
+ margin-left: 30px; }
58
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__status {
59
+ font-size: 15px; }
60
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__description {
61
+ color: #41495B;
62
+ line-height: 1.75; }
63
+ .omapi-plugin-recommendations .omapi-plugin-recommendation__actions {
64
+ padding: 30px;
65
+ display: -webkit-box;
66
+ display: -ms-flexbox;
67
+ display: flex;
68
+ -webkit-box-align: center;
69
+ -ms-flex-align: center;
70
+ align-items: center;
71
+ -webkit-box-pack: justify;
72
+ -ms-flex-pack: justify;
73
+ justify-content: space-between; }
74
+ .omapi-plugin-recommendations .omapi-plugin-recommendation img {
75
+ padding: 10px;
76
+ border: 1px solid #eee;
77
+ background-color: #eee;
78
+ float: left;
79
+ max-width: 75px; }
80
+
81
+ .omapi-box {
82
+ margin: 30px 30px;
83
+ padding: 30px;
84
+ background: #fff;
85
+ border: 1px solid #DDDDDD;
86
+ line-height: 2; }
87
+ .omapi-box--flex {
88
+ display: -webkit-box;
89
+ display: -ms-flexbox;
90
+ display: flex;
91
+ -ms-flex-wrap: wrap;
92
+ flex-wrap: wrap; }
93
+ .omapi-box__half {
94
+ width: 50%;
95
+ min-width: 400px; }
96
+ .omapi-box__image {
97
+ width: 100%; }
98
+ .omapi-box__image img {
99
+ display: block;
100
+ width: 400px;
101
+ margin: 0 auto;
102
+ border-radius: 5px; }
103
+ .omapi-box__image-subtitle {
104
+ margin-top: 10px;
105
+ line-height: 1.3;
106
+ color: #41495B;
107
+ text-align: center; }
108
+
109
+ /* Static Banner */
110
+ .omapi-screen .omapi-static-banner {
111
+ background: #0d82df;
112
+ height: 50px;
113
+ line-height: 1;
114
+ margin-left: -20px; }
115
+
116
+ .omapi-static-banner .logo-wrapper {
117
+ padding: 12px 0;
118
+ line-height: 1;
119
+ display: inline-block; }
120
+
121
+ .omapi-static-banner .omapi-svg-logo {
122
+ height: 24px;
123
+ width: 159px; }
124
+
125
+ .logo-wrapper span.omapi-logo-version {
126
+ color: #fff;
127
+ vertical-align: middle;
128
+ margin-bottom: 10px;
129
+ margin-left: 5px;
130
+ display: inline-block; }
131
+
132
+ .omapi-screen .static-menu {
133
+ float: right; }
134
+
135
+ .omapi-screen .static-menu ul {
136
+ margin: 0; }
137
+
138
+ .omapi-screen .static-menu ul li {
139
+ display: inline-block;
140
+ padding: 18px 0;
141
+ margin: 0;
142
+ font-size: 14px; }
143
+
144
+ .omapi-screen .static-menu ul li:last-of-type {
145
+ padding-right: 0; }
146
+
147
+ .omapi-screen .static-menu ul li a {
148
+ text-decoration: none;
149
+ color: #fff;
150
+ font-size: 13px;
151
+ font-weight: 400;
152
+ letter-spacing: .04em;
153
+ padding: 5px 10px; }
assets/dist/css/common.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=45)})({45:function(){}});
assets/dist/css/settings.min.css ADDED
@@ -0,0 +1,955 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ==========================================================================
2
+ Settings Styles
3
+ ========================================================================== */
4
+ .omapi-screen div.updated,
5
+ .omapi-screen div.error {
6
+ margin-top: 15px; }
7
+
8
+ .omapi-screen *:focus {
9
+ -webkit-box-shadow: 0 0 2px 1px rgba(151, 171, 204, 0.6);
10
+ box-shadow: 0 0 2px 1px rgba(151, 171, 204, 0.6);
11
+ outline-width: 0; }
12
+
13
+ .omapi-hidden {
14
+ display: none;
15
+ visibility: hidden;
16
+ opacity: 0;
17
+ height: 0;
18
+ line-height: 0; }
19
+
20
+ .omapi-clear {
21
+ clear: both; }
22
+
23
+ .omapi-clear:after {
24
+ clear: both;
25
+ content: '.';
26
+ display: block;
27
+ height: 0;
28
+ line-height: 0;
29
+ overflow: auto;
30
+ visibility: hidden;
31
+ zoom: 1; }
32
+
33
+ .omapi-red {
34
+ color: red !important; }
35
+
36
+ .omapi-green {
37
+ color: #74BA0D !important; }
38
+
39
+ /* Remove default WP padding */
40
+ .omapi-screen #wpcontent {
41
+ padding-left: 0; }
42
+
43
+ .omapi-screen h2 {
44
+ padding-right: 0 !important; }
45
+
46
+ .omapi-screen h2 span {
47
+ font-size: 13px;
48
+ color: #666; }
49
+
50
+ /* Static Banner */
51
+ .omapi-screen .omapi-static-banner {
52
+ background: #0d82df;
53
+ height: 50px;
54
+ line-height: 1;
55
+ padding-left: 15px; }
56
+ @media screen and (max-width: 1000px) {
57
+ .omapi-screen .omapi-static-banner {
58
+ height: auto; } }
59
+
60
+ .omapi-static-banner .logo-wrapper {
61
+ padding: 12px 0;
62
+ line-height: 1;
63
+ display: inline-block; }
64
+ @media screen and (max-width: 1000px) {
65
+ .omapi-static-banner .logo-wrapper {
66
+ padding-bottom: 0; } }
67
+
68
+ .omapi-static-banner .omapi-svg-logo {
69
+ height: 24px;
70
+ width: 159px; }
71
+
72
+ .omapi-static-banner svg {
73
+ display: initial;
74
+ vertical-align: initial; }
75
+
76
+ @media screen and (max-width: 1000px) {
77
+ .omapi-static-banner .inner-container {
78
+ display: -webkit-box;
79
+ display: -ms-flexbox;
80
+ display: flex;
81
+ -webkit-box-align: center;
82
+ -ms-flex-align: center;
83
+ align-items: center;
84
+ -webkit-box-pack: center;
85
+ -ms-flex-pack: center;
86
+ justify-content: center;
87
+ -webkit-box-orient: vertical;
88
+ -webkit-box-direction: normal;
89
+ -ms-flex-direction: column;
90
+ flex-direction: column; } }
91
+
92
+ .logo-wrapper span.omapi-logo-version {
93
+ color: #fff;
94
+ vertical-align: middle;
95
+ margin-bottom: 10px;
96
+ margin-left: 5px;
97
+ display: inline-block; }
98
+
99
+ .omapi-screen .static-menu {
100
+ float: right; }
101
+
102
+ .omapi-screen .static-menu ul {
103
+ margin: 0; }
104
+
105
+ .omapi-screen .static-menu ul li {
106
+ display: inline-block;
107
+ padding: 18px 0;
108
+ margin: 0;
109
+ font-size: 14px; }
110
+
111
+ .omapi-screen .static-menu ul li:last-of-type {
112
+ padding-right: 0; }
113
+
114
+ .omapi-screen .static-menu ul li a {
115
+ text-decoration: none;
116
+ color: #fff;
117
+ font-size: 13px;
118
+ font-weight: 400;
119
+ letter-spacing: .04em;
120
+ padding: 5px 10px; }
121
+
122
+ /* Cleaner screen even when updates needed */
123
+ .omapi-screen .update-nag {
124
+ display: none; }
125
+
126
+ /* Only shown on main plugin view */
127
+ .omapi-screen .static-menu ul li.omapi-menu-button {
128
+ padding: 0 !important;
129
+ margin-top: -3px !important;
130
+ vertical-align: middle;
131
+ margin-left: 10px; }
132
+
133
+ .omapi-screen #omapi-create-new-optin-button {
134
+ padding: 0 10px;
135
+ background: #74ba0d;
136
+ border-color: #74ba0d;
137
+ -webkit-box-shadow: none;
138
+ box-shadow: none;
139
+ border: 0;
140
+ color: #fff; }
141
+ .omapi-screen #omapi-create-new-optin-button:hover {
142
+ border-color: #76b118;
143
+ background-color: #76b118; }
144
+ .omapi-screen #omapi-create-new-optin-button:focus, .omapi-screen #omapi-create-new-optin-button:active {
145
+ -webkit-box-shadow: 0 0 2px 1px #fff;
146
+ box-shadow: 0 0 2px 1px #fff;
147
+ outline-width: 0; }
148
+
149
+ .omapi-screen .static-menu ul li a:hover {
150
+ background: rgba(0, 0, 0, 0.08); }
151
+
152
+ .omapi-screen .omapi-static-banner .inner-container {
153
+ padding: 0 1.2rem;
154
+ max-width: 100%; }
155
+
156
+ /* Welcome Page*/
157
+ body.omapi-welcome #wpbody-content > .notice, body[class*="toplevel_page_optin-monster-api-"] #wpbody-content > .notice, body[class*="optinmonster_page_"] #wpbody-content > .notice {
158
+ margin: 28px 20px 15px; }
159
+
160
+ .omapi-welcome .inner-container {
161
+ max-width: 45rem;
162
+ margin: 0 auto;
163
+ padding: 0; }
164
+
165
+ .omapi-welcome .logo-wrapper span.omapi-logo-version {
166
+ display: none; }
167
+
168
+ .omapi-welcome-content *,
169
+ .admin_page_optin-monster-api-review #wpbody-content *,
170
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content * {
171
+ font-family: 'proxima-nova'; }
172
+
173
+ .omapi-welcome-content .dashicons,
174
+ .admin_page_optin-monster-api-review #wpbody-content .dashicons,
175
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content .dashicons {
176
+ font-family: 'dashicons'; }
177
+
178
+ .omapi-welcome-content p, .omapi-welcome-content h3, .omapi-welcome-content h4, .omapi-welcome-content h5, .omapi-welcome-content ul,
179
+ .admin_page_optin-monster-api-review #wpbody-content p,
180
+ .admin_page_optin-monster-api-review #wpbody-content h3,
181
+ .admin_page_optin-monster-api-review #wpbody-content h4,
182
+ .admin_page_optin-monster-api-review #wpbody-content h5,
183
+ .admin_page_optin-monster-api-review #wpbody-content ul,
184
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content p,
185
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content h3,
186
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content h4,
187
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content h5,
188
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content ul {
189
+ color: #60656f; }
190
+
191
+ .omapi-welcome-content h1,
192
+ .admin_page_optin-monster-api-review #wpbody-content h1,
193
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content h1 {
194
+ font-weight: 400;
195
+ color: #41495b; }
196
+
197
+ .omapi-welcome-content h2,
198
+ .admin_page_optin-monster-api-review #wpbody-content h2,
199
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content h2 {
200
+ color: #41495b; }
201
+
202
+ .omapi-welcome-content p, .omapi-welcome-content li,
203
+ .admin_page_optin-monster-api-review #wpbody-content p,
204
+ .admin_page_optin-monster-api-review #wpbody-content li,
205
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content p,
206
+ .optinmonster_page_optin-monster-constant-contact #wpbody-content li {
207
+ font-size: 17px;
208
+ margin: 10px 0;
209
+ font-weight: 400; }
210
+
211
+ .omapi-welcome-content {
212
+ padding-top: 20px; }
213
+ .omapi-welcome-content a.button.button-hero {
214
+ line-height: 50px;
215
+ height: 50px; }
216
+ .omapi-welcome-content a.button.button-hero.button-omapi-green {
217
+ background: #71b406;
218
+ color: #fff;
219
+ font-weight: 400;
220
+ -webkit-box-shadow: none;
221
+ box-shadow: none;
222
+ border: 1px solid #71b406; }
223
+ .omapi-welcome-content a.button.button-hero.button-omapi-green:hover, .omapi-welcome-content a.button.button-hero.button-omapi-green:focus {
224
+ border-color: #6aa807;
225
+ background-color: #6aa807; }
226
+ .omapi-welcome-content a.button.button-hero.button-omapi-green:focus {
227
+ -webkit-box-shadow: 0 0 3px 3px rgba(151, 171, 204, 0.4);
228
+ box-shadow: 0 0 3px 3px rgba(151, 171, 204, 0.4);
229
+ outline-width: 0; }
230
+ .omapi-welcome-content h1 {
231
+ text-align: center;
232
+ margin: 44px 0;
233
+ margin-bottom: 30px; }
234
+ .omapi-welcome-content .omapi-sub-title {
235
+ text-align: center;
236
+ padding-top: 30px;
237
+ padding-bottom: 20px; }
238
+ .omapi-welcome-content p {
239
+ color: #60656f; }
240
+ .omapi-welcome-content .divider {
241
+ height: 1px;
242
+ background: #60656f;
243
+ -webkit-box-shadow: 0px 0px 1px #e8edf0;
244
+ box-shadow: 0px 0px 1px #e8edf0;
245
+ width: 320px;
246
+ margin: 0 auto; }
247
+ .omapi-welcome-content .welcome-connect .actions {
248
+ margin: 40px 0;
249
+ margin-bottom: 8px; }
250
+ .omapi-welcome-content .omapi-well span.or {
251
+ padding: 1em;
252
+ text-align: center;
253
+ vertical-align: middle;
254
+ display: inline-block; }
255
+ .omapi-welcome-content .welcome-data-vid {
256
+ background-image: url("/assets/images/omapi-graph.png");
257
+ background-size: contain;
258
+ background-position-y: bottom;
259
+ background-repeat: no-repeat;
260
+ position: relative; }
261
+ .omapi-welcome-content .welcome-data-vid .actions {
262
+ margin-top: 25px;
263
+ z-index: 200;
264
+ position: relative; }
265
+ .omapi-welcome-content .welcome-data-vid .omapi-video-link {
266
+ display: inline-block;
267
+ padding-top: 20px; }
268
+ .omapi-welcome-content .welcome-data-vid.active {
269
+ background-image: none; }
270
+ .omapi-welcome-content .welcome-data-vid.active .actions {
271
+ display: none; }
272
+ .omapi-welcome-content .omapi-welcome-video-holder {
273
+ height: 1px;
274
+ margin: 0 auto;
275
+ width: 100%; }
276
+ .omapi-welcome-content .welcome-data-vid.active .omapi-welcome-video-holder {
277
+ height: auto; }
278
+ .omapi-welcome-content .omapi-feature-box {
279
+ margin: 50px 0; }
280
+ .omapi-welcome-content .omapi-feature-image,
281
+ .omapi-welcome-content .omapi-feature-text {
282
+ width: 47%;
283
+ display: inline-block;
284
+ vertical-align: middle; }
285
+ .omapi-welcome-content .omapi-feature-image img {
286
+ max-width: 100%;
287
+ height: auto; }
288
+ .omapi-welcome-content .omapi-feature-text p {
289
+ font-size: 15px; }
290
+ .omapi-welcome-content .omapi-feature-text {
291
+ margin-left: 5%;
292
+ margin-top: -2em; }
293
+ .omapi-welcome-content .omapi-feature-box:nth-of-type(even) .omapi-feature-text {
294
+ margin-right: 5%;
295
+ margin-left: 0; }
296
+ .omapi-welcome-content .omapi-well img {
297
+ max-width: 100%; }
298
+ .omapi-welcome-content .omapi-single-cta {
299
+ margin: 0 auto 60px;
300
+ text-align: center; }
301
+ .omapi-welcome-content .welcome-featuredin img {
302
+ margin: 40px 0;
303
+ width: 475px; }
304
+ .omapi-welcome-content .welcome-featuredin h2 {
305
+ font-size: 20px;
306
+ font-weight: 600; }
307
+ .omapi-welcome-content .omapi-reviews {
308
+ display: -webkit-box;
309
+ display: -ms-flexbox;
310
+ display: flex;
311
+ -webkit-box-orient: horizontal;
312
+ -webkit-box-direction: normal;
313
+ -ms-flex-direction: row;
314
+ flex-direction: row; }
315
+ .omapi-welcome-content .omapi-reviews p {
316
+ font-size: 14px; }
317
+ .omapi-welcome-content .omapi-talking-head {
318
+ height: 60px;
319
+ width: 60px;
320
+ margin: 0 auto; }
321
+ .omapi-welcome-content .omapi-reviews span.reviewer-name {
322
+ margin-top: 15px;
323
+ display: block;
324
+ font-weight: 500; }
325
+ .omapi-welcome-content .omapi-reviews span.reviewer-title {
326
+ font-weight: 300; }
327
+ .omapi-welcome-content .omapi-mini-well {
328
+ margin-right: 15px;
329
+ -webkit-box-flex: 1;
330
+ -ms-flex: 1;
331
+ flex: 1; }
332
+ .omapi-welcome-content .omapi-mini-well:last-of-type {
333
+ margin-right: 0; }
334
+
335
+ input.button.button-omapi-outline,
336
+ button.button.button-omapi-outline,
337
+ a.button.button-omapi-outline {
338
+ background-color: #fff;
339
+ color: #a4badb;
340
+ border: 1px solid #a4badb;
341
+ border-radius: 4px;
342
+ padding: 0 15px;
343
+ font-size: 16px;
344
+ font-weight: 600;
345
+ margin: 0 auto; }
346
+ input.button.button-omapi-outline:hover,
347
+ button.button.button-omapi-outline:hover,
348
+ a.button.button-omapi-outline:hover {
349
+ background-color: #1287dd;
350
+ color: #fff;
351
+ border-color: #1287dd; }
352
+ input.button.button-omapi-outline:focus,
353
+ button.button.button-omapi-outline:focus,
354
+ a.button.button-omapi-outline:focus {
355
+ -webkit-box-shadow: 0 0 2px 1px rgba(151, 171, 204, 0.6);
356
+ box-shadow: 0 0 2px 1px rgba(151, 171, 204, 0.6);
357
+ outline-width: 0; }
358
+
359
+ input.button.button-omapi-blue,
360
+ button.button.button-omapi-blue,
361
+ a.button.button-omapi-blue {
362
+ color: #fff;
363
+ background: #0d82df;
364
+ border: 1px solid #0d82df;
365
+ border-radius: 4px;
366
+ padding: 0 15px;
367
+ font-size: 16px;
368
+ font-weight: 600;
369
+ margin: 0 auto; }
370
+ input.button.button-omapi-blue:hover, input.button.button-omapi-blue:focus,
371
+ button.button.button-omapi-blue:hover,
372
+ button.button.button-omapi-blue:focus,
373
+ a.button.button-omapi-blue:hover,
374
+ a.button.button-omapi-blue:focus {
375
+ border-color: #0c76cb;
376
+ background: #0c76cb;
377
+ color: #fff; }
378
+ input.button.button-omapi-blue:focus,
379
+ button.button.button-omapi-blue:focus,
380
+ a.button.button-omapi-blue:focus {
381
+ -webkit-box-shadow: 0 0 3px 3px rgba(151, 171, 204, 0.4);
382
+ box-shadow: 0 0 3px 3px rgba(151, 171, 204, 0.4);
383
+ outline-width: 0; }
384
+
385
+ /* Keep WordPress Page Styling */
386
+ .omapi-page {
387
+ padding-left: 20px;
388
+ margin-left: 0; }
389
+
390
+ /* Build out UI */
391
+ .omapi-screen .inner-container {
392
+ max-width: 45rem;
393
+ margin: 0 auto;
394
+ padding: 0; }
395
+
396
+ .omapi-well {
397
+ padding: 2.1rem;
398
+ text-align: center;
399
+ background: #fff;
400
+ border: 1px solid #e9eff3;
401
+ margin-bottom: 15px;
402
+ border-radius: 5px; }
403
+
404
+ .omapi-well img {
405
+ max-width: 100%;
406
+ height: auto; }
407
+
408
+ .omapi-mini-well {
409
+ padding: 1rem; }
410
+
411
+ .omapi-ui {
412
+ margin-top: 20px;
413
+ border-top: 0;
414
+ height: 100%;
415
+ width: 100%;
416
+ display: -webkit-box;
417
+ display: -ms-flexbox;
418
+ display: flex;
419
+ background: #f1f1f1;
420
+ border: 1px solid #ddd; }
421
+ .omapi-ui p, .omapi-ui h1, .omapi-ui h2, .omapi-ui h3, .omapi-ui h4, .omapi-ui h5, .omapi-ui ul {
422
+ color: #41495b;
423
+ font-family: 'proxima-nova'; }
424
+
425
+ .omapi-ui,
426
+ .omapi-ui * {
427
+ box-sizing: border-box;
428
+ -moz-box-sizing: border-box;
429
+ -webkit-box-sizing: border-box; }
430
+
431
+ .omapi-tabs {
432
+ width: calc(25% - 20px);
433
+ min-width: 175px;
434
+ margin: 0;
435
+ height: 100%; }
436
+
437
+ .omapi-panels {
438
+ list-style: none;
439
+ margin: 0;
440
+ padding: 0 20px; }
441
+ .omapi-panels li {
442
+ list-style: none;
443
+ padding: 0;
444
+ margin: 0; }
445
+ .omapi-panels li a {
446
+ display: block;
447
+ padding: 15px 10px;
448
+ border-bottom: 1px solid #ddd;
449
+ text-decoration: none;
450
+ font-size: 16px;
451
+ outline: none;
452
+ padding: 20px 0; }
453
+ .omapi-panels li a:focus {
454
+ outline: none !important; }
455
+ .omapi-panels li.omapi-panel-active a,
456
+ .omapi-panels li a:hover,
457
+ .omapi-panels li a:focus {
458
+ color: #222;
459
+ background: #ffffff;
460
+ margin-left: -20px;
461
+ margin-right: -20px;
462
+ padding: 20px;
463
+ cursor: pointer;
464
+ border-top: 1px solid #ddd;
465
+ margin-top: -1px; }
466
+ .omapi-panels li:last-child a {
467
+ border-bottom: 0; }
468
+ .omapi-panels li.omapi-panel-active a {
469
+ color: #222; }
470
+ .omapi-panels li.omapi-panel-button-item {
471
+ padding: 20px 10px;
472
+ background: #eef2f9; }
473
+ .omapi-panels li.omapi-panel-button-item #omapi-create-new-optin-button {
474
+ width: 100%;
475
+ text-align: center; }
476
+
477
+ .omapi-tabs-content {
478
+ width: calc(100% - 40px);
479
+ background: #fff;
480
+ padding: 20px; }
481
+
482
+ .omapi-content {
483
+ display: none; }
484
+
485
+ .omapi-content.omapi-content-active {
486
+ display: block; }
487
+
488
+ .omapi-content h3 {
489
+ padding: 0;
490
+ margin: 0; }
491
+
492
+ .omapi-field-box {
493
+ margin: 1.5em 0; }
494
+
495
+ .omapi-field-wrap {
496
+ margin: 0; }
497
+
498
+ .omapi-field-box li {
499
+ list-style: none;
500
+ margin: 0; }
501
+
502
+ .omapi-field-box ul.children {
503
+ margin: 1px 0 1px 20px; }
504
+
505
+ .omapi-field-box .wp-hidden-children {
506
+ display: none; }
507
+
508
+ .omapi-field-box > div {
509
+ max-width: 350px; }
510
+
511
+ .omapi-field-box p.hide-if-no-js,
512
+ .omapi-field-box li.hide-if-no-js {
513
+ display: none; }
514
+
515
+ .omapi-field-wrap label {
516
+ font-size: 14px;
517
+ font-weight: 600;
518
+ margin-bottom: 2px; }
519
+
520
+ .omapi-field-wrap input[type=email],
521
+ .omapi-field-wrap input[type=number],
522
+ .omapi-field-wrap input[type=password],
523
+ .omapi-field-wrap input[type=search],
524
+ .omapi-field-wrap input[type=text],
525
+ .omapi-field-wrap select {
526
+ min-width: 350px;
527
+ padding: 6px 8px; }
528
+
529
+ .omapi-field-box .select2-container {
530
+ min-width: 350px; }
531
+
532
+ .omapi-field-wrap textarea {
533
+ width: 100%;
534
+ padding: 6px 8px; }
535
+
536
+ .omapi-field-wrap .omapi-field-desc {
537
+ font-size: 12px;
538
+ font-style: italic;
539
+ font-weight: normal;
540
+ color: #666;
541
+ vertical-align: middle;
542
+ margin-bottom: 0; }
543
+
544
+ .omapi-back {
545
+ float: right;
546
+ font-size: 13px;
547
+ font-weight: normal; }
548
+
549
+ .omapi-optin {
550
+ padding: 20px 27px 20px 10px;
551
+ border-bottom: 1px solid #cad1e2;
552
+ font-size: 15px;
553
+ margin: 0; }
554
+
555
+ .omapi-optin-first {
556
+ border-top: 1px solid #cad1e2;
557
+ margin-top: 20px; }
558
+
559
+ .omapi-optin.omapi-test-mode {
560
+ background: #fcf8e3 !important; }
561
+
562
+ .omapi-optin a {
563
+ text-decoration: none;
564
+ border-bottom: 0 none; }
565
+
566
+ .omapi-optin .omapi-test {
567
+ color: #8a6d3b;
568
+ font-size: 11px;
569
+ text-transform: uppercase;
570
+ font-weight: 700; }
571
+
572
+ .omapi-optin .omapi-status,
573
+ .omapi-optin .omapi-slug {
574
+ float: right; }
575
+
576
+ .omapi-optin .omapi-slug,
577
+ .omapi-content .omapi-slug {
578
+ font-size: 13px;
579
+ color: #999;
580
+ margin-top: 3px; }
581
+
582
+ .omapi-content .omapi-slug {
583
+ float: right;
584
+ line-height: 1.8em; }
585
+
586
+ .omapi-view-optins.omapi-action-edit .omapi-slug {
587
+ margin-right: 35px; }
588
+
589
+ .omapi-optin .omapi-links,
590
+ .omapi-optin .omapi-links a {
591
+ font-size: 12px; }
592
+
593
+ /* Inline Note */
594
+ .omapi-inline-notice .omapi-notice-title {
595
+ font-size: 14px;
596
+ font-weight: 600;
597
+ margin-bottom: 2px;
598
+ margin-top: 0; }
599
+
600
+ .omapi-inline-notice .omapi-field-desc {
601
+ margin: 0;
602
+ margin-bottom: 5px; }
603
+
604
+ .omapi-inline-notice {
605
+ padding: 15px 0;
606
+ position: relative;
607
+ border: 1px solid #ddd;
608
+ border-left: 0;
609
+ border-right: 0; }
610
+
611
+ /* Toggler */
612
+ .omapi-ui-toggle-controller {
613
+ margin-right: 8px;
614
+ cursor: pointer;
615
+ margin: 1.5em 0;
616
+ font-size: 13px;
617
+ position: relative; }
618
+
619
+ .omapi-ui-toggle-controller .omapi-field-desc {
620
+ padding-left: 25px; }
621
+
622
+ .omapi-ui-toggle-controller:after {
623
+ content: "\f132";
624
+ position: absolute;
625
+ height: 15px;
626
+ width: 20px;
627
+ top: 24px;
628
+ left: -2px;
629
+ font-size: 20px;
630
+ line-height: 1;
631
+ font-family: 'dashicons'; }
632
+
633
+ .omapi-ui-toggle-controller.toggled:after {
634
+ content: '\f460';
635
+ position: absolute;
636
+ height: 15px;
637
+ width: 20px;
638
+ top: 23px;
639
+ left: -2px;
640
+ font-size: 20px;
641
+ line-height: 1;
642
+ font-family: 'dashicons'; }
643
+
644
+ .omapi-ui-toggle-content {
645
+ display: none; }
646
+
647
+ .visible.omapi-ui-toggle-content {
648
+ display: block; }
649
+
650
+ .omapi-video-container {
651
+ position: relative;
652
+ padding-bottom: 50%;
653
+ padding-top: 25px;
654
+ height: 0; }
655
+
656
+ .omapi-video-container iframe {
657
+ position: absolute;
658
+ top: 0;
659
+ left: 0;
660
+ width: 100%;
661
+ height: 100%; }
662
+
663
+ .omapi-support-links {
664
+ width: 40%;
665
+ margin-top: 1.25em;
666
+ display: inline-block; }
667
+
668
+ .omapi-support-links li {
669
+ font-size: 15px; }
670
+
671
+ .omapi-support-data {
672
+ width: 60%;
673
+ display: inline-block; }
674
+
675
+ .omapi-half-column {
676
+ margin-top: 1.25em; }
677
+
678
+ @media all and (min-width: 1400px) {
679
+ .omapi-half-column {
680
+ width: 50%;
681
+ display: inline-block;
682
+ float: left; }
683
+ .omapi-support-links,
684
+ .omapi-support-data {
685
+ width: calc(50% - 30px);
686
+ margin-left: 30px;
687
+ float: right; } }
688
+
689
+ .omapi-copy-button.button {
690
+ margin-left: 10px; }
691
+
692
+ /* DatePicker Container */
693
+ .ui-datepicker {
694
+ width: auto;
695
+ height: auto;
696
+ margin: 5px auto 0;
697
+ font: 9pt Arial, sans-serif;
698
+ -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.5);
699
+ box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.4);
700
+ background-color: #eee;
701
+ border: 1px solid #ddd; }
702
+
703
+ .ui-datepicker a {
704
+ text-decoration: none;
705
+ position: relative; }
706
+
707
+ .ui-datepicker table {
708
+ width: 100%;
709
+ padding: 0px; }
710
+
711
+ .ui-datepicker-header {
712
+ color: #e0e0e0;
713
+ font-weight: bold;
714
+ -webkit-box-shadow: inset 0 1px 1px 0 #fafafa;
715
+ box-shadow: inset 0 1px 1px 0 rgba(250, 250, 250, 0.2);
716
+ text-shadow: 1px -1px 0px #000;
717
+ line-height: 30px;
718
+ border-width: 1px 0 0 0;
719
+ border-style: solid;
720
+ border-color: #444; }
721
+
722
+ .ui-datepicker-title {
723
+ text-align: center;
724
+ background: #444; }
725
+
726
+ .ui-datepicker-prev, .ui-datepicker-next {
727
+ display: inline-block;
728
+ width: 30px;
729
+ height: 30px;
730
+ text-align: center;
731
+ cursor: pointer;
732
+ overflow: hidden;
733
+ padding-right: 10px;
734
+ padding-left: 10px;
735
+ color: #FFF;
736
+ text-indent: 100%; }
737
+
738
+ .ui-datepicker-prev {
739
+ float: left; }
740
+
741
+ .ui-datepicker-next {
742
+ float: right; }
743
+
744
+ .ui-datepicker-prev:before {
745
+ content: '<';
746
+ position: absolute;
747
+ left: -10px;
748
+ height: 10px;
749
+ width: 10px; }
750
+
751
+ .ui-datepicker-next:before {
752
+ content: '>';
753
+ position: absolute;
754
+ left: -10px;
755
+ height: 10px;
756
+ width: 10px; }
757
+
758
+ .ui-datepicker thead {
759
+ background-color: #f7f7f7;
760
+ border-bottom: 1px solid #000; }
761
+
762
+ .ui-datepicker th {
763
+ text-transform: uppercase;
764
+ font-size: 6pt;
765
+ padding: 5px 0;
766
+ margin-bottom: 1px;
767
+ color: #666666;
768
+ text-shadow: 1px 0px 0px #fff;
769
+ -webkit-box-shadow: 0px 1px 0px 1px #E0E0E0;
770
+ box-shadow: 0px 1px 0px 1px #E0E0E0; }
771
+
772
+ .ui-datepicker tbody td {
773
+ -webkit-box-shadow: 0px 1px 0px 1px #E0E0E0;
774
+ box-shadow: 0px 1px 0px 1px #E0E0E0;
775
+ padding: 0px; }
776
+
777
+ .ui-datepicker tbody td:last-child {
778
+ border-right: 0px; }
779
+
780
+ .ui-datepicker tbody tr {
781
+ border-bottom: 1px solid #bbb; }
782
+
783
+ .ui-datepicker td span, .ui-datepicker td a {
784
+ display: inline-block;
785
+ font-weight: bold;
786
+ text-align: center;
787
+ width: 30px;
788
+ height: 30px;
789
+ line-height: 30px;
790
+ color: #666666; }
791
+
792
+ .ui-datepicker-calendar .ui-state-default {
793
+ background: #ededed; }
794
+
795
+ .ui-datepicker-calendar .ui-state-hover {
796
+ background: #8ed41e;
797
+ color: #fff; }
798
+
799
+ .ui-datepicker-calendar .ui-state-active {
800
+ background: #0d82df;
801
+ color: #fff;
802
+ position: relative; }
803
+
804
+ .ui-datepicker-unselectable .ui-state-default {
805
+ background: #f4f4f4;
806
+ color: #b4b3b3; }
807
+
808
+ .ui-datepicker-calendar td:first-child .ui-state-active {
809
+ width: 29px;
810
+ margin-left: 0; }
811
+
812
+ .ui-datepicker-calendar td:last-child .ui-state-active {
813
+ width: 29px;
814
+ margin-right: 0; }
815
+
816
+ /** Tooltips **/
817
+ .omapi-has-tooltip:after {
818
+ content: '\f223';
819
+ color: #ccc;
820
+ position: absolute;
821
+ display: inline-block;
822
+ width: 17px;
823
+ height: 17px;
824
+ font-size: 17px;
825
+ line-height: 1;
826
+ font-family: 'dashicons';
827
+ text-decoration: inherit;
828
+ font-weight: 400;
829
+ font-style: normal;
830
+ vertical-align: middle;
831
+ text-align: center;
832
+ -webkit-transition: color .1s ease-in 0;
833
+ transition: color .1s ease-in 0;
834
+ -webkit-font-smoothing: antialiased;
835
+ -moz-osx-font-smoothing: grayscale;
836
+ padding-left: 3px;
837
+ padding-top: 2px; }
838
+
839
+ .tooltip {
840
+ position: absolute;
841
+ z-index: 1070;
842
+ display: block;
843
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
844
+ font-style: normal;
845
+ font-weight: normal;
846
+ letter-spacing: normal;
847
+ line-break: auto;
848
+ line-height: 1.42857143;
849
+ text-align: left;
850
+ text-align: start;
851
+ text-decoration: none;
852
+ text-shadow: none;
853
+ text-transform: none;
854
+ white-space: normal;
855
+ word-break: normal;
856
+ word-spacing: normal;
857
+ word-wrap: normal;
858
+ font-size: 12px;
859
+ opacity: 0;
860
+ filter: alpha(opacity=0); }
861
+
862
+ .tooltip.in {
863
+ opacity: 0.9;
864
+ filter: alpha(opacity=90); }
865
+
866
+ .tooltip.top {
867
+ margin-top: -3px;
868
+ padding: 5px 0; }
869
+
870
+ .tooltip.right {
871
+ margin-left: 3px;
872
+ padding: 0 5px; }
873
+
874
+ .tooltip.bottom {
875
+ margin-top: 3px;
876
+ padding: 5px 0; }
877
+
878
+ .tooltip.left {
879
+ margin-left: -3px;
880
+ padding: 0 5px; }
881
+
882
+ .tooltip-inner {
883
+ max-width: 200px;
884
+ padding: 10px 10px 9px;
885
+ color: #ffffff;
886
+ text-align: center;
887
+ background-color: #000000;
888
+ border-radius: 4px; }
889
+
890
+ .tooltip-arrow {
891
+ position: absolute;
892
+ width: 0;
893
+ height: 0;
894
+ border-color: transparent;
895
+ border-style: solid; }
896
+
897
+ .tooltip.top .tooltip-arrow {
898
+ bottom: 0;
899
+ left: 50%;
900
+ margin-left: -5px;
901
+ border-width: 5px 5px 0;
902
+ border-top-color: #000000; }
903
+
904
+ .tooltip.top-left .tooltip-arrow {
905
+ bottom: 0;
906
+ right: 5px;
907
+ margin-bottom: -5px;
908
+ border-width: 5px 5px 0;
909
+ border-top-color: #000000; }
910
+
911
+ .tooltip.top-right .tooltip-arrow {
912
+ bottom: 0;
913
+ left: 5px;
914
+ margin-bottom: -5px;
915
+ border-width: 5px 5px 0;
916
+ border-top-color: #000000; }
917
+
918
+ .tooltip.right .tooltip-arrow {
919
+ top: 50%;
920
+ left: 0;
921
+ margin-top: -5px;
922
+ border-width: 5px 5px 5px 0;
923
+ border-right-color: #000000; }
924
+
925
+ .tooltip.left .tooltip-arrow {
926
+ top: 50%;
927
+ right: 0;
928
+ margin-top: -5px;
929
+ border-width: 5px 0 5px 5px;
930
+ border-left-color: #000000; }
931
+
932
+ .tooltip.bottom .tooltip-arrow {
933
+ top: 0;
934
+ left: 50%;
935
+ margin-left: -5px;
936
+ border-width: 0 5px 5px;
937
+ border-bottom-color: #000000; }
938
+
939
+ .tooltip.bottom-left .tooltip-arrow {
940
+ top: 0;
941
+ right: 5px;
942
+ margin-top: -5px;
943
+ border-width: 0 5px 5px;
944
+ border-bottom-color: #000000; }
945
+
946
+ .tooltip.bottom-right .tooltip-arrow {
947
+ top: 0;
948
+ left: 5px;
949
+ margin-top: -5px;
950
+ border-width: 0 5px 5px;
951
+ border-bottom-color: #000000; }
952
+
953
+ .manually-connect-wc {
954
+ display: block;
955
+ padding-top: 8px; }
assets/dist/css/settings.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=48)})({48:function(){}});
assets/dist/css/trustpulse.min.css ADDED
@@ -0,0 +1,329 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #adminmenu .toplevel-page-trustpulse-settings div.wp-menu-image {
2
+ height: 30px; }
3
+
4
+ @font-face {
5
+ font-family: 'Averta';
6
+ src: url(../../fonts/Averta-Regular.eot);
7
+ src: url(../../fonts/Averta-Regular.eot?#iefix) format("embedded-opentype"), url(../../fonts/Averta-Regular.woff) format("woff"), url(../../fonts/Averta-Regular.ttf) format("truetype");
8
+ font-weight: normal;
9
+ font-style: normal; }
10
+
11
+ @font-face {
12
+ font-family: 'Averta';
13
+ src: url(../../fonts/Averta-Semibold.eot);
14
+ src: url(../../fonts/Averta-Semibold.eot?#iefix) format("embedded-opentype"), url(../../fonts/Averta-Semibold.woff) format("woff"), url(../../fonts/Averta-Semibold.ttf) format("truetype");
15
+ font-weight: 500;
16
+ font-style: normal; }
17
+
18
+ @font-face {
19
+ font-family: 'Averta';
20
+ src: url(../../fonts/Averta-Bold.eot);
21
+ src: url(../../fonts/Averta-Bold.eot?#iefix) format("embedded-opentype"), url(../../fonts/Averta-Bold.woff) format("woff"), url(../../fonts/Averta-Bold.ttf) format("truetype");
22
+ font-weight: bold;
23
+ font-style: normal; }
24
+
25
+ @font-face {
26
+ font-family: 'Averta';
27
+ src: url(../../fonts/Averta-ExtraBoldItalic.eot);
28
+ src: url(../../fonts/Averta-ExtraBoldItalic.eot?#iefix) format("embedded-opentype"), url(../../fonts/Averta-ExtraBoldItalic.woff) format("woff"), url(../../fonts/Averta-ExtraBoldItalic.ttf) format("truetype");
29
+ font-weight: bold;
30
+ font-style: italic, oblique; }
31
+
32
+ .tp-works-on {
33
+ margin-top: 60px; }
34
+ .tp-works-on .tp-heading {
35
+ line-height: 36px; }
36
+ .tp-works-on__icons {
37
+ display: -webkit-box;
38
+ display: -ms-flexbox;
39
+ display: flex;
40
+ -ms-flex-wrap: wrap;
41
+ flex-wrap: wrap;
42
+ -webkit-box-pack: justify;
43
+ -ms-flex-pack: justify;
44
+ justify-content: space-between;
45
+ -webkit-box-align: center;
46
+ -ms-flex-align: center;
47
+ align-items: center;
48
+ margin-bottom: 30px; }
49
+ .tp-works-on__icon {
50
+ width: 200px;
51
+ height: auto;
52
+ margin-bottom: 20px; }
53
+
54
+ #wpcontent .main-navigation {
55
+ display: -webkit-box;
56
+ display: -ms-flexbox;
57
+ display: flex;
58
+ -webkit-box-pack: end;
59
+ -ms-flex-pack: end;
60
+ justify-content: flex-end; }
61
+
62
+ #wpcontent .navbar-header {
63
+ width: 100%;
64
+ background-color: #fff;
65
+ border-bottom: 1px solid #e5ecf6; }
66
+
67
+ #wpcontent .navbar-brand {
68
+ height: 38px; }
69
+
70
+ #wpcontent .navbar {
71
+ display: -webkit-box;
72
+ display: -ms-flexbox;
73
+ display: flex;
74
+ margin: 0 auto;
75
+ font-size: 16px;
76
+ -webkit-box-align: center;
77
+ -ms-flex-align: center;
78
+ align-items: center;
79
+ background: transparent;
80
+ -webkit-box-pack: justify;
81
+ -ms-flex-pack: justify;
82
+ justify-content: space-between;
83
+ padding: 10px 20px;
84
+ line-height: 1; }
85
+ #wpcontent .navbar img {
86
+ max-height: 100%; }
87
+ #wpcontent .navbar .hover-underline {
88
+ border-bottom: 2px solid transparent; }
89
+ #wpcontent .navbar .navbar-menu {
90
+ text-align: right; }
91
+ #wpcontent .navbar a {
92
+ font-weight: 400; }
93
+ #wpcontent .navbar .menu-top-navbar-menu-container {
94
+ height: 38px; }
95
+
96
+ #wpcontent a.navbar-item {
97
+ text-decoration: none;
98
+ color: #364150;
99
+ margin-right: 10px; }
100
+ #wpcontent a.navbar-item.is-active, #wpcontent a.navbar-item:hover {
101
+ background-color: transparent;
102
+ height: calc($navbar-height + 2px);
103
+ color: #3a546f; }
104
+ #wpcontent a.navbar-item.is-active .hover-underline, #wpcontent a.navbar-item:hover .hover-underline {
105
+ border-bottom: 2px solid #0db1eb; }
106
+
107
+ @media screen and (max-width: 1087px) {
108
+ #wpcontent .navbar-brand {
109
+ width: 100%; } }
110
+
111
+ @media screen and (max-width: 1087px) {
112
+ #wpcontent .navbar-menu.is-active {
113
+ display: block;
114
+ position: absolute;
115
+ top: 65px; }
116
+ #wpcontent .navbar-menu.is-active .navbar {
117
+ display: -webkit-box;
118
+ display: -ms-flexbox;
119
+ display: flex;
120
+ -webkit-box-orient: vertical;
121
+ -webkit-box-direction: normal;
122
+ -ms-flex-direction: column;
123
+ flex-direction: column;
124
+ width: 100vw;
125
+ text-align: left;
126
+ -webkit-box-align: start;
127
+ -ms-flex-align: start;
128
+ align-items: flex-start;
129
+ padding-right: 0; }
130
+ #wpcontent .navbar-menu.is-active .navbar-item {
131
+ width: 100%;
132
+ border-top: 1px solid #e5ecf6; } }
133
+
134
+ #adminmenu .toplevel-page-trustpulse-settings div.wp-menu-image {
135
+ height: 30px; }
136
+
137
+ .optinmonster_page_optin-monster-trustpulse #wpwrap {
138
+ background: #f7faff; }
139
+
140
+ .optinmonster_page_optin-monster-trustpulse #wpcontent {
141
+ padding: 0; }
142
+
143
+ .optinmonster_page_optin-monster-trustpulse #wpbody {
144
+ font-family: "Averta", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
145
+ color: #364150; }
146
+ .optinmonster_page_optin-monster-trustpulse #wpbody .button {
147
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; }
148
+ .optinmonster_page_optin-monster-trustpulse #wpbody .text-center {
149
+ text-align: center; }
150
+ .optinmonster_page_optin-monster-trustpulse #wpbody .notice {
151
+ margin-top: 20px; }
152
+ .optinmonster_page_optin-monster-trustpulse #wpbody .update-nag {
153
+ display: none; }
154
+ .optinmonster_page_optin-monster-trustpulse #wpbody p {
155
+ font-size: 16px; }
156
+ .optinmonster_page_optin-monster-trustpulse #wpbody a:not(.button-primary) {
157
+ color: #364150;
158
+ -webkit-text-decoration-color: #0db1eb;
159
+ text-decoration-color: #0db1eb;
160
+ font-weight: 500; }
161
+ .optinmonster_page_optin-monster-trustpulse #wpbody a:not(.button-primary):hover {
162
+ color: #0db1eb; }
163
+ .optinmonster_page_optin-monster-trustpulse #wpbody .trustpulse-wrap {
164
+ max-width: 720px;
165
+ margin: 0 auto; }
166
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box {
167
+ position: relative;
168
+ -webkit-box-sizing: border-box;
169
+ box-sizing: border-box;
170
+ background: #ffffff;
171
+ max-width: 840px;
172
+ margin: 0 auto;
173
+ padding: 30px;
174
+ border-radius: 10px;
175
+ border: 1px solid #e5ecf6;
176
+ text-align: center; }
177
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box p {
178
+ margin-bottom: 30px; }
179
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box--video {
180
+ margin-top: 40px;
181
+ height: 360px; }
182
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box--video .tp-video-button {
183
+ cursor: pointer;
184
+ position: absolute;
185
+ left: calc(50% - 125px);
186
+ top: calc(50% - 40px);
187
+ width: 250px;
188
+ z-index: 1; }
189
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box--video .tp-video-background {
190
+ position: absolute;
191
+ left: 0;
192
+ bottom: 0;
193
+ width: 100%;
194
+ opacity: .3; }
195
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box--video p {
196
+ margin-top: 0; }
197
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-or-line {
198
+ margin: 5px auto; }
199
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box-group {
200
+ display: -webkit-box;
201
+ display: -ms-flexbox;
202
+ display: flex;
203
+ -webkit-box-pack: justify;
204
+ -ms-flex-pack: justify;
205
+ justify-content: space-between;
206
+ width: 840px;
207
+ margin: 20px auto; }
208
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-admin-box-group .tp-admin-box {
209
+ width: 32%; }
210
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-heading, .optinmonster_page_optin-monster-trustpulse #wpbody .tp-subheading {
211
+ line-height: 1.5em;
212
+ text-align: center; }
213
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-heading {
214
+ font-size: 28px;
215
+ font-weight: bold;
216
+ letter-spacing: -1px;
217
+ margin-top: 50px; }
218
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-subheading {
219
+ margin-top: -15px;
220
+ margin-bottom: 70px; }
221
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features {
222
+ max-width: 840px;
223
+ margin: 0 auto; }
224
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature {
225
+ display: -webkit-box;
226
+ display: -ms-flexbox;
227
+ display: flex;
228
+ -ms-flex-wrap: wrap;
229
+ flex-wrap: wrap;
230
+ -webkit-box-pack: justify;
231
+ -ms-flex-pack: justify;
232
+ justify-content: space-between;
233
+ margin-bottom: 20px; }
234
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature.tp-feature--text-left {
235
+ -webkit-box-orient: horizontal;
236
+ -webkit-box-direction: reverse;
237
+ -ms-flex-direction: row-reverse;
238
+ flex-direction: row-reverse; }
239
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature__image {
240
+ width: 325px; }
241
+ @media screen and (max-width: 400px) {
242
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature__image {
243
+ width: 100%;
244
+ margin-bottom: 20px; } }
245
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature__text {
246
+ display: -webkit-box;
247
+ display: -ms-flexbox;
248
+ display: flex;
249
+ -webkit-box-orient: vertical;
250
+ -webkit-box-direction: normal;
251
+ -ms-flex-direction: column;
252
+ flex-direction: column;
253
+ -webkit-box-pack: center;
254
+ -ms-flex-pack: center;
255
+ justify-content: center;
256
+ width: 350px; }
257
+ @media screen and (max-width: 400px) {
258
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature__text {
259
+ width: 100%; } }
260
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-features .tp-feature__text h3 {
261
+ font-size: 22px;
262
+ font-weight: bold;
263
+ margin-bottom: 0; }
264
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-content-row {
265
+ display: -webkit-box;
266
+ display: -ms-flexbox;
267
+ display: flex;
268
+ -ms-flex-line-pack: center;
269
+ align-content: center;
270
+ -webkit-box-pack: center;
271
+ -ms-flex-pack: center;
272
+ justify-content: center; }
273
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-content-row__item {
274
+ display: -webkit-box;
275
+ display: -ms-flexbox;
276
+ display: flex;
277
+ -webkit-box-align: center;
278
+ -ms-flex-align: center;
279
+ align-items: center;
280
+ margin: 0 5px; }
281
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button {
282
+ cursor: pointer;
283
+ display: -webkit-inline-box;
284
+ display: -ms-inline-flexbox;
285
+ display: inline-flex;
286
+ font-weight: bold;
287
+ background-color: #16bd83;
288
+ font-size: 18px;
289
+ border-radius: 100px;
290
+ border-color: transparent;
291
+ color: #ffffff;
292
+ -webkit-box-align: center;
293
+ -ms-flex-align: center;
294
+ align-items: center;
295
+ -webkit-box-pack: center;
296
+ -ms-flex-pack: center;
297
+ justify-content: center;
298
+ padding: 10px 25px;
299
+ text-align: center;
300
+ white-space: nowrap;
301
+ min-width: 100px;
302
+ text-decoration: none; }
303
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button:hover {
304
+ background-color: #19d191;
305
+ color: #ffffff; }
306
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--full {
307
+ width: 100%; }
308
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--large {
309
+ padding: 15px 60px;
310
+ font-size: 22px; }
311
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--blue {
312
+ cursor: pointer;
313
+ background: #fff;
314
+ border: 1px solid #e5ecf6;
315
+ border-radius: 100px;
316
+ padding: 10px 25px;
317
+ color: #364150;
318
+ font-weight: 700; }
319
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--blue:hover {
320
+ background-color: #205fbd;
321
+ border-color: #205fbd; }
322
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--white {
323
+ color: #364150;
324
+ background-color: #ffffff;
325
+ border: 1px solid #e5ecf6; }
326
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-button--white:hover {
327
+ background-color: #205fbd; }
328
+ .optinmonster_page_optin-monster-trustpulse #wpbody .tp-alert {
329
+ color: #ee7979; }
assets/dist/css/trustpulse.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=44)})({44:function(){}});
assets/dist/js/campaign-selector.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(n,'a',n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=49)})([function(e){var t=e.exports={version:'2.6.9'};'number'==typeof __e&&(__e=t)},function(e){var t=e.exports='undefined'!=typeof window&&window.Math==Math?window:'undefined'!=typeof self&&self.Math==Math?self:Function('return this')();'number'==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(9)(function(){return 7!=Object.defineProperty({},'a',{get:function(){return 7}}).a})},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var o=n(1),r=n(0),l=n(34),a=n(7),s=n(3),i='prototype',p=function(e,t,n){var d,c,u,m=e&p.F,C=e&p.G,f=e&p.S,g=e&p.P,y=e&p.B,E=e&p.W,h=C?r:r[t]||(r[t]={}),_=h[i],b=C?o:f?o[t]:(o[t]||{})[i];for(d in C&&(n=t),n)c=!m&&b&&void 0!==b[d],c&&s(h,d)||(u=c?b[d]:n[d],h[d]=C&&'function'!=typeof b[d]?n[d]:y&&c?l(u,o):E&&b[d]==u?function(e){var t=function(t,n,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n);}return new e(t,n,o)}return e.apply(this,arguments)};return t[i]=e[i],t}(u):g&&'function'==typeof u?l(Function.call,u):u,g&&((h.virtual||(h.virtual={}))[d]=u,e&p.R&&_&&!_[d]&&a(_,d,u)))};p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,p.U=64,p.R=128,e.exports=p},function(e,t,n){var o=n(13),r=n(35),l=n(23),a=Object.defineProperty;t.f=n(2)?Object.defineProperty:function(e,t,n){if(o(e),t=l(t,!0),o(n),r)try{return a(e,t,n)}catch(t){}if('get'in n||'set'in n)throw TypeError('Accessors not supported!');return'value'in n&&(e[t]=n.value),e}},function(e,t,n){var o=n(31),r=n(18);e.exports=function(e){return o(r(e))}},function(e,t,n){var o=n(5),r=n(16);e.exports=n(2)?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e){e.exports=function(e){return'object'==typeof e?null!==e:'function'==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){var o=n(21)('wks'),r=n(15),l=n(1).Symbol,a='function'==typeof l,s=e.exports=function(e){return o[e]||(o[e]=a&&l[e]||(a?l:r)('Symbol.'+e))};s.store=o},function(e,t,n){var o=n(18);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(30),r=n(22);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){var o=n(8);e.exports=function(e){if(!o(e))throw TypeError(e+' is not an object!');return e}},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return'Symbol('.concat(e===void 0?'':e,')_',(++t+n).toString(36))}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){t.f={}.propertyIsEnumerable},function(e){e.exports=function(e){if(e==void 0)throw TypeError('Can\'t call method on '+e);return e}},function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?n:t)(e)}},function(e,t,n){var o=n(21)('keys'),r=n(15);e.exports=function(e){return o[e]||(o[e]=r(e))}},function(e,t,n){var o=n(0),r=n(1),l='__core-js_shared__',a=r[l]||(r[l]={});(e.exports=function(e,t){return a[e]||(a[e]=t===void 0?{}:t)})('versions',[]).push({version:o.version,mode:n(14)?'pure':'global',copyright:'\xA9 2019 Denis Pushkarev (zloirock.ru)'})},function(e){e.exports=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf']},function(e,t,n){var o=n(8);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&'function'==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if('function'==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&'function'==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError('Can\'t convert object to primitive value')}},function(e){e.exports={}},function(e,t,n){var o=n(13),r=n(71),l=n(22),a=n(20)('IE_PROTO'),s=function(){},p='prototype',d=function(){var e,t=n(36)('iframe'),o=l.length,r='<',a='>';for(t.style.display='none',n(72).appendChild(t),t.src='javascript:',e=t.contentWindow.document,e.open(),e.write(r+'script'+a+'document.F=Object'+r+'/script'+a),e.close(),d=e.F;o--;)delete d[p][l[o]];return d()};e.exports=Object.create||function(e,t){var n;return null===e?n=d():(s[p]=o(e),n=new s,s[p]=null,n[a]=e),void 0===t?n:r(n,t)}},function(e,t,n){var o=n(5).f,r=n(3),l=n(10)('toStringTag');e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,l)&&o(e,l,{configurable:!0,value:t})}},function(e,t,n){t.f=n(10)},function(e,t,n){var o=n(1),r=n(0),l=n(14),a=n(27),s=n(5).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=l?{}:o.Symbol||{});'_'==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var o=n(3),r=n(6),l=n(53)(!1),a=n(20)('IE_PROTO');e.exports=function(e,t){var n,s=r(e),p=0,i=[];for(n in s)n!=a&&o(s,n)&&i.push(n);for(;t.length>p;)o(s,n=t[p++])&&(~l(i,n)||i.push(n));return i}},function(e,t,n){var o=n(32);e.exports=Object('z').propertyIsEnumerable(0)?Object:function(e){return'String'==o(e)?e.split(''):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var o=n(4),r=n(0),l=n(9);e.exports=function(e,t){var n=(r.Object||{})[e]||Object[e],a={};a[e]=t(n),o(o.S+o.F*l(function(){n(1)}),'Object',a)}},function(e,t,n){var o=n(56);e.exports=function(e,t,n){return(o(e),void 0===t)?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,o){return e.call(t,n,o)}:3===n?function(n,o,r){return e.call(t,n,o,r)}:function(){return e.apply(t,arguments)}}},function(e,t,n){e.exports=!n(2)&&!n(9)(function(){return 7!=Object.defineProperty(n(36)('div'),'a',{get:function(){return 7}}).a})},function(e,t,n){var o=n(8),r=n(1).document,l=o(r)&&o(r.createElement);e.exports=function(e){return l?r.createElement(e):{}}},function(e,t,n){var o=n(3),r=n(11),l=n(20)('IE_PROTO'),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),o(e,l)?e[l]:'function'==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){'use strict';function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(66),l=o(r),a=n(77),s=o(a),i='function'==typeof s.default&&'symbol'==typeof l.default?function(e){return typeof e}:function(e){return e&&'function'==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?'symbol':typeof e};t.default='function'==typeof s.default&&'symbol'===i(l.default)?function(e){return'undefined'==typeof e?'undefined':i(e)}:function(e){return e&&'function'==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?'symbol':'undefined'==typeof e?'undefined':i(e)}},function(e,t,n){'use strict';var o=n(14),r=n(4),l=n(40),a=n(7),s=n(24),i=n(70),p=n(26),d=n(37),c=n(10)('iterator'),u=!([].keys&&'next'in[].keys()),m='keys',C='values',f=function(){return this};e.exports=function(e,t,n,g,y,E,h){i(n,t,g);var _,b,x,O=function(e){return!u&&e in k?k[e]:e===m?function(){return new n(this,e)}:e===C?function(){return new n(this,e)}:function(){return new n(this,e)}},v=t+' Iterator',S=y==C,P=!1,k=e.prototype,M=k[c]||k['@@iterator']||y&&k[y],T=M||O(y),w=y?S?O('entries'):T:void 0,L='Array'==t?k.entries||M:M;if(L&&(x=d(L.call(new e)),x!==Object.prototype&&x.next&&(p(x,v,!0),!o&&'function'!=typeof x[c]&&a(x,c,f))),S&&M&&M.name!==C&&(P=!0,T=function(){return M.call(this)}),(!o||h)&&(u||P||!k[c])&&a(k,c,T),s[t]=T,s[v]=f,y)if(_={values:S?T:O(C),keys:E?T:O(m),entries:w},h)for(b in _)b in k||l(k,b,_[b]);else r(r.P+r.F*(u||P),t,_);return _}},function(e,t,n){e.exports=n(7)},function(e,t,n){var o=n(30),r=n(22).concat('length','prototype');t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},function(e,t,n){var o=n(17),r=n(16),l=n(6),a=n(23),s=n(3),i=n(35),p=Object.getOwnPropertyDescriptor;t.f=n(2)?p:function(e,t){if(e=l(e),t=a(t,!0),i)try{return p(e,t)}catch(t){}return s(e,t)?r(!o.f.call(e,t),e[t]):void 0}},function(e){e.exports=React},,,,,,function(e,t,n){'use strict';function o(e){return e&&e.__esModule?e:{default:e}}var r,l,a,s=n(50),i=o(s),p=n(57),d=o(p),c=n(60),u=o(c),m=n(61),C=o(m),f=n(65),g=o(f),y=n(87),E=o(y),h=n(95),_=o(h),b=n(101),x=o(b),O=wp.i18n.__,v=wp.element,S=v.Component,P=v.Fragment,k=wp.blockEditor.InspectorControls,M=wp.components,T=M.SelectControl,w=M.ToggleControl,L=M.PanelBody,R=M.Placeholder,I=M.Notice,A=[];wp.blocks.registerBlockType('optinmonster/campaign-selector',{title:OMAPI.i18n.title,description:OMAPI.i18n.description,icon:x.default,category:'embed',keywords:[O('Popup','optin-monster-api'),O('Form','optin-monster-api'),O('Campaign','optin-monster-api'),O('Email','optin-monster-api'),O('Conversion','optin-monster-api')],attributes:{slug:{type:'string'},followrules:{type:'boolean'}},edit:(l=r=function(e){function t(e){(0,u.default)(this,t);var n=(0,g.default)(this,(t.__proto__||(0,d.default)(t)).apply(this,arguments));return a.call(n),n.props=e,n.state={embed:{},loading:!1,hasError:null},n}return(0,E.default)(t,e),(0,C.default)(t,[{key:'componentDidMount',value:function(){document.addEventListener('om.Campaign.init',this.setAsPreview),document.addEventListener('om.Campaign.afterShow',this.loadingStop),document.addEventListener('om.Main.getCampaigns.error',this.foundError),document.addEventListener('om.Campaign.show.error',this.foundError),document.addEventListener('om.Campaign.load.error',this.foundError),this.slug()&&this.fetch()}},{key:'componentWillUnmount',value:function(){var e=this.campaign();e&&(A.push(e),e.off()),document.removeEventListener('om.Campaign.init',this.setAsPreview),document.removeEventListener('om.Campaign.afterShow',this.loadingStop),document.removeEventListener('om.Main.getCampaigns.error',this.foundError),document.removeEventListener('om.Campaign.show.error',this.foundError),document.removeEventListener('om.Campaign.load.error',this.foundError)}},{key:'componentDidUpdate',value:function(e){var t=this.slug(),n=this.getSlug(e);if(t&&n!==t){var o=this.campaign(),r=this.getCampaign(n);this.setState({loading:!0,hasError:!1}),o?o.reset():this.fetch()}}},{key:'render',value:function(){var e=this,t=this.props,n=t.attributes,o=n.slug,r=void 0===o?'':o,l=n.followrules,a=t.setAttributes,s=this.state,i=s.embed,p=s.hasError,d=this.getAvailableOptions(),c=this.getAvailableOptions(!0),u=function(e){return a({slug:e})},m=r&&(!i||this.state.loading);return wp.element.createElement(P,null,function(){return 0<c.length||r?wp.element.createElement(k,{key:'optinmonster-gutenberg-campaign-selector-inspector-controls'},wp.element.createElement(L,{title:OMAPI.i18n.campaign_settings},wp.element.createElement(T,{label:OMAPI.i18n.campaign_selected,value:r,options:c,onChange:u}),r?wp.element.createElement(w,{label:OMAPI.i18n.followrules_label,help:function(){var t=OMAPI.i18n.followrules_help.replace('%s',''),n=OMAPI.editUrl.replace('%d',e.getCampaignId(r));return wp.element.createElement('span',null,wp.element.createElement('span',{dangerouslySetInnerHTML:{__html:t}}),' ',wp.element.createElement('a',{target:'_blank',href:n},OMAPI.i18n.output_settings),'.')}(),checked:!!l,onChange:function(){return a({followrules:!l})}}):null)):null}(),function(){return!p&&m&&wp.element.createElement(_.default,null)}(),function(){if(!p)return null;var e=OMAPI.i18n.found_error;return r&&-1===p.indexOf(r)&&(e=wp.element.createElement(P,null,e,' ',wp.element.createElement('code',null,wp.element.createElement('small',null,r)))),wp.element.createElement('p',{className:'error'},wp.element.createElement('strong',null,e,':'),' ',p)}(),i&&r?this.getOutput():function(){return wp.element.createElement(R,{key:'optinmonster-gutenberg-campaign-selector-wrap',className:'optinmonster-gutenberg-campaign-selector-wrap',label:wp.element.createElement('div',null,wp.element.createElement('img',{src:OMAPI.logoUrl}),wp.element.createElement('h2',null,OMAPI.i18n.title)),instructions:0<d.length?null:wp.element.createElement(I,{status:'warning',isDismissible:!1},wp.element.createElement('div',{style:{marginBottom:'.5em'}},wp.element.createElement('strong',null,OMAPI.i18n.no_campaigns)),wp.element.createElement('p',{class:'description'},OMAPI.i18n.no_campaigns_help))},0<d.length?wp.element.createElement(T,{key:'optinmonster-gutenberg-campaign-selector-select-control',value:r,options:d,onChange:u}):null)}())}}]),t}(S),a=function(){var e=this;this.setAsPreview=function(e){e.detail.Campaign.preview=!0},this.loadingStop=function(t){e.slug()===t.detail.Campaign.id&&e.setState({loading:!1,hasError:!1})},this.foundError=function(t){var n=t.detail,o=n.Campaign,r=n.error,l=e.slug();if(!(o&&l!==o.id)&&!(r.responseURL&&0>r.responseURL.indexOf(l))){var a=r;r.response&&(a=JSON.parse(r.response).message||JSON.parse(r.response).error),r.message&&(a=r.message),e.setState({loading:!1,hasError:a})}},this.fetch=function(){e.setState({loading:!0,hasError:!1});var t=e.slug(),n={type:'text/javascript',src:OMAPI.apiUrl,async:!0,"data-user":OMAPI.omUserId,"data-campaign":t};OMAPI.omEnv&&(n['data-env']=OMAPI.omEnv),e.setState({embed:n})},this.getSlug=function(e){var t=e.attributes.slug,n=t===void 0?'':t;return n},this.slug=function(){return e.getSlug(e.props)},this.getCampaign=function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:'',t='om'+e;return window[t]?window[t]:null},this.campaign=function(){return e.getCampaign(e.slug())},this.getOutput=function(){var t=e.slug(),n=e.state.embed,o=e.campaign();if(!o&&(A.length&&(o=A.find(function(e){return t===e.id}),o&&(A.splice(A.indexOf(o),1),o.reset())),!o&&n&&0<(0,i.default)(n).length)){var r=document.getElementsByTagName('head')[0]||document.documentElement,l=document.createElement('script'),a=void 0;for(a in n)l.setAttribute(a,n[a]);r.appendChild(l)}return wp.element.createElement('div',{key:'om-'+t+'-holder',id:'om-'+t+'-holder'})},this.getAvailableOptions=function(){var t=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],n=e.slug();if(!OMAPI.campaigns||1>OMAPI.campaigns.length||!OMAPI.omUserId)return[];var o=OMAPI.campaigns.filter(function(e){return'inline'===e.campaign_type}),r=o.map(function(e){return{value:e.post_name,label:e.post_title}});return 0<r.length&&r.unshift({value:'',label:OMAPI.i18n.campaign_select}),r},this.getCampaignId=function(e){var t=OMAPI.campaigns.find(function(t){return e===t.post_name});return t?t.ID:0}},l),save:function(){return null}})},function(e,t,n){e.exports={default:n(51),__esModule:!0}},function(e,t,n){n(52),e.exports=n(0).Object.keys},function(e,t,n){var o=n(11),r=n(12);n(33)('keys',function(){return function(e){return r(o(e))}})},function(e,t,n){var o=n(6),r=n(54),l=n(55);e.exports=function(e){return function(t,n,a){var s,i=o(t),p=r(i.length),d=l(a,p);if(e&&n!=n){for(;p>d;)if(s=i[d++],s!=s)return!0;}else for(;p>d;d++)if((e||d in i)&&i[d]===n)return e||d||0;return!e&&-1}}},function(e,t,n){var o=n(19),r=Math.min;e.exports=function(e){return 0<e?r(o(e),9007199254740991):0}},function(e,t,n){var o=n(19),r=Math.max,l=Math.min;e.exports=function(e,t){return e=o(e),0>e?r(e+t,0):l(e,t)}},function(e){e.exports=function(e){if('function'!=typeof e)throw TypeError(e+' is not a function!');return e}},function(e,t,n){e.exports={default:n(58),__esModule:!0}},function(e,t,n){n(59),e.exports=n(0).Object.getPrototypeOf},function(e,t,n){var o=n(11),r=n(37);n(33)('getPrototypeOf',function(){return function(e){return r(o(e))}})},function(e,t){'use strict';t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')}},function(e,t,n){'use strict';t.__esModule=!0;var o=n(62),r=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=function(){function e(e,t){for(var n,o=0;o<t.length;o++)n=t[o],n.enumerable=n.enumerable||!1,n.configurable=!0,'value'in n&&(n.writable=!0),(0,r.default)(e,n.key,n)}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}()},function(e,t,n){e.exports={default:n(63),__esModule:!0}},function(e,t,n){n(64);var o=n(0).Object;e.exports=function(e,t,n){return o.defineProperty(e,t,n)}},function(e,t,n){var o=n(4);o(o.S+o.F*!n(2),'Object',{defineProperty:n(5).f})},function(e,t,n){'use strict';t.__esModule=!0;var o=n(38),r=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=function(e,t){if(!e)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return t&&('object'===('undefined'==typeof t?'undefined':(0,r.default)(t))||'function'==typeof t)?t:e}},function(e,t,n){e.exports={default:n(67),__esModule:!0}},function(e,t,n){n(68),n(73),e.exports=n(27).f('iterator')},function(e,t,n){'use strict';var o=n(69)(!0);n(39)(String,'String',function(e){this._t=e+'',this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=o(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var o=n(19),r=n(18);e.exports=function(e){return function(t,n){var p,a,d=r(t)+'',s=o(n),i=d.length;return 0>s||s>=i?e?'':void 0:(p=d.charCodeAt(s),55296>p||56319<p||s+1===i||56320>(a=d.charCodeAt(s+1))||57343<a?e?d.charAt(s):p:e?d.slice(s,s+2):(p-55296<<10)+(a-56320)+65536)}}},function(e,t,n){'use strict';var o=n(25),r=n(16),l=n(26),a={};n(7)(a,n(10)('iterator'),function(){return this}),e.exports=function(e,t,n){e.prototype=o(a,{next:r(1,n)}),l(e,t+' Iterator')}},function(e,t,n){var o=n(5),r=n(13),l=n(12);e.exports=n(2)?Object.defineProperties:function(e,t){r(e);for(var n,a=l(t),s=a.length,p=0;s>p;)o.f(e,n=a[p++],t[n]);return e}},function(e,t,n){var o=n(1).document;e.exports=o&&o.documentElement},function(e,t,n){n(74);for(var o=n(1),r=n(7),l=n(24),a=n(10)('toStringTag'),s='CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList'.split(','),p=0;p<s.length;p++){var i=s[p],d=o[i],c=d&&d.prototype;c&&!c[a]&&r(c,a,i),l[i]=l.Array}},function(e,t,n){'use strict';var o=n(75),r=n(76),l=n(24),a=n(6);e.exports=n(39)(Array,'Array',function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):'keys'==t?r(0,n):'values'==t?r(0,e[n]):r(0,[n,e[n]])},'values'),l.Arguments=l.Array,o('keys'),o('values'),o('entries')},function(e){e.exports=function(){}},function(e){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){e.exports={default:n(78),__esModule:!0}},function(e,t,n){n(79),n(84),n(85),n(86),e.exports=n(0).Symbol},function(e,t,n){'use strict';var o=n(1),r=n(3),l=n(2),a=n(4),s=n(40),p=n(80).KEY,i=n(9),d=n(21),c=n(26),u=n(15),m=n(10),C=n(27),f=n(28),g=n(81),y=n(82),E=n(13),h=n(8),_=n(11),b=n(6),x=n(23),O=n(16),v=n(25),S=n(83),P=n(42),M=n(29),T=n(5),w=n(12),L=P.f,R=T.f,I=S.f,A=o.Symbol,D=o.JSON,N=D&&D.stringify,Z='prototype',F=m('_hidden'),Y=m('toPrimitive'),z={}.propertyIsEnumerable,H=d('symbol-registry'),G=d('symbols'),U=d('op-symbols'),W=Object[Z],V='function'==typeof A&&!!M.f,B=o.QObject,K=!B||!B[Z]||!B[Z].findChild,J=l&&i(function(){return 7!=v(R({},'a',{get:function(){return R(this,'a',{value:7}).a}})).a})?function(e,t,n){var o=L(W,t);o&&delete W[t],R(e,t,n),o&&e!==W&&R(W,t,o)}:R,q=function(e){var t=G[e]=v(A[Z]);return t._k=e,t},Q=V&&'symbol'==typeof A.iterator?function(e){return'symbol'==typeof e}:function(e){return e instanceof A},X=function(e,t,n){return e===W&&X(U,t,n),E(e),t=x(t,!0),E(n),r(G,t)?(n.enumerable?(r(e,F)&&e[F][t]&&(e[F][t]=!1),n=v(n,{enumerable:O(0,!1)})):(!r(e,F)&&R(e,F,O(1,{})),e[F][t]=!0),J(e,t,n)):R(e,t,n)},$=function(e,t){E(e);for(var n,o=g(t=b(t)),r=0,a=o.length;a>r;)X(e,n=o[r++],t[n]);return e},ee=function(e){var t=z.call(this,e=x(e,!0));return(this!==W||!r(G,e)||r(U,e))&&(!(t||!r(this,e)||!r(G,e)||r(this,F)&&this[F][e])||t)},te=function(e,t){if(e=b(e),t=x(t,!0),e!==W||!r(G,t)||r(U,t)){var n=L(e,t);return n&&r(G,t)&&!(r(e,F)&&e[F][t])&&(n.enumerable=!0),n}},ne=function(e){for(var t,n=I(b(e)),o=[],l=0;n.length>l;)r(G,t=n[l++])||t==F||t==p||o.push(t);return o},oe=function(e){for(var t,n=e===W,o=I(n?U:b(e)),l=[],a=0;o.length>a;)r(G,t=o[a++])&&(!n||r(W,t))&&l.push(G[t]);return l};V||(A=function(){if(this instanceof A)throw TypeError('Symbol is not a constructor!');var e=u(0<arguments.length?arguments[0]:void 0),t=function(n){this===W&&t.call(U,n),r(this,F)&&r(this[F],e)&&(this[F][e]=!1),J(this,e,O(1,n))};return l&&K&&J(W,e,{configurable:!0,set:t}),q(e)},s(A[Z],'toString',function(){return this._k}),P.f=te,T.f=X,n(41).f=S.f=ne,n(17).f=ee,M.f=oe,l&&!n(14)&&s(W,'propertyIsEnumerable',ee,!0),C.f=function(e){return q(m(e))}),a(a.G+a.W+a.F*!V,{Symbol:A});for(var re=['hasInstance','isConcatSpreadable','iterator','match','replace','search','species','split','toPrimitive','toStringTag','unscopables'],le=0;re.length>le;)m(re[le++]);for(var j=w(m.store),ae=0;j.length>ae;)f(j[ae++]);a(a.S+a.F*!V,'Symbol',{for:function(e){return r(H,e+='')?H[e]:H[e]=A(e)},keyFor:function(e){if(!Q(e))throw TypeError(e+' is not a symbol!');for(var t in H)if(H[t]===e)return t},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!V,'Object',{create:function(e,t){return t===void 0?v(e):$(v(e),t)},defineProperty:X,defineProperties:$,getOwnPropertyDescriptor:te,getOwnPropertyNames:ne,getOwnPropertySymbols:oe});var k=i(function(){M.f(1)});a(a.S+a.F*k,'Object',{getOwnPropertySymbols:function(e){return M.f(_(e))}}),D&&a(a.S+a.F*(!V||i(function(){var e=A();return'[null]'!=N([e])||'{}'!=N({a:e})||'{}'!=N(Object(e))})),'JSON',{stringify:function(e){for(var t,n,o=[e],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=t=o[1],(h(t)||void 0!==e)&&!Q(e))return y(t)||(t=function(e,t){if('function'==typeof n&&(t=n.call(this,e,t)),!Q(t))return t}),o[1]=t,N.apply(D,o)}}),A[Z][Y]||n(7)(A[Z],Y,A[Z].valueOf),c(A,'Symbol'),c(Math,'Math',!0),c(o.JSON,'JSON',!0)},function(e,t,n){var o=n(15)('meta'),r=n(8),l=n(3),a=n(5).f,s=0,i=Object.isExtensible||function(){return!0},p=!n(9)(function(){return i(Object.preventExtensions({}))}),d=function(e){a(e,o,{value:{i:'O'+ ++s,w:{}}})},c=e.exports={KEY:o,NEED:!1,fastKey:function(e,t){if(!r(e))return'symbol'==typeof e?e:('string'==typeof e?'S':'P')+e;if(!l(e,o)){if(!i(e))return'F';if(!t)return'E';d(e)}return e[o].i},getWeak:function(e,t){if(!l(e,o)){if(!i(e))return!0;if(!t)return!1;d(e)}return e[o].w},onFreeze:function(e){return p&&c.NEED&&i(e)&&!l(e,o)&&d(e),e}}},function(e,t,n){var o=n(12),r=n(29),l=n(17);e.exports=function(e){var t=o(e),n=r.f;if(n)for(var a,s=n(e),p=l.f,d=0;s.length>d;)p.call(e,a=s[d++])&&t.push(a);return t}},function(e,t,n){var o=n(32);e.exports=Array.isArray||function(e){return'Array'==o(e)}},function(e,t,n){var o=n(6),r=n(41).f,l={}.toString,a='object'==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&'[object Window]'==l.call(e)?s(e):r(o(e))}},function(){},function(e,t,n){n(28)('asyncIterator')},function(e,t,n){n(28)('observable')},function(e,t,n){'use strict';function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(88),l=o(r),a=n(92),s=o(a),i=n(38),p=o(i);t.default=function(e,t){if('function'!=typeof t&&null!==t)throw new TypeError('Super expression must either be null or a function, not '+('undefined'==typeof t?'undefined':(0,p.default)(t)));e.prototype=(0,s.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(l.default?(0,l.default)(e,t):e.__proto__=t)}},function(e,t,n){e.exports={default:n(89),__esModule:!0}},function(e,t,n){n(90),e.exports=n(0).Object.setPrototypeOf},function(e,t,n){var o=n(4);o(o.S,'Object',{setPrototypeOf:n(91).set})},function(e,t,n){var o=n(8),r=n(13),l=function(e,t){if(r(e),!o(t)&&null!==t)throw TypeError(t+': can\'t set as prototype!')};e.exports={set:Object.setPrototypeOf||('__proto__'in{}?function(e,t,o){try{o=n(34)(Function.call,n(42).f(Object.prototype,'__proto__').set,2),o(e,[]),t=!(e instanceof Array)}catch(n){t=!0}return function(e,n){return l(e,n),t?e.__proto__=n:o(e,n),e}}({},!1):void 0),check:l}},function(e,t,n){e.exports={default:n(93),__esModule:!0}},function(e,t,n){n(94);var o=n(0).Object;e.exports=function(e,t){return o.create(e,t)}},function(e,t,n){var o=n(4);o(o.S,'Object',{create:n(25)})},function(e,t,n){'use strict';function o(e){return e&&e.__esModule?e:{default:e}}function r(e){var t=e.width,n=e.fill,o=(0,a.default)({},e.wrapperStyles,{display:'flex',alignItems:'center',justifyContent:'center'});return wp.element.createElement('div',{style:o,className:'om-archie-loader'},wp.element.createElement('svg',{height:'100%',width:'100%',version:'1.1',viewBox:'0 0 50 50',style:{maxWidth:t+'px'}},wp.element.createElement('circle',{cx:'25',cy:'25',r:'23',style:{stroke:n}}),wp.element.createElement('path',{d:'M12.75 27.84c.3.06.83.12 1.07.42l.12.11c.36-.05.72-.05 1.08-.11-.18-.12-.36-.24-.54-.3-.36-.6-.9-.72-1.61-.78V27c-1.32-.06-2.94-.36-3.66-1.2-.84-.9-.96-2.46-.84-3.66A4.7 4.7 0 0110 18.91c.54-.36 1.44-.06 1.5.66.06.3.12 1.38.36 1.5.3.18.84.24 1.38.24a8.83 8.83 0 011.73-1.32c-.96-.12-1.91.12-2.93.24l.84-.84a15.24 15.24 0 018.03-3.54c-1.26-.54-2.64-.78-3.96-1.08 5.1-1.07 11.63-1.5 16.24 2.52 1.2 1.02 2.16 2.4 2.81 4.02.72.11 1.68.11 2.16-.18.3-.18.36-1.2.36-1.5.06-.66.96-1.02 1.5-.66.96.72 1.5 2.04 1.62 3.17.12 1.2 0 2.76-.84 3.66-.72.84-2.28 1.14-3.6 1.2v.18c-.71 0-1.31.18-1.67.78-.18.06-.36.18-.54.3.36.06.78.11 1.14.11 0-.05.06-.11.12-.11.23-.3.77-.36 1.07-.42h.24c.12-.36.48-.78.96-.66s.96.66 1.02 1.08c.72.3 1.5.77 1.68 1.73a17.55 17.55 0 01-2.15 3.67 4 4 0 01-.6.17c-.13 0-.25.06-.3.06v.86c-.28.31-.57.6-.87.9.02-.67.02-1.35.02-2-.18-.12-.36-.3-.54-.48a1.72 1.72 0 01-1.01-.6c-.12-.3.12-.48.42-.66 0-.06-.06-.12-.06-.18a1.21 1.21 0 01-.48-.24 31.57 31.57 0 01-6.9 5.1c1.65.5 3.24 1.1 4.8 1.83-.37.2-.74.4-1.12.57a25.37 25.37 0 00-4.7-1.87c-.9.42-1.85.78-2.81 1.02-.12.06-.12.06-.3 0-.78-.24-1.56-.54-2.34-.9A29 29 0 0017.7 39c-.38-.17-.76-.36-1.12-.56 1.5-.73 3.04-1.34 4.62-1.8a26.15 26.15 0 01-6.48-5.15c-.12.06-.36.18-.53.24 0 .06 0 .12-.07.18.3.18.55.42.42.66-.11.3-.6.48-1.01.6-.12.18-.36.3-.54.42v2.24c-.38-.35-.74-.72-1.08-1.1v-.84c-.12 0-.18 0-.3-.06a4.24 4.24 0 01-.57-.16 17.6 17.6 0 01-2.18-3.7 2.7 2.7 0 011.67-1.71c.06-.42.54-.96 1.02-1.08.48-.12.84.3.96.66h.24zm1.73 2.21c2.94 3.12 6.18 5.7 10.37 7.07 4.5-1.25 7.67-4.01 10.84-7.13-.3-.12-.6-.36-.53-.6 0-.06.06-.12.06-.18l-1.74-.18c-.66 2.22-2.4 3.54-3.12 2.1-.18-.36-.24-.78-.3-1.14-.24.54-.9.54-1.61.6-.9.06-2.1.06-2.94-.18-.18.84-.72.84-1.8.96-.96.06-3.23.3-3.65-.72-.06 1.92-2.34.66-3-.48-.24-.36-.36-.78-.48-1.2l-1.56.18c.06.06.06.12.06.18 0 .42-.24.6-.6.72zm16.24.54c.06.42.18.48.6.3 1.08-.54 1.5-2.63 1.56-3.77-.84-.06-1.74-.06-2.64-.06.24 1.14.3 2.33.48 3.53zm-11.92.24c.36.18.6.18.66-.3.12-.6.18-2.45.3-3.47-.84 0-1.62.06-2.46.12-.3 1.32.06 3 1.5 3.65zM24.55 27c-1.32 0-2.58 0-3.83.06-.12.6-.3 3.23.11 3.41.84.36 2.76.36 3.66.12.24-.18.12-3.05.06-3.6zm.9 0c0 .3 0 2.51.3 2.7.72.35 2.64.3 3.41.05.36-.12.18-2.45.12-2.81-1.26 0-2.57 0-3.83.06zm-11.2-4.92c-.37.06-.67.18-1.02.3l-.84.36a5.36 5.36 0 00-.36 3.54c.3.06.6.06.84.06.18-1.5.66-2.94 1.37-4.26zm22.94-.06h-.78c.48 1.38.84 2.82.96 4.32.24 0 .48 0 .78-.06.42-1.62 0-3.42-.96-4.26zm-25.7 4.14a5.3 5.3 0 01.84-4.2c-.3-.06-.72-.18-.96-.36-1.26.36-1.86 1.8-1.98 3.24.12.18.18.36.3.48.42.42 1.08.66 1.8.84zm27.26 0a3.34 3.34 0 001.74-.78c.12-.12.24-.3.3-.48-.06-1.44-.66-2.82-1.98-3.24-.24.24-.6.3-.96.36.9.96 1.14 2.7.9 4.14zm-18.63-5.63a5.09 5.09 0 1010.18 0 5.04 5.04 0 00-5.09-5.04 5.08 5.08 0 00-5.1 5.04zm5.15-1.62c-.48 0-.96.06-1.38.24.6.18 1.08.78 1.08 1.44 0 .83-.72 1.55-1.68 1.55-.6 0-1.14-.3-1.44-.78-.06.24-.06.48-.06.78 0 1.8 1.56 3.24 3.42 3.24 1.92 0 3.47-1.44 3.47-3.24.06-1.8-1.5-3.23-3.41-3.23zm-14.2 2.22c-.06-.18-.18-.54-.18-.96 0-.42-.48-.54-.96-.06-.78.78-.96 2.7-.9 3.41.3-.9.9-1.92 2.04-2.4zm28.04 0a3.78 3.78 0 012.04 2.4c.06-.73-.18-2.64-.9-3.42-.48-.48-.96-.36-.96.06s-.12.78-.18.96zm-16.78-7.67c1.68-3.72 8.15-3.24 8.4 1.55-2.34-2.63-5.4-3.17-8.4-1.55z',fill:n})))}Object.defineProperty(t,'__esModule',{value:!0});var l=n(96),a=o(l),s=n(43),i=o(s);r.defaultProps={fill:'#858b98',width:100},t.default=r},function(e,t,n){'use strict';t.__esModule=!0;var o=n(97),r=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=r.default||function(e){for(var t,n=1;n<arguments.length;n++)for(var o in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}},function(e,t,n){e.exports={default:n(98),__esModule:!0}},function(e,t,n){n(99),e.exports=n(0).Object.assign},function(e,t,n){var o=n(4);o(o.S+o.F,'Object',{assign:n(100)})},function(e,t,n){'use strict';var o=n(2),r=n(12),l=n(29),a=n(17),s=n(11),i=n(31),p=Object.assign;e.exports=!p||n(9)(function(){var e={},t={},n=Symbol(),o='abcdefghijklmnopqrst';return e[n]=7,o.split('').forEach(function(e){t[e]=e}),7!=p({},e)[n]||Object.keys(p({},t)).join('')!=o})?function(e){for(var t=s(e),n=arguments.length,p=1,d=l.f,c=a.f;n>p;)for(var u,m=i(arguments[p++]),C=d?r(m).concat(d(m)):r(m),f=C.length,g=0;f>g;)u=C[g++],(!o||c.call(m,u))&&(t[u]=m[u]);return t}:p},function(e,t,n){'use strict';Object.defineProperty(t,'__esModule',{value:!0});var o=n(43),r=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=function(){return wp.element.createElement('svg',{width:'100%',height:'100%',viewBox:'0 0 73 56',version:'1.1',xmlns:'http://www.w3.org/2000/svg',xmlnsXlink:'http://www.w3.org/1999/xlink',xmlSpace:'preserve',style:{fillRule:'evenodd',clipRule:'evenodd',strokeLinejoin:'round',strokeMiterlimit:'1.41421',maxWidth:'28px',maxHeight:'28px',minWidth:'28px',minHeight:'28px'}},wp.element.createElement('g',{transform:'matrix(1.00193,0,0,1.00199,3.98066,-4.90841)'},wp.element.createElement('path',{d:'M63.6,50C63.7,50.4 63.8,50.8 63.8,51.2C63.9,54.7 58.9,58.3 55.6,58.4C53.7,58.5 51.8,57.5 50.9,55.8C38.3,56.3 25.7,56.3 13.1,55.8C12.2,57.5 10.2,58.5 8.3,58.4C5.1,58.3 0.1,54.7 0.1,51.2C0.1,50.8 0.2,50.4 0.3,50C0,49.5 -0.2,49 0,48.7C0.1,48.5 0.5,48.5 0.9,48.7C1.3,48.1 1.7,47.7 2.1,47.2C2,46.7 2,46.2 2.2,46.1C2.4,45.9 2.9,46 3.4,46.2C3.9,45.8 4.5,45.5 5.2,45.2C5.2,44.7 5.4,44.2 5.6,44.1C6,43.9 6.6,44 7.1,44.6C7.7,44.5 8.4,44.5 8.9,44.7C9.3,44.8 9.7,45 10,45.3C10,44.6 10,43.9 10,43.1C9.8,43.1 9.7,43.1 9.5,43C7.5,42.6 5.4,41.3 4.9,39C4.7,38.3 4.7,37.4 4.9,36.6C5.3,35.1 6.5,34.2 7.7,33.7C7.8,33 8.6,32.1 9.4,31.9C10.2,31.7 10.8,32.4 11,33C11.1,33 11.3,33 11.4,33C11.9,33.1 12.8,33.2 13.2,33.7C13.3,33.8 13.3,33.8 13.4,33.9C14,33.8 14.6,33.8 15.2,33.7C14.9,33.5 14.6,33.3 14.3,33.2C13.7,32.2 12.8,32 11.6,31.9C11.6,31.8 11.6,31.7 11.6,31.6C9.4,31.5 6.7,31 5.5,29.6C4.1,28.1 3.9,25.5 4.1,23.5C4.3,21.5 5.2,19.3 6.8,18.1C7.7,17.5 9.2,18 9.3,19.2C9.4,19.7 9.5,21.5 9.9,21.7C10.4,22 11.3,22.1 12.2,22.1C13.1,21.2 14.1,20.5 15.1,19.9C13.5,19.7 11.9,20.1 10.2,20.3L11.6,18.9C13,17.6 14.8,16.4 16.5,15.6C19.1,14.3 22.1,13.3 25,13C22.9,12.1 20.6,11.7 18.4,11.2C26.9,9.4 37.8,8.7 45.5,15.4C47.5,17.1 49.1,19.4 50.2,22.1C51.4,22.3 53,22.3 53.8,21.8C54.3,21.5 54.4,19.8 54.4,19.3C54.5,18.2 56,17.6 56.9,18.2C58.5,19.4 59.4,21.6 59.6,23.5C59.8,25.5 59.6,28.1 58.2,29.6C57,31 54.4,31.5 52.2,31.6C52.2,31.7 52.2,31.8 52.2,31.9C51,31.9 50,32.2 49.4,33.2C49.1,33.3 48.8,33.5 48.5,33.7C49.1,33.8 49.8,33.9 50.4,33.9C50.4,33.8 50.5,33.7 50.6,33.7C51,33.2 51.9,33.1 52.4,33C52.5,33 52.6,33 52.8,33C53,32.4 53.6,31.7 54.4,31.9C55.2,32.1 56,33 56.1,33.7C57.3,34.2 58.6,35 58.9,36.6C59.1,37.5 59.1,38.3 58.9,39C58.4,41.3 56.3,42.6 54.3,43C54.1,43 53.9,43.1 53.8,43.1C53.8,43.9 53.8,44.6 53.8,45.3C54.2,45 54.5,44.8 54.9,44.7C55.5,44.5 56.1,44.5 56.7,44.6C57.2,44.1 57.9,43.9 58.2,44.1C58.4,44.2 58.6,44.7 58.6,45.2C59.2,45.5 59.9,45.9 60.4,46.2C60.9,46 61.3,45.9 61.5,46.1C61.7,46.3 61.7,46.7 61.6,47.2C62.1,47.7 62.5,48.2 62.8,48.7C63.2,48.5 63.6,48.5 63.7,48.7C64.1,49 63.9,49.5 63.6,50ZM12.8,53.6C12.2,51 10.7,48.1 9.1,47.6C6.6,46.9 1.4,50.2 1.7,53.7C3.1,55.9 6.1,57.7 8.3,57.8C10.3,57.9 12.3,56.6 12.7,54.6C12.8,54.2 12.8,53.9 12.8,53.6ZM6.4,54.9C4.6,55.4 2.8,54.5 2.8,53.2C2.8,51.2 6.6,48.6 8.3,48.4C10,48.2 11,50.5 10.4,51.8C9.8,52.9 7.7,54.5 6.4,54.9ZM8.6,21.8C8.5,21.5 8.3,20.9 8.3,20.2C8.3,19.5 7.5,19.3 6.7,20.1C5.4,21.4 5.1,24.6 5.2,25.8C5.7,24.3 6.7,22.6 8.6,21.8ZM9.3,30.2C8.8,27.8 9.3,24.9 10.7,23.2C10.2,23.1 9.5,22.9 9.1,22.6C7,23.2 6,25.6 5.8,28C6,28.3 6.1,28.6 6.3,28.8C7,29.5 8.1,29.9 9.3,30.2ZM10,56.9C8.9,57.3 7.7,56.6 7.6,55.8C7.5,54.9 9.9,53.2 10.8,53C11.8,52.8 12.2,54.3 11.9,55C11.6,55.8 10.7,56.6 10,56.9ZM13.9,23.4C13.3,23.5 12.8,23.7 12.2,23.9L10.8,24.5C10,26.1 9.7,28.3 10.2,30.4C10.7,30.5 11.2,30.5 11.6,30.5C11.9,28 12.7,25.6 13.9,23.4ZM13.7,52.9C17.4,50.7 21.4,48.9 25.5,47.7C21.2,45.4 17.9,42.4 14.7,39.1C14.5,39.2 14.1,39.4 13.8,39.5C13.8,39.6 13.8,39.7 13.7,39.8C14.2,40.1 14.6,40.5 14.4,40.9C14.2,41.4 13.4,41.7 12.7,41.9C12.5,42.2 12.1,42.4 11.8,42.6C11.8,44.1 11.8,45.6 11.8,47.1C12.2,47.9 12.6,48.6 12.9,49.3C13.2,50.4 13.6,51.7 13.7,52.9ZM14.3,36.7C19.2,41.9 24.6,46.2 31.6,48.5C39.1,46.4 44.4,41.8 49.7,36.6C49.2,36.4 48.7,36 48.8,35.6C48.8,35.5 48.9,35.4 48.9,35.3C47.9,35.2 46.9,35.1 46,35C44.9,38.7 42,40.9 40.8,38.5C40.5,37.9 40.4,37.2 40.3,36.6C39.9,37.5 38.8,37.5 37.6,37.6C36.1,37.7 34.1,37.7 32.7,37.3C32.4,38.7 31.5,38.7 29.7,38.9C28.1,39 24.3,39.4 23.6,37.7C23.5,40.9 19.7,38.8 18.6,36.9C18.2,36.3 18,35.6 17.8,34.9C16.9,35 16.1,35.1 15.2,35.2C15.3,35.3 15.3,35.4 15.3,35.5C15.3,36.2 14.9,36.5 14.3,36.7ZM49.3,54.4C45.2,52 41.1,49.8 36.4,48.5C34.9,49.2 33.3,49.8 31.7,50.2C31.5,50.3 31.5,50.3 31.2,50.2C29.9,49.8 28.6,49.3 27.3,48.7C22.8,50 18.7,51.9 14.8,54.3C26.4,54.8 37.9,54.7 49.3,54.4ZM21.5,38C22.1,38.3 22.5,38.3 22.6,37.5C22.8,36.5 22.9,33.4 23.1,31.7C21.7,31.7 20.4,31.8 19,31.9C18.5,34.1 19.1,36.9 21.5,38ZM23.7,20.8C23.7,25.5 27.5,29.3 32.2,29.3C36.9,29.3 40.7,25.5 40.7,20.8C40.7,16.1 36.9,12.4 32.2,12.4C27.5,12.4 23.7,16.2 23.7,20.8ZM31.1,31.6C28.9,31.6 26.8,31.6 24.7,31.7C24.5,32.7 24.2,37.1 24.9,37.4C26.3,38 29.5,38 31,37.6C31.4,37.3 31.2,32.5 31.1,31.6ZM32.3,18.1C31.5,18.1 30.7,18.2 30,18.5C31,18.8 31.8,19.8 31.8,20.9C31.8,22.3 30.6,23.5 29,23.5C28,23.5 27.1,23 26.6,22.2C26.5,22.6 26.5,23 26.5,23.5C26.5,26.5 29.1,28.9 32.2,28.9C35.4,28.9 38,26.5 38,23.5C38.1,20.5 35.5,18.1 32.3,18.1ZM27.4,9C30.2,2.8 41,3.6 41.4,11.6C37.5,7.2 32.4,6.3 27.4,9ZM32.6,31.6C32.6,32.1 32.6,35.8 33.1,36.1C34.3,36.7 37.5,36.6 38.8,36.2C39.4,36 39.1,32.1 39,31.5C36.9,31.5 34.7,31.5 32.6,31.6ZM51.3,49.4C51.5,48.7 51.9,48 52.3,47.3C52.4,45.8 52.4,44.2 52.4,42.7C52.1,42.5 51.8,42.2 51.5,41.9C50.8,41.8 50.1,41.3 49.8,40.9C49.6,40.4 50,40.1 50.5,39.8C50.5,39.7 50.4,39.6 50.4,39.5C50.1,39.4 49.8,39.3 49.6,39.1C46.1,42.4 42.3,45.4 38.1,47.6C42.4,48.9 46.5,50.7 50.5,52.9C50.6,51.7 50.9,50.4 51.3,49.4ZM41.4,37.6C41.5,38.3 41.7,38.4 42.4,38.1C44.2,37.2 44.9,33.7 45,31.8C43.6,31.7 42.1,31.7 40.6,31.7C41,33.6 41.1,35.6 41.4,37.6ZM50.9,23.3C51.7,25.6 52.3,28 52.5,30.5C52.9,30.5 53.3,30.5 53.8,30.4C54.5,27.7 53.8,24.7 52.2,23.3C51.8,23.3 51.3,23.3 50.9,23.3ZM54.9,47.6C53.3,48.1 51.8,51 51.2,53.6C51.2,53.9 51.2,54.2 51.3,54.5C51.7,56.5 53.7,57.8 55.7,57.7C57.8,57.6 60.9,55.8 62.3,53.6C62.6,50.2 57.4,46.8 54.9,47.6ZM54.1,56.9C55.1,57.3 56.4,56.6 56.5,55.8C56.6,54.9 54.3,53.2 53.3,53C52.4,52.8 51.9,54.3 52.3,55C52.4,55.8 53.3,56.6 54.1,56.9ZM54.8,30.2C56,30 57.1,29.5 57.7,28.9C57.9,28.7 58.1,28.4 58.2,28.1C58.1,25.7 57.1,23.4 54.9,22.7C54.5,23.1 53.9,23.2 53.3,23.3C54.8,24.9 55.2,27.8 54.8,30.2ZM57.6,54.9C59.4,55.4 61.2,54.5 61.2,53.2C61.2,51.2 57.4,48.6 55.7,48.4C54,48.2 53,50.5 53.6,51.8C54.1,52.9 56.3,54.5 57.6,54.9ZM55.4,21.8C57.3,22.6 58.3,24.3 58.8,25.8C58.9,24.6 58.5,21.4 57.3,20.1C56.5,19.3 55.7,19.5 55.7,20.2C55.7,20.9 55.5,21.5 55.4,21.8Z',fill:'currentColor',style:{fillRule:'nonzero'}})))}}]);
assets/dist/js/connect.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=46)})({46:function(){'use strict';window.OMAPI=window.OMAPI||{},function(a,b,c,d){d.updateForm=function(d,e){var f=b.getElementById('omapi-field-apikey');f.value=d,e.prop('disabled',!0).attr('disabled','disabled'),c('.om-api-key-spinner').remove(),e.after('<div class="om-api-key-spinner spinner is-active" style="float: none;margin-top: -1px;"></div>'),a.sessionStorage&&(sessionStorage.removeItem('omTemplates'),sessionStorage.removeItem('omTemplatesAuth')),HTMLFormElement.prototype.submit.call(f.form)},d.handleAuthorizeClick=function(b){b.preventDefault(),d.$btn=c(b.target);try{var e=OMAPI.app_url+'wordpress/connect/?site='+encodeURIComponent(OMAPI.blogname),f=a.open(e,'_blank','location=no,width=500,height=730,scrollbars=0');f.focus()}catch(a){alert('Your browser blocked the authorization window from opening. Please check your popup settings.')}},d.handleIframeMessage=function(a){return a.origin.replace(/\/$/,'')===OMAPI.app_url.replace(/\/$/,'')?a.data&&'string'==typeof a.data?void d.updateForm(a.data,d.$btn):void console.error('Messages from "'+OMAPI.app_url+'" must contain an api key string.'):void 0},d.initConnect=function(){d.$btn=c('#omapiAuthorizeButton, .omapi-authorize-button').first(),c('body').on('click','#omapiAuthorizeButton, .omapi-authorize-button',d.handleAuthorizeClick),'#authorize'===a.location.hash&&setTimeout(function(){d.$btn.click()},100),a.addEventListener('message',d.handleIframeMessage)},c(d.initConnect)}(window,document,jQuery,window.OMAPI)}});
assets/dist/js/pointer.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=103)})({103:function(){'use strict';window.omapiPointer=window.omapiPointer||{},function(a,b,c,d){d.close=function(){return c(d.target).pointer('close')},d.open=function(){var a=c.extend(d.options,{close:function(){c.post(ajaxurl,{pointer:d.id,action:'dismiss-wp-pointer'})}});c(d.target).pointer(a).pointer('open')},d.init=function(){c('#omPointerButton, .om-pointer-close-link').click(d.close),d.open()},c(d.init)}(window,document,jQuery,window.omapiPointer)}});
assets/dist/js/settings.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a['default']}:function(){return a};return b.d(c,'a',c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p='',b(b.s=47)})({47:function(){'use strict';jQuery(document).ready(function(a){function b(b,c){a(b).attr('data-original-title',c).tooltip('show')}function c(b){setTimeout(function(){a(b).tooltip('destroy')},2e3)}(function(){a('.omapi-select').each(function(){var b=-1<a(this).attr('id').indexOf('taxonomies')?OMAPI.tags:OMAPI.posts;a(this).select2({minimumInputLength:1,multiple:!0,data:b,initSelection:function(c,d){var e=a(c).val();e=e.split(',');var f=b.filter(function(a){return-1<e.indexOf(a.id)});d(f)}}).on('change select2-removed',function(){})})})(),function(){var b=a('#omapi-field-automatic'),c=a('#omapi-field-mailpoet'),d=a('#omapi-field-mailpoet_use_phone'),e=function(){var c=b.is(':checked')?'hide':'show';a('.omapi-field-box-automatic_shortcode')[c]()},f=function(){var b=d.is(':checked')?'show':'hide';a('.omapi-field-box-mailpoet_phone_field')[b]()},g=function(){var b=c.is(':checked'),d=b?'show':'hide';a('.omapi-field-box-mailpoet_list')[d](),a('.omapi-field-box-mailpoet_use_phone')[d](),a('.omapi-field-box-mailpoet_phone_field')[d](),b&&f()};e(),g(),a(document).on('change','#omapi-field-automatic',e),a(document).on('change','#omapi-field-mailpoet',g),a(document).on('change','#omapi-field-mailpoet_use_phone',f)}(),function(){a('.omapi-ui-toggle-controller').click(function(b){var c=b.currentTarget;a(c).toggleClass('toggled'),a(c).next('.omapi-ui-toggle-content').toggleClass('visible')})}(),function(){a(document).on('click','input[name=reset]',function(){return confirm(OMAPI.confirm)})}(),function(){var a=new Clipboard('.omapi-copy-button');a.on('success',function(a){b(a.trigger,'Copied to Clipboard!'),c(a.trigger)}),a.on('error',function(a){var d='';d=/iPhone|iPad/i.test(navigator.userAgent)?'Unable to Copy on this device':/Mac/i.test(navigator.userAgent)?'Press \u2318-C to Copy':'Press Ctrl-C to Copy',b(a.trigger,d),c(a.trigger)})}(),function(){a('omapi-copy-button').tooltip({trigger:'click',placement:'top'})}(),function(){var b=a('#js--omapi-support-pdf'),c=function(b){var c=new jsPDF('p','mm','letter');c.text(10,10,'OptinMonster Support Assistance');var d=10;a.each(b.server,function(a,b){d+=10,c.text(10,d,a+' : '+b)}),a.each(b.campaigns,function(b,d){var e=10;c.addPage(),c.text(10,10,b),a.each(d,function(b,d){var f=a.isPlainObject(d)?'':d;e+=10,c.text(10,e,b+' : '+f),a.isPlainObject(d)&&a.each(d,function(a,b){e+=10,c.text(20,e,a+' : '+b)})})}),c.save('OMSupportHelp.pdf')};b.click(function(d){d.preventDefault(),a('.om-api-key-spinner').remove(),b.after('<div class="om-api-key-spinner spinner is-active" style="float: none;margin-top:7px;"></div>'),a.ajax({url:OMAPI.root+'omapp/v1/support?format=pdf',beforeSend:function(a){return a.setRequestHeader('X-WP-Nonce',OMAPI.nonce)},dataType:'json',data:{format:'pdf'},success:c}).done(function(){return a('.om-api-key-spinner').remove()}).fail(function(a,b){return console.error({jqXHR:a,textStatus:b})})})}(),function(){a('[data-toggle="tooltip"]').tooltip()}(),function(){a('#omapiShowApiKey').click(function(b){b.preventDefault(),a('#omapi-form-api .omapi-hidden').removeClass('omapi-hidden'),a('#omapi-field-apikey').focus().select()}),a('#omapiShowApiKeys').click(function(b){b.preventDefault(),a('#omapi-form-woocommerce .omapi-hidden').removeClass('omapi-hidden'),a('.manually-connect-wc').hide(),a('#omapi-field-consumer_key').focus().select()}),a('#omapiDisconnectButton').click(function(b){b.preventDefault(),OMAPI.updateForm('',a(this))})}(),function(){a('.install-plugin-form').submit(function(b){b.preventDefault();var c=a(b.currentTarget).serializeArray(),d=c.find(function(a){return'nonce'===a.name}).value,e=c.find(function(a){return'plugin'===a.name}).value,f=e.replace('.','').replace('/',''),g=c.find(function(a){return'action'===a.name}).value,h=c.find(function(a){return'url'===a.name}).value,i=a('.omapi-plugin-recommendation--'+f);i.length||(i=a('html')),a('.button-install',i).html('Installing...'),a('.button-activate',i).html('Activating...'),a('#om-plugin-alerts').hide(),a.post(ajaxurl,{action:'om_plugin_install',"optin-monster-ajax-route":!0,nonce:d,plugin:e,installAction:g,url:h},function(b){b.success?window.location.reload():(a('.button-install',i).html('Install Plugin'),a('.button-activate',i).html('Activate Plugin'),a('#om-plugin-alerts').show().html(a('<p/>').html(b.data||'Something went wrong!')))})})}(),function(){if(window.history.replaceState&&window.location.search){var a=function(a,b){var c=b.split('?');if(2>c.length)return b;for(var d=encodeURIComponent(a)+'=',e=c[1].split(/[&;]/g),f=e.length;0<f--;)-1!==e[f].lastIndexOf(d,0)&&e.splice(f,1);return c[0]+(0<e.length?'?'+e.join('&'):'')},b=['optin_monster_api_action_done','optin_monster_api_action_type','optin_monster_api_action_id'],c=document.location.href;window.location.search.split('&').forEach(function(d){b.forEach(function(b){0===d.indexOf(b)&&(c=a(d.split('=')[0],c))})}),window.history.replaceState(null,null,c)}}()})}});
assets/fonts/Averta-ExtraBoldItalic.eot ADDED
Binary file
assets/fonts/FontAwesome.otf CHANGED
File without changes
assets/fonts/fontawesome-webfont.eot CHANGED
File without changes
assets/fonts/fontawesome-webfont.svg CHANGED
File without changes
assets/fonts/fontawesome-webfont.ttf CHANGED
File without changes
assets/fonts/fontawesome-webfont.woff CHANGED
File without changes
assets/images/BigCommerce-logo.png ADDED
Binary file
assets/images/about/plugin-mi.png ADDED
Binary file
assets/images/about/plugin-wp-forms.png ADDED
Binary file
assets/images/features-event.svg ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg viewBox="0 0 562 412" xmlns="http://www.w3.org/2000/svg" xmlns:serif="http://www.serif.com/" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421">
3
+ <g opacity=".5" transform="matrix(.7821 0 0 .7821 -149.3014 -85.4476)">
4
+ <path d="M909.09 158.88v420.67c-.01 10.694-8.82 19.485-19.51 19.48H210.4c-10.697 0-19.5-8.803-19.5-19.5V158.88c0-10.703 8.807-19.51 19.51-19.51h679.17c10.7 0 19.51 8.807 19.51 19.51z" fill="#fff" fill-rule="nonzero"/>
5
+ <path fill="#1d58bf" fill-opacity=".3" d="M224.9963 186.33337h649.99992v80.00016H224.9963z"/>
6
+ <path fill="#1d58bf" fill-opacity=".2" d="M225.03963 289.74781h199.99914v120.00024H225.03963zM674.99493 289.74781h199.99914v120.00024H674.99493zM449.99493 289.74781h199.99914v120.00024H449.99493zM225.03963 434.74781h199.99914v120.00024H225.03963zM674.99493 434.74781h199.99914v120.00024H674.99493zM449.99493 434.74781h199.99914v120.00024H449.99493z"/>
7
+ <path d="M909.09 158.89H190.9v-.01c0-10.697 8.803-19.5 19.5-19.5H889.59c10.7 0 19.5 8.803 19.5 19.5v.01z" fill="#c8cad7" fill-rule="nonzero"/>
8
+ <circle cx="210.41" cy="149.13" r="4.88" fill="#ededf4"/>
9
+ <circle cx="225.04" cy="149.13" r="4.88" fill="#ededf4"/>
10
+ <circle cx="239.67" cy="149.13" r="4.88" fill="#ededf4"/>
11
+ </g>
12
+ <path d="M590.46 285.225c0-29.872-24.253-54.125-54.125-54.125h-327.2c-29.872 0-54.125 24.253-54.125 54.125s24.253 54.125 54.125 54.125h327.2c29.872 0 54.125-24.253 54.125-54.125z" fill="url(#_Linear1)" transform="matrix(.74209 0 0 .74209 82.16726 159.83489)"/>
13
+ <path d="M519.43452 371.50403c0-21.17248-17.1897-38.36218-38.36218-38.36218H237.36359c-21.17248 0-38.36218 17.1897-38.36218 38.36218 0 21.17248 17.1897 38.36218 38.36218 38.36218h243.70875c21.17248 0 38.36218-17.1897 38.36218-38.36218z" fill="#fff"/>
14
+ <path d="M480.95184 352.25763c0-2.27186-1.84484-4.11652-4.11671-4.11652H285.58108c-2.27243 0-4.11671 1.84466-4.11671 4.11652v8.23348c0 2.27229 1.84428 4.11695 4.1167 4.11695h191.25406c2.27187 0 4.1167-1.84466 4.1167-4.11695v-8.23348z" fill="#3f3d56"/>
15
+ <path d="M480.95184 371.02555c0-1.51458-1.23008-2.74435-2.74448-2.74435H284.20884c-1.51495 0-2.74447 1.22977-2.74447 2.74435v5.48898c0 1.51486 1.22952 2.74463 2.74447 2.74463h193.99852c1.5144 0 2.74448-1.22977 2.74448-2.74463v-5.48898z" fill="#00aded"/>
16
+ <path d="M342.00676 386.05141c0-1.51458-1.2299-2.74435-2.74448-2.74435h-55.05373c-1.51476 0-2.74449 1.22977-2.74449 2.74435v5.48898c0 1.51487 1.22973 2.74464 2.74449 2.74464h55.05373c1.51459 0 2.74448-1.22977 2.74448-2.74464v-5.48898z" fill="#9795b1"/>
17
+ <g fill-rule="nonzero">
18
+ <path d="M358.2531 392.02014c.59163 0 .87848-.11696 1.16533-.26893l-.30478-.94122c-.1972.09875-.41235.15267-.55577.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86494h1.19221v-.96784h-1.19221v-1.5596l-1.16533.12536v1.43424h-.51991v.96784h.51991v2.02601c0 .98605.49302 1.45246 1.246 1.45246zM362.29567 387.5024c-.51963 0-.9948.25072-1.32647.71713h-.00896v-.6457h-1.17429v4.37487h1.17429v-2.03511c0-.6457.39442-1.13871 1.12043-1.13871.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05322-.0084-.08964-.0084zM365.55004 387.57383v2.12476c0 .84248-.45731 1.27247-.96854 1.27247-.54695 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49302 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17443v-4.37487h-1.17442zM368.83942 392.02014c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.43069-.16108-.6632-.28713-.6632-.46641 0-.2332.24162-.33125.43-.33125.32285 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21014-.51123l-.57356.81587c.48392.41249 1.07568.63659 1.7746.63659zM372.3536 392.02014c.59176 0 .8782-.11696 1.16532-.26893l-.30464-.94122c-.19748.09875-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86494h1.19194v-.96784h-1.19194v-1.5596l-1.16532.12536v1.43424h-.52034v.96784h.52034v2.02601c0 .98605.49302 1.45246 1.24586 1.45246z" fill="#1d58bf"/>
19
+ <path d="M376.40562 387.5024c-.53784 0-.99515.1968-1.3271.57356h-.0175v-.50213h-1.17443v6.14947h1.17443v-2.26762h.0175c.30464.35786.73533.56446 1.29068.56446 1.21925 0 2.09745-.8964 2.09745-2.25012 0-1.3264-.8873-2.26762-2.06103-2.26762zm-.25141 3.46866c-.63659 0-1.13871-.47481-1.13871-1.19193 0-.69892.4664-1.22836 1.1387-1.22836.62749 0 1.12051.47552 1.12051 1.22836 0 .70802-.4573 1.19193-1.1205 1.19193zM381.81976 387.57383v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49303 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17444v-4.37487h-1.17443zM383.74702 385.35103h1.1743v6.59753h-1.1743zM387.12605 392.02014c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.42999-.16108-.6632-.28713-.6632-.46641 0-.2332.24161-.33125.43-.33125.32284 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21015-.51123l-.57355.81587c.48391.41249 1.07568.63659 1.7746.63659zM393.32033 389.7161c0-1.28158-.86068-2.2137-2.14226-2.2137-1.24586 0-2.16958.92302-2.16958 2.24942 0 1.37191.96854 2.26832 2.25011 2.26832.8782 0 1.51479-.34946 1.89156-.82498l-.76195-.70801c-.2423.29553-.58266.50212-1.04907.49302-.56445 0-.97694-.32285-1.1205-.84248h3.07508c.02661-.07213.02661-.27803.02661-.4216zm-2.10655-1.18283c.51123 0 .82498.30463.94123.76194h-1.92727c.13446-.50213.51123-.76194.98604-.76194z" fill="#00aded"/>
20
+ </g>
21
+ <path d="M352.3362 386.0945c-.38985-.10526-.77051-.24529-1.1363-.4248-.31034-.15228-.6097-.32576-.90302-.50839a4.28059 4.28059 0 0 1-.01708.01058c-.77208.4791-1.59296.8661-2.50488 1.03731-.32904.06177-.66185.10054-.99532.12898l-.01063.0009c-.08214 1.83573.04032 3.72786 1.01521 5.302.59423.95947 1.51362 1.67795 2.48731 2.27517l.0254.01547c.39845-.2435.7898-.50318 1.15398-.79322h.82667c-.58592.55146-1.2694 1.0136-1.96423 1.42616-.03256-.02228-.03286 0-.03286 0-.87643-.52039-1.7297-1.09562-2.39376-1.85939-.45109-.51878-.80827-1.11492-1.06569-1.76016-.64686-1.62151-.68784-3.42666-.57505-5.12153.71687-.04271 1.44492-.11159 2.13114-.33286.6768-.21823 1.30011-.58061 1.90217-.97149l.01762-.01147c.01171.00765.02342.01524.03519.02288.75935.4919 1.56971.92602 2.4621 1.11205a6.70181 6.70181 0 0 0 .15359.03011l-.61155.4217zm-.18136 6.3196h-1.13481c-.18968-.00806-.20246-.10413-.20646-.19786-.00472-.11147.06756-.20944.20646-.21536h.97722l.3089-1.12615s.05963-.13943.17947-.15096c.09582-.00926.1782.03119.21793.14708l.46674 1.57933.28591-.89854s.09248-.1638.23932-.13955c.08005.0205.08328.0242.1297.088l.33232.5008h.79573c.00096.00011.14768.01995.1917.12957.05096.12676-.02968.27677-.1917.28364h-.9066c-.09857-.00406-.12671-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03333-.21356-.1475l-.45205-1.52962-.15873.5787s-.0721.14635-.19923.15191zm2.22392-6.0194c.04014.97769.0101 1.95688-.15741 2.9234-.07635.44076-.24279 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17471.553-2.4526.53371-3.7033l.53676-.52237z" fill="#00aded" fill-rule="nonzero"/>
22
+ <path d="M350.08965 388.9102c.03129-.03568.0394-.0591.08606-.12695.26903-.39144 1.0659-1.44673 2.07848-2.25844.44062-.35324.91685-.67436 1.33812-.88486.70208-.35081.92816-.39358 1.25422-.46954.06193-.01442.2862-.05445.3234.03392.0359.0853-.10399.17519-.15647.21643-.05901.04637-1.40842 1.05545-2.54368 2.55402-.98784 1.30389-1.63428 3.0147-1.63428 3.0147-.01986.03799-.24452.43946-.54593.45902-.27857.0181-.63633-.34424-.63633-.34424-.06877-.06417-.40417-.4622-.68325-.95451-.35593-.6277-.66242-1.37176-.66242-1.37176s-.31816-.62588.28165-.9701c.59141-.33942.85484.00518.9832.20862.10969.17388.33069.59624.4375.80283.0372.07196.06126.11186.07973.09085z" fill="#1d58bf" fill-rule="nonzero"/>
23
+ <g transform="translate(128.5517 -88.00126) scale(1.24681)">
24
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#00aded"/>
25
+ </g>
26
+ <g>
27
+ <path d="M251.8583 391.91583c-1.13193 2.18277-3.0103 3.8883-5.2925 4.80302-1.34914.49253-2.77016.76175-4.20647.7954-1.55257.11472-3.11126-.07801-4.58888-.56596-1.9671-.77399-3.65733-2.12312-4.8489-3.86995-1.17629-1.74683-2.12312-3.63898-2.81451-5.62902-.46501-.99272-.65927-2.08946-.56597-3.18162 1.2084-.14684 2.30974-.7694 3.05925-1.72847.44512-.9652.47266-2.07264.07648-3.05925-.09177-.30592-.18355-.59655-.29062-.87188-.22945-.67304-1.02485-1.94263-.47419-2.50859.55067-.56596 1.83555-.55066 2.34033-.7801 1.49597-.8933 3.0929-1.60764 4.75713-2.12618 1.5082-.20039 3.04242-.10249 4.51239.29062.20038.03366.39311.10555.56596.21415.19273.16061.33652.37323.413.61185.4283 1.04015.67303 2.18736 1.00955 3.2581a6.71716 6.71716 0 0 0 1.68259 2.98277c.69904.5935 1.48832 1.06768 2.34032 1.40725l2.0497.93307c.35946.14379.6868.3564.96366.62715.26157.37017.42065.80305.45889 1.2543.37935 2.4428-.02141 4.9422-1.14722 7.14334z" fill="#a0616a" fill-rule="nonzero"/>
28
+ <path d="M245.49506 377.61384c-3.33764 3.46613-8.63167 4.25388-12.83355 1.91203-.09178-.30592-.18356-.59655-.29063-.87189-.22944-.67303-1.02485-1.94262-.47418-2.50858.55066-.56596 1.83554-.55066 2.34032-.7801 1.49597-.8933 3.0929-1.60764 4.75713-2.12619 1.50821-.20038 3.04242-.10248 4.5124.29063.20037.03365.3931.10555.56595.21415.19274.16061.33652.37323.413.61185.4283 1.08603.67304 2.18736 1.00956 3.2581z" fill-opacity=".1" fill-rule="nonzero"/>
29
+ <circle cx="263.84" cy="289.36" r="6.94" fill="#a0616a" transform="matrix(1.52962 0 0 1.52962 -165.72867 -72.81407)"/>
30
+ <path d="M264.63677 390.3036c-11.84082 16.48476-36.14502 16.80904-49.00304 2.93382.1652-.8107.47418-1.59387.90554-2.30055.44818-.69904 1.2191-1.1304 2.0497-1.14722.44359 0 .94836.16826 1.26958-.15296.32122-.32123.21415-.58126.4436-.7954.22944-.21416.7801-.21416 1.2084-.18356.93307.03059 1.82025-.413 2.35562-1.17781.16367-.28451.36405-.54761.59655-.78011.4023-.1958.83824-.30899 1.28489-.33652 1.239-.27533 1.97321-1.52962 2.90628-2.30973.45736-.51549 1.17934-.71434 1.83555-.50478.1499.07801.27992.18662.3824.32122.25087.38547.42218.81682.50478 1.2696.55373 2.5407 1.96404 4.81372 3.99232 6.4397 1.57246 1.18853 3.4906 1.8325 5.46076 1.8325 3.51967 0 6.73188-2.05123 8.21408-5.24355.73881-1.84932 1.16405-3.80877 1.2543-5.79728v-.26004c1.25888-.31204 2.59424-.04894 3.6405.71893 1.01567.77705 2.10017 1.45926 3.2428 2.0344 1.36137.53537 3.05925.53537 3.99232 1.52962.3977.3977.67304.94837 1.17781 1.1931.31358.12238.64398.20039.97896.22945 1.73.46654 1.3063 2.48717 1.3063 2.48717z" fill="#f86d70" fill-rule="nonzero"/>
31
+ <path d="M230.52003 352.5739c-.7388.59807-1.36595 1.32312-1.85084 2.14147a10.5459 10.5459 0 0 1-3.7017 3.6405c-.63632.22333-1.21604.58279-1.69787 1.05544-.2371.35946-.38853.76634-.4436 1.1931a22.36596 22.36596 0 0 0-.47418 4.5124c-.0566.76328.06883 1.5281.36711 2.23325.30593.64244.88718 1.1931.99426 1.89674.02294.55678-.03977 1.11356-.18356 1.65199-.14684.57667.07954 1.18699.56596 1.52962.27686.0979.56443.1652.8566.19885 1.52962.33652 2.04969 2.14148 2.27913 3.62521.52007 0 .74952-.62714.87189-1.11662l1.52962-7.11275c.18356-.76482.45889-1.6673 1.239-1.92733a3.86232 3.86232 0 0 1 1.6214 0c2.11088.18355 3.88524-1.45314 5.95024-1.91203.66538-.12543 1.343-.16673 2.0191-.12237 1.6214 0 3.51814.74952 3.86995 2.26384 0 .24474.09178.55067.32122.67304.23403.06883.4849.06883.71893 0 1.02484-.10708 1.6367 1.05544 1.94262 2.0038l1.07073 3.47225c.16826.52007.4436 1.14722 1.00956 1.2084.53384-.00305.9866-.40382 1.05544-.93307.02294-.51854-.04895-1.03708-.21415-1.52962-.50478-2.26384.27533-4.58887.74952-6.86801.47418-2.27914.55066-4.8948-1.04015-6.65387-.58126-.62714-1.34607-1.10133-1.88144-1.77436-.53536-.67304-.7801-1.39196-1.30018-2.0191-2.07723-1.82179-4.66994-2.95524-7.41867-3.2428-3.0669-.27075-6.14603.39616-8.82594 1.91202z" fill="#3f3d56" fill-rule="nonzero"/>
32
+ <g opacity=".1">
33
+ <path d="M223.71365 367.62592c-.10707-.70363-.68833-1.2543-.99426-1.89673a3.90032 3.90032 0 0 1-.35181-1.37666v.7648c-.0566.76329.06883 1.5281.36711 2.23326.24474.52007.67303.97896.88718 1.52962.1086-.4084.1392-.83364.09178-1.25429zM251.04803 362.71583c-.60726 1.98086-.90247 4.04585-.87188 6.1185.19885-1.50516.48948-2.99654.87188-4.4665.25392-1.12275.34264-2.27762.26004-3.42637-.04895.59656-.1346 1.18852-.26004 1.77437z" fill-rule="nonzero"/>
34
+ </g>
35
+ </g>
36
+ <g>
37
+ <path d="M590.46 285.225c0-29.872-24.253-54.125-54.125-54.125h-327.2c-29.872 0-54.125 24.253-54.125 54.125s24.253 54.125 54.125 54.125h327.2c29.872 0 54.125-24.253 54.125-54.125z" fill="url(#_Linear2)" transform="matrix(.74209 0 0 .74209 -79.40377 49.16549)"/>
38
+ <path d="M357.86349 260.83463c0-21.17248-17.1897-38.36218-38.36218-38.36218H75.79256c-21.17248 0-38.36218 17.1897-38.36218 38.36218 0 21.17248 17.1897 38.36218 38.36218 38.36218h243.70875c21.17248 0 38.36218-17.1897 38.36218-38.36218z" fill="#fff"/>
39
+ <path d="M319.3808 241.58823c0-2.27186-1.84483-4.11652-4.1167-4.11652H124.01005c-2.27243 0-4.11671 1.84466-4.11671 4.11652v8.23348c0 2.27229 1.84428 4.11695 4.1167 4.11695H315.2641c2.27187 0 4.1167-1.84466 4.1167-4.11695v-8.23348z" fill="#3f3d56"/>
40
+ <path d="M319.3808 260.35615c0-1.51458-1.23007-2.74435-2.74447-2.74435H122.63781c-1.51495 0-2.74447 1.22977-2.74447 2.74435v5.48898c0 1.51486 1.22952 2.74463 2.74447 2.74463h193.99852c1.5144 0 2.74448-1.22977 2.74448-2.74463v-5.48898z" fill="#1d58bf"/>
41
+ <path d="M180.43573 275.38201c0-1.51458-1.2299-2.74435-2.74448-2.74435h-55.05373c-1.51476 0-2.74449 1.22977-2.74449 2.74435v5.48898c0 1.51487 1.22973 2.74464 2.74449 2.74464h55.05373c1.51459 0 2.74448-1.22977 2.74448-2.74464v-5.48898z" fill="#9795b1"/>
42
+ <g serif:id="text" fill-rule="nonzero">
43
+ <path d="M196.68207 281.35074c.59163 0 .87848-.11696 1.16533-.26893l-.30478-.94122c-.1972.09875-.41235.15267-.55577.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86494h1.19221v-.96784h-1.19221v-1.5596l-1.16533.12536v1.43424h-.51991v.96784h.51991v2.02601c0 .98605.49302 1.45246 1.246 1.45246zM200.72464 276.833c-.51963 0-.9948.25072-1.32647.71713h-.00896v-.6457h-1.17429v4.37487h1.17429v-2.03511c0-.6457.39442-1.13871 1.12043-1.13871.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05322-.0084-.08964-.0084zM203.979 276.90443v2.12476c0 .84248-.4573 1.27247-.96853 1.27247-.54695 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49302 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17443v-4.37487h-1.17442zM207.26839 281.35074c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.43069-.16108-.6632-.28713-.6632-.46641 0-.2332.24162-.33125.43-.33125.32285 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21014-.51123l-.57356.81587c.48392.41249 1.07568.63659 1.7746.63659zM210.78257 281.35074c.59176 0 .8782-.11696 1.16532-.26893l-.30464-.94122c-.19748.09875-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86494h1.19194v-.96784h-1.19194v-1.5596l-1.16532.12536v1.43424h-.52034v.96784h.52034v2.02601c0 .98605.49302 1.45246 1.24586 1.45246z" fill="#1d58bf"/>
44
+ <path d="M214.8346 276.833c-.53785 0-.99516.1968-1.3271.57356h-.01751v-.50213h-1.17443v6.14947h1.17443v-2.26762h.0175c.30464.35786.73533.56446 1.29068.56446 1.21925 0 2.09745-.8964 2.09745-2.25012 0-1.3264-.8873-2.26762-2.06103-2.26762zm-.25142 3.46866c-.63659 0-1.13871-.47481-1.13871-1.19193 0-.69892.4664-1.22836 1.1387-1.22836.62749 0 1.12051.47552 1.12051 1.22836 0 .70802-.4573 1.19193-1.1205 1.19193zM220.24873 276.90443v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49303 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17444v-4.37487h-1.17443zM222.176 274.68163h1.17428v6.59753H222.176zM225.55502 281.35074c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.42999-.16108-.6632-.28713-.6632-.46641 0-.2332.24161-.33125.43-.33125.32284 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21015-.51123l-.57355.81587c.48391.41249 1.07568.63659 1.7746.63659zM231.7493 279.0467c0-1.28158-.86068-2.2137-2.14226-2.2137-1.24586 0-2.16958.92302-2.16958 2.24942 0 1.37191.96854 2.26832 2.25011 2.26832.8782 0 1.51479-.34946 1.89156-.82498l-.76195-.70801c-.2423.29553-.58266.50212-1.04907.49302-.56445 0-.97694-.32285-1.1205-.84248h3.07508c.02661-.07213.02661-.27803.02661-.4216zm-2.10655-1.18283c.51123 0 .82498.30463.94123.76194h-1.92727c.13446-.50213.51123-.76194.98604-.76194z" fill="#00aded"/>
45
+ </g>
46
+ <g serif:id="mark">
47
+ <path d="M190.76518 275.4251c-.38986-.10526-.77052-.24529-1.1363-.4248-.31035-.15228-.6097-.32576-.90303-.50839a4.28059 4.28059 0 0 1-.01708.01058c-.77208.4791-1.59296.8661-2.50488 1.03731-.32904.06177-.66185.10054-.99532.12898l-.01063.0009c-.08214 1.83573.04032 3.72786 1.01521 5.302.59423.95947 1.51362 1.67795 2.48731 2.27517l.0254.01547c.39845-.2435.7898-.50318 1.15398-.79322h.82667c-.58592.55146-1.2694 1.0136-1.96423 1.42616-.03256-.02228-.03286 0-.03286 0-.87643-.52039-1.7297-1.09562-2.39376-1.85939-.45109-.51878-.80827-1.11492-1.06569-1.76016-.64686-1.62151-.68784-3.42666-.57505-5.12153.71687-.04271 1.44492-.11159 2.13114-.33286.6768-.21823 1.30011-.58061 1.90217-.97149l.01762-.01147c.01171.00765.02342.01524.03519.02288.75935.4919 1.56971.92602 2.4621 1.11205a6.70181 6.70181 0 0 0 .15359.03011l-.61155.4217zm-.18137 6.3196H189.449c-.18968-.00806-.20246-.10413-.20646-.19786-.00472-.11147.06756-.20944.20646-.21536h.97722l.3089-1.12615s.05963-.13943.17947-.15096c.09582-.00926.1782.03119.21793.14708l.46674 1.57933.28591-.89854s.09248-.1638.23932-.13955c.08005.0205.08328.0242.1297.088l.33232.5008h.79573c.00096.00011.14768.01995.1917.12957.05096.12676-.02968.27677-.1917.28364h-.9066c-.09857-.00406-.12671-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03333-.21356-.1475l-.45205-1.52962-.15873.5787s-.0721.14635-.19923.15191zm2.22392-6.0194c.04014.97769.0101 1.95688-.15741 2.9234-.07635.44076-.24279 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17471.553-2.4526.53371-3.7033l.53676-.52237z" fill="#00aded" fill-rule="nonzero"/>
48
+ <path d="M188.51862 278.2408c.03129-.03568.0394-.0591.08606-.12695.26903-.39144 1.0659-1.44673 2.07848-2.25844.44062-.35324.91685-.67436 1.33812-.88486.70208-.35081.92816-.39358 1.25422-.46954.06193-.01442.2862-.05445.3234.03392.0359.0853-.10399.17519-.15647.21643-.05901.04637-1.40842 1.05545-2.54368 2.55402-.98784 1.30389-1.63428 3.0147-1.63428 3.0147-.01986.03799-.24452.43946-.54593.45902-.27857.0181-.63633-.34424-.63633-.34424-.06877-.06417-.40417-.4622-.68325-.95451-.35593-.6277-.66242-1.37176-.66242-1.37176s-.31816-.62588.28165-.9701c.59141-.33942.85484.00518.9832.20862.10969.17388.33069.59624.4375.80283.0372.07196.06126.11186.07973.09085z" fill="#1d58bf" fill-rule="nonzero"/>
49
+ </g>
50
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#1d58bf" transform="translate(-33.01933 -198.67066) scale(1.24681)"/>
51
+ <g>
52
+ <path d="M90.30982 281.9644c-1.13192 2.18278-3.0103 3.88831-5.2925 4.80303-1.34913.49254-2.77015.76175-4.20647.7954-1.55256.11472-3.11125-.078-4.58887-.56596-1.9671-.77399-3.65733-2.12312-4.8489-3.86995-1.17629-1.74683-2.12313-3.63897-2.81452-5.62902-.465-.99272-.65926-2.08946-.56596-3.18161 1.2084-.14685 2.30974-.7694 3.05925-1.72848.44512-.9652.47266-2.07264.07648-3.05925-.09177-.30592-.18355-.59655-.29063-.87188-.22944-.67304-1.02484-1.94263-.47418-2.50859.55067-.56596 1.83555-.55066 2.34033-.7801 1.49597-.8933 3.0929-1.60764 4.75713-2.12618 1.5082-.20038 3.04242-.10249 4.51239.29063.20038.03365.39311.10554.56596.21414.19273.16061.33652.37323.413.61185.4283 1.04015.67303 2.18736 1.00955 3.2581a6.71716 6.71716 0 0 0 1.68259 2.98277c.69904.5935 1.48832 1.06768 2.34032 1.40725l2.0497.93307c.35946.14379.6868.3564.96366.62715.26157.37017.42065.80305.45889 1.2543.37935 2.4428-.02142 4.9422-1.14722 7.14334z" fill="#cc959f" fill-rule="nonzero"/>
53
+ <path d="M83.94658 267.66242c-3.33764 3.46613-8.63167 4.25389-12.83354 1.91203-.09178-.30592-.18356-.59655-.29063-.87188-.22945-.67304-1.02485-1.94263-.47419-2.50859.55067-.56596 1.83555-.55066 2.34033-.7801 1.49597-.8933 3.0929-1.60764 4.75713-2.12618 1.50821-.20039 3.04242-.10249 4.5124.29062.20037.03366.3931.10555.56595.21415.19274.16061.33652.37323.413.61185.4283 1.08603.67304 2.18736 1.00955 3.2581z" fill-opacity=".1" fill-rule="nonzero"/>
54
+ <circle cx="263.84" cy="289.36" r="6.94" fill="#d7a5ad" transform="matrix(1.52962 0 0 1.52962 -327.27714 -182.76549)"/>
55
+ <path d="M103.0883 280.35218c-11.84082 16.48476-36.14502 16.80904-49.00304 2.93382.1652-.8107.47418-1.59387.90554-2.30055.44818-.69904 1.2191-1.1304 2.0497-1.14722.44359 0 .94836.16826 1.26958-.15296.32122-.32122.21415-.58126.4436-.7954.22944-.21416.7801-.21416 1.2084-.18356.93307.03059 1.82025-.413 2.35562-1.17781.16367-.28451.36405-.5476.59655-.78011.4023-.1958.83824-.30899 1.28489-.33652 1.239-.27533 1.97321-1.52962 2.90628-2.30973.45736-.51548 1.17934-.71434 1.83555-.50478.1499.07801.27992.18662.3824.32122.25087.38547.42218.81682.50478 1.2696.55373 2.5407 7.78426 7.73836 9.81254 9.36435 1.57246 1.18852 9.01867-10.14447 9.10891-12.13298v-.26003c1.25888-.31205 2.59425-.04895 3.64051.71892 1.01567.77705 2.10017 1.45926 3.2428 2.0344 1.36137.53537 3.05925.53537 3.99232 1.52962.3977.3977.67304.94837 1.17781 1.19311.31358.12237.64397.20038.97896.22944 1.73.46654 1.3063 2.48717 1.3063 2.48717z" fill="#fff" fill-rule="nonzero"/>
56
+ <path d="M68.97156 242.62247c-.7388.59809-1.19157 1.4562-1.85084 2.14148-1.14416 1.19004-3.4753 6.8726-3.57167 8.3808-.29981 4.70207 1.2344 10.37545 2.74567 9.9961l1.78966-5.06917c.18356-.76482.45889-1.6673 1.239-1.92733a3.86232 3.86232 0 0 1 1.6214 0c2.11088.18356 4.01985.05966 6.10779-1.16251.66538-.12543 3.7537-3.6344 4.42826-3.59156 1.6214 0 .95143 3.46919 1.30324 4.98351 0 .24474.09178.55067.32122.67304.23403.06883.4849.06883.71892 0 1.02485-.10708 1.6367 1.05544 1.94263 2.0038l1.07073 3.47225c.16826.52008 1.6933-.76022 1.85085-1.25429.72351-2.26231 1.17016-4.58734.74952-6.86801-.42218-2.28985.55066-4.8948-1.04015-6.65387-.58126-.62714-1.34607-1.10133-1.88144-1.77436-.53537-.67304-.7801-1.39196-1.30018-2.0191-2.07723-1.82179-4.66994-2.95524-7.41868-3.2428-3.0669-.27075-6.14603.39616-8.82593 1.91202z" fill="#e4d2aa" fill-rule="nonzero"/>
57
+ </g>
58
+ </g>
59
+ <g>
60
+ <path d="M590.46 285.225c0-29.872-24.253-54.125-54.125-54.125h-327.2c-29.872 0-54.125 24.253-54.125 54.125s24.253 54.125 54.125 54.125h327.2c29.872 0 54.125-24.253 54.125-54.125z" fill="url(#_Linear3)" transform="matrix(.74209 0 0 .74209 82.16726 -61.16541)"/>
61
+ <path d="M519.43452 150.50373c0-21.17248-17.1897-38.36218-38.36218-38.36218H237.36359c-21.17248 0-38.36218 17.1897-38.36218 38.36218 0 21.17248 17.1897 38.36218 38.36218 38.36218h243.70875c21.17248 0 38.36218-17.1897 38.36218-38.36218z" fill="#fff"/>
62
+ <path d="M480.95184 131.25733c0-2.27186-1.84484-4.11652-4.11671-4.11652H285.58108c-2.27243 0-4.11671 1.84466-4.11671 4.11652v8.23348c0 2.27229 1.84428 4.11695 4.1167 4.11695h191.25406c2.27187 0 4.1167-1.84466 4.1167-4.11695v-8.23348z" fill="#3f3d56"/>
63
+ <path d="M480.95184 150.02525c0-1.51458-1.23008-2.74435-2.74448-2.74435H284.20884c-1.51495 0-2.74447 1.22977-2.74447 2.74435v5.48898c0 1.51486 1.22952 2.74463 2.74447 2.74463h193.99852c1.5144 0 2.74448-1.22977 2.74448-2.74463v-5.48898z" fill="#16bd83"/>
64
+ <path d="M342.00676 165.05111c0-1.51458-1.2299-2.74435-2.74448-2.74435h-55.05373c-1.51476 0-2.74449 1.22977-2.74449 2.74435v5.48898c0 1.51487 1.22973 2.74464 2.74449 2.74464h55.05373c1.51459 0 2.74448-1.22977 2.74448-2.74464v-5.48898z" fill="#9795b1"/>
65
+ <g serif:id="text" fill-rule="nonzero">
66
+ <path d="M358.2531 171.01984c.59163 0 .87848-.11696 1.16533-.26893l-.30478-.94122c-.1972.09875-.41235.15267-.55577.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86494h1.19221v-.96784h-1.19221v-1.5596l-1.16533.12536v1.43424h-.51991v.96784h.51991v2.02601c0 .98605.49302 1.45246 1.246 1.45246zM362.29567 166.5021c-.51963 0-.9948.25072-1.32647.71713h-.00896v-.6457h-1.17429v4.37487h1.17429v-2.03511c0-.6457.39442-1.13871 1.12043-1.13871.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05322-.0084-.08964-.0084zM365.55004 166.57353v2.12476c0 .84248-.45731 1.27247-.96854 1.27247-.54695 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49302 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17443v-4.37487h-1.17442zM368.83942 171.01984c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.43069-.16108-.6632-.28713-.6632-.46641 0-.2332.24162-.33125.43-.33125.32285 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21014-.51123l-.57356.81587c.48392.41249 1.07568.63659 1.7746.63659zM372.3536 171.01984c.59176 0 .8782-.11696 1.16532-.26893l-.30464-.94122c-.19748.09875-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86494h1.19194v-.96784h-1.19194v-1.5596l-1.16532.12536v1.43424h-.52034v.96784h.52034v2.02601c0 .98605.49302 1.45246 1.24586 1.45246z" fill="#1d58bf"/>
67
+ <path d="M376.40562 166.5021c-.53784 0-.99515.1968-1.3271.57356h-.0175v-.50213h-1.17443v6.14947h1.17443v-2.26762h.0175c.30464.35786.73533.56446 1.29068.56446 1.21925 0 2.09745-.8964 2.09745-2.25012 0-1.3264-.8873-2.26762-2.06103-2.26762zm-.25141 3.46866c-.63659 0-1.13871-.47481-1.13871-1.19193 0-.69892.4664-1.22836 1.1387-1.22836.62749 0 1.12051.47552 1.12051 1.22836 0 .70802-.4573 1.19193-1.1205 1.19193zM381.81976 166.57353v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49303 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17444v-4.37487h-1.17443zM383.74702 164.35073h1.1743v6.59753h-1.1743zM387.12605 171.01984c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.42999-.16108-.6632-.28713-.6632-.46641 0-.2332.24161-.33125.43-.33125.32284 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21015-.51123l-.57355.81587c.48391.41249 1.07568.63659 1.7746.63659zM393.32033 168.7158c0-1.28158-.86068-2.2137-2.14226-2.2137-1.24586 0-2.16958.92302-2.16958 2.24942 0 1.37191.96854 2.26832 2.25011 2.26832.8782 0 1.51479-.34946 1.89156-.82498l-.76195-.70801c-.2423.29553-.58266.50212-1.04907.49302-.56445 0-.97694-.32285-1.1205-.84248h3.07508c.02661-.07213.02661-.27803.02661-.4216zm-2.10655-1.18283c.51123 0 .82498.30463.94123.76194h-1.92727c.13446-.50213.51123-.76194.98604-.76194z" fill="#00aded"/>
68
+ </g>
69
+ <g serif:id="mark">
70
+ <path d="M352.3362 165.0942c-.38985-.10526-.77051-.24529-1.1363-.4248-.31034-.15228-.6097-.32576-.90302-.50839a4.28059 4.28059 0 0 1-.01708.01058c-.77208.4791-1.59296.8661-2.50488 1.03731-.32904.06177-.66185.10054-.99532.12898l-.01063.0009c-.08214 1.83573.04032 3.72786 1.01521 5.302.59423.95947 1.51362 1.67795 2.48731 2.27517l.0254.01547c.39845-.2435.7898-.50318 1.15398-.79322h.82667c-.58592.55146-1.2694 1.0136-1.96423 1.42616-.03256-.02228-.03286 0-.03286 0-.87643-.52039-1.7297-1.09562-2.39376-1.85939-.45109-.51878-.80827-1.11492-1.06569-1.76016-.64686-1.62151-.68784-3.42666-.57505-5.12153.71687-.04271 1.44492-.11159 2.13114-.33286.6768-.21823 1.30011-.58061 1.90217-.97149l.01762-.01147c.01171.00765.02342.01524.03519.02288.75935.4919 1.56971.92602 2.4621 1.11205a6.70181 6.70181 0 0 0 .15359.03011l-.61155.4217zm-.18136 6.3196h-1.13481c-.18968-.00806-.20246-.10413-.20646-.19786-.00472-.11147.06756-.20944.20646-.21536h.97722l.3089-1.12615s.05963-.13943.17947-.15096c.09582-.00926.1782.03119.21793.14708l.46674 1.57933.28591-.89854s.09248-.1638.23932-.13955c.08005.0205.08328.0242.1297.088l.33232.5008h.79573c.00096.00011.14768.01995.1917.12957.05096.12676-.02968.27677-.1917.28364h-.9066c-.09857-.00406-.12671-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03333-.21356-.1475l-.45205-1.52962-.15873.5787s-.0721.14635-.19923.15191zm2.22392-6.0194c.04014.97769.0101 1.95688-.15741 2.9234-.07635.44076-.24279 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17471.553-2.4526.53371-3.7033l.53676-.52237z" fill="#00aded" fill-rule="nonzero"/>
71
+ <path d="M350.08965 167.9099c.03129-.03568.0394-.0591.08606-.12695.26903-.39144 1.0659-1.44673 2.07848-2.25844.44062-.35324.91685-.67436 1.33812-.88486.70208-.35081.92816-.39358 1.25422-.46954.06193-.01442.2862-.05445.3234.03392.0359.0853-.10399.17519-.15647.21643-.05901.04637-1.40842 1.05545-2.54368 2.55402-.98784 1.30389-1.63428 3.0147-1.63428 3.0147-.01986.03799-.24452.43946-.54593.45902-.27857.0181-.63633-.34424-.63633-.34424-.06877-.06417-.40417-.4622-.68325-.95451-.35593-.6277-.66242-1.37176-.66242-1.37176s-.31816-.62588.28165-.9701c.59141-.33942.85484.00518.9832.20862.10969.17388.33069.59624.4375.80283.0372.07196.06126.11186.07973.09085z" fill="#1d58bf" fill-rule="nonzero"/>
72
+ </g>
73
+ <g>
74
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#16bd83" transform="matrix(1.24515 0 0 1.24515 128.79025 -308.60286)"/>
75
+ <g transform="matrix(.06627 0 0 .06536 219.03341 123.08496)">
76
+ <clipPath id="a">
77
+ <ellipse cx="301.161" cy="412.162" rx="482.83" ry="489.567"/>
78
+ </clipPath>
79
+ <g clip-path="url(#a)">
80
+ <path d="M204.8661 153.28986c56.75005-49.87448 141.04683-49.80035 197.71882.17006C516.35825 253.78882 687.788 404.96022 687.788 404.96022l-768.05126-1.10318S91.0711 253.29174 204.8661 153.28986z" fill="#caeafd"/>
81
+ <path d="M188.84657 730.71631c28.67426 34.82609 71.12188 54.94595 115.86795 54.91574 44.74173-.03625 87.16333-20.21049 115.78989-55.08491 112.74986-137.3407 267.28817-325.58526 267.28817-325.58526l-768.0556-1.10568S75.46356 593.00705 188.84658 730.7163z" fill="#b2e2fc"/>
82
+ <path d="M400.72664 653.43536l276.23198 247.19779c9.5224 8.55156 12.75423 22.0308 8.1293 33.91464-4.62491 11.88385-16.14612 19.7235-28.99552 19.7235H-48.07247c-12.90565 0-24.4831-7.87396-29.12532-19.80927-4.64223-11.9396-1.39743-25.47887 8.16824-34.06475l281.47126-247.18492 188.28493.22301z" fill="#eff9ff"/>
83
+ <path d="M212.44437 653.43536l-288.78911-243.8269-2.94202 515.45712c.61328 6.08131 5.11207 14.26834 7.90399 18.52697l283.82714-290.15719z" fill="#caeafd"/>
84
+ <path d="M212.4412 653.43536L-80.26343 403.85737l1.02498 521.20821 291.67967-271.63022z" fill="#f8fcff"/>
85
+ <path d="M399.64663 653.43536l288.14581-248.4758-.61756 522.13885c-.61328 6.0813-2.40593 9.1434-5.19784 13.40203L399.64663 653.43536z" fill="#caeafd"/>
86
+ <path d="M399.64663 653.43536l288.14581-248.4758-.83628 522.13885-287.30953-273.66305z" fill="#f8fcff"/>
87
+ </g>
88
+ </g>
89
+ </g>
90
+ </g>
91
+ <g>
92
+ <path d="M590.46 285.225c0-29.872-24.253-54.125-54.125-54.125h-327.2c-29.872 0-54.125 24.253-54.125 54.125s24.253 54.125 54.125 54.125h327.2c29.872 0 54.125-24.253 54.125-54.125z" fill="url(#_Linear5)" transform="matrix(.74209 0 0 .74209 -79.40377 -171.49611)"/>
93
+ <path d="M357.86349 40.17303c0-21.17248-17.1897-38.36218-38.36218-38.36218H75.79256c-21.17248 0-38.36218 17.1897-38.36218 38.36218 0 21.17248 17.1897 38.36218 38.36218 38.36218h243.70875c21.17248 0 38.36218-17.1897 38.36218-38.36218z" fill="#fff"/>
94
+ <path d="M319.3808 20.92663c0-2.27186-1.84483-4.11652-4.1167-4.11652H124.01005c-2.27243 0-4.11671 1.84466-4.11671 4.11652v8.23348c0 2.27229 1.84428 4.11695 4.1167 4.11695H315.2641c2.27187 0 4.1167-1.84466 4.1167-4.11695v-8.23348z" fill="#3f3d56"/>
95
+ <path d="M319.3808 39.69455c0-1.51458-1.23007-2.74435-2.74447-2.74435H122.63781c-1.51495 0-2.74447 1.22977-2.74447 2.74435v5.48898c0 1.51486 1.22952 2.74463 2.74447 2.74463h193.99852c1.5144 0 2.74448-1.22977 2.74448-2.74463v-5.48898z" fill="#6c63ff"/>
96
+ <path d="M180.43573 54.72041c0-1.51458-1.2299-2.74435-2.74448-2.74435h-55.05373c-1.51476 0-2.74449 1.22977-2.74449 2.74435v5.48898c0 1.51487 1.22973 2.74464 2.74449 2.74464h55.05373c1.51459 0 2.74448-1.22977 2.74448-2.74464v-5.48898z" fill="#9795b1"/>
97
+ <g serif:id="text" fill-rule="nonzero">
98
+ <path d="M196.68207 60.68914c.59163 0 .87848-.11696 1.16533-.26893l-.30478-.94122c-.1972.09875-.41235.15267-.55577.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86494h1.19221v-.96784h-1.19221v-1.5596l-1.16533.12536v1.43424h-.51991v.96784h.51991v2.02601c0 .98605.49302 1.45246 1.246 1.45246zM200.72464 56.1714c-.51963 0-.9948.25072-1.32647.71713h-.00896v-.6457h-1.17429v4.37487h1.17429V58.5826c0-.6457.39442-1.13871 1.12043-1.13871.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05322-.0084-.08964-.0084zM203.979 56.24283v2.12476c0 .84248-.4573 1.27247-.96853 1.27247-.54695 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49302 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17443v-4.37487h-1.17442zM207.26839 60.68914c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.43069-.16108-.6632-.28713-.6632-.46641 0-.2332.24162-.33125.43-.33125.32285 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21014-.51123l-.57356.81587c.48392.41249 1.07568.63659 1.7746.63659zM210.78257 60.68914c.59176 0 .8782-.11696 1.16532-.26893l-.30464-.94122c-.19748.09875-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86494h1.19194v-.96784h-1.19194v-1.5596l-1.16532.12536v1.43424h-.52034v.96784h.52034v2.02601c0 .98605.49302 1.45246 1.24586 1.45246z" fill="#1d58bf"/>
99
+ <path d="M214.8346 56.1714c-.53785 0-.99516.1968-1.3271.57356h-.01751v-.50213h-1.17443v6.14947h1.17443v-2.26762h.0175c.30464.35786.73533.56446 1.29068.56446 1.21925 0 2.09745-.8964 2.09745-2.25012 0-1.3264-.8873-2.26762-2.06103-2.26762zm-.25142 3.46866c-.63659 0-1.13871-.47481-1.13871-1.19193 0-.69892.4664-1.22836 1.1387-1.22836.62749 0 1.12051.47552 1.12051 1.22836 0 .70802-.4573 1.19193-1.1205 1.19193zM220.24873 56.24283v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.6353c0 1.3362.6632 1.811 1.60442 1.811.49303 0 .96854-.20659 1.29979-.60997h.0182v.53854h1.17444v-4.37487h-1.17443zM222.176 54.02003h1.17428v6.59753H222.176zM225.55502 60.68914c1.14781 0 1.70316-.58267 1.70316-1.36282 0-.85998-.55535-1.06658-1.50568-1.41603-.42999-.16108-.6632-.28713-.6632-.46641 0-.2332.24161-.33125.43-.33125.32284 0 .70802.14356 1.04907.4657l.56446-.86068c-.49303-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84247.62748 1.18282 1.3446 1.42513.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47481 0-.85158-.17017-1.21015-.51123l-.57355.81587c.48391.41249 1.07568.63659 1.7746.63659zM231.7493 58.3851c0-1.28158-.86068-2.2137-2.14226-2.2137-1.24586 0-2.16958.92302-2.16958 2.24942 0 1.37191.96854 2.26832 2.25011 2.26832.8782 0 1.51479-.34946 1.89156-.82498l-.76195-.70801c-.2423.29553-.58266.50212-1.04907.49302-.56445 0-.97694-.32285-1.1205-.84248h3.07508c.02661-.07213.02661-.27803.02661-.4216zm-2.10655-1.18283c.51123 0 .82498.30463.94123.76194h-1.92727c.13446-.50213.51123-.76194.98604-.76194z" fill="#00aded"/>
100
+ </g>
101
+ <g serif:id="mark">
102
+ <path d="M190.76518 54.7635c-.38986-.10526-.77052-.24529-1.1363-.4248-.31035-.15228-.6097-.32576-.90303-.50839a4.28059 4.28059 0 0 1-.01708.01058c-.77208.4791-1.59296.8661-2.50488 1.03731-.32904.06177-.66185.10054-.99532.12898l-.01063.0009c-.08214 1.83573.04032 3.72786 1.01521 5.302.59423.95947 1.51362 1.67795 2.48731 2.27517l.0254.01547c.39845-.2435.7898-.50318 1.15398-.79322h.82667c-.58592.55146-1.2694 1.0136-1.96423 1.42616-.03256-.02228-.03286 0-.03286 0-.87643-.52039-1.7297-1.09562-2.39376-1.85939-.45109-.51878-.80827-1.11492-1.06569-1.76016-.64686-1.62151-.68784-3.42666-.57505-5.12153.71687-.04271 1.44492-.11159 2.13114-.33286.6768-.21823 1.30011-.58061 1.90217-.97149l.01762-.01147c.01171.00765.02342.01524.03519.02288.75935.4919 1.56971.92602 2.4621 1.11205a6.70181 6.70181 0 0 0 .15359.03011l-.61155.4217zm-.18137 6.3196H189.449c-.18968-.00806-.20246-.10413-.20646-.19786-.00472-.11147.06756-.20944.20646-.21536h.97722l.3089-1.12615s.05963-.13943.17947-.15096c.09582-.00926.1782.03119.21793.14708l.46674 1.57933.28591-.89854s.09248-.1638.23932-.13955c.08005.0205.08328.0242.1297.088l.33232.5008h.79573c.00096.00011.14768.01995.1917.12957.05096.12676-.02968.27677-.1917.28364h-.9066c-.09857-.00406-.12671-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03333-.21356-.1475l-.45205-1.52962-.15873.5787s-.0721.14635-.19923.15191zm2.22392-6.0194c.04014.97769.0101 1.95688-.15741 2.9234-.07635.44076-.24279 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17471.553-2.4526.53371-3.7033l.53676-.52237z" fill="#00aded" fill-rule="nonzero"/>
103
+ <path d="M188.51862 57.5792c.03129-.03568.0394-.0591.08606-.12695.26903-.39144 1.0659-1.44673 2.07848-2.25844.44062-.35324.91685-.67436 1.33812-.88486.70208-.35081.92816-.39358 1.25422-.46954.06193-.01442.2862-.05445.3234.03392.0359.0853-.10399.17519-.15647.21643-.05901.04637-1.40842 1.05545-2.54368 2.55402-.98784 1.30389-1.63428 3.0147-1.63428 3.0147-.01986.03799-.24452.43946-.54593.45902-.27857.0181-.63633-.34424-.63633-.34424-.06877-.06417-.40417-.4622-.68325-.95451-.35593-.6277-.66242-1.37176-.66242-1.37176s-.31816-.62588.28165-.9701c.59141-.33942.85484.00518.9832.20862.10969.17388.33069.59624.4375.80283.0372.07196.06126.11186.07973.09085z" fill="#1d58bf" fill-rule="nonzero"/>
104
+ </g>
105
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#d1ceff" transform="translate(-33.01933 -419.33226) scale(1.24681)"/>
106
+ <g>
107
+ <path d="M72.70322 31.51997c-1.28829-2.16884-1.71512-4.9399-.9589-7.68535 1.39848-5.07718 6.31646-8.1573 10.97559-6.87397 4.65912 1.28332 7.30633 6.44723 5.90785 11.5244-.75622 2.74546-2.54174 4.90713-4.75886 6.11044 1.49218-1.30606 2.69146-3.18496 3.3083-5.42441 1.39844-5.07701-.7234-10.0962-4.73527-11.20125-4.01187-1.10504-8.4043 2.11984-9.80272 7.19685-.61685 2.23945-.54878 4.46744.064 6.3533z" fill="#4a41df"/>
108
+ <path d="M67.54961 23.68095l-2.53994-.31091-6.84307 32.05362 1.20437 2.33145 8.17864-34.07416z" fill="#342ada" fill-rule="nonzero"/>
109
+ <path d="M66.75708 23.13525l-7.36405 34.43968 26.80336 5.51828 7.2562-33.5586-26.69551-6.39936z" fill="#6c63ff" fill-rule="nonzero"/>
110
+ <path d="M67.8951 48.228l2.56138-1.89506c.5772.91782 1.27595 1.6768 2.09644 2.27698.82034.59993 1.65499 1.00499 2.50418 1.21502.83984.20772 1.56524.18375 2.17584-.07219.6108-.25589.99733-.71233 1.15991-1.36968.0926-.37435.10477-.71773.03673-1.03012-.06808-.31219-.23693-.6181-.50702-.91741-.2699-.29928-.58302-.5801-.9395-.8427-.35647-.26261-.83858-.57552-1.44626-.9389-.48891-.29537-.89627-.54865-1.22181-.76-.32555-.21135-.69053-.46883-1.09499-.77224-.40466-.30346-.73194-.5855-.98247-.8461-.25034-.26054-.49876-.56896-.74481-.92538-.24606-.35641-.42252-.71008-.52958-1.06105-.10687-.35093-.16607-.74835-.17745-1.19202-.01143-.44348.04273-.90731.1624-1.39112.35454-1.4335 1.11367-2.51478 2.27749-3.24423 1.16381-.72945 2.58532-.96402 4.26491-.70362l.8739-3.5333 2.53355.62663-.90776 3.67022c.82439.38805 1.61423.87648 2.36953 1.4653.7555.58885 1.3814 1.21117 1.87813 1.86686l-2.49301 1.91197c-.6086-.7123-1.27213-1.30031-1.99062-1.76386-.7185-.46355-1.41559-.77878-2.09124-.9459-.82173-.20323-1.51227-.19235-2.0716.03266-.5595.22477-.91604.6477-1.06962 1.26863-.149.60242-.00324 1.1496.43693 1.64124.4404.4915 1.20655 1.07576 2.29862 1.75282.42956.26126.79095.48395 1.0846.66798.29365.18403.61867.39752.975.64067.35652.24319.64851.46319.87597.65999.2275.1966.46861.42593.72363.68762.255.2617.4553.50986.6007.74424.14536.23457.28301.50113.41257.7996.12951.29865.21188.60238.24687.91135.03498.30896.04162.6448.0197 1.0075-.02195.36287-.08255.74492-.18193 1.14673-.36582 1.47908-1.13688 2.57932-2.31317 3.30072-1.17634.7216-2.61107.97956-4.304.77393l-.82982 3.3551-2.53356-.62663.83324-3.36892c-2.09856-.83857-3.75578-2.24653-4.972-4.22333z" fill="#fff" fill-rule="nonzero"/>
111
+ </g>
112
+ </g>
113
+ <defs>
114
+ <linearGradient id="_Linear1" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
115
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
116
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
117
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
118
+ </linearGradient>
119
+ <linearGradient id="_Linear2" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
120
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
121
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
122
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
123
+ </linearGradient>
124
+ <linearGradient id="_Linear3" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
125
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
126
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
127
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
128
+ </linearGradient>
129
+ <linearGradient id="_Linear5" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
130
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
131
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
132
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
133
+ </linearGradient>
134
+ </defs>
135
+ </svg>
assets/images/features-fire.svg ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg viewBox="0 0 584 448" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421">
3
+ <path d="M189.59818 18.37229s-66.37622-41.54605-106.72752 25.0658c-20.57684 33.96683 6.88083 88.82258 1.63307 87.80267-34.08952-6.27889-55.73244-1.19743-65.90882 14.34997 25.19084 7.2841 35.34685 21.19308 21.27964 52.57056-12.03466 26.84669-33.5644 51.6592-32.22785 80.84196 2.41847 61.18891 37.27982 95.34118 91.51387 110.31304-26.95745-23.4387-37.92038-68.15075-30.5167-89.71924 11.67478-34.0098 39.29428-49.14561 57.27836-74.00675 8.87378-12.26831 9.03675-26.31638 2.33586-48.2614 49.5793 40.46282 46.49765 79.46814 17.82225 116.48678 19.27877 10.77916 37.61482 3.65675 54.82594-24.84757 16.92366 50.56354-4.30731 87.20452-33.88242 119.22877 64.3097-18.3154 98.7444-61.7113 99.07373-132.00817-2.32907-55.40867-30.75436-104.52828-91.25131-160.70584-34.04765-31.6172-21.50372-75.01762 14.7519-77.11058z" fill="#ed4500"/>
4
+ <path d="M583.79669 80.02688v292.83723c-.00695 7.44431-6.13186 13.56391-13.56379 13.56043H98.05177c-7.4368 0-13.55684-6.12795-13.55684-13.57436V80.02688c0-7.45058 6.12283-13.58132 13.5638-13.58132H570.2329c7.43888 0 13.56379 6.13074 13.56379 13.58132z" fill="#fff" fill-rule="nonzero"/>
5
+ <path d="M561.1278 107.46498c0-2.94215-2.38806-5.33112-5.33142-5.33112H113.58244c-2.94337 0-5.33142 2.38897-5.33142 5.33112v45.02798c0 2.94215 2.38805 5.33069 5.33142 5.33069h442.21394c2.94336 0 5.33142-2.38854 5.33142-5.33069v-45.02798z" fill="#d2def2"/>
6
+ <path d="M304.51417 141.38434c-1.39732 1.9698-3.31104 3.19358-5.70392 3.19358-3.57855 0-5.5883-1.95022-4.89943-7.60996l1.43553-11.91277h5.85678l-1.24445 10.15347c-.38216 3.09763-.13327 4.11092 1.24445 4.11092 1.66483 0 3.96168-2.81078 4.30562-5.5452l1.072-8.71919h5.87637l-2.35466 19.15951h-5.8754l.34394-2.83036h-.05683zm17.02356-16.32915h3.96266l-.57422 4.761h-3.98127l-.93775 7.85863c-.13425 1.09063.23027 1.587.86132 1.587.5164 0 1.16802-.20951 1.93331-.59231l.95637 4.5319c-1.68442.93693-3.36885 1.37651-5.16792 1.37651-2.96612 0-5.10913-1.70154-4.57313-6.1189l1.0328-8.64283h-1.91372l.57422-4.761h1.93331l.70846-5.58337 6.02826-1.1856-.8427 6.76897zm-74.75845 19.52273c3.65595 0 6.31634-1.47245 8.3065-4.22645l-4.57412-2.86756c-1.12883 1.3579-2.1822 1.85427-3.32965 1.85427-1.11021 0-2.58396-.66867-2.58396-3.3463 0-3.19358 1.79907-6.04254 4.287-6.06115.95637 0 2.04796.24868 2.79366 1.4147l4.49767-3.34631c-1.39633-2.1421-3.88426-3.30812-6.9464-3.30812-6.54565 0-10.56514 5.41106-10.56514 11.54955 0 5.41107 3.11996 8.33737 8.11542 8.33737h-.00098zm37.66682-19.86734c-6.77493 0-10.58375 5.46883-10.58375 11.62591 0 5.23876 3.2346 8.24143 8.09582 8.24143 7.34914 0 10.66018-5.45023 10.66018-11.68368 0-5.23876-3.2346-8.18366-8.17225-8.18366zm-84.79837 15.06816l-4.42124-4.09232c-1.43554 1.7593-3.50212 2.88714-5.79897 2.88714-3.13857 0-5.0905-2.10294-5.0905-6.1189 0-5.00967 3.04254-10.40214 7.65486-10.40214 2.39289 0 3.9999 1.43427 5.14833 3.5568l5.01407-3.7477c-2.66039-4.3596-6.18112-5.83206-9.8939-5.83206-8.45936 0-14.52682 7.59136-14.52682 16.5974 0 8.06913 4.88081 11.95096 11.2922 11.95096 4.43987 0 8.07623-1.85525 10.62197-4.79918zm62.24237 4.43596h-5.8754l3.54033-28.8352h5.8754l-2.1244 17.41978h.09603c3.10036-2.12253 4.49768-4.64645 5.24435-7.74507h6.08608c-.74668 3.92002-2.6986 7.13318-5.3786 9.6757l.51738 1.64476c.87994 2.754 1.8755 3.21218 3.57855 3.3659l-1.32089 4.77959c-.42135.03818-.8035.05776-1.72264.05776-3.00433-.01958-4.42027-2.27525-5.45405-5.52561l-.26848-.88015h-.03822c-.70748.4014-1.43455.76462-2.18123 1.10924l-.57421 4.9333zm-32.07853-4.49372c-.99459 0-2.06658-.53553-2.58396-1.7779l.24889-.34462c5.6461-.86057 10.88947-3.07806 10.88947-7.45723 0-3.72813-3.32965-5.44926-6.50644-5.44926-6.60247 0-10.54553 5.50604-10.54553 11.70228 0 5.1624 3.02392 8.1641 8.038 8.1641 3.75199 0 6.31635-1.4147 8.3261-4.2059l-4.36344-2.56309c-1.0916 1.41567-2.23904 1.93162-3.5031 1.93162zm-22.80391 4.49372h-5.85678l3.5413-28.8352h5.85679l-1.53157 12.4101h.13327c1.68442-2.00797 3.80882-3.07902 6.35456-3.07902 3.63636 0 5.12872 2.42896 4.42125 7.78226l-1.55018 11.72186h-5.85678l1.39732-10.38255c.34394-2.63945.13326-3.86323-1.14843-3.86323-1.74224 0-4.21057 2.3712-4.88081 7.03723l-.87994 7.20855zm76.96025-14.26536c1.0524 0 2.71723.44056 2.71723 3.3277 0 3.13582-1.68443 6.06114-4.287 6.06114-1.2817 0-2.60258-.91734-2.60258-3.32672 0-2.94491 1.55018-6.06212 4.17235-6.06212zm-52.54835-.34364c.84172 0 1.32089.45916 1.32089 1.08965 0 1.7407-2.4311 2.65805-5.24435 3.17498l-.2489-.1723c.70846-2.6003 2.4311-4.09233 4.17236-4.09233z" fill="#fff" fill-rule="nonzero"/>
7
+ <path d="M402.2168 176.1176c0-1.10118-.89386-1.9952-1.99462-1.9952H110.24521c-1.10076 0-1.99462.89402-1.99462 1.9952v15.59036c0 1.10118.89386 1.99503 1.99462 1.99503h289.97697c1.10076 0 1.99462-.89385 1.99462-1.99503v-15.59037zM561.12665 176.1176c0-1.10118-.89418-1.9952-1.99526-1.9952H445.53555c-1.10108 0-1.99526.89402-1.99526 1.9952v15.59036c0 1.10118.89418 1.99503 1.99526 1.99503h113.59584c1.10108 0 1.99526-.89385 1.99526-1.99503v-15.59037zM402.2168 205.48833c0-1.10117-.89386-1.99518-1.99462-1.99518H110.24521c-1.10076 0-1.99462.894-1.99462 1.99518v15.59037c0 1.10117.89386 1.99503 1.99462 1.99503h289.97697c1.10076 0 1.99462-.89386 1.99462-1.99503v-15.59037zM561.12665 205.48833c0-1.10117-.89418-1.99518-1.99526-1.99518H445.53555c-1.10108 0-1.99526.894-1.99526 1.99518v15.59037c0 1.10117.89418 1.99503 1.99526 1.99503h113.59584c1.10108 0 1.99526-.89386 1.99526-1.99503v-15.59037zM402.2168 234.85907c0-1.10118-.89386-1.99519-1.99462-1.99519H110.24521c-1.10076 0-1.99462.89401-1.99462 1.99519v15.59036c0 1.10118.89386 1.99504 1.99462 1.99504h289.97697c1.10076 0 1.99462-.89386 1.99462-1.99504v-15.59036zM561.12665 234.85907c0-1.10118-.89418-1.99519-1.99526-1.99519H445.53555c-1.10108 0-1.99526.89401-1.99526 1.99519v15.59036c0 1.10118.89418 1.99504 1.99526 1.99504h113.59584c1.10108 0 1.99526-.89386 1.99526-1.99504v-15.59036zM561.12665 283.811c0-1.10118-.89418-1.9952-1.99526-1.9952H445.53555c-1.10108 0-1.99526.89402-1.99526 1.9952v15.59036c0 1.10117.89418 1.99503 1.99526 1.99503h113.59584c1.10108 0 1.99526-.89386 1.99526-1.99503v-15.59037zM400.21898 283.811c0-1.10118-.89385-1.9952-1.99514-1.9952h-93.99827c-1.1013 0-1.99515.89402-1.99515 1.9952v15.59036c0 1.10117.89386 1.99503 1.99515 1.99503h93.99827c1.10129 0 1.99514-.89386 1.99514-1.99503v-15.59037z" fill="#d2def2"/>
8
+ <path d="M561.12587 335.46628c0-1.68715-1.36918-3.0569-3.057-3.0569H111.4404c-1.68782 0-3.057 1.36975-3.057 3.0569v23.88655c0 1.68715 1.36918 3.05666 3.057 3.05666h446.62846c1.68783 0 3.057-1.36951 3.057-3.05666v-23.88655z" fill="#b1f6dc"/>
9
+ <g transform="matrix(.34795 0 0 .32413 77.16395 71.70824)">
10
+ <circle cx="186.632" cy="234.546" r="10.39" fill="#fff"/>
11
+ <circle cx="186.632" cy="234.546" r="10.39" fill="#fff" transform="translate(42)"/>
12
+ <path d="M151.22262 144.6002c2.00801-.17762 3.95468 1.0272 4.63305 3.01951l20.8177 61.13133h63.95896c2.4731 0 4.4804 2.0073 4.4804 4.47968v.05279c0 2.47239-2.0073 4.47969-4.4804 4.47969h-67.16321c-1.99803 0-3.69218-1.31038-4.26926-3.11867-.0856-.17333-.1605-.3538-.2247-.54212l-20.59942-60.49005h-15.39572c-2.47239 0-4.47969-2.0073-4.47969-4.47969v-.05278c0-2.47239 2.0073-4.47969 4.4797-4.47969h18.2426z" fill="#fff"/>
13
+ <path d="M200.7482 118.73991c-.83199-1.95645-3.01793-2.90164-4.87745-2.11087l-28.63923 12.17895c-1.85951.79076-2.69402 3.02042-1.86204 4.97687l18.02561 42.38784c.83199 1.95644 3.01682 2.90211 4.87634 2.11135l28.63922-12.17896c1.85952-.79076 2.69515-3.0209 1.86316-4.97734l-18.0256-42.38784z" fill="#fff"/>
14
+ <path d="M245.72468 136.85363c-.1633-1.8178-1.67331-3.17057-3.36862-3.01828l-26.1101 2.34559c-1.69531.1523-2.93902 1.75245-2.77572 3.57024l3.04851 33.935c.1633 1.8178 1.6723 3.17066 3.3676 3.01837l26.11011-2.34559c1.6953-.1523 2.94003-1.75254 2.77673-3.57034l-3.04851-33.935z" fill="#fff"/>
15
+ <path d="M230.54506 149.70948c.7378-1.81209-.06063-3.85311-1.78099-4.55355l-26.49594-10.7878c-1.72036-.70044-3.71635.20284-4.45414 2.01493l-15.96242 39.20534c-.73779 1.8121.0596 3.8527 1.77996 4.55313l26.49594 10.7878c1.72036.70044 3.71738-.20242 4.45517-2.0145l15.96242-39.20535z" fill="#eaf0f9"/>
16
+ <path d="M251.34 170.774c.195-2.488-.547-4.956-2.058-6.854-1.512-1.897-3.668-3.067-5.988-3.247-14.863-1.153-45.056-3.497-62.463-4.848-2.894-.225-5.697 1.139-7.447 3.624-1.75 2.484-2.209 5.751-1.219 8.679 3.002 8.88 6.807 20.136 9.121 26.977 1.248 3.694 4.518 6.154 8.179 6.154h51.673c4.421 0 8.104-3.636 8.474-8.365.505-6.462 1.204-15.406 1.728-22.12z" fill="#fff"/>
17
+ </g>
18
+ <path d="M581.2833 66.06111H87.03028c-1.39079 0-2.53493 1.20616-2.53493 2.67232v11.3004h499.30178V68.75567v-.02223c0-1.45783-1.13308-2.6601-2.51385-2.67232z" fill="#3f3d56" fill-rule="nonzero"/>
19
+ <circle cx="96.72" cy="164.18" r="6.5" fill="#fff" transform="matrix(.55606 0 0 .55558 41.2557 -18.16968)"/>
20
+ <circle cx="114.22" cy="164.18" r="6.5" fill="#fff" transform="matrix(.55606 0 0 .55558 41.2557 -18.16968)"/>
21
+ <circle cx="131.72" cy="164.18" r="6.5" fill="#fff" transform="matrix(.55606 0 0 .55558 41.2557 -18.16968)"/>
22
+ <g>
23
+ <path d="M590.46 285.225c0-29.872-24.182-54.125-53.968-54.125H208.978c-29.786 0-53.968 24.253-53.968 54.125s24.182 54.125 53.968 54.125h327.514c29.786 0 53.968-24.253 53.968-54.125z" fill="url(#_Linear1)" transform="matrix(.98606 0 0 .9832 -134.55633 114.13986)"/>
24
+ <path d="M445.60511 394.58452c0-28.05184-22.77435-50.82682-50.82627-50.82682H71.50959c-28.05192 0-50.82627 22.77498-50.82627 50.82682s22.77435 50.82681 50.82627 50.82681h323.26925c28.05192 0 50.82627-22.77497 50.82627-50.82681z" fill="#fff"/>
25
+ <path d="M208.17876 365.25134c0-1.12039-.9089-2.03063-2.03003-2.03063H134.623c-1.12114 0-2.03004.91024-2.03004 2.03063v15.81336c0 1.12039.9089 2.02949 2.03004 2.02949h71.52572c1.12114 0 2.03003-.9091 2.03003-2.0295v-15.81335z" fill="#ed4500" fill-opacity=".1"/>
26
+ <g font-family="'Averta-Semibold','Averta'" font-weight="600" font-size="13.333">
27
+ <text x="117.581" y="14.323" fill="#ed4500" transform="matrix(1.32609 0 0 1.32492 -22.46957 358.57658)">
28
+ 4<tspan x="124.623px 130.545px 133.446px 141.054px 147.874px 155.209px 162.817px 165.776px" y="14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px">7 people</tspan>
29
+ </text>
30
+ <text x="175.498" y="14.323" fill="#3f3d56" transform="matrix(1.32609 0 0 1.32492 -22.46957 358.57658)">
31
+ <tspan x="175.498px 183.106px 190.141px 194.435px 200.865px 208.174px 215.658px 220.974px 227.795px 235.396px 238.297px 243.614px 250.922px 258.257px 265.077px 270.394px 273.295px 276.254px 283.498px 286.399px 290.595px 297.904px" y="14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px 14.323px">purchased shoes in the</tspan>
32
+ </text>
33
+ <text x="117.581" y="31.656" fill="#3f3d56" transform="matrix(1.32609 0 0 1.32492 -22.46957 358.57658)">
34
+ l<tspan x="120.541px 128.025px 133.342px 137.538px 140.439px 146.869px 153.911px 156.812px 164.12px 171.455px 178.49px 182.784px" y="31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px 31.656px">ast 24 hours</tspan>
35
+ </text>
36
+ </g>
37
+ <g fill-rule="nonzero">
38
+ <path d="M217.29198 421.7667c.78455 0 1.16493-.15494 1.54532-.3563l-.40416-1.24704c-.26152.13083-.5468.20228-.737.20228-.35661 0-.51114-.23846-.51114-.73672v-2.4709h1.58098v-1.2823H217.185v-2.06635l-1.54532.16609v1.90026h-.68946v1.2823h.68946v2.6843c0 1.30643.65378 1.92439 1.6523 1.92439zM222.65277 415.78107c-.68908 0-1.31918.33218-1.759.95013h-.0119v-.85548h-1.5572v5.79635h1.5572v-2.69637c0-.85549.52304-1.5087 1.4858-1.5087.08358 0 .24981 0 .40397.01206v-1.68685c-.02321-.01114-.07058-.01114-.11887-.01114zM226.96834 415.87572v2.81513c0 1.11621-.60643 1.68592-1.28436 1.68592-.7253 0-1.0457-.3563-1.0457-1.4252v-3.07585h-1.54531v3.49154c0 1.77036.87945 2.39945 2.1276 2.39945.65379 0 1.28436-.27372 1.72362-.80817h.02415v.71353h1.5574v-5.79635h-1.5574zM231.33034 421.7667c1.5221 0 2.25854-.77197 2.25854-1.80561 0-1.13941-.73644-1.41313-1.99665-1.87614-.57114-.2134-.87946-.38042-.87946-.61795 0-.30898.3204-.43888.5702-.43888.42813 0 .9389.19021 1.39117.61703l.74851-1.14034c-.65379-.51033-1.30758-.72374-2.11553-.72374-1.1887 0-2.0923.68848-2.0923 1.73418 0 1.11621.83209 1.56716 1.78305 1.8882.76059.23753 1.05777.36836 1.05777.64115 0 .28485-.26096.47506-.71323.47506-.62964 0-1.12927-.22547-1.60475-.67734l-.76059 1.08096c.64172.54651 1.42645.84343 2.35327.84343zM235.99045 421.7667c.78473 0 1.16456-.15494 1.54532-.3563l-.40398-1.24704c-.26189.13083-.54699.20228-.73737.20228-.35661 0-.51077-.23846-.51077-.73672v-2.4709h1.5806v-1.2823h-1.5806v-2.06635l-1.54532.16609v1.90026h-.69001v1.2823h.69v2.6843c0 1.30643.6538 1.92439 1.65213 1.92439z" fill="#1d58bf"/>
39
+ <path d="M241.36378 415.78107c-.71323 0-1.31965.26073-1.75985.75992h-.02321v-.66527h-1.5574v8.14755h1.5574v-3.00442h.02321c.40398.47414.97511.74786 1.71156.74786 1.61682 0 2.78139-1.18766 2.78139-2.98122 0-1.75737-1.17664-3.00442-2.7331-3.00442zm-.3334 4.5957c-.84417 0-1.51003-.62909-1.51003-1.57922 0-.926.6185-1.62747 1.51003-1.62747.8321 0 1.48589.63002 1.48589 1.62747 0 .93807-.60643 1.57922-1.48589 1.57922zM248.54339 415.87572v2.81513c0 1.11621-.60643 1.68592-1.28437 1.68592-.7253 0-1.04569-.3563-1.04569-1.4252v-3.07585h-1.54532v3.49154c0 1.77036.87946 2.39945 2.1276 2.39945.6538 0 1.28437-.27372 1.72363-.80817h.02415v.71353h1.55739v-5.79635h-1.5574zM251.0991 412.93068h1.55722v8.7412h-1.55721zM255.57998 421.7667c1.5221 0 2.25854-.77197 2.25854-1.80561 0-1.13941-.73644-1.41313-1.99665-1.87614-.57021-.2134-.87946-.38042-.87946-.61795 0-.30898.3204-.43888.5702-.43888.42813 0 .9389.19021 1.39117.61703l.74851-1.14034c-.65379-.51033-1.30758-.72374-2.11553-.72374-1.1887 0-2.0923.68848-2.0923 1.73418 0 1.11621.83209 1.56716 1.78305 1.8882.76059.23753 1.05777.36836 1.05777.64115 0 .28485-.26096.47506-.71323.47506-.62964 0-1.12927-.22547-1.60475-.67734l-.7606 1.08096c.64173.54651 1.42646.84343 2.35328.84343zM263.79414 418.71404c0-1.69798-1.14135-2.93297-2.84083-2.93297-1.65212 0-2.87704 1.22293-2.87704 2.9803 0 1.81768 1.28436 3.00534 2.98384 3.00534 1.16456 0 2.00873-.463 2.50836-1.09302l-1.0104-.93807c-.32133.39156-.77266.66528-1.39116.65321-.74852 0-1.29551-.42774-1.48589-1.11621h4.07783c.03529-.09557.03529-.36836.03529-.55858zm-2.79347-1.56715c.67794 0 1.09399.40362 1.24815 1.0095h-2.55573c.17831-.66527.67794-1.0095 1.30758-1.0095z" fill="#00aded"/>
40
+ </g>
41
+ <path d="M209.44567 413.91572c-.51699-.13946-1.02178-.325-1.50684-.56284-.41154-.20175-.80851-.4316-1.19748-.67356a5.67728 5.67728 0 0 1-.02266.014c-1.02383.63479-2.11239 1.14752-3.32168 1.37437-.43634.08184-.87767.1332-1.31988.17088l-.0141.00119c-.10892 2.4322.05348 4.93912 1.34626 7.02472.788 1.27123 2.00719 2.22316 3.29839 3.01443l.03367.0205c.5284-.32262 1.04736-.66669 1.53028-1.05096h1.09625c-.777.73064-1.68334 1.34294-2.60475 1.88955-.04317-.02952-.04357 0-.04357 0-1.16223-.68948-2.29372-1.45161-3.17433-2.46354-.59819-.68734-1.07184-1.47718-1.4132-2.33208-.85779-2.14837-.91213-4.54004-.76257-6.7856.95064-.0566 1.91609-.14786 2.82609-.44103.89748-.28913 1.72405-.76926 2.52243-1.28714l.02337-.0152c.01553.01014.03105.02019.04666.03032 1.00696.65172 2.08157 1.2269 3.26496 1.47338a8.89413 8.89413 0 0 0 .20367.03989l-.81097.55872zm-.24051 8.37296h-1.50486c-.25152-.01069-.26847-.13796-.27378-.26215-.00626-.14769.0896-.2775.27378-.28533h1.29588l.40964-1.49206s.07906-.18473.23798-.20001c.12707-.01227.2363.04132.289.19487l.61893 2.09249.37915-1.1905s.12263-.21703.31735-.1849c.10616.02715.11043.03206.17199.1166l.4407.6635h1.0552c.00127.00017.19583.02644.25422.17168.06757.16796-.03937.3667-.25422.3758h-1.20223c-.13072-.00537-.16803-.03933-.22824-.12236l-.20597-.31003-.4765 1.4965s-.08398.17824-.24067.18995c-.12525.00934-.2314-.04416-.28321-.19542l-.59946-2.02664-.21048.76673s-.09562.19392-.2642.20128zm2.9491-7.97523c.05324 1.29537.0134 2.59271-.20874 3.87328-.10124.58397-.32194 1.3898-.51524 1.95129l-.69555-.2259c.5905-1.5564.73334-3.2495.70775-4.90659l.71179-.69208z" fill="#00aded" fill-rule="nonzero"/>
42
+ <path d="M206.46654 417.64628c.0415-.04726.05226-.07829.11412-.16818.35676-.51863 1.41349-1.91681 2.75625-2.99226.5843-.46801 1.21582-.89348 1.77446-1.17236.93102-.4648 1.23082-.52146 1.6632-.62212.08212-.0191.37952-.07213.42887.04495.0476.11302-.1379.23211-.20751.28676-.07825.06143-1.86768 1.39838-3.37313 3.38386-1.30996 1.72755-2.1672 3.99424-2.1672 3.99424-.02634.05034-.32425.58226-.72395.60816-.3694.024-.84382-.45608-.84382-.45608-.0912-.08502-.53596-.61239-.90605-1.26466-.472-.83164-.87842-1.81746-.87842-1.81746s-.42192-.82925.37349-1.2853c.78425-.44972 1.13359.00686 1.3038.2764.14545.23037.43852.78997.58015 1.06368.04935.09534.08125.14821.10574.12037z" fill="#1d58bf" fill-rule="nonzero"/>
43
+ <text x="35.99" y="29.951" font-family="'Averta-Semibold','Averta'" font-weight="600" font-size="9.333" fill="#a9b6d4" transform="matrix(1.32609 0 0 1.32492 85.82303 382.12314)">
44
+ P<tspan x="41.398px 46.532px 53.261px 58.035px 61.041px 65.816px 71.137px 73.167px 78.493px" y="29.951px 29.951px 29.951px 29.951px 29.951px 29.951px 29.951px 29.951px 29.951px">owered by</tspan>
45
+ </text>
46
+ <g transform="matrix(1.65338 0 0 1.65193 -72.73905 -214.22319)">
47
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#fbdacc"/>
48
+ </g>
49
+ <g>
50
+ <path d="M82.59618 363.67917s-11.32535-7.08874-18.21024 4.27682c-3.5109 5.79554 1.17403 15.15523.27864 14.9812-5.81647-1.07132-9.50927-.2043-11.2456 2.44845 4.29815 1.24284 6.031 3.61604 3.63081 8.96978-2.0534 4.58068-5.72688 8.81428-5.49883 13.79354.41265 10.44028 6.36082 16.26746 15.61442 18.82201-4.59957-3.9992-6.4701-11.62813-5.20686-15.30822 1.99199-5.80287 6.70453-8.3854 9.77304-12.6273 1.51407-2.09326 1.54188-4.4902.39855-8.23453 8.4594 6.90391 7.9336 13.55914 3.0409 19.8754 3.2894 1.83917 6.41797.62392 9.3546-4.23959 2.88757 8.62733-.73493 14.87915-5.78115 20.34324 10.97276-3.12504 16.84813-10.5294 16.90432-22.5237-.3974-9.45403-5.24742-17.835-15.56963-27.42021-5.80933-5.39464-3.66904-12.79978 2.51703-13.15689z" fill="#ed4500"/>
51
+ </g>
52
+ </g>
53
+ <defs>
54
+ <linearGradient id="_Linear1" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
55
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
56
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
57
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
58
+ </linearGradient>
59
+ </defs>
60
+ </svg>
assets/images/gravity-forms.png ADDED
Binary file
assets/images/home-flexible.svg ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg viewBox="0 0 561 420" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5">
3
+ <path d="M541.04438 349.44386c0 3.9122-3.17788 7.0878-7.0878 7.0878H10.49218c-3.91163 0-7.0878-3.1756-7.0878-7.0878V10.53238c0-3.91163 3.1756-7.0878 7.0878-7.0878h523.4644c3.90992 0 7.0878 3.17617 7.0878 7.0878v338.91148z" fill="#f5f5f7"/>
4
+ <path d="M538.31483-.00001H6.11126c-1.49757 0-2.72957 1.232-2.72957 2.72957v11.5425h537.64V2.72956c0-1.48906-1.22007-2.71709-2.70686-2.72957z" fill="#3f3d56" fill-rule="nonzero"/>
5
+ <circle cx="96.72" cy="164.18" r="6.5" fill="#fff" transform="translate(-40.74542 -86.03535) scale(.56748)"/>
6
+ <circle cx="114.22" cy="164.18" r="6.5" fill="#fff" transform="translate(-40.74542 -86.03535) scale(.56748)"/>
7
+ <circle cx="131.72" cy="164.18" r="6.5" fill="#fff" transform="translate(-40.74542 -86.03535) scale(.56748)"/>
8
+ <path fill="#dcdbdc" d="M28.37284 38.86226h488.82123V161.9703H28.37284z"/>
9
+ <path fill="#fff" d="M32.93322 42.81193h479.8486v114.89474H32.93323z"/>
10
+ <path d="M478.03484 71.437c0-3.40211-2.76264-6.16449-6.16477-6.16449h-286.4028c-3.40296 0-6.16477 2.76238-6.16477 6.1645v12.32963c0 3.40276 2.76181 6.16513 6.16476 6.16513h286.4028c3.40214 0 6.16478-2.76237 6.16478-6.16513V71.437z" fill="#16bd83"/>
11
+ <path d="M478.03484 99.54337c0-2.26808-1.84204-4.10966-4.10985-4.10966H183.41234c-2.26863 0-4.10984 1.84158-4.10984 4.10966v8.21975c0 2.2685 1.8412 4.11008 4.10984 4.11008H473.925c2.26781 0 4.10985-1.84158 4.10985-4.11008v-8.21975z" fill="#6c63ff"/>
12
+ <path d="M269.96526 122.04447c0-2.26808-1.84177-4.10966-4.10987-4.10966h-82.44321c-2.26835 0-4.10987 1.84158-4.10987 4.10966v8.21974c0 2.2685 1.84152 4.1101 4.10987 4.1101h82.4432c2.2681 0 4.10988-1.8416 4.10988-4.1101v-8.21974z" fill="#9795b1"/>
13
+ <g fill-rule="nonzero">
14
+ <path d="M294.29306 130.98143c.88596 0 1.31552-.17513 1.74507-.4027l-.4564-1.40949c-.29532.14787-.61749.22862-.83226.22862-.40271 0-.57722-.26952-.57722-.83268v-2.79275h1.78534v-1.44933h-1.78534v-2.3355l-1.74507.18772v2.14778h-.77857v1.44933h.77857v3.03395c0 1.4766.7383 2.17505 1.86588 2.17505zm6.05374-6.7653c-.77814 0-1.4897.37544-1.98638 1.0739h-.01342v-.96693h-1.7585v6.55136h1.7585v-3.04758c0-.96692.59064-1.70522 1.67785-1.70522.09438 0 .2821 0 .4562.01363v-1.90658c-.02623-.01258-.07971-.01258-.13424-.01258zm4.87342.10697v3.18182c0 1.26161-.68482 1.90553-1.45039 1.90553-.81905 0-1.18086-.40271-1.18086-1.61084v-3.47651h-1.74507v3.94634c0 2.00096.99314 2.712 2.40262 2.712.7383 0 1.45038-.30938 1.94643-.91344h.02727v.80646h1.7587v-6.55136h-1.7587zm4.92584 6.65833c1.71885 0 2.5505-.87253 2.5505-2.04081 0-1.28783-.83165-1.5972-2.25476-2.12051-.64496-.24121-.99314-.42998-.99314-.69845 0-.34923.3618-.49605.64392-.49605.48346 0 1.06025.21499 1.57098.6974l.84527-1.28888c-.7383-.5768-1.4766-.818-2.38899-.818-1.34236 0-2.36277.77815-2.36277 1.96006 0 1.26161.93966 1.7713 2.01355 2.13415.8589.26847 1.1945.41634 1.1945.72467 0 .32195-.2947.53694-.80543.53694-.71103 0-1.27524-.25484-1.81219-.76557l-.8589 1.22176c.72467.6177 1.61084.9533 2.65746.9533zm5.26248 0c.88617 0 1.3151-.17513 1.74508-.4027l-.4562-1.40949c-.29574.14787-.6177.22862-.83268.22862-.40271 0-.5768-.26952-.5768-.83268v-2.79275h1.78493v-1.44933h-1.78493v-2.3355l-1.74507.18772v2.14778h-.7792v1.44933h.7792v3.03395c0 1.4766.7383 2.17505 1.86567 2.17505z" fill="#1d58bf"/>
15
+ <path d="M321.47645 124.21613c-.80542 0-1.49024.2947-1.98733.8589h-.02622v-.75193h-1.7587v9.20882h1.7587v-3.39576h.02622c.4562.5359 1.10116.84527 1.9328.84527 1.82582 0 3.14091-1.34236 3.14091-3.36954 0-1.98628-1.32873-3.39576-3.08638-3.39576zm-.3765 5.19432c-.95328 0-1.70522-.71104-1.70522-1.78493 0-1.04662.69845-1.83945 1.70523-1.83945.93965 0 1.67795.71208 1.67795 1.83945 0 1.06026-.68481 1.78493-1.67795 1.78493zm8.48416-5.08735v3.18182c0 1.26161-.68481 1.90553-1.45038 1.90553-.81905 0-1.18086-.40271-1.18086-1.61084v-3.47651h-1.74507v3.94634c0 2.00096.99314 2.712 2.40262 2.712.7383 0 1.45038-.30938 1.94643-.91344h.02726v.80646h1.7587v-6.55136h-1.7587zm2.88609-3.32864h1.7585v9.8798h-1.7585zm5.06008 9.98697c1.71885 0 2.55049-.87253 2.55049-2.04081 0-1.28783-.83164-1.5972-2.25476-2.12051-.64391-.24121-.99313-.42998-.99313-.69845 0-.34923.3618-.49605.64391-.49605.48346 0 1.06026.21499 1.57099.6974l.84527-1.28888c-.7383-.5768-1.4766-.818-2.389-.818-1.34236 0-2.36276.77815-2.36276 1.96006 0 1.26161.93965 1.7713 2.01354 2.13415.8589.26847 1.1945.41634 1.1945.72467 0 .32195-.2947.53694-.80542.53694-.71103 0-1.27525-.25484-1.8122-.76557l-.8589 1.22176c.72467.6177 1.61084.9533 2.65747.9533zm9.27594-3.45029c0-1.91916-1.28888-3.31501-3.20804-3.31501-1.86568 0-3.24894 1.38222-3.24894 3.3685 0 2.05444 1.45038 3.3968 3.36954 3.3968 1.3151 0 2.26839-.52331 2.8326-1.2354l-1.14101-1.06025c-.36286.44256-.87254.75193-1.57099.7383-.84527 0-1.46296-.48346-1.67795-1.26161h4.60494c.03985-.10802.03985-.41634.03985-.63133zm-3.15456-1.7713c.76557 0 1.2354.4562 1.40948 1.14102h-2.88608c.20136-.75194.76557-1.14101 1.4766-1.14101z" fill="#00aded"/>
16
+ </g>
17
+ <path d="M285.43252 122.1078c-.58382-.15763-1.15386-.36732-1.70162-.63615-.46474-.22803-.91303-.48782-1.35227-.7613a6.41018 6.41018 0 0 1-.02559.01583c-1.15618.71747-2.38544 1.297-3.75105 1.55338-.49274.0925-.99112.15056-1.49049.19315l-.01592.00134c-.123 2.749.06038 5.58247 1.52028 7.93973.88986 1.43682 2.26664 2.51275 3.72475 3.40708l.03802.02317c.5967-.36464 1.18274-.75352 1.7281-1.18785h1.23794c-.87743.8258-1.90094 1.51787-2.94144 2.13568-.04876-.03337-.0492 0-.0492 0-1.31247-.77929-2.59022-1.6407-3.58466-2.78444-.6755-.77687-1.21039-1.66959-1.59587-2.63584-.96867-2.42821-1.03004-5.13142-.86114-7.66948 1.07352-.06396 2.16376-.16711 3.19139-.49847 1.01349-.3268 1.94691-.86946 2.84849-1.4548l.02639-.01717c.01753.01145.03506.02281.05269.03426 1.13712.73661 2.35064 1.38672 3.687 1.6653.07648.01592.15315.03095.23.04508l-.9158.6315zm-.2716 9.4636h-1.69938c-.28404-.01208-.30318-.15594-.30918-.2963-.00706-.16693.10118-.31364.30918-.3225h1.46338l.4626-1.6864s.08928-.2088.26873-.22607c.1435-.01387.26686.0467.32635.22025l.69895 2.36505.42816-1.34557s.13848-.2453.35837-.20898c.11988.03069.12471.03624.19422.13178l.49767.74994h1.1916c.00143.00018.22114.02988.28708.19404.0763.18983-.04447.41447-.28708.42475h-1.35764c-.14761-.00608-.18975-.04446-.25774-.1383l-.2326-.35042-.5381 1.69142s-.09482.20146-.27177.2147c-.14144.01056-.26131-.04991-.31982-.22087l-.67694-2.29062-.2377.8666s-.10797.21917-.29834.2275zm3.33032-9.01406c.06011 1.4641.01511 2.93043-.23573 4.3778-.11433.66003-.36357 1.57082-.58185 2.20545l-.78545-.25532c.66683-1.75913.82812-3.67277.79923-5.5457l.8038-.78223z" fill="#00aded" fill-rule="nonzero"/>
18
+ <path d="M282.0683 126.3243c.04685-.05343.05901-.0885.12887-.1901.40287-.58618 1.5962-2.16649 3.11253-3.38201.65983-.52898 1.37298-1.00987 2.00383-1.32508 1.05137-.52534 1.38992-.58938 1.8782-.70314.09273-.02159.42857-.08153.4843.0508.05375.12774-.15573.26235-.23434.3241-.08836.06943-2.1091 1.58053-3.80914 3.82464-1.4793 1.95257-2.44735 4.51451-2.44735 4.51451-.02974.0569-.36616.6581-.81752.68738-.41715.02713-.9529-.51549-.9529-.51549-.103-.09609-.60524-.69215-1.02317-1.42938-.533-.93997-.99197-2.0542-.99197-2.0542s-.47645-.93727.42177-1.45273c.88563-.50829 1.28012.00776 1.47234.31241.16425.26038.4952.89287.65514 1.20223.05573.10776.09175.16752.1194.13605z" fill="#1d58bf" fill-rule="nonzero"/>
19
+ <path fill="#dce0ed" fill-opacity=".5" d="M27.83207 174.56487h487.8311v1.6297H27.83207zm0 37.84138h487.8311v1.6297H27.83207zm0 37.85225h487.8311v1.62968H27.83207zm0 37.84137h487.8311v1.6297H27.83207zm0 37.84138h487.8311v1.6297H27.83207z"/>
20
+ <path d="M515.67403 327.56008H27.23451v-13.98165c15.2137 5.88861 31.87998 8.9231 48.09973 6.38404 15.89056-4.09052 30.1775-8.70472 42.61745-13.9208l37.54478-24.79084c14.09355-11.14598 27.834-21.49125 39.00063-25.99897 9.17406-4.4534 18.35682-8.61019 27.68733-8.6254l26.3021-1.60905 26.03156-.08148 20.54386-.67904 37.2786-20.43304 39.30048-13.03968c12.74417-3.0258 26.2456-4.53814 38.4335-3.72873l32.83606 1.0267 26.49223-2.35218c8.68624-1.30267 18.27098-5.0792 28.54889-10.76464l17.72232-20.20054v152.7953z" fill="#16bd83" fill-opacity=".3" fill-rule="nonzero"/>
21
+ <path d="M370.919 601.569s60.278 43.615 172.315-49.33c75.552-62.676 139.168-17.37 179.667-44.589 117.436-78.927 199.455 3.832 256.65-77.309" fill="none" stroke="#16bd83" stroke-width="5" transform="matrix(.79937 0 0 .80095 -268.1162 -169.22389)"/>
22
+ <circle cx="647.55" cy="275.37" r="11.13" fill="#16bd83" transform="translate(-490.77973 -52.8303) scale(1.08646)"/>
23
+ <circle cx="647.55" cy="275.37" r="11.13" fill="#16bd83" transform="translate(-362.86099 -81.7835) scale(1.08646)"/>
24
+ <circle cx="647.55" cy="275.37" r="11.13" fill="#16bd83" transform="translate(-607.09042 9.68565) scale(1.08646)"/>
25
+ <circle cx="647.55" cy="275.37" r="11.13" fill="#16bd83" transform="translate(-246.76292 -94.28274) scale(1.08646)"/>
26
+ <g>
27
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#6c63ff" transform="matrix(2.15937 0 -.44436 2.15937 80.43453 -678.27047)"/>
28
+ <path d="M121.98366 154.09019c-2.61326 3.6077-6.29794 6.42663-10.3811 7.93848-2.39737.81407-4.83762 1.25903-7.22302 1.31465-2.60512.18961-5.11578-.12894-7.39204-.93543-2.988-1.27925-5.32277-3.5091-6.69809-6.39629-1.35004-2.88718-2.27143-6.01454-2.73732-9.3037-.43092-1.64078-.37897-3.45349.1467-5.2586 2.04721-.24271 4.07924-1.27168 5.64425-2.85685 1.06398-1.59528 1.48615-3.42568 1.16692-5.05636-.04764-.50563-.10049-.98599-.18381-1.44106-.15032-1.1124-1.03316-3.21079.06948-4.14621 1.10264-.93543 3.2211-.91015 4.13344-1.28938 2.77639-1.47645 5.65877-2.65711 8.58579-3.51416 2.56094-.3312 5.0634-.1694 7.35928.48035.31975.05562.61384.17444.8626.35394.26391.26546.42925.61688.4745 1.01128.35412 1.71916.36843 3.6153.56046 5.38502.10354 1.85568.7121 3.55462 1.7665 4.92995.95352.98093 2.09678 1.76467 3.38948 2.32592l3.0704 1.54219c.54522.23765 1.01394.58907 1.37945 1.03655.30642.61182.42212 1.3273.33185 2.07311-.20386 4.0375-1.71634 8.16855-4.32572 11.8066z" fill="#f2bfc8" fill-rule="nonzero"/>
29
+ <path d="M116.3308 130.45171c-6.69538 5.72886-15.71333 7.03087-21.86173 3.16023-.04764-.50564-.10048-.986-.18381-1.44107-.15032-1.1124-1.03316-3.21078.06948-4.1462 1.10264-.93543 3.2211-.91015 4.13344-1.28938 2.77639-1.47646 5.65877-2.65712 8.5858-3.51417 2.56093-.33119 5.0634-.16939 7.35927.48036.31975.05562.61385.17444.8626.35394.26392.26546.42925.61688.4745 1.01127.3385 1.795.36843 3.6153.56046 5.38502z" fill-opacity=".1" fill-rule="nonzero"/>
30
+ <circle cx="263.84" cy="289.36" r="6.94" fill="#eebdbc" transform="matrix(2.52818 0 -.52025 2.52818 -410.14515 -614.02026)"/>
31
+ <path d="M143.65241 151.42549c-25.1774 27.24618-65.45793 27.78215-81.99058 4.84904.54877-1.33993 1.32584-2.63436 2.27914-3.80238.97851-1.15538 2.39943-1.86832 3.77795-1.89613.73317 0 1.51024.2781 2.15041-.25282.64017-.53092.55164-.9607 1.0037-1.31465.45207-.35395 1.36221-.35395 2.0597-.30339 1.53178.05057 3.149-.6826 4.29399-1.9467.36728-.47023.78796-.90508 1.25132-1.28936.7315-.32361 1.49053-.5107 2.23812-.5562 2.14148-.45508 3.7816-2.52818 5.58913-3.81755.93125-.852 2.19218-1.18066 3.2055-.8343.22122.12893.39918.30843.52279.53091.28352.6371.41996 1.35005.40249 2.0984.05106 4.1993-1.27003 4.6114 1.52931 7.29885 2.19473 1.9644 23.10548 2.98325 26.64105-2.29306 1.8501-3.05657 3.21938-6.29517 4.04487-9.5818l.08844-.4298c2.18682-.51574 4.30444-.0809 5.77255 1.18825 1.41442 1.28432 2.97487 2.41189 4.6678 3.36248 2.06799.88486 4.87427.88486 6.0783 2.52818.52205.65733.78983 1.56747 1.5409 1.97198.47665.20225.9962.3312 1.53999.37923 2.7007.7711 1.31313 4.11082 1.31313 4.11082z" fill="#3f3d56" fill-rule="nonzero"/>
32
+ <path d="M100.09649 89.06542c-1.42453.98852-2.46474 2.40683-3.78745 3.53945-2.29584 1.96693-8.08153 11.35911-8.75377 13.8519-2.09478 7.77162-1.48864 17.14863 1.13822 16.52165-3.0469-2.197 6.9098-20.07627 11.56564-18.14222.92388-.1896 15.01883 4.82124 18.886 2.7987 1.1419-.20478-.8238-1.2919.31469-1.43095 4.97034-.6017 3.88945 8.11545 2.80855 10.01412l.58875 5.73896c.10121.85958 3.05726-1.2565 3.4857-2.0731 1.96528-3.73918 3.4943-7.58201 3.57475-11.35153.08104-3.78468 2.57495-8.09017.54394-10.99758-.7474-1.03655-1.85022-1.82029-2.50617-2.93268-.65595-1.1124-.81594-2.30065-1.46221-3.3372-2.81365-3.01106-6.7134-4.88444-11.15873-5.35974-4.97692-.44749-10.29297.6548-15.23791 3.16022z" fill="#6e2e16" fill-rule="nonzero"/>
33
+ </g>
34
+ <g>
35
+ <ellipse cx="140.04" cy="838.19" rx="100.11" ry="24.73" fill="#1d58bf" fill-opacity=".1" transform="translate(-25.71766 -135.89034) scale(.64406)"/>
36
+ <path d="M78.778 409.97841l9.09264-2.84603c2.55246-1.90823 1.85114-4.21605.6687-5.93672-.82528-1.11476-2.09824-1.81608-3.48212-1.91638-.60753-.1003-1.18653-.33109-1.6962-.67685-.55535-.33598-1.0218-.8008-1.36186-1.3537-.61243-1.06503-.92068-2.27846-.88888-3.50658.0318-1.22812-9.73686-3.26193-12.54212-.48114-.49582.50479-.9158 1.07889-1.2477 1.70436-.96226 1.96042-1.4752 4.11167-1.50048 6.29553-.02528 2.18386-.61977 3.10699-1.57388 6.65434-.95412 3.54735 14.5319 2.06317 14.5319 2.06317zm-43.71804-6.10796l9.09264-2.84604c2.55246-1.90823 1.85114-4.21605.6687-5.92856-.82527-1.12047-2.10232-1.82424-3.49027-1.92454-.3523-.04648-.69398-.15168-1.0112-.30988-.23241-.10846-.45912-.2316-.67685-.36697-2.44645-1.47602-2.25889-4.8929-2.25889-4.8929s-9.73687-3.26193-12.54213-.48113c-.37593.37512-.71028.79102-.99489 1.23953-1.14004 2.07214-1.74513 4.39545-1.76144 6.76035-.0163 2.3649-.62792 3.11515-1.57388 6.65434-.94596 3.5392 14.54821 2.0958 14.54821 2.0958z" fill="#2d293d" fill-rule="nonzero"/>
37
+ <path d="M22.55046 376.4213c.6483 1.23055 1.19305 2.5125 1.63096 3.83276l-.39959 9.89996c2.3486 4.24051 15.44525 3.3598 17.28824 1.1743 1.843-2.1855 3.94694-8.0162 1.98163-9.09264-1.96532-1.07643-3.40872-6.16505-3.40872-6.16505s2.1121.58715 5.65945-3.26193 2.87865-12.82754 2.32413-14.98042c-.55453-2.15287.36696-9.2802.36696-9.2802s.06524-5.02337 1.13352-6.61356c1.06829-1.5902 3.5555-10.78884 3.5555-10.78884s.11418-3.1396 1.9327-4.69718c1.81853-1.55757 3.1967-7.91834 3.1967-7.91834 1.0903-1.55676 1.6065-3.44623 1.45971-5.34141-.2528-3.14777 2.38121-6.44232 2.38121-6.44232l4.78689-13.37392 4.4036-10.00597 2.03056 5.97749s.09785 13.82243-.51376 16.68478c-.61161 2.86234-1.63096 10.4871-1.63096 10.4871s2.31597 5.11308 1.0275 9.33729c-1.28846 4.2242-1.27215 13.38207-1.27215 13.38207s-1.8593 18.89474-.91334 20.436c.94596 1.54126.67685 5.30064.67685 5.30064s-5.5616 10.83777-3.99587 12.41165c1.56573 1.57388.91335 5.70838.91335 5.70838s-3.50658-.13863-2.06318 1.4271c1.4434 1.56572 2.21812 9.45144 2.21812 9.45144l15.09459 2.34044a31.93975 31.93975 0 0 0 3.63705-6.27106c2.1855-4.55855-.21203-4.15081-2.20996-4.7298-1.99793-.579-.67685-1.78591 1.76144-3.1967 2.4383-1.41078 1.1906-4.85212 1.1906-4.85212s-3.40055-6.28737-2.12025-6.73589c1.28031-.44852 1.72883-9.10079 1.72883-9.10079s2.90312-10.19354 2.3812-12.97433c-.5219-2.7808 2.37306-9.32913 2.37306-9.32913l1.1743-7.86125c2.85827-4.37588 4.04316-9.63901 3.33532-14.81733l.47298-12.167s4.43623-23.3962 5.43112-35.33488c.61977-7.6166.92965-18.03032 1.06828-24.52972.08155-3.65337.11417-6.0672.11417-6.0672l-53.9605-7.73077c-.18757 2.70332-.6214 5.38381-1.29662 8.00804-.66054 2.9602-1.6799 6.77666-3.26193 11.53908-4.41992 13.64303-2.44645 24.01597-2.44645 24.01597l-.17125 17.45134s-5.2191 11.482-4.36284 15.53495a33.17357 33.17357 0 0 1 .71763 7.33934c-.03425 2.4652-11.61248 25.01902-10.76438 32.43176.8481 7.41274-4.24866 18.92736-4.24866 18.92736s-1.57388 8.25268-.40774 10.5605z" fill="#575988" fill-rule="nonzero"/>
38
+ <path d="M56.04234 312.2754l-16.40752-2.85418s8.97847 9.91627 16.40752 2.85419z" fill-opacity=".05" fill-rule="nonzero"/>
39
+ <path d="M76.29078 318.39153s10.3811 2.78895 10.53604 6.99684c.15494 4.2079-10.53604-6.99684-10.53604-6.99684z" fill-opacity=".1" fill-rule="nonzero"/>
40
+ <path d="M46.34625 117.0488l.76655 4.61563-.13048 2.0387-.09785 1.5005 5.21093.74209.62792-1.06013c1.15799-1.91639 3.5555-5.82255 4.3139-6.4097.9949-.7747 3.21301-13.43916 1.10906-12.77046-1.28275.442-2.35756 1.34228-3.01728 2.528-.65973 1.1857-10.32402.78286-8.78275 8.81537z" fill="#ffcdd3" fill-rule="nonzero"/>
41
+ <path d="M46.88447 125.20363l5.21093.74209.62792-1.06013c-1.3806-1.6856-3.77487-2.17816-5.70838-1.1743l-.13047 1.49234z" fill-opacity=".1" fill-rule="nonzero"/>
42
+ <path d="M45.46553 127.63376l6.8419 1.86746.1794-1.0275.49745-2.74819c-.88806-1.27541-2.34778-2.03789-3.90209-2.03789-.98265 0-1.94166.30418-2.7441.87175l-.39143 1.39448-.48113 1.6799z" fill="#dce6f2" fill-rule="nonzero"/>
43
+ <path d="M157.62705 121.86015l7.20886 4.2405s.30173-.57899.72578-1.37c.7584-1.4434 1.88377-3.6126 2.2018-4.39546.48114-1.19876 3.6126-2.62585 3.6126-2.62585 7.99988-7.07024-.94596-13.74904-.94596-13.74904-4.48516-9.97336-10.40557 2.91942-10.40557 2.91942s-1.01935 6.87453-.5056 7.33935c.51376.46483.44037 2.37306.44037 2.37306a27.72058 27.72058 0 0 0-1.94085 4.14265c-.2528.67685-.39143 1.12537-.39143 1.12537z" fill="#ffcdd3" fill-rule="nonzero"/>
44
+ <path d="M156.7871 124.03749l8.15483 4.39545.22833-1.77775.1631-1.22323s-4.63194-4.28944-6.05088-4.19158a7.70816 7.70816 0 0 1-2.16919-.0897l-.14679 1.48417-.1794 1.40264z" fill="#dce6f2" fill-rule="nonzero"/>
45
+ <path d="M65.24099 148.23286s35.93833 5.46374 29.27583 3.01729c-4.6401-1.71251-6.39338-4.77058-6.65434-8.09775-.0897-2.855.46809-5.69288 1.63097-8.30161.94433-2.24258 2.11047-4.38404 3.48211-6.39339 1.37164-2.00935-27.0088-16.23626-22.01804-2.22627a22.1168 22.1168 0 0 1 1.31293 6.59726 18.6016 18.6016 0 0 1-.96227 6.5891c-1.17185 3.44053-3.27172 6.49206-6.0672 8.81537z" fill="#ffcdd3" fill-rule="nonzero"/>
46
+ <path d="M70.99014 126.23113a22.1168 22.1168 0 0 1 1.31293 6.59726c2.51169 2.2752 5.36588 2.24258 9.0274 2.38121 2.81341.11417 5.89594.91334 8.15482-.35881.94433-2.24258 2.11047-4.38404 3.48212-6.39339 1.37164-2.00935-26.96802-16.23626-21.97727-2.22627z" fill-opacity=".1" fill-rule="nonzero"/>
47
+ <circle cx="183.01" cy="496.73" r="18.31" fill="#ffcdd3" transform="translate(-66.88348 -283.81029) scale(.81548)"/>
48
+ <path d="M65.24099 148.23286s35.93833 5.46374 29.27583 3.01729c-4.6401-1.71251-6.39338-4.77058-6.65434-8.09775-1.72067-2.01424-5.27617-3.5555-7.56768-4.39545-2.086-.7853-4.36446-.9109-6.52386-.35881a8.9808 8.9808 0 0 0-2.44645 1.01935c-1.17593 3.44297-3.28232 6.4945-6.0835 8.81537zm-19.77546-20.5991l6.8419 1.86746.1794-1.0275c-1.42465-2.12353-4.04153-3.13472-6.52386-2.51985l-.49744 1.6799zm111.32157-3.59627l8.15483 4.39545.22833-1.77775c-2.64298-1.52822-5.39605-2.85827-8.23638-3.97956l-.14678 1.36186z" fill-opacity=".1" fill-rule="nonzero"/>
49
+ <path d="M33.65733 234.80453s45.71597 9.67163 50.71489 8.3587c4.9989-1.31293 30.29519 1.28846 30.29519 1.28846 11.11503 8.0896 6.78481-3.3761 6.78481-3.3761s1.23138-5.85516 0-10.67467c-.78857-3.53022-1.28275-7.11998-1.47602-10.73175-.19327-3.61178.54637-7.51876-.76655-9.32097-1.31293-1.80222-2.44645-14.41774-2.44645-14.41774s-.9215-8.57073-.72578-10.44634c.19571-1.8756-.09786-7.1681-.09786-7.1681l-1.29662-8.83983c9.45145-.88887 38.71913-17.34532 38.71913-17.34532 1.63097-5.83886 12.79493-19.22909 12.79493-19.22909.2006-1.1539.53985-2.27927 1.0112-3.35163.81548-1.97347-10.29955-6.41785-10.29955-6.41785s-8.81537 9.95705-10.64206 12.64814c-1.82668 2.6911-8.08143 7.6003-8.08143 7.6003-.93128-.12966-1.8805-.04322-2.77264.2528h-.1468a22.42072 22.42072 0 0 0-5.70837 3.00913c-2.82402-.17614-5.6089.75106-7.7634 2.58508-2.1545 1.83402-5.11308-.94596-6.01826-.10601-.90519.83995-5.26802-.20387-5.26802-.20387s-4.07742-9.4433-7.02131-6.85821c-2.9439 2.58508-15.22507 1.98978-15.22507 1.98978-1.54126-2.23443-5.45558-3.93879-7.90202-4.83582-2.0852-.7902-4.36447-.91497-6.52387-.35881-.93699.23078-1.8275.61977-2.634 1.14983l-7.69817 6.98053s-2.03055-2.83788-1.75328-3.45764c.27726-.61977-2.44645-1.22323-2.44645-1.22323s-3.59628-1.27215-4.95814-1.6962c-1.36186-.42405-2.6911 1.0112-2.80526 1.14167.62221-1.7598.89948-3.62319.81548-5.4882-.28542-2.39752 1.67174-4.46069 1.67174-4.46069-3.9714-10.95193-14.22202-2.29966-14.22202-2.29966s-1.36186 5.84701-.44036 8.15483c.9215 2.30782-1.27215 6.98053-1.07644 8.24453.19572 1.264-.62792 3.36795-.71762 5.74916-.0897 2.3812.98673 6.94791 1.63096 8.9703.64423 2.0224 6.52387 6.78483 6.52387 6.78483s.106 7.15994 2.57692 11.41676.30173 18.34836.30173 18.34836-2.93574 10.93563-6.20582 14.32804c-3.2701 3.3924-8.7012 23.3065-8.7012 23.3065z" fill="#656691" fill-rule="nonzero"/>
50
+ <path d="M102.54933 188.85207c.12232-.13864-29.52048 34.47046-50.6741 12.9988 0 0 34.49492 6.03457 50.6741-12.9988z" fill-opacity=".1" fill-rule="nonzero"/>
51
+ <path d="M110.25564 170.95222c-1.8854 3.93144-4.23072 7.62395-6.98869 11.00086-3.0132 3.7341-6.61682 6.95118-10.66651 9.52484-4.04969 2.57367 17.28008-18.24235 17.6552-20.5257z" fill-opacity=".1" fill-rule="nonzero"/>
52
+ <path d="M85.8727 134.94865c-.1533.79101-.59856 1.4964-1.24769 1.97347-.44606.19571-.9329.28215-1.41894.2528-4.55854.11416-9.30466.13047-13.43915-1.78591a5.0721 5.0721 0 0 1-1.99794-1.43525c-.71762-.94596-.81548-2.19365-1.06828-3.35164-.5056-2.25073-1.68805-4.28128-2.51169-6.44231-1.38713-3.63787-1.74513-7.58889-1.03566-11.41676a7.63626 7.63626 0 0 1 1.264-3.26193c1.27215-1.67174 3.49842-2.28336 5.1457-3.59628 1.64727-1.31293 2.75633-3.36795 4.66456-4.33022 1.71251-.86441 3.75937-.67685 5.64314-.27726 3.6974.7747 7.21295 2.25073 10.35663 4.34652 1.05198.70947 2.20996 1.5168 3.4658 1.32924 1.07644-.29847 2.01588-.96146 2.65848-1.87561.80733 2.07377 1.10416 4.31146.86441 6.52386a2.81735 2.81735 0 0 0 0 .97858 2.98752 2.98752 0 0 0 .65239 1.06828c1.06828 1.34555 1.6962 3.43319.53822 4.70534-.5056.55453-1.264.81548-1.7533 1.41078-.88071 1.0112-.66053 2.528-.69315 3.87355.02935.46727-.10275.93128-.37512 1.31293-.51376.43546-1.21834.5741-1.8593.36696-.62874-.21447-1.29418-.30336-1.95716-.26095-.70703.20305-1.32598.64015-1.7533 1.23953-2.20995 2.56062-3.1233 5.4719-4.14265 8.65228z" fill="#2d293d" fill-rule="nonzero"/>
53
+ <path d="M88.18052 144.09836s-18.7561 1.7533-20.30552-1.1172" fill-opacity=".1" fill-rule="nonzero"/>
54
+ </g>
55
+ <g>
56
+ <path fill="#535461" d="M526.25682 301.60485h2.1798v49.02164h-2.1798z"/>
57
+ <path d="M542.11714 350.47574l-.13758 2.20989-.18918 3.11705-.08169 1.28982-.19347 3.11706-.08169 1.28981-.19347 3.11276-2.19699 35.44847c-.19605 3.148-2.83501 5.6352-5.98905 5.6451h-11.41487c-3.14974-.00903-5.78655-2.48892-5.98905-5.6322l-2.2013-35.44847-.18916-3.11276-.0817-1.28981-.19776-3.11706-.0774-1.28982-.19347-3.11706-.13758-2.20988a3.07748 3.07748 0 0 1-.00559-.18917c0-1.70514 1.4029-3.10846 3.10846-3.10846h23.34827c1.7004 0 3.09986 1.39945 3.09986 3.09986 0 .06148-.00172.12339-.0056.18487z" fill="#3f3d56" fill-rule="nonzero"/>
58
+ <path d="M541.98399 352.6859l-.19347 3.11705h-28.8876l-.18917-3.11705h29.27024zm-.27086 4.41547l-.19348 3.12135h-28.34157l-.19347-3.12135h28.72852zm-.27946 4.41977l-.18918 3.11706h-27.79125l-.19347-3.11706h28.1739z" fill="#9d9cb5" fill-rule="nonzero"/>
59
+ <path d="M509.38586 319.98049c12.6789 9.1706 17.95856 23.52196 17.95856 23.52196s-15.28004-.52452-27.94604-9.69942-17.99295-23.52197-17.99295-23.52197 15.29723.52453 27.98043 9.69943z" fill="#16bd83" fill-rule="nonzero"/>
60
+ <path d="M481.40543 310.28106s15.86045 8.80515 20.94663 16.09262c5.08618 7.28747 24.97516 17.12877 24.97516 17.12877" fill="none" stroke="#fff" stroke-width=".85988" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10"/>
61
+ <path d="M517.5676 301.4974c6.90482 4.9916 9.77682 12.8036 9.77682 12.8036s-8.31502-.28807-15.21985-5.27966c-6.90482-4.9916-9.77251-12.80358-9.77251-12.80358s8.31502.28376 15.21554 5.27965z" fill="#16bd83" fill-rule="nonzero"/>
62
+ <path d="M502.35206 296.21776s8.62888 4.79382 11.40198 8.75785c2.77311 3.96404 13.59038 9.32538 13.59038 9.32538" fill="none" stroke="#fff" stroke-width=".85988" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10"/>
63
+ <path d="M537.3749 313.90115c-7.92808 8.71486-9.60484 20.09965-9.60484 20.09965s11.17841-2.74301 19.10649-11.45788c7.92807-8.71486 9.60483-20.09535 9.60483-20.09535s-11.17841 2.73871-19.10649 11.45358z" fill="#16bd83" fill-rule="nonzero"/>
64
+ <path d="M556.48138 302.44757s-10.31853 8.92984-12.95406 15.08656c-2.63552 6.15673-15.75726 16.46667-15.75726 16.46667" fill="none" stroke="#fff" stroke-width=".85988" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10"/>
65
+ </g>
66
+ </svg>
assets/images/home-smart-targeting.svg ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg viewBox="0 0 600 500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5">
3
+ <path d="M272.91048 457.96044c43.8601-24.27188 93.96317-32.02863 142.92805-21.62559 69.38399 14.75093 156.58632 8.96893 173.47704-104.83287 28.84739-194.3571-92.03964-245.65527-92.03964-245.65527s-80.39026-6.73239-127.92672-32.3644C301.82617 17.06027 224.6456 12.42216 156.7811 43.23861c-43.39914 19.69067-79.13826 47.10964-85.24464 84.75523C54.4636 233.27629 82.50289 291.28408 30.04947 325.65169c-52.45343 34.3676-7.62587 128.72345 32.58634 125.45685 40.2122-3.2666 131.0795-39.10247 166.48855 2.40727 12.57699 14.72247 28.48887 12.91275 43.78612 4.44463z" fill="#1d58bf" fill-opacity=".1" fill-rule="nonzero"/>
4
+ <path fill="url(#_Linear1)" d="M155.01 231.1h435.45v108.25H155.01z" transform="matrix(.74209 0 0 .74209 49.55684 49.0428)"/>
5
+ <path fill="#fff" d="M166.39116 222.35002h320.43358v76.72447H166.39116z"/>
6
+ <path d="M448.34178 241.46528c0-2.27186-1.84483-4.11653-4.1167-4.11653H252.97083c-2.27242 0-4.1167 1.84467-4.1167 4.11653v8.2335c0 2.27229 1.84428 4.11695 4.1167 4.11695h191.25423c2.27188 0 4.11671-1.84466 4.11671-4.11696v-8.23349z" fill="#3f3d56"/>
7
+ <path d="M448.34178 260.23417c0-1.51458-1.23007-2.74435-2.74447-2.74435H251.5986c-1.51495 0-2.74448 1.22977-2.74448 2.74435v5.48898c0 1.51487 1.22953 2.74464 2.74448 2.74464h193.9987c1.5144 0 2.74447-1.22977 2.74447-2.74464v-5.48898z" fill="#16bd83"/>
8
+ <path d="M309.39697 275.25996c0-1.51457-1.2299-2.74435-2.7445-2.74435H251.5985c-1.51476 0-2.7445 1.22978-2.7445 2.74435v5.489c0 1.51485 1.22974 2.74463 2.7445 2.74463h55.05397c1.5146 0 2.7445-1.22978 2.7445-2.74464v-5.48899z" fill="#9795b1"/>
9
+ <g fill-rule="nonzero">
10
+ <path d="M325.6426 281.2279c.59162 0 .87847-.11696 1.16532-.26893l-.30477-.94122c-.19721.09874-.41235.15267-.55578.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86494h1.19222v-.96784h-1.19222v-1.5596l-1.16532.12535v1.43425h-.51992v.96784h.51992v2.02601c0 .98604.49302 1.45246 1.246 1.45246zM329.68517 276.71016c-.51963 0-.9948.25071-1.32647.71712h-.00896v-.64569h-1.1743v4.37487h1.1743v-2.03511c0-.6457.39442-1.13872 1.12043-1.13872.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05322-.0084-.08964-.0084zM332.93954 276.78159v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54695 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.63529c0 1.3362.6632 1.81102 1.60442 1.81102.49303 0 .96854-.2066 1.29979-.60998h.0182v.53854h1.17444v-4.37487h-1.17443zM336.22892 281.2279c1.14782 0 1.70317-.58267 1.70317-1.36282 0-.85999-.55535-1.06658-1.50568-1.41604-.4307-.16107-.6632-.28713-.6632-.4664 0-.23321.24161-.33126.43-.33126.32284 0 .70801.14357 1.04907.46571l.56445-.86069c-.49302-.38517-.98604-.54624-1.59532-.54624-.8964 0-1.5778.51963-1.5778 1.30889 0 .84248.62748 1.18283 1.3446 1.42514.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47482 0-.85159-.17018-1.21015-.51123l-.57356.81587c.48392.41248 1.07569.63659 1.7746.63659zM339.7431 281.2279c.59177 0 .8782-.11696 1.16533-.26893l-.30464-.94122c-.19748.09874-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86494h1.19194v-.96784h-1.19194v-1.5596l-1.16533.12535v1.43425h-.52033v.96784h.52033v2.02601c0 .98604.49303 1.45246 1.24587 1.45246z" fill="#1d58bf"/>
11
+ <path d="M343.79513 276.71016c-.53784 0-.99514.19679-1.3271.57356h-.0175v-.50213h-1.17443v6.14947h1.17443v-2.26762h.0175c.30464.35786.73534.56446 1.29069.56446 1.21925 0 2.09744-.8964 2.09744-2.25012 0-1.3264-.8873-2.26762-2.06103-2.26762zm-.25141 3.46866c-.63659 0-1.13871-.47481-1.13871-1.19194 0-.69891.4664-1.22835 1.13871-1.22835.62748 0 1.1205.47551 1.1205 1.22835 0 .70802-.4573 1.19194-1.1205 1.19194zM349.20928 276.78159v2.12476c0 .84248-.45731 1.27247-.96854 1.27247-.54695 0-.78856-.26892-.78856-1.07568v-2.32155h-1.16532v2.63529c0 1.3362.6632 1.81102 1.60442 1.81102.49302 0 .96854-.2066 1.29979-.60998h.0182v.53854h1.17444v-4.37487h-1.17443zM351.13654 274.55879h1.1743v6.59753h-1.1743zM354.51557 281.2279c1.14782 0 1.70317-.58267 1.70317-1.36282 0-.85999-.55535-1.06658-1.50568-1.41604-.43-.16107-.6632-.28713-.6632-.4664 0-.23321.2416-.33126.43-.33126.32284 0 .70801.14357 1.04907.46571l.56445-.86069c-.49302-.38517-.98604-.54624-1.59532-.54624-.8964 0-1.57781.51963-1.57781 1.30889 0 .84248.62748 1.18283 1.3446 1.42514.57356.17928.79767.27803.79767.48392 0 .215-.1968.35856-.53785.35856-.47481 0-.85158-.17018-1.21014-.51123l-.57356.81587c.48392.41248 1.07568.63659 1.7746.63659zM360.70986 278.92386c0-1.28158-.86069-2.2137-2.14226-2.2137-1.24587 0-2.16958.92301-2.16958 2.24941 0 1.37192.96853 2.26833 2.25011 2.26833.8782 0 1.51479-.34946 1.89156-.82498l-.76195-.70802c-.2423.29554-.58266.50213-1.04907.49303-.56446 0-.97694-.32285-1.1205-.84248h3.07508c.02661-.07214.02661-.27803.02661-.4216zm-2.10655-1.18284c.51123 0 .82497.30464.94123.76195h-1.92727c.13446-.50213.51123-.76195.98604-.76195z" fill="#00aded"/>
12
+ </g>
13
+ <path d="M319.7257 275.30226c-.38986-.10527-.77052-.2453-1.1363-.42481-.31036-.15228-.60971-.32576-.90303-.50838a4.2806 4.2806 0 0 1-.01709.01057c-.77207.47911-1.59295.8661-2.50487 1.03732-.32905.06177-.66186.10054-.99532.12897l-.01064.0009c-.08214 1.83573.04033 3.72786 1.01522 5.302.59422.95948 1.51362 1.67796 2.48731 2.27518l.02539.01547c.39846-.2435.78982-.50318 1.15399-.79322h.82667c-.58592.55146-1.2694 1.0136-1.96423 1.42616-.03256-.02228-.03286 0-.03286 0-.87644-.52039-1.7297-1.09562-2.39376-1.85939-.4511-.51878-.80828-1.11492-1.0657-1.76017-.64685-1.6215-.68783-3.42665-.57505-5.12152.71688-.04272 1.44492-.1116 2.13115-.33287.67679-.21823 1.30011-.58061 1.90217-.97149l.01762-.01147c.0117.00765.02342.01524.03519.02289.75934.49189 1.56971.92602 2.4621 1.11205a6.70182 6.70182 0 0 0 .15359.0301l-.61155.4217zm-.18137 6.3196h-1.13481c-.18968-.00807-.20246-.10413-.20646-.19786-.00472-.11147.06756-.20944.20646-.21536h.97721l.30892-1.12615s.05962-.13943.17946-.15096c.09582-.00926.1782.03118.21793.14708l.46674 1.57933.28591-.89854s.09248-.1638.23932-.13955c.08005.02049.08328.0242.1297.088l.33232.5008h.79574c.00095.00011.14767.01994.1917.12957.05096.12676-.0297.27677-.1917.28364h-.90661c-.09857-.00406-.1267-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03333-.21356-.1475l-.45205-1.52962-.15873.5787s-.0721.14635-.19923.1519zm2.22392-6.01941c.04015.9777.0101 1.95688-.15741 2.92341-.07635.44076-.24278 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17472.553-2.4526.53371-3.70331l.53676-.52236z" fill="#00aded" fill-rule="nonzero"/>
14
+ <path d="M317.47913 278.11795c.0313-.03567.03942-.0591.08607-.12694.26902-.39144 1.0659-1.44674 2.07848-2.25845.44062-.35324.91685-.67436 1.33812-.88485.70208-.35082.92816-.39358 1.25422-.46955.06193-.01441.2862-.05444.3234.03392.0359.0853-.10398.1752-.15647.21644-.05901.04636-1.40842 1.05544-2.54368 2.55401-.98784 1.3039-1.63428 3.0147-1.63428 3.0147-.01987.038-.24452.43947-.54593.45902-.27857.01812-.63633-.34423-.63633-.34423-.06877-.06417-.40417-.4622-.68325-.95452-.35593-.62769-.66242-1.37175-.66242-1.37175s-.31816-.62589.28165-.9701c.5914-.33943.85484.00518.9832.20862.10968.17387.33068.59624.4375.80282.0372.07196.06126.11187.07972.09086z" fill="#1d58bf" fill-rule="nonzero"/>
15
+ <g>
16
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#16bd83" transform="matrix(1.18365 0 0 1.18365 100.94546 -175.28964)"/>
17
+ <use xlink:href="#_Image2" x="181.346" y="244.303" width="49.842" height="52.476" transform="matrix(.99684 0 0 .99012 -.00022 -.0002)"/>
18
+ </g>
19
+ <g>
20
+ <path d="M170.49794 160.88521a7.8653 7.8653 0 0 1-2.90097 1.10064c-3.78148.11007-6.89472-10.12589-6.89472-10.12589s1.07705-1.08491 2.7909-2.61008c5.06295-4.51263 15.72343-12.83032 20.67631-8.17619 5.57396 5.22018-7.16988 16.28947-13.67152 19.81152zM113.06026 404.85777l-13.93881 15.02374s-12.90108.1415-10.37747-6.97334a26.13126 26.13126 0 0 0 1.0692-4.71703c.64073-5.05273.94498-10.1424.91196-15.236 0-3.34123-.05504-5.68402-.05504-5.68402s20.31467-8.89946 18.23918.3695c-.25944 1.1596-.39938 2.342-.41667 3.5299-.00393 3.434.7901 6.82319 2.3192 9.8979.62344 1.33414 1.3766 2.60302 2.24845 3.78935z" fill="#ecb4b6" fill-rule="nonzero"/>
21
+ <path d="M145.41122 427.53095c-4.72961 4.02992-10.77684 6.19032-16.98917 6.06925-11.49382-.17296-33.0192-.50315-37.97994-.71542-6.66673-.28302-4.45759-5.98276-4.23746-9.91362v-.39309c.07076-3.93085.88837-12.45295 2.19342-13.78944 1.30504-1.3365 5.88842 5.92773 5.88842 5.92773s8.89946 2.60223 11.34446-5.18873c2.44499-7.79096 7.42931-8.51424 7.42931-8.51424 2.26418-.98271 2.35852 4.88999 2.35852 4.88999l18.86811 9.70922 11.05357 1.7453c.35378.1651.68397.33019.98272.48742 4.95287 2.75946 2.74373 6.51736-.91196 9.68563z" fill="#6c63ff" fill-rule="nonzero"/>
22
+ <circle cx="169.35" cy="649.12" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
23
+ <circle cx="179.06" cy="653.93" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
24
+ <circle cx="184.06" cy="656.17" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
25
+ <circle cx="194.44" cy="660.15" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
26
+ <circle cx="189.16" cy="658.45" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
27
+ <path d="M145.41122 427.53095c-4.72961 4.02992-10.77684 6.19032-16.98917 6.06925-11.49382-.17296-33.0192-.50315-37.97994-.71542-6.66673-.28302-4.45759-5.98276-4.23746-9.91362l41.9108 2.5865s17.16212-2.60222 18.18414-7.7202c4.97646 2.76732 2.76732 6.52522-.88837 9.6935z" fill="#6c63ff" fill-rule="nonzero"/>
28
+ <path d="M145.41122 427.358c-4.72647 4.0362-10.77527 6.19738-16.98917 6.06924-11.49382-.1651-33.0192-.49529-37.97207-.70756-6.6746-.29088-4.46546-5.99062-4.24533-9.92148l41.9108 2.5865s17.16212-2.60222 18.18414-7.71234c4.97646 2.76733 2.76732 6.52523-.88837 9.68564z" fill="#fff" fill-opacity=".25" fill-rule="nonzero"/>
29
+ <path d="M67.3837 367.04293c-1.5464 1.25316-2.956 2.66512-4.206 4.21388-4.15886 4.83495-9.30042 12.06773-11.85547 15.72342l-1.57235 2.31135-5.57395-.85693s-6.00635-9.19034-5.92773-9.43406c.07861-.2437 4.71703-10.08657 4.71703-10.08657l1.80819-2.1148 5.69188-6.65888 2.57864-3.0189s19.38699 6.28938 14.33977 9.92149z" fill="#ecb4b6" fill-rule="nonzero"/>
30
+ <path d="M45.08789 398.65488s-3.71073 8.01109-5.71547 12.57874c-2.00473 4.56766-1.25787 7.93247-1.25787 7.93247a7.31259 7.31259 0 0 1-.6368 1.72172c-.91196 1.81605-3.0189 4.46545-7.59442 4.8035a2.65628 2.65628 0 0 1-.35377 0c-6.76108-.18082-8.90732-19.80365-8.90732-19.80365s1.02988-37.3746 2.956-39.74883c.26966-.26572.61164-.44654.98271-.51887 1.9678-.34199 3.97567-.39545 5.95918-.15724 6.11642.44026 13.97027 1.94185 13.97027 1.94185h1.4151c-4.97646 5.18873.36165 16.60394.36165 16.60394s2.35851.22799 4.2296 3.56135c1.87109 3.33337-5.40886 11.08502-5.40886 11.08502z" fill="#6c63ff" fill-rule="nonzero"/>
31
+ <circle cx="75.64" cy="618.27" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
32
+ <circle cx="75.13" cy="626.51" r="1.04" fill="#fff" fill-opacity=".25" transform="translate(-22.52281 -98.55965) scale(.78617)"/>
33
+ <path d="M36.94315 420.73843c-1.44734 2.87818-4.37347 4.73197-7.59441 4.81137h-.35378c-6.76107-.1651-8.91518-19.81938-8.91518-19.81938s1.03774-37.36672 2.96386-39.74096c.26573-.27202.60929-.45598.98272-.52674 1.96621-.33412 3.97016-.3868 5.95131-.15723-.11006 6.7139-.43239 27.9484.03931 30.05533.4717 2.10694 4.23747 19.7329 6.92617 25.37761z" fill="#6c63ff" fill-rule="nonzero"/>
34
+ <path d="M37.43058 420.87994c-1.44813 2.8766-4.37504 4.72725-7.59442 4.80351a2.65628 2.65628 0 0 1-.35377 0c-6.76894-.18082-8.91519-19.80366-8.91519-19.80366s1.03775-37.37458 2.96387-39.74882c.26494-.2673.60535-.44812.97485-.51887 1.96779-.34199 3.97567-.39466 5.95918-.15724-.11006 6.7139-.4324 27.9484 0 30.05533.4324 2.10694 4.26891 19.71718 6.96548 25.36975z" fill="#fff" fill-opacity=".25" fill-rule="nonzero"/>
35
+ <path d="M28.99496 425.5498c-6.76107-.1651-8.91518-19.81938-8.91518-19.81938s1.03774-37.36672 2.96386-39.74096c.26573-.27202.60929-.45598.98272-.52674 1.4151 2.1148 2.65726 6.78466 1.57234 17.05992-2.1148 19.4656.4324 20.68417.4324 20.68417s3.1211 16.53318 2.96386 22.343z" fill="#6c63ff" fill-rule="nonzero"/>
36
+ <path d="M28.93993 425.5498c-6.76108-.1651-8.91518-19.81938-8.91518-19.81938s1.03774-37.36672 2.96386-39.74096c.26573-.27202.60928-.45598.98272-.52674 1.4151 2.1148 2.65725 6.78466 1.57234 17.05992-2.1148 19.4656.4324 20.68417.4324 20.68417s3.11323 16.53318 2.96386 22.343z" fill-opacity=".1" fill-rule="nonzero"/>
37
+ <path d="M146.24456 157.20593s3.14468.22013 5.11797-1.11636c1.9733-1.3365 10.56615-5.00792 10.78627-7.4529 0 0 5.11798 12.4608 8.0111 12.90106 0 0-8.89947 7.01265-9.56771 9.23752-.66825 2.22486-18.01905 7.67303-18.01905 7.67303l3.67142-21.24235z" fill="#ff748e" fill-rule="nonzero"/>
38
+ <path d="M146.24456 157.20593s3.14468.22013 5.11797-1.11636c1.9733-1.3365 10.56615-5.00792 10.78627-7.4529 0 0 5.11798 12.4608 8.0111 12.90106 0 0-8.89947 7.01265-9.56771 9.23752-.66825 2.22486-18.01905 7.67303-18.01905 7.67303l3.67142-21.24235z" fill="#6c63ff" fill-rule="nonzero"/>
39
+ <path d="M99.12145 303.94481S88.24083 318.47326 84.2628 320.1085c-3.97803 1.63523-33.63241 37.96421-33.63241 37.96421s6.37585 11.71396 18.08194 13.64008c0 0 6.37585-2.52361 8.75009-8.1526 2.37423-5.62899 21.08511-21.50965 21.08511-21.50965l.5739-38.10573z" fill="#5e5a6b" fill-rule="nonzero"/>
40
+ <path d="M99.12145 303.94481S88.24083 318.47326 84.2628 320.1085c-3.97803 1.63523-33.63241 37.96421-33.63241 37.96421s6.37585 11.71396 18.08194 13.64008c0 0 6.37585-2.52361 8.75009-8.1526 2.37423-5.62899 21.08511-21.50965 21.08511-21.50965l.5739-38.10573z" fill-opacity=".1" fill-rule="nonzero"/>
41
+ <path d="M144.93165 194.20315l-.22799 4.10382-1.83178 34.46575s-1.48586 7.71234-.88837 22.5474c.59749 14.83505-8.30983 38.2551-8.30983 38.2551s-4.30036 15.8728-5.63685 23.13702c-1.3365 7.26422-5.5032 9.48909-5.5032 9.48909s1.03775 8.16045-1.92612 11.0064c-2.96387 2.84594-3.14469 7.56296-3.14469 7.56296s-4.5991 25.5034-6.0771 28.02701c-1.478 2.52361-1.3365 15.8728-1.3365 15.8728-9.63845 11.41521-23.72664 1.03775-23.72664 1.03775l.14937-35.73935s4.00161-32.92486 6.96548-37.52396c2.96386-4.5991 2.96386-17.20143 2.96386-17.20143l-1.3129-29.3635s-1.05347-3.14469-.14938-4.88999c.9041-1.7453-2.53933-6.6746-2.53933-6.6746-8.30197-10.08657-9.48909-32.77548-7.07554-37.2252 2.41354-4.44974 9.61487-22.2408 9.61487-22.2408l9.92149-5.78621 17.9247.5346 22.14645.60534z" fill="#5e5a6b" fill-rule="nonzero"/>
42
+ <path d="M142.57314 141.18376v9.82714l-6.46233-2.78305-6.43874-2.77518-14.01744-13.78945s-11.08502-7.20919-17.02061-13.77372c-3.3884-3.74218-5.09439-7.27995-2.10694-9.14317 1.44341-.9497 2.74767-2.09594 3.87583-3.40413a63.32041 63.32041 0 0 0 7.73592-11.40734l.27516-.50315c2.88525-5.29094 4.79565-9.81928 4.79565-9.81928s8.129 2.61009 13.36491 6.28937c.42453.29088.82548.59749 1.20284.9041 2.9167 2.39782 4.36325 5.16514 1.6824 7.9246a19.3845 19.3845 0 0 0-1.91825 2.28776c-.4316.603-.82862 1.23036-1.18712 1.87895-.1651.28302-.31447.5739-.45598.86479-1.79954 3.67928-2.42062 7.82634-1.77674 11.87119l18.45144 25.55057z" fill="#ecb4b6" fill-rule="nonzero"/>
43
+ <path d="M129.45194 98.69906a19.3845 19.3845 0 0 0-1.91826 2.28776c-.4316.60299-.82863 1.23035-1.18712 1.87894-.1651.28303-.31447.57391-.45598.8648-6.93717-.37816-13.3539-3.84203-17.47659-9.43406-.09434-.13365-.18868-.25944-.27516-.39309l.27516-.50315c2.88525-5.29093 4.79565-9.81928 4.79565-9.81928s8.129 2.61009 13.36491 6.28937c.42453.29089.82548.5975 1.20284.9041 2.90884 2.39782 4.3554 5.20445 1.67455 7.9246z" fill-opacity=".1" fill-rule="nonzero"/>
44
+ <path d="M150.56064 79.52434v.01572c0 12.80437-10.53706 23.34143-23.34143 23.34143h-.9041c-12.48911-.4544-22.51594-10.85231-22.51594-23.3493 0-12.81773 10.54727-23.365 23.365-23.365 12.81775 0 23.36502 10.54727 23.36502 23.365v.00787l.03145-.01572z" fill="#ecb4b6" fill-rule="nonzero"/>
45
+ <path d="M130.70981 137.2529s11.79257 6.64315 8.75009 1.03775l-15.34607-22.65746 17.42156 22.39802s11.12433 15.2753 5.03936 25.80214c0 0-.88837 8.7501.14937 10.82558 1.03775 2.0755-.29874 24.17477-.29874 24.17477s-4.15099-3.8601-6.37585-3.14468c-2.22487.71541-17.91685 2.07549-17.91685 2.07549l8.57713-60.51161z" fill="#464353" fill-rule="nonzero"/>
46
+ <path d="M136.99918 148.65238c-.69183 7.12272-3.62425 15.6055-3.62425 15.6055s-2.06763 21.06154-4.71703 27.29588c-2.6494 6.23434-1.48586 14.82719-2.96386 30.66068-.5346 5.71547-2.35852 9.63846-4.85854 12.28786-4.0881 4.35539-9.91362 5.26735-14.52059 5.00005l-1.09277-.08648c-7.4136-.739-14.52845-36.47835-14.52845-36.47835s-3.41198-30.40125-2.0755-34.55223c1.3365-4.15099-1.33648-27.8855-2.22486-33.07423-.56604-3.2862 1.13209-8.64789 2.45286-12.16207.78617-2.0126 1.39938-3.41199 1.39938-3.41199s2.52361-8.00322 6.6746-12.1542c1.15567-1.18713 2.7461-1.85459 4.40256-1.84751 1.9552.06997 3.85617.6651 5.5032 1.72172l.18868.12578s26.98926 27.5789 29.505 33.95474c.67612 1.80034.74687 4.34753.47957 7.11485z" fill-opacity=".1" fill-rule="nonzero"/>
47
+ <path d="M136.1108 148.18854c-.69182 7.13058-3.62424 15.61337-3.62424 15.61337s-2.0755 21.06153-4.71703 27.288c-2.64153 6.22648-1.48586 14.8272-2.97173 30.66069-.52673 5.7076-2.35851 9.6306-4.85854 12.28786-4.08023 4.35539-9.90576 5.25948-14.51272 4.99218-.37736 0-.73114-.04717-1.09278-.08647-7.4136-.739-14.52844-36.47836-14.52844-36.47836s-3.41199-30.40124-2.0755-34.55223c1.3365-4.15098-1.33649-27.87763-2.22486-33.07423-.56605-3.2862 1.13208-8.64788 2.45285-12.1542.78617-2.02047 1.39939-3.41199 1.39939-3.41199s2.5236-8.01109 6.6746-12.16207c1.1541-1.18476 2.74059-1.85222 4.3947-1.8475 1.95441.07468 3.85459.66903 5.50319 1.72171l.19654.12579s26.98927 27.58675 29.50501 33.9626c.65253 1.81606.74687 4.36325.47957 7.11485z" fill="#6c63ff" fill-rule="nonzero"/>
48
+ <path d="M105.8668 256.74309s-6.11642 5.45603-8.23122 5.22804c-2.1148-.228 8.23122-5.22804 8.23122-5.22804zM107.49417 261.97899s-6.4466 2.99531-8.37272 3.44343c-1.92612.44812 5.88842-4.21388 8.37272-3.44343zM110.54452 252.427s-6.10856 26.58046 6.17144 28.24714c12.28 1.66669 8.50638-30.25187 8.50638-30.25187l-14.67782 2.00474z" fill-opacity=".1" fill-rule="nonzero"/>
49
+ <path d="M110.0964 251.96316s-6.10855 26.58046 6.1793 28.255c12.28786 1.67455 8.49852-30.25973 8.49852-30.25973l-14.67782 2.00473z" fill="#ecb4b6" fill-rule="nonzero"/>
50
+ <path d="M120.60751 140.374c-.62894-15.975-22.98765-19.27692-28.19997-4.1667l-.11006.3066c-3.40412 10.22023-1.92612 36.16388-1.92612 36.16388s.44812 17.39797 2.0755 23.17633c1.62737 5.77836 6.22647 22.39803 6.22647 25.06315 0 2.66512 4.26105 12.90107 6.06138 13.64793 1.80033.74686 2.70443 6.52522 3.14469 7.56297.44025 1.03775 1.76888 14.52845 1.76888 14.52845s16.76117-1.03775 17.05992-3.70287c.29874-2.66512-3.71073-15.72343-3.71073-15.72343s-2.956-5.3381-3.33337-9.63846c-.37736-4.30036-2.74373-6.22648-2.30348-9.19034.44026-2.96387-1.33649-4.44973-1.33649-6.38371s-1.32863-7.11485-1.32863-7.11485-2.82235-2.22487-2.35851-4.88999c.46384-2.66512-4.00162-8.01109-2.8145-9.9372 1.18712-1.92613 1.478-6.6746 1.478-6.6746s1.47015-21.38386 2.4843-27.16222c1.01417-5.77836 7.07555-15.12594 7.07555-15.12594s.0629-.2673.04717-.739z" fill-opacity=".1" fill-rule="nonzero"/>
51
+ <path d="M119.91568 234.07777c-4.08023 4.35538-9.90576 5.25948-14.51272 4.99218-.52674-2.02046-1.30505-4.50476-2.445-4.97646-1.80033-.739-6.06138-11.0064-6.06138-13.64007 0-2.63368-4.5991-19.28479-6.22648-25.06315-1.62737-5.77836-2.07549-23.15274-2.07549-23.15274s-1.48586-25.94366 1.92612-36.16389c.03931-.1022.07076-.2044.1022-.31447 5.22018-15.1102 27.57103-11.79257 28.20783 4.17457v.73114s-6.08496 9.33972-7.07554 15.12594c-.99058 5.78622-2.52361 27.13864-2.52361 27.13864s-.29875 4.71702-1.48586 6.6746c-1.18712 1.95756 3.2626 7.27208 2.82235 9.9372-.44025 2.66512 2.35852 4.89784 2.35852 4.89784s1.33649 5.18087 1.33649 7.11486c0 1.93398 1.77674 3.41198 1.33649 6.37585-.44026 2.96386 1.92612 4.88998 2.30348 9.1982a24.11451 24.11451 0 0 0 2.0126 6.94976z" fill-opacity=".1" fill-rule="nonzero"/>
52
+ <path d="M119.71914 139.93374c-.6368-15.975-22.98765-19.28478-28.20783-4.1667 0 .1022-.0629.2044-.1022.3066-3.41199 10.22023-1.92612 36.16389-1.92612 36.16389s.44811 17.3901 2.07549 23.17633c1.62737 5.78622 6.20289 22.36657 6.20289 25.03956 0 2.67298 4.26105 12.90107 6.06138 13.64007 1.80033.739 2.70443 6.52522 3.14469 7.56297.44025 1.03774 1.80033 14.5363 1.80033 14.5363s16.76117-1.03774 17.05206-3.71072c.29088-2.67299-3.70287-15.72343-3.70287-15.72343s-2.956-5.3381-3.33337-9.63846c-.37736-4.30036-2.7516-6.23434-2.30348-9.1982.44812-2.96387-1.3365-4.44974-1.3365-6.37586s-1.32862-7.1227-1.32862-7.1227-2.82236-2.22487-2.35852-4.89c.46385-2.66512-4.00947-8.01108-2.82235-9.9372 1.18712-1.92612 1.48586-6.6746 1.48586-6.6746s1.48587-21.35241 2.52361-27.13863c1.03775-5.78622 7.07555-15.12594 7.07555-15.12594s.05503-.25157 0-.72328z" fill="#6c63ff" fill-rule="nonzero"/>
53
+ <path d="M83.71249 106.19913c.20047.22956.3522.49686.44812.78617.32783-1.02595.16195-2.14782-.44812-3.03462-.39309-.44812-.97485-.72328-1.32863-1.20284 0-.03931-.04717-.08648-.07862-.12579-.39702.74293-.36636 1.64389.07862 2.35852.35378.51887.93554.78617 1.32863 1.21856zM95.03336 77.39381c0-.8412.0393-1.6824 0-2.51575-.14938-3.02676-.71542-6.13213-.8412-9.16675-.18083 3.71859.65251 7.618.8412 11.39162v.29088z" fill-rule="nonzero"/>
54
+ <path d="M173.73697 154.53295l.45598.31447c-.82784-.5692-1.0409-1.71936-.4717-2.5472l20.61341-29.92168c.57233-.82941 1.72486-1.04168 2.55506-.4717l-.46384-.31447c.80897.54796 1.29482 1.46385 1.29482 2.44106 0 .58963-.17767 1.16668-.50865 1.65489l-19.35554 28.0899c-.54482.80661-1.45678 1.2909-2.43006 1.2909-.60456 0-1.19498-.1879-1.68948-.53617z" fill="#464353" fill-rule="nonzero"/>
55
+ <path d="M196.52585 121.6438l.47911.33001-22.69098 32.94175-.45968-.31663c-.6183-.4259-.77646-1.28423-.35056-1.90254l21.139-30.68866c.42055-.61054 1.26544-.77413 1.88311-.36394z" fill="#9f9eff" fill-rule="nonzero"/>
56
+ <path d="M192.32025 126.13702c.05378-.07735.03471-.18335-.04265-.23713l-.0232-.01613c-.07736-.05378-.18336-.03471-.23714.04265l-1.6652 2.39557c-.05378.07735-.03471.18335.04265.23713l.0232.01613c.07737.05378.18336.03471.23714-.04265l1.6652-2.39557z" fill="#464353"/>
57
+ <path d="M153.4852 75.79788c-.3302-1.57234-1.63524-2.77518-2.53148-4.1274-2.24845-3.3884-1.89467-7.8617-.8412-11.79257a8.41365 8.41365 0 0 0 .4717-3.34122c-.30031-1.45206-1.20048-2.7123-2.47644-3.46702-2.7516-1.81606-6.28937-1.83964-9.38688-2.97959-4.4969-1.66668-8.56927-5.7705-13.26271-4.77206-2.56292.54246-4.53621 2.52361-6.75322 3.93086-2.44577 1.54482-5.26105 2.40804-8.1526 2.50002-2.42926.07076-4.88998-.40094-7.27994 0-.43003.07312-.85142.18868-1.25787.34592-2.02282-.69734-4.1502-1.0409-6.28937-1.01416-2.10616-.04796-4.18008.52988-5.95918 1.65882-3.23117 2.2799-4.0881 6.69032-4.04092 10.64476.04717 3.95444.71541 8.01895-.4953 11.79257-1.50158 4.67772-5.7469 8.2548-6.59597 13.09761-.58963 3.2862.50315 6.6117 1.47014 9.81142 2.78305 9.19035 4.62269 19.34768.92768 28.2157-.93554 2.24844-2.35851 4.4733-4.55193 5.5032l7.86171-.46385c.34513 2.31056-1.2673 4.49769-3.57708 4.85068a18.21192 18.21192 0 0 0 5.75478-1.3129c1.85222-.78382 3.20758-2.42692 3.62425-4.3947.14937-1.05347-.07076-2.16198.22013-3.19186.511-1.76102 2.35851-2.73588 3.78148-3.8601 3.82866-2.9796 5.63685-8.00323 5.78622-12.8539.14938-4.85068-1.13995-9.62274-2.51575-14.27688-1.3758-4.65413-2.8538-9.34757-3.07393-14.19039a18.40753 18.40753 0 0 1 .48743-5.28307c.28302.52673.5975 1.0456.91982 1.57234 1.89467 2.89311 4.11168 5.63685 5.27521 8.8916.40645 1.54011.95913 3.03855 1.65096 4.47331.78617 1.3758 2.31134 2.51575 3.89155 2.27204 1.5802-.24371 2.75946-1.94184 3.27833-3.56136.51888-1.6195.74687-3.3884 1.72958-4.77206 1.87109-2.61009 5.6054-2.84594 8.81298-2.7516 6.76108.21227 16.08507 1.24215 21.376-3.93085 1.0063-.98272 1.48586-2.49217 3.0582-2.12267 1.40725.3302 2.19343 2.61796 3.69501 3.14469 2.41355.77045 5.53465-1.52517 4.9686-4.24533z" fill="#464353" fill-rule="nonzero"/>
58
+ <path d="M85.72509 61.87479c0 .51101-.03931 1.02988 0 1.53303 0 1.65096.1415 3.31765.19654 4.97647.04717-2.14625-.12579-4.33967-.19654-6.5095zM83.04424 113.825c.2044-6.10856-1.18712-12.41365-2.97173-18.32566a34.98924 34.98924 0 0 1-1.57234-6.52522c-.3302 3.06606.65252 6.14786 1.57234 9.11958a63.14764 63.14764 0 0 1 2.97173 15.7313zM149.34207 64.18613a23.36905 23.36905 0 0 1 .78617-4.30822 8.41365 8.41365 0 0 0 .4717-3.34122c-.03065-.20048-.07782-.3978-.1415-.58963-.09434.44812-.21227.89623-.3302 1.34435-.65566 2.23587-.92139 4.56844-.78617 6.89472z" fill-rule="nonzero"/>
59
+ </g>
60
+ <g>
61
+ <path d="M590.46 285.225c0-29.872-24.253-54.125-54.125-54.125h-327.2c-29.872 0-54.125 24.253-54.125 54.125s24.253 54.125 54.125 54.125h327.2c29.872 0 54.125-24.253 54.125-54.125z" fill="url(#_Linear3)" transform="matrix(.74209 0 0 .74209 82.6893 -118.21955)"/>
62
+ <path d="M519.95786 93.45023c0-21.17255-17.18975-38.3623-38.36229-38.3623H237.8861c-21.17254 0-38.3623 17.18975-38.3623 38.3623 0 21.17254 17.18976 38.36229 38.3623 38.36229h243.70947c21.17254 0 38.3623-17.18975 38.3623-38.3623z" fill="#fff"/>
63
+ <path d="M481.47507 74.20377c0-2.27187-1.84484-4.11654-4.11672-4.11654H286.10373c-2.27243 0-4.11672 1.84467-4.11672 4.11654v8.2335c0 2.2723 1.84429 4.11696 4.11672 4.11696h191.25462c2.27188 0 4.11672-1.84466 4.11672-4.11696v-8.2335z" fill="#3f3d56"/>
64
+ <path d="M481.47507 92.97174c0-1.51458-1.23008-2.74436-2.74448-2.74436h-193.9991c-1.51496 0-2.74448 1.22978-2.74448 2.74436v5.489c0 1.51486 1.22952 2.74464 2.74448 2.74464h193.9991c1.5144 0 2.74448-1.22978 2.74448-2.74464v-5.489z" fill="#6c63ff"/>
65
+ <path d="M342.52958 107.99765c0-1.51458-1.2299-2.74436-2.7445-2.74436H284.7312c-1.51476 0-2.74449 1.22978-2.74449 2.74436v5.489c0 1.51486 1.22973 2.74464 2.7445 2.74464h55.05389c1.5146 0 2.74449-1.22978 2.74449-2.74464v-5.489z" fill="#9795b1"/>
66
+ <g serif:id="text" fill-rule="nonzero">
67
+ <path d="M358.77597 113.96639c.59162 0 .87847-.11695 1.16532-.26892l-.30477-.94123c-.19721.09875-.41235.15267-.55578.15267-.26892 0-.38545-.17998-.38545-.55605v-1.86495h1.19222v-.96783h-1.19222v-1.55961l-1.16533.12536v1.43425h-.51991v.96783h.51991v2.02602c0 .98605.49303 1.45246 1.246 1.45246zM362.81855 109.44864c-.51964 0-.9948.25072-1.32647.71713h-.00897v-.6457h-1.17429v4.37489h1.1743v-2.03512c0-.6457.39441-1.13872 1.12043-1.13872.06303 0 .18839 0 .30464.0091v-1.27317c-.0175-.0084-.05323-.0084-.08964-.0084zM366.07292 109.52008v2.12476c0 .84248-.4573 1.27247-.96854 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.63529c0 1.3362.6632 1.81102 1.60443 1.81102.49302 0 .96853-.2066 1.29978-.60998h.01821v.53855h1.17443v-4.37488h-1.17443zM369.36231 113.96639c1.14782 0 1.70317-.58266 1.70317-1.36282 0-.85999-.55535-1.06658-1.50568-1.41604-.4307-.16107-.6632-.28713-.6632-.46641 0-.2332.24161-.33125.43-.33125.32284 0 .70802.14356 1.04907.46571l.56446-.86069c-.49303-.38517-.98605-.54625-1.59533-.54625-.8964 0-1.57781.51964-1.57781 1.3089 0 .84248.62748 1.18283 1.3446 1.42514.57357.17928.79767.27803.79767.48392 0 .215-.19679.35856-.53784.35856-.47482 0-.85159-.17017-1.21015-.51123l-.57356.81587c.48392.41249 1.07569.63659 1.7746.63659zM372.8765 113.96639c.59177 0 .8782-.11695 1.16533-.26892l-.30464-.94123c-.19749.09875-.41248.15267-.55605.15267-.26892 0-.38517-.17998-.38517-.55605v-1.86495h1.19194v-.96783h-1.19194v-1.55961l-1.16533.12536v1.43425h-.52034v.96783h.52034v2.02602c0 .98605.49302 1.45246 1.24586 1.45246z" fill="#1d58bf"/>
68
+ <path d="M376.92854 109.44864c-.53784 0-.99515.1968-1.3271.57356h-.01751v-.50212h-1.17443v6.14948h1.17443v-2.26763h.0175c.30465.35787.73534.56446 1.2907.56446 1.21925 0 2.09744-.8964 2.09744-2.25012 0-1.3264-.8873-2.26763-2.06103-2.26763zm-.25141 3.46867c-.6366 0-1.13872-.47481-1.13872-1.19194 0-.69891.46641-1.22835 1.13872-1.22835.62748 0 1.1205.47551 1.1205 1.22835 0 .70803-.4573 1.19194-1.1205 1.19194zM382.3427 109.52008v2.12476c0 .84248-.45732 1.27247-.96855 1.27247-.54694 0-.78855-.26892-.78855-1.07568v-2.32155h-1.16533v2.63529c0 1.3362.6632 1.81102 1.60443 1.81102.49302 0 .96853-.2066 1.29978-.60998h.01821v.53855h1.17443v-4.37488h-1.17443zM384.26997 107.29727h1.17429v6.59755h-1.1743zM387.649 113.96639c1.14782 0 1.70317-.58266 1.70317-1.36282 0-.85999-.55535-1.06658-1.50568-1.41604-.43-.16107-.6632-.28713-.6632-.46641 0-.2332.2416-.33125.42999-.33125.32285 0 .70802.14356 1.04907.46571l.56446-.86069c-.49302-.38517-.98605-.54625-1.59532-.54625-.8964 0-1.57782.51964-1.57782 1.3089 0 .84248.62749 1.18283 1.34461 1.42514.57356.17928.79766.27803.79766.48392 0 .215-.19679.35856-.53784.35856-.47482 0-.85159-.17017-1.21015-.51123l-.57356.81587c.48392.41249 1.07569.63659 1.7746.63659zM393.8433 111.66235c0-1.28158-.86069-2.2137-2.14227-2.2137-1.24586 0-2.16958.92301-2.16958 2.24941 0 1.37192.96854 2.26833 2.25012 2.26833.8782 0 1.51478-.34946 1.89155-.82497l-.76194-.70802c-.24231.29553-.58266.50212-1.04908.49302-.56445 0-.97694-.32285-1.1205-.84248h3.07509c.02661-.07214.02661-.27803.02661-.4216zm-2.10655-1.18284c.51123 0 .82497.30464.94122.76195h-1.92727c.13446-.50213.51123-.76195.98605-.76195z" fill="#00aded"/>
69
+ </g>
70
+ <g serif:id="mark">
71
+ <path d="M352.85905 108.04074c-.38986-.10526-.77052-.2453-1.1363-.42481-.31035-.15228-.6097-.32576-.90303-.50838a4.2806 4.2806 0 0 1-.01708.01057c-.77208.47911-1.59296.8661-2.50489 1.03732-.32904.06177-.66185.10054-.99532.12898l-.01063.0009c-.08214 1.83573.04032 3.72787 1.01521 5.302.59423.95948 1.51363 1.67797 2.48732 2.27519l.0254.01547c.39846-.2435.78981-.50319 1.15398-.79322h.82668c-.58593.55145-1.2694 1.0136-1.96424 1.42616-.03256-.02228-.03286 0-.03286 0-.87644-.52039-1.7297-1.09562-2.39376-1.8594-.4511-.51877-.80828-1.11491-1.0657-1.76016-.64686-1.62152-.68784-3.42667-.57505-5.12154.71687-.04271 1.44492-.1116 2.13115-.33287.67679-.21823 1.30011-.5806 1.90217-.97149l.01762-.01147c.01171.00765.02342.01524.03519.02288.75935.4919 1.56972.92603 2.4621 1.11206a6.70183 6.70183 0 0 0 .1536.0301l-.61156.4217zm-.18137 6.31962h-1.1348c-.18968-.00807-.20247-.10413-.20647-.19786-.00472-.11148.06757-.20945.20646-.21536h.97722l.30892-1.12616s.05962-.13943.17945-.15096c.09583-.00926.1782.03119.21793.14708l.46675 1.57934.28591-.89855s.09248-.1638.23932-.13955c.08005.0205.08328.0242.1297.088l.33233.5008h.79573c.00095.00012.14767.01995.1917.12957.05096.12677-.02969.27677-.1917.28365h-.90661c-.09857-.00407-.1267-.0297-.17211-.09236l-.15532-.234-.35934 1.1295s-.06332.13453-.18149.14337c-.09444.00705-.1745-.03334-.21357-.1475l-.45205-1.52963-.15872.5787s-.0721.14636-.19924.15192zm2.22393-6.01943c.04015.9777.0101 1.9569-.15741 2.92342-.07635.44076-.24278 1.04897-.38855 1.47276l-.52451-.1705c.4453-1.17472.553-2.4526.53371-3.70332l.53676-.52236z" fill="#00aded" fill-rule="nonzero"/>
72
+ <path d="M350.61249 110.85644c.03129-.03568.03941-.0591.08606-.12694.26903-.39144 1.06591-1.44674 2.07849-2.25845.44062-.35324.91685-.67437 1.33812-.88486.70209-.35082.92816-.39358 1.25422-.46955.06193-.01441.2862-.05444.32341.03392.0359.0853-.10399.1752-.15648.21644-.059.04636-1.40842 1.05544-2.54368 2.55402-.98784 1.3039-1.63429 3.0147-1.63429 3.0147-.01986.038-.24452.43948-.54593.45903-.27857.01811-.63633-.34424-.63633-.34424-.06877-.06416-.40417-.4622-.68325-.95451-.35593-.6277-.66242-1.37177-.66242-1.37177s-.31817-.62588.28165-.9701c.5914-.33942.85484.00518.9832.20863.10969.17387.33069.59623.4375.80282.0372.07196.06126.11187.07973.09086z" fill="#1d58bf" fill-rule="nonzero"/>
73
+ </g>
74
+ <circle cx="88.506" cy="368.331" r="25.699" fill="#d1ceff" transform="matrix(1.24682 0 0 1.24682 129.07388 -366.05644)"/>
75
+ <g>
76
+ <path d="M234.79674 84.79714c-1.28828-2.16885-1.71512-4.93991-.9589-7.68538 1.39849-5.07719 6.31648-8.15732 10.97562-6.87399 4.65914 1.28333 7.30636 6.44725 5.90788 11.52444-.75623 2.74547-2.54175 4.90715-4.75888 6.11045 1.49218-1.30605 2.69147-3.18496 3.30831-5.42442 1.39844-5.07703-.7234-10.09624-4.73528-11.20128-4.01188-1.10505-8.40432 2.11984-9.80276 7.19687-.61684 2.23946-.54878 4.46745.06401 6.35331z" fill="#4a41df"/>
77
+ <path d="M229.64312 76.9581l-2.53994-.31092-6.8431 32.05372 1.20438 2.33146 8.17866-34.07426z" fill="#342ada" fill-rule="nonzero"/>
78
+ <path d="M228.85059 76.4124l-7.36407 34.43978 26.80343 5.5183 7.25622-33.5587-26.69558-6.39939z" fill="#6c63ff" fill-rule="nonzero"/>
79
+ <path d="M229.98862 101.50522l2.56138-1.89507c.5772.91783 1.27595 1.6768 2.09644 2.27698.82035.59994 1.655 1.005 2.5042 1.21503.83984.20772 1.56523.18376 2.17584-.07218.6108-.2559.99734-.71234 1.15992-1.3697.09259-.37434.10476-.71773.03673-1.03012-.06809-.31219-.23693-.61809-.50703-.91741-.2699-.29928-.58302-.5801-.9395-.8427-.35648-.26262-.83858-.57552-1.44626-.9389-.48892-.29537-.89628-.54866-1.22182-.76-.32555-.21136-.69053-.46883-1.095-.77225-.40465-.30346-.73193-.5855-.98246-.8461-.25034-.26054-.49876-.56897-.74482-.92538-.24605-.35642-.42252-.71009-.52958-1.06106-.10687-.35093-.16607-.74835-.17745-1.19202-.01143-.44348.04273-.90732.1624-1.39112.35454-1.4335 1.11368-2.51479 2.2775-3.24424 1.16382-.72945 2.58533-.96402 4.26492-.70362l.8739-3.53332 2.53356.62663-.90776 3.67024c.82439.38805 1.61423.87648 2.36954 1.4653.7555.58885 1.3814 1.21118 1.87813 1.86687l-2.49302 1.91197c-.6086-.7123-1.27213-1.30032-1.99062-1.76387-.7185-.46355-1.4156-.77878-2.09125-.94589-.82173-.20324-1.51227-.19235-2.07161.03265-.55949.22477-.91604.64771-1.06962 1.26864-.149.60242-.00324 1.1496.43693 1.64125.44041.4915 1.20656 1.07575 2.29863 1.75282.42956.26126.79095.48395 1.0846.66798.29366.18403.61867.39752.975.64067.35653.2432.64852.46319.87598.66.2275.1966.46861.42592.72363.68762.25501.2617.4553.50985.6007.74423.14536.23458.28302.50114.41258.7996.1295.29866.21188.6024.24686.91136.03499.30896.04162.64481.01971 1.0075-.02196.36288-.08255.74493-.18193 1.14674-.36583 1.47908-1.13688 2.57932-2.31318 3.30073-1.17635.7216-2.61108.97956-4.30402.77394l-.82982 3.3551-2.53356-.62663.83324-3.36893c-2.09857-.83857-3.7558-2.24653-4.97201-4.22334z" fill="#fff" fill-rule="nonzero"/>
80
+ </g>
81
+ </g>
82
+ <g transform="matrix(.9544 0 0 .9544 -317.20694 -197.00686)">
83
+ <path d="M926.79 654.4s-3.59 21.65-21.79 24.86c-18.2 3.21-78.94 2.56-78.94 2.56s-34.73-5-47.29-34.34c-12.56-29.34-20.63-41-9.87-41.53 10.76-.53 68.82 19.61 72.15 19.87 3.33.26 88.94-44.6 85.74 28.58z" fill="#65617d" fill-rule="nonzero"/>
84
+ <path d="M926.79 654.4s-3.59 21.65-21.79 24.86c-18.2 3.21-78.94 2.56-78.94 2.56s-34.73-5-47.29-34.34c-12.56-29.34-20.63-41-9.87-41.53 10.76-.53 68.82 19.61 72.15 19.87 3.33.26 88.94-44.6 85.74 28.58z" fill-opacity=".05" fill-rule="nonzero"/>
85
+ <path d="M763.9 678.49s1.81 4.77 6.8 5.12c.732.052 1.468.011 2.19-.12 6.67-1.16 22.3-3.85 27.81-2.82 3.32.61 9.45-.3 13.82-1.12 2.9-.55 5-1.06 5-1.06s-5.12-17-5.77-17.56c-.65-.56-23.06-14-23.06-14l-17.79-1.24c-2.379.367-4.528 1.635-6 3.54-1.87 2.27-3.48 6-3.59 12.1-.31 14.98.59 17.16.59 17.16z" fill="#3f3d56" fill-rule="nonzero"/>
86
+ <path d="M763.9 678.49s1.81 4.77 6.8 5.12a73.811 73.811 0 0 1-4.82-7l.09-12.43c-.728-6.907 1.874-13.764 7-18.45h-.07s-9.35.64-9.61 15.64c-.26 15 .61 17.12.61 17.12z" fill-opacity=".05" fill-rule="nonzero"/>
87
+ <path d="M840.9 651.32l16.53-12.94 26-25.63s-2.81-.14-7.05-.32c-1 .67-4 2.78-4.12 5.35-.12 3.14-7 .22-10.62 2-3.62 1.78-21.1 24.28-24.18 24.12-3.08-.16-5.51-1.56-6.79.62l-.09.14 10.32 6.66z" fill-opacity=".1" fill-rule="nonzero"/>
88
+ <path d="M731.99 612.49c1.67 4.1 15.64 19.86 15.64 19.86s8.84 11.54 21.4 16.92c12.56 5.38 28.06 16.66 29.22 18.71.74 1.32 10.75 7.35 17.8 11.49l1.58.92 3.5 2 1.85 1.07s4.29-3.45 8.57-6.92c4.28-3.47 8.41-6.86 8.48-7 .12-.38 1.79-4.74 1.4-5-.2-.13-1.08-1.91-2.69-4-1.723-2.287-3.96-4.137-6.53-5.4-5.9-2.69-8.46-8.82-8.46-8.82s-.56-.4-1.41-.94c-1.747-1.208-3.704-2.079-5.77-2.57-2.82-.35-8.07-6.12-8.07-6.12s-3.59-2.31-5-5.25c-1.41-2.94-21.22-16.46-23.06-17.73l48.18 30.95 11.53 7.41 16.54-12.94 26-25.63s-3.5-.17-8.58-.39c-12.65-.55-35.1-1.41-37.94-.77-2.292.536-4.657.692-7 .46-2.343-.232-6.4.29-10.63-1.94s-10.9-3.28-11.67-4.93c-.77-1.65-23.45-9.61-23.45-9.61s-30.88-16.4-41.91-6.66c-11.03 9.74-11.18 18.73-9.52 22.83z" fill="#65617d" fill-rule="nonzero"/>
89
+ <path d="M831.57 518.43l4 13.19 5.13 29.74 18.83 1.28 5.46-9 5.44-9s3.39-12 5.83-23.64c2.15-10.28 3.56-20.26 1.22-21.34-2.08-1-3.45-4.43-4.34-8.15-.11-.46-.22-.93-.31-1.39-.624-3.156-1.042-6.35-1.25-9.56-.208-3.21-39.47-2.05-34 14.23.987 2.777 1.491 5.703 1.49 8.65-.01.735-.056 1.469-.14 2.2-.567 5.099-3.236 9.738-7.36 12.79z" fill="#ee8e9e" fill-rule="nonzero"/>
90
+ <path d="M823.36 516.25l1.42 22.42 3.2 19.1 3.59 8.84 3.2 48.38s30.9 3.57 38.42-.06c.54-.231 1.009-.6 1.36-1.07 9.07-13.7 6.1-53.4 6.1-53.4l3.46-25.63-2.31-13.3-5.57-.6-4.29-.45s-1 1.19-2.37 3c-3.8 5-10.79 14.88-10.32 19 .64 5.64-.77 11.4-3 12.3-2.23.9-4 2.44-4.35.9-.35-1.54-.77-1.92-.39-4.1.38-2.18-1.67-8.85-1.67-8.85s-3.46-7.81-3.2-11.15c.26-3.34-.38-7.17-1.41-8.07-1.03-.9-2.43-1.79-1.28-5.89 1.15-4.1-5.05-12.05-5.05-12.05l-15.54 10.68z" fill="#e3e8f4" fill-rule="nonzero"/>
91
+ <path d="M872.9 490.58s6.46.8 8.51 3.5 7.43 3.07 7.43 3.07 6.15 2 6 2.56c-.15.56 1.79 1.29 5.63 2.31s10.26 4.74 10.26 5.64c0 .9 10.17 10.89 10.17 11.92 0 1.03 3.08 4.87 2.69 11.66-.39 6.79-.77 15.38.77 16.79 1.54 1.41 0 6.92 0 6.92-.844 1.22-.895 2.829-.13 4.1 1.28 2.31-.25 11.92-.25 11.92l.12 10s-1.41 6.28.26 6.54c1.67.26-.26 3.08-.26 3.08s-1.41 5.12.39 7.43c1.8 2.31 2.31 12.17 2.31 12.17l27.42 39.86s.39 7.3-8.33 7.18c-8.72-.12-8.59 1.66-8.33 3.33.26 1.67-2.43 3.46-2.43 3.46s-3.46 1.79-1.41 4 7.94 7.18-1.8 10.51c-1.148-1.587-2.095-3.31-2.82-5.13-.826-2.262-1.511-4.573-2.05-6.92-.539-2.347-.9-9.74-2.69-11-1.79-1.26-1.54-7.43-1.54-7.43s2.57-5-1-7.05-55.62-30.89-55.62-30.89l-1.3-38.37s-.9-28.32 4.48-37.81c0 0-.64-4.1.26-6.41.9-2.31-.13-9.74-.13-9.74l3.39-27.2zM838.9 505.57s-12.88-2.65-16.34-.86c-3.46 1.79-10.22 3.19-11.24 4.19-1.02 1-3.59.26-5.9 6.28-2.31 6.02-2.56 12.18-5.51 15-2.95 2.82-4.48 4.74-4.61 6.79-.13 2.05.38 2.56-.77 3.2-1.15.64-2.82 3.33-2.31 4.36.51 1.03 26.68 23.62 26.68 23.62s1.28 8.58 2.44 10.76c1.16 2.18-1.29 32.17-3.85 34.22-2.56 2.05 17.3 1.86 17.3 1.86s.9-19.67 1.67-20.7c.77-1.03-.52-22-.52-22s-.12-17.94 1.54-22.68c1.66-4.74 1.42-20.55 1.42-20.55s1.47-9.46 3.26-11.66c1.79-2.2-3.26-11.83-3.26-11.83z" fill="#3f3d56" fill-rule="nonzero"/>
92
+ <path d="M837.59 494.72c.987 2.777 1.491 5.703 1.49 8.65 12.923 3.846 26.914-1.681 33.72-13.32-.624-3.156-1.042-6.35-1.25-9.56-.208-3.21-39.47-2.05-33.96 14.23z" fill-opacity=".1" fill-rule="nonzero"/>
93
+ <path d="M818.11 474.47c.002 16.099 13.251 29.346 29.35 29.346 16.101 0 29.35-13.249 29.35-29.35s-13.249-29.35-29.35-29.35c-13.809 0-25.842 9.746-28.71 23.254-.426 2.005-.64 4.05-.64 6.1z" fill="#ee8e9e" fill-rule="nonzero"/>
94
+ <path d="M799.27 542.39l-7 2.18s.65 2.56-1.41 3.84c-1.233.876-1.915 2.342-1.79 3.85s-.77 2.82-2.56 3.46c-1.79.64-2.95 4.87-2.95 4.87l-5.9 6.79s-2.17 1.79-1.79 2.69c.38.9-2.31 1.15-2.31 1.15l1.34 22.82 12.18 2.3 7.56-.77 6.15-2.3 5.38-3.21 2.44-6.28 10.76-16.4-20.1-24.99z" fill="#3f3d56" fill-rule="nonzero"/>
95
+ <path d="M775.31 573.02s-15.64-22.56-27.3-10.38c-11.66 12.18 4.74 31.91 8.59 31.27 3.85-.64 22.17-1.67 22.17-1.67l-3.46-19.22z" fill="#ee8e9e" fill-rule="nonzero"/>
96
+ <path d="M813.29749 565.70272c.40506-.7936.08977-1.76626-.70383-2.17132L742.58372 527.798c-.7936-.40506-1.76625-.08978-2.17131.70383l-27.41856 53.71923c-.40506.7936-.08978 1.76626.70383 2.17132l70.00993 35.73341c.7936.40506 1.76626.08978 2.17132-.70383l27.41856-53.71923z" fill="#3f3d56"/>
97
+ <path fill="#16bd83" d="M744.3983 535.1576l61.2616 31.26821-23.56254 46.16441-61.2616-31.26821z"/>
98
+ <circle cx="730.3" cy="557" r="1.13" fill="#e6e8ec"/>
99
+ <circle cx="796.61" cy="590.97" r="1.86" fill="#e6e8ec"/>
100
+ <path d="M765.18 577.76c-.12 16.92 34.86 20.5 34.86 20.5l8.94 1.42 4 .64 1.67-16.54s-1.83-.27-4.12-.8c-3.39-.79-7.78-2.16-8.7-4.07-1.53-3.2-36.52-18.07-36.65-1.15z" fill="#ee8e9e" fill-rule="nonzero"/>
101
+ <path d="M855.96 486.61c-.143-.605-.143-1.235 0-1.84.327-1.764-.117-3.585-1.22-5-1.65-1.86-4.42-2-6.88-2.34-2.46-.34-5.3-1.26-6-3.64-.51-1.71.26-3.8-.84-5.21-.508-.575-1.166-.997-1.9-1.22-1.797-.814-3.819-.99-5.73-.5-3.27 1.06-5.24 4.91-8.65 5.39-.516.097-1.05.034-1.53-.18-1.29-.64-1.34-2.5-2.33-3.55-1.56-1.65-4.51-.58-6.42-1.81-1.24-.8-1.72-2.36-2.07-3.79-.67-2.79-1.22-5.71-.56-8.5 1.11-4.77 5.37-8 8.09-12.11 2.54-3.79 4-8.59 7.77-11.11 3.77-2.52 8.7-1.94 13-.66 1.982.698 4.019 1.23 6.09 1.59 3.46.43 6.94-.51 10.43-.63 4.923-.155 9.763 1.315 13.77 4.18.903.592 1.67 1.37 2.25 2.28.581 1.287.92 2.67 1 4.08.412 2.651 1.332 5.198 2.71 7.5 1.07 1.8 2.43 3.43 3.4 5.3 1.083 1.827 1.413 4.005.92 6.07-.33 1.05-1 2-1.23 3.09-.57 2.5 1.08 4.89 2.21 7.2 1.089 2.106 1.606 4.461 1.5 6.83-.13 2.384-1.247 4.61-3.08 6.14-1.898 1.334-4.17 2.035-6.49 2-2.811.086-5.614-.345-8.27-1.27-.983-.445-2.064-.631-3.14-.54-1.49.3-1.3 1.22-1.94 2.32-.86 1.56-4.18 1.85-4.86-.07z" fill="#3f3d56" fill-rule="nonzero"/>
102
+ <path d="M840.15 652.09l16.54-12.94 26-25.63s-3.5-.17-8.58-.39c-1.009.909-1.655 2.152-1.82 3.5-.12 3.13-7 .22-10.62 2-3.62 1.78-21.13 24.27-24.21 24.13-3.08-.14-5.51-1.56-6.79.62l-.09.14c-.525.591-1.226.998-2 1.16l11.57 7.41z" fill-opacity=".1" fill-rule="nonzero"/>
103
+ <path d="M806.83 651.19l8.31 26.52 1.3 4.16 4-1.08 8.72-2.4L868 667.72c4.882-.211 9.66-1.484 14-3.73 7.346-4.108 15.751-5.939 24.14-5.26 5.13.48 10.84-1.73 15.58-10.49 0 0 10.76-31.78-16.41-40.88-27.17-9.1-28.46 4.84-28.46 4.84l-.37.23c-1 .67-4 2.78-4.12 5.35-.12 3.14-7 .22-10.62 2-3.62 1.78-21.2 24.28-24.28 24.12-3.08-.16-5.51-1.56-6.79.62l-.09.14c-.95 1.31-3.81 1.61-5.69 1.67h-1.78l-.24.07-2 .59-14.04 4.2z" fill="#65617d" fill-rule="nonzero"/>
104
+ <path d="M913.46 519.83s11.92-3.46 9 30.38c-2.92 33.84-25 55.23-25 55.23s-25.38 11.15-36.78 9.36c-11.4-1.79-19.78-2.18-19.78-2.18a28.99603 28.99603 0 0 0-11.53-3.08c-6.41-.25-19.86-4.23-20.12-5.51-.26-1.28 3.33-20.12 1.79-21.53 0 0 17.94.74 19.74 2 1.8 1.26 4.36.36 6.28 0s7.82-5.5 19.48-1c0 0 4 .38 5.51-.64 1.51-1.02 4-.26 4-.26.987-.339 1.923-.814 2.78-1.41.38-.51 3.46 0 3.46 0 .186.091.391.139.598.139.626 0 1.174-.431 1.322-1.039.409-1.049 1.021-2.007 1.8-2.82.779-.813 3.46-19.48 10-26.78 0 0 1.93-1.67 1.41-3.72-.52-2.05 10.66-31.24 26.04-27.14z" fill="#3f3d56" fill-rule="nonzero"/>
105
+ <path d="M820.9 646.98l16.92 20.48c.07-.06.11-.1.11-.12.13-.38 1.79-4.74 1.41-5-.38-.26-3.33-6.67-9.23-9.36-2.992-1.465-5.505-3.756-7.24-6.6l-1.97.6z" fill-opacity=".1" fill-rule="nonzero"/>
106
+ <path d="M835.28 688.9l2.44 1.41 24.73.64c2.776 1.684 5.71 3.094 8.76 4.21.405.128.82.221 1.24.28 2.292.179 4.593.222 6.89.13 1.9 0 3.36-.13 3.36-.13s-1.17-31.2-2-34.48c-.42-1.57-2.5-1.22-4.54-.44-1.536.623-3.018 1.372-4.43 2.24-1.412.868-10.51 1-12.18 1.93-1.67.93-6.4-.52-9.35 0-2.95.52-8.2-3.47-8.2-3.47-14.36-4.74-6.28 4.1-5.26 4.48 0 0-14-3.2-14.73 12-.73 15.2 13.27 11.2 13.27 11.2z" fill="#3f3d56" fill-rule="nonzero"/>
107
+ <path d="M871.04 676.82c.27 6.46 5.3 14.48 8.3 18.72 1.9 0 3.36-.13 3.36-.13s-1.17-31.2-2-34.48c-.42-1.57-2.5-1.22-4.54-.44-2.53 4.65-5.34 11.13-5.12 16.33z" fill="#565387" fill-rule="nonzero"/>
108
+ <path d="M871.04 676.82c.27 6.46 5.3 14.48 8.3 18.72 1.9 0 3.36-.13 3.36-.13s-1.17-31.2-2-34.48c-.42-1.57-2.5-1.22-4.54-.44-2.53 4.65-5.34 11.13-5.12 16.33z" fill-opacity=".1" fill-rule="nonzero"/>
109
+ <path d="M866.81 677.68c1.7 6.23 1.68 13.22 4.4 17.45.405.128.82.221 1.24.28 2.292.179 4.593.222 6.89.13 1.9 0 3.36-.13 3.36-.13s-1.17-31.2-2-34.48c-.42-1.57-2.5-1.22-4.54-.44-1.536.623-3.018 1.372-4.43 2.24-1.412.868-7.1 6.97-4.92 14.95z" fill-opacity=".05" fill-rule="nonzero"/>
110
+ <path d="M781.48 614.45s12.29 4 22.7 18.16l-22.7-18.16z" fill-opacity=".1" fill-rule="nonzero"/>
111
+ <path d="M881.31 460.67c0 .1 0 .19-.07.28-.124.364-.268.721-.43 1.07.126-.464.294-.916.5-1.35z" fill-rule="nonzero"/>
112
+ <path d="M883.3 557.03c-2.35 3.17-5 6.1-7.11 9.45-2.11 3.35-3.54 7.27-3.11 11.19 2.15-2.2 3.13-5.25 4.49-8 2.29-4.68 5.72-8.65 8.62-13 .55-.82 4.09-5.57 2.3-5.8-1.48-.17-4.39 5.08-5.19 6.16z" fill-opacity=".1" fill-rule="nonzero"/>
113
+ </g>
114
+ <defs>
115
+ <linearGradient id="_Linear1" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
116
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
117
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
118
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
119
+ </linearGradient>
120
+ <linearGradient id="_Linear3" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 356.05 -16.69) scale(108.26)">
121
+ <stop offset="0" stop-color="gray" stop-opacity=".24706"/>
122
+ <stop offset=".54" stop-color="gray" stop-opacity=".11765"/>
123
+ <stop offset="1" stop-color="gray" stop-opacity=".09804"/>
124
+ </linearGradient>
125
+ </defs>
126
+ </svg>
assets/images/logo-edd.png ADDED
Binary file
assets/images/logo-formidable.png ADDED
Binary file
assets/images/logo-om.png ADDED
Binary file
assets/images/memberpress-logo.svg ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 20.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 252 40" style="enable-background:new 0 0 252 40;" xml:space="preserve">
6
+ <style type="text/css">
7
+ .st0{fill:#20D1CC;}
8
+ .st1{fill:#05D0E0;}
9
+ .st2{fill:#01A9B2;}
10
+ .st3{fill:#0282C9;}
11
+ .st4{fill:#016BB1;}
12
+ .st5{fill:#06429E;}
13
+ .st6{fill:#01569A;}
14
+ .st7{fill:#008C9D;}
15
+ .st8{fill:#03ABA3;}
16
+ </style>
17
+ <g>
18
+ <g>
19
+ <path class="st0" d="M48,17.5c0-4.1,3.3-7.4,7.4-7.4s7.4,3.3,7.4,7.4V35c0,2.8,2.3,5,5,5c2.8,0,5-2.3,5-5V17.5
20
+ C72.9,7.8,65.1,0,55.4,0C50.6,0,46.2,2,43,5.2C46.1,8.4,48,12.7,48,17.5L48,17.5z"/>
21
+ <path class="st1" d="M38,17.5c0-4.8,1.9-9.1,5-12.3C39.8,2,35.4,0,30.6,0c-4.9,0-9.3,2-12.4,5.2c3.1,3.1,5,7.5,5,12.2
22
+ c0-4.1,3.3-7.4,7.4-7.4C34.7,10.1,38,13.4,38,17.5L38,17.5z"/>
23
+ <path class="st2" d="M48,35V17.5c0-4.8-1.9-9.1-5-12.3c-3.1,3.2-5,7.5-5,12.3V35c0,1.4,0.6,2.6,1.5,3.6c0.9,0.9,2.2,1.5,3.6,1.5
24
+ C45.8,40,48,37.7,48,35z"/>
25
+ <path class="st3" d="M5.7,0c-2.8,0-5,2.3-5,5c0,2.8,2.3,5,5,5c4.1,0,7.4,3.3,7.4,7.4c0-4.8,1.9-9.1,5-12.2C15,2,10.6,0,5.7,0z"/>
26
+ <path class="st4" d="M13.1,17.4C13.1,17.4,13.1,17.4,13.1,17.4l0,17.5c0,2.8,2.3,5,5,5c0.9,0,1.7-0.2,2.4-0.6
27
+ c1.6-0.9,2.6-2.5,2.6-4.4V17.5c0,0,0,0,0,0c0-4.8-1.9-9.1-5-12.2C15,8.4,13.1,12.7,13.1,17.4z"/>
28
+ </g>
29
+ <circle class="st5" cx="5.7" cy="5" r="5"/>
30
+ <circle class="st6" cx="18.1" cy="35" r="5"/>
31
+ <circle class="st7" cx="43" cy="35" r="5"/>
32
+ <circle class="st8" cx="67.9" cy="35" r="5"/>
33
+ </g>
34
+ <g>
35
+ <path class="st5" d="M101,15.6c-1.8,0-3.6,0.8-4.5,2.8c-0.6-2.1-2.3-2.8-4.3-2.8c-1.5,0-3,0.6-3.8,2.1c0,0,0-0.8,0-0.8
36
+ c0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.1,0.5-1.1,1.1c0,0,0,10.9,0,10.9c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1h0v-6.5
37
+ c0-2.1,1.4-3.7,3.5-3.7c2.3,0,3.5,1.6,3.5,3.7v6.5h0c0,0.6,0.5,1.1,1.1,1.1s1.1-0.5,1.1-1.1v-6.5c0-2.1,1.4-3.7,3.5-3.7
38
+ c2.3,0,3.4,1.5,3.4,3.7v6.5h0c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1v-6.5C106.4,17.8,104.5,15.6,101,15.6z"/>
39
+ <path class="st5" d="M138.3,15.6c-1.8,0-3.6,0.8-4.5,2.8c-0.6-2.1-2.3-2.8-4.3-2.8c-1.5,0-3,0.6-3.8,2.1c0,0,0-0.8,0-0.8
40
+ c0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.1,0.5-1.1,1.1c0,0,0,10.9,0,10.9c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1h0v-6.5
41
+ c0-2.1,1.4-3.7,3.5-3.7c2.3,0,3.5,1.6,3.5,3.7v6.5h0c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1v-6.5c0-2.1,1.4-3.7,3.5-3.7
42
+ c2.3,0,3.4,1.5,3.4,3.7v6.5h0c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1v-6.5C143.7,17.8,141.9,15.6,138.3,15.6z"/>
43
+ <path class="st5" d="M120.5,23.1c0.5,0,1-0.4,1-1c0-4.5-2.8-6.6-6.5-6.6c-3.9,0-6.7,2.8-6.7,6.7c0,4.1,2.8,6.7,6.8,6.7
44
+ c1.9,0,4-0.7,5.3-2c0.2-0.2,0.3-0.4,0.3-0.7c0-0.5-0.4-1-1-1c-0.3,0-0.5,0.1-0.7,0.3c-0.9,0.9-2.5,1.4-3.9,1.4
45
+ c-2.5,0-4.4-1.5-4.7-3.8L120.5,23.1z M110.5,21.3c0.4-2.5,2.3-3.8,4.5-3.8c2.5,0,4.2,1.3,4.3,3.8H110.5z"/>
46
+ <path class="st5" d="M173.4,23.1c0.5,0,1-0.4,1-1c0-4.5-2.8-6.6-6.5-6.6c-3.9,0-6.7,2.8-6.7,6.7c0,4.1,2.8,6.7,6.8,6.7
47
+ c1.9,0,4-0.7,5.3-2c0.2-0.2,0.3-0.4,0.3-0.7c0-0.5-0.4-1-1-1c-0.3,0-0.5,0.1-0.7,0.3c-0.9,0.9-2.5,1.4-3.9,1.4
48
+ c-2.5,0-4.4-1.5-4.7-3.8L173.4,23.1z M163.4,21.3c0.4-2.5,2.3-3.8,4.5-3.8c2.5,0,4.2,1.3,4.3,3.8H163.4z"/>
49
+ <path class="st5" d="M225.1,23.1c0.5,0,1-0.4,1-1c0-4.5-2.8-6.6-6.5-6.6c-3.9,0-6.7,2.8-6.7,6.7c0,4.1,2.8,6.7,6.8,6.7
50
+ c1.9,0,4-0.7,5.3-2c0.2-0.2,0.3-0.4,0.3-0.7c0-0.5-0.4-1-1-1c-0.3,0-0.5,0.1-0.7,0.3c-0.9,0.9-2.5,1.4-3.9,1.4
51
+ c-2.5,0-4.4-1.5-4.7-3.8L225.1,23.1z M215.1,21.3c0.4-2.5,2.3-3.8,4.5-3.8c2.5,0,4.2,1.3,4.3,3.8H215.1z"/>
52
+ <path class="st5" d="M153.3,15.6c-1.8,0-3.9,0.8-4.8,2.5l0-6.6c0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.1,0.5-1.1,1.1v16.3
53
+ c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1l0-1.4c1,1.7,2.9,2.4,4.8,2.4c3.7,0,6.6-2.4,6.6-6.6C159.9,17.9,157,15.6,153.3,15.6z
54
+ M153.2,26.9c-2.5,0-4.5-1.9-4.5-4.7c0-2.8,2-4.7,4.5-4.7c2.5,0,4.5,1.6,4.5,4.7C157.7,25.2,155.7,26.9,153.2,26.9z"/>
55
+ <path class="st5" d="M194.4,15.6c-1.9,0-3.8,0.8-4.8,2.4l0-1.4c0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.1,0.5-1.1,1.1c0,0,0,16.5,0,17.1
56
+ c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1s0-7.4,0-7.4c0.9,1.7,3,2.5,4.8,2.5c3.7,0,6.5-2.3,6.5-6.7
57
+ C200.9,18,198.1,15.6,194.4,15.6z M194.3,26.9c-2.5,0-4.5-1.9-4.5-4.7c0-2.8,2-4.7,4.5-4.7c2.5,0,4.5,1.7,4.5,4.6
58
+ C198.8,25.3,196.8,26.9,194.3,26.9z"/>
59
+ <path class="st5" d="M185.1,16.1c-0.7-0.3-1.4-0.5-2.3-0.5c-1.6,0-3.2,0.6-4,2v-0.9c0-0.6-0.5-1-1-1c-0.6,0-1,0.5-1,1
60
+ c0,0,0,10.6,0,11.2c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1c0-0.6,0-6.3,0-6.3c0-2.4,1.4-3.8,3.8-3.8c0.6,0,1.1,0.1,1.6,0.3
61
+ c0.1,0.1,0.3,0.1,0.4,0.1c0.6,0,1-0.5,1-1C185.7,16.6,185.4,16.3,185.1,16.1z"/>
62
+ <path class="st5" d="M211.7,16.1c-0.7-0.3-1.4-0.5-2.3-0.5c-1.6,0-3.2,0.6-4,2v-0.9c0-0.6-0.5-1-1-1c-0.6,0-1,0.5-1,1
63
+ c0,0,0,10.6,0,11.2c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1c0-0.6,0-6.3,0-6.3c0-2.4,1.4-3.8,3.8-3.8c0.6,0,1.1,0.1,1.6,0.3
64
+ c0.1,0.1,0.3,0.1,0.4,0.1c0.6,0,1-0.5,1-1C212.3,16.6,212,16.3,211.7,16.1z"/>
65
+ <path class="st5" d="M233.2,21.1c-1.6-0.2-3.2-0.5-3.2-1.8c0-1.4,1.4-2.1,3.2-2.1c0.8,0,2.2,0.2,2.9,0.5l0.6,0.3l0,0
66
+ c0.1,0.1,0.3,0.1,0.4,0.1c0.5,0,1-0.4,1-1c0-0.4-0.3-0.8-0.6-0.9c-0.2-0.1-0.4-0.2-0.6-0.2c-1.2-0.4-2.5-0.6-3.6-0.6
67
+ c-2.5,0-5.3,1.1-5.3,3.9c0,2.7,2.7,3.3,5.2,3.7c2,0.2,3.6,0.6,3.6,2.1c-0.1,1.7-2.1,2-3.4,2c-1.2,0-2.4-0.3-3.4-0.8l0,0
68
+ c-0.1-0.1-0.3-0.1-0.5-0.1c-0.6,0-1,0.5-1,1c0,0.4,0.2,0.8,0.6,0.9l0,0c0,0,0,0,0,0c0,0,0,0,0,0c1.3,0.6,2.6,0.9,4.2,0.9
69
+ c2.9,0,5.4-1.2,5.5-3.9C238.8,21.9,235.6,21.5,233.2,21.1z"/>
70
+ <path class="st5" d="M245.8,21.1c-1.6-0.2-3.2-0.5-3.2-1.8c0-1.4,1.4-2.1,3.2-2.1c0.8,0,2.2,0.2,2.9,0.5l0.6,0.3l0,0
71
+ c0.1,0.1,0.3,0.1,0.4,0.1c0.5,0,1-0.4,1-1c0-0.4-0.3-0.8-0.6-0.9c-0.2-0.1-0.4-0.2-0.6-0.2c-1.2-0.4-2.5-0.6-3.6-0.6
72
+ c-2.5,0-5.3,1.1-5.3,3.9c0,2.7,2.7,3.3,5.2,3.7c2,0.2,3.6,0.6,3.6,2.1c-0.1,1.7-2.1,2-3.4,2c-1.2,0-2.4-0.3-3.4-0.8l0,0
73
+ c-0.1-0.1-0.3-0.1-0.5-0.1c-0.6,0-1,0.5-1,1c0,0.4,0.2,0.8,0.6,0.9l0,0c0,0,0,0,0,0c0,0,0,0,0,0c1.3,0.6,2.6,0.9,4.2,0.9
74
+ c2.9,0,5.4-1.2,5.5-3.9C251.4,21.9,248.2,21.5,245.8,21.1z"/>
75
+ </g>
76
+ </svg>
assets/images/ninja-forms.png ADDED
Binary file
assets/images/omteam.jpg ADDED
Binary file
assets/images/trustpulse-admin-icon.svg ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 151 169" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><g id="mark" transform="matrix(0.461143,0,0,0.461143,-106.676,-1411.44)"><g transform="matrix(2.16852,0,0,2.16852,230.412,3060.73)"> <path d="M103.188,26.561C96.662,24.799 90.29,22.455 84.167,19.45C78.972,16.901 73.961,13.997 69.051,10.94C68.956,10.999 68.861,11.058 68.765,11.117C55.841,19.137 42.1,25.615 26.835,28.481C21.327,29.515 15.756,30.164 10.174,30.64L9.996,30.655C8.621,61.384 10.671,93.057 26.99,119.407C36.937,135.468 52.327,147.495 68.626,157.492L69.051,157.751C75.721,153.675 82.272,149.328 88.368,144.473L102.206,144.473C92.398,153.704 80.957,161.44 69.326,168.346C68.781,167.973 68.776,168.346 68.776,168.346C54.105,159.635 39.822,150.006 28.706,137.221C21.155,128.537 15.176,118.558 10.867,107.757C0.039,80.614 -0.647,50.397 1.241,22.026C13.241,21.311 25.428,20.158 36.915,16.454C48.244,12.801 58.678,6.735 68.756,0.192L69.051,0C69.247,0.128 69.443,0.255 69.64,0.383C82.351,8.617 95.916,15.884 110.854,18.998C111.709,19.176 112.566,19.344 113.425,19.502L103.188,26.561ZM100.152,132.347L81.156,132.347C77.981,132.212 77.767,130.604 77.7,129.035C77.621,127.169 78.831,125.529 81.156,125.43L97.514,125.43L102.685,106.579C102.685,106.579 103.683,104.245 105.689,104.052C107.293,103.897 108.672,104.574 109.337,106.514L117.15,132.951L121.936,117.91C121.936,117.91 123.484,115.168 125.942,115.574C127.282,115.917 127.336,115.979 128.113,117.047L133.676,125.43L146.996,125.43C147.012,125.432 149.468,125.764 150.205,127.599C151.058,129.721 149.708,132.232 146.996,132.347L131.82,132.347C130.17,132.279 129.699,131.85 128.939,130.801L126.339,126.884L120.324,145.791C120.324,145.791 119.264,148.043 117.286,148.191C115.705,148.309 114.365,147.633 113.711,145.722L106.144,120.117L103.487,129.804C103.487,129.804 102.28,132.254 100.152,132.347ZM137.379,31.586C138.051,47.952 137.548,64.343 134.744,80.522C133.466,87.9 130.68,98.081 128.24,105.175L119.46,102.321C126.914,82.657 128.717,61.266 128.394,40.33L137.379,31.586Z" style="fill:white;fill-rule:nonzero;"/></g><g transform="matrix(0.746317,0,0,0.746317,244.486,3011.77)"> <path d="M171.699,279.729C173.221,277.994 173.616,276.855 175.885,273.555C188.97,254.516 227.729,203.188 276.979,163.708C298.41,146.527 321.573,130.908 342.063,120.67C376.211,103.607 387.207,101.527 403.066,97.832C406.078,97.131 416.986,95.184 418.796,99.482C420.542,103.631 413.738,108.003 411.185,110.009C408.315,112.264 342.682,161.344 287.465,234.232C239.418,297.651 207.976,380.862 207.976,380.862C207.01,382.71 196.083,402.237 181.423,403.188C167.874,404.069 150.473,386.445 150.473,386.445C147.128,383.324 130.815,363.964 117.241,340.019C99.929,309.489 85.022,273.299 85.022,273.299C85.022,273.299 69.547,242.857 98.721,226.115C127.486,209.606 140.299,226.367 146.542,236.262C151.877,244.719 162.626,265.262 167.821,275.31C169.631,278.81 170.801,280.751 171.699,279.729Z" style="fill:white;fill-rule:nonzero;"/></g></g></svg>
assets/images/video-background.png ADDED
Binary file
assets/images/video-cta-button.png ADDED
Binary file
assets/images/woocommerce_logo.png ADDED
Binary file
assets/images/wpforms.png ADDED
Binary file
assets/js/pointer.js CHANGED
@@ -1,23 +1,29 @@
1
- jQuery(document).ready( function($) {
2
- omapi_open_pointer();
 
3
 
4
- // Trigger a pointer close when clicking on the link in the pointer
5
- $('#omPointerButton, .om-pointer-close-link').click(function () {
6
- omapiPointer;
7
- $(omapiPointer.target).pointer('close');
8
- });
9
 
10
- function omapi_open_pointer() {
11
- pointer = omapiPointer;
12
- options = $.extend(pointer.options, {
13
- close: function() {
14
- $.post( ajaxurl, {
15
- pointer: pointer.id,
16
- action: 'dismiss-wp-pointer'
17
- });
18
- }
19
- });
20
 
21
- $(pointer.target).pointer( options ).pointer('open');
22
- }
23
- });
 
 
 
 
 
 
 
 
 
 
1
+ window.omapiPointer = window.omapiPointer || {};
2
+ ( function( window, document, $, app, undefined ) {
3
+ 'use strict';
4
 
5
+ app.close = () => $(app.target).pointer('close');
 
 
 
 
6
 
7
+ app.open = () => {
8
+ const options = $.extend(app.options, {
9
+ close: () => {
10
+ $.post( ajaxurl, {
11
+ pointer: app.id,
12
+ action: 'dismiss-wp-pointer'
13
+ });
14
+ }
15
+ });
 
16
 
17
+ $(app.target).pointer( options ).pointer('open');
18
+ };
19
+
20
+ app.init = () => {
21
+ // Trigger a pointer close when clicking on the link in the pointer
22
+ $('#omPointerButton, .om-pointer-close-link').click(app.close);
23
+
24
+ app.open();
25
+ };
26
+
27
+ $( app.init );
28
+
29
+ } )( window, document, jQuery, window.omapiPointer );
assets/js/select2.min.js CHANGED
File without changes
assets/js/settings.js CHANGED
@@ -1,7 +1,7 @@
1
  /* ==========================================================
2
- * edit.js
3
  * ==========================================================
4
- * Copyright 2018 Awesome Motive.
5
  * https://awesomemotive.com
6
  * ========================================================== */
7
  jQuery(document).ready(function ($) {
@@ -31,54 +31,34 @@ jQuery(document).ready(function ($) {
31
  omapiFindTooltips();
32
 
33
  // Add "Connect to OptinMonster" functionality
34
- omapiHandleApiKeyConnect();
 
 
 
35
 
36
  /**
37
  * Add the listeners necessary for the connect to OptinMonster button
38
  */
39
- function omapiHandleApiKeyConnect() {
40
- function updateForm(val, $btn) {
41
- var field = document.getElementById('omapi-field-apikey');
42
- field.value = val;
43
-
44
- // Start spinner.
45
- $('.om-api-key-spinner').remove();
46
- $btn.after('<div class="om-api-key-spinner spinner is-active" style="float: none;margin-top: 13px;"></div>');
47
-
48
- HTMLFormElement.prototype.submit.call(field.form)
49
- }
50
-
51
- $('#omapiAuthorizeButton').click(function (e) {
52
- e.preventDefault();
53
- var w = window.open(OMAPI.app_url + 'wordpress/connect/', '_blank', 'location=no,width=500,height=730,scrollbars=0');
54
- w.focus();
55
- });
56
-
57
- window.addEventListener('message', function(msg) {
58
- if (msg.origin.replace(/\/$/, '') !== OMAPI.app_url.replace(/\/$/, '')) {
59
- return;
60
- }
61
-
62
- if (!msg.data || 'string' !== typeof msg.data) {
63
- console.error('Messages from "' + OMAPI.app_url + '" must contain an api key string.');
64
- return;
65
- }
66
-
67
- updateForm(msg.data, $('#omapiAuthorizeButton'));
68
- });
69
 
70
  // Also initialize the "Click Here to enter an API Key" link
71
  $('#omapiShowApiKey').click(function (e) {
72
  e.preventDefault();
73
  $('#omapi-form-api .omapi-hidden').removeClass('omapi-hidden');
74
  $('#omapi-field-apikey').focus().select();
 
75
 
 
 
 
 
 
76
  });
77
 
78
  // Add the listener for disconnecting the API Key.
79
  $('#omapiDisconnectButton').click(function (e) {
80
  e.preventDefault();
81
- updateForm('', $(this));
82
  });
83
  }
84
 
@@ -102,7 +82,7 @@ jQuery(document).ready(function ($) {
102
  */
103
  function omapiResetSettings() {
104
  $(document).on('click', 'input[name=reset]', function (e) {
105
- return confirm(omapi.confirm);
106
  });
107
  }
108
 
@@ -160,7 +140,7 @@ jQuery(document).ready(function ($) {
160
  initSelection: function (el, cb) {
161
  var ids = $(el).val();
162
  ids = ids.split(',');
163
- items = data.filter(function(d) {
164
  return ids.indexOf(d.id) > -1;
165
  });
166
  cb(items);
@@ -175,44 +155,38 @@ jQuery(document).ready(function ($) {
175
  * @since 1.1.5
176
  */
177
  function omapiBuildSupportPDF() {
178
- var selector = $('#js--omapi-support-pdf');
179
-
180
- selector.click(function (e) {
181
- e.preventDefault();
182
 
 
183
  var doc = new jsPDF('p', 'mm', 'letter');
184
 
185
- var supportData = omapi.supportData;
186
- var serverData = supportData.server;
187
- var optinData = supportData.optins;
188
-
189
  // Doc Title
190
  doc.text(10, 10, 'OptinMonster Support Assistance');
191
 
192
  // Server Info
193
- i = 10;
194
- $.each(serverData, function (key, value) {
195
  i += 10;
196
  doc.text(10, i, key + ' : ' + value);
197
  });
198
 
199
  // Optin Info
200
- $.each(optinData, function (key, value) {
201
 
202
- //Move down 10mm
203
- i = 10;
204
  // Add a new page
205
  doc.addPage();
206
- //Title as slug
207
  doc.text(10, 10, key);
208
  $.each(value, function (key, value) {
209
 
210
  // Keep from outputing ugly Object text
211
- output = ($.isPlainObject(value) ? '' : value);
212
  // new line
213
  i += 10;
214
  doc.text(10, i, key + ' : ' + output);
215
- //Output any object data from the value
216
  if ($.isPlainObject(value)) {
217
  $.each(value, function (key, value) {
218
  i += 10;
@@ -225,6 +199,24 @@ jQuery(document).ready(function ($) {
225
 
226
  // Save the PDF
227
  doc.save('OMSupportHelp.pdf');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
 
229
  });
230
  }
@@ -298,4 +290,88 @@ jQuery(document).ready(function ($) {
298
  $('[data-toggle="tooltip"]').tooltip()
299
  }
300
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  });
1
  /* ==========================================================
2
+ * settings.js
3
  * ==========================================================
4
+ * Copyright 2020 Awesome Motive.
5
  * https://awesomemotive.com
6
  * ========================================================== */
7
  jQuery(document).ready(function ($) {
31
  omapiFindTooltips();
32
 
33
  // Add "Connect to OptinMonster" functionality
34
+ omapiHandleApiKeyButtons();
35
+
36
+ omapiInitInstallButtons();
37
+ omapiRemoveQueryVars();
38
 
39
  /**
40
  * Add the listeners necessary for the connect to OptinMonster button
41
  */
42
+ function omapiHandleApiKeyButtons() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  // Also initialize the "Click Here to enter an API Key" link
45
  $('#omapiShowApiKey').click(function (e) {
46
  e.preventDefault();
47
  $('#omapi-form-api .omapi-hidden').removeClass('omapi-hidden');
48
  $('#omapi-field-apikey').focus().select();
49
+ });
50
 
51
+ $('#omapiShowApiKeys').click(function (e) {
52
+ e.preventDefault();
53
+ $('#omapi-form-woocommerce .omapi-hidden').removeClass('omapi-hidden');
54
+ $('.manually-connect-wc').hide();
55
+ $('#omapi-field-consumer_key').focus().select();
56
  });
57
 
58
  // Add the listener for disconnecting the API Key.
59
  $('#omapiDisconnectButton').click(function (e) {
60
  e.preventDefault();
61
+ OMAPI.updateForm('', $(this));
62
  });
63
  }
64
 
82
  */
83
  function omapiResetSettings() {
84
  $(document).on('click', 'input[name=reset]', function (e) {
85
+ return confirm(OMAPI.confirm);
86
  });
87
  }
88
 
140
  initSelection: function (el, cb) {
141
  var ids = $(el).val();
142
  ids = ids.split(',');
143
+ var items = data.filter(function(d) {
144
  return ids.indexOf(d.id) > -1;
145
  });
146
  cb(items);
155
  * @since 1.1.5
156
  */
157
  function omapiBuildSupportPDF() {
158
+ var $selector = $('#js--omapi-support-pdf');
 
 
 
159
 
160
+ const generateDoc = data => {
161
  var doc = new jsPDF('p', 'mm', 'letter');
162
 
 
 
 
 
163
  // Doc Title
164
  doc.text(10, 10, 'OptinMonster Support Assistance');
165
 
166
  // Server Info
167
+ var i = 10;
168
+ $.each(data.server, function (key, value) {
169
  i += 10;
170
  doc.text(10, i, key + ' : ' + value);
171
  });
172
 
173
  // Optin Info
174
+ $.each(data.campaigns, function (key, value) {
175
 
176
+ // Move down 10mm
177
+ var i = 10;
178
  // Add a new page
179
  doc.addPage();
180
+ // Title as slug
181
  doc.text(10, 10, key);
182
  $.each(value, function (key, value) {
183
 
184
  // Keep from outputing ugly Object text
185
+ var output = ( $.isPlainObject(value) ? '' : value );
186
  // new line
187
  i += 10;
188
  doc.text(10, i, key + ' : ' + output);
189
+ // Output any object data from the value
190
  if ($.isPlainObject(value)) {
191
  $.each(value, function (key, value) {
192
  i += 10;
199
 
200
  // Save the PDF
201
  doc.save('OMSupportHelp.pdf');
202
+ }
203
+
204
+ $selector.click(function (e) {
205
+ e.preventDefault();
206
+
207
+ // Start spinner.
208
+ $('.om-api-key-spinner').remove();
209
+ $selector.after('<div class="om-api-key-spinner spinner is-active" style="float: none;margin-top:7px;"></div>');
210
+
211
+ $.ajax( {
212
+ url: OMAPI.root + 'omapp/v1/support?format=pdf',
213
+ beforeSend: xhr => xhr.setRequestHeader( 'X-WP-Nonce', OMAPI.nonce ),
214
+ dataType: 'json',
215
+ data: { format : 'pdf' },
216
+ success: generateDoc,
217
+ } )
218
+ .done( () => $('.om-api-key-spinner').remove() )
219
+ .fail( ( jqXHR, textStatus ) => console.error({ jqXHR, textStatus }) );
220
 
221
  });
222
  }
290
  $('[data-toggle="tooltip"]').tooltip()
291
  }
292
 
293
+ function omapiInitInstallButtons() {
294
+ $('.install-plugin-form').submit((e) => {
295
+ e.preventDefault();
296
+ let fields = $(e.currentTarget).serializeArray();
297
+ let nonce = fields.find((field) => 'nonce' === field.name).value;
298
+ let plugin = fields.find((field) => 'plugin' === field.name).value;
299
+ let pluginClassName = plugin.replace('.', '').replace('/', '');
300
+ let installAction = fields.find((field) => 'action' === field.name).value;
301
+ let url = fields.find((field) => 'url' === field.name).value;
302
+ let el = $(`.omapi-plugin-recommendation--${pluginClassName}`);
303
+
304
+ if (! el.length) {
305
+ el = $('html')
306
+ }
307
+
308
+ $('.button-install', el).html('Installing...');
309
+ $('.button-activate', el).html('Activating...');
310
+ $('#om-plugin-alerts').hide();
311
+
312
+ $.post(ajaxurl, {
313
+ action: 'om_plugin_install',
314
+ 'optin-monster-ajax-route': true,
315
+ nonce,
316
+ plugin,
317
+ installAction,
318
+ url
319
+ }, function (data) {
320
+ if (data.success) {
321
+ window.location.reload();
322
+ } else {
323
+ $('.button-install', el).html('Install Plugin');
324
+ $('.button-activate', el).html('Activate Plugin');
325
+
326
+ $('#om-plugin-alerts').show().html($( '<p/>' ).html( data.data || 'Something went wrong!' ));
327
+ }
328
+ });
329
+ })
330
+ }
331
+
332
+ /**
333
+ * Helper to remove the OM query vars.
334
+ *
335
+ * @since 1.9.9
336
+ *
337
+ * @return {void}
338
+ */
339
+ function omapiRemoveQueryVars() {
340
+ if ( window.history.replaceState && window.location.search ) {
341
+ function removeParam(parameter, url) {
342
+ var urlparts = url.split('?');
343
+ if ( urlparts.length < 2) {
344
+ return url;
345
+ }
346
+
347
+ var prefix = encodeURIComponent(parameter) + '=';
348
+ var pars = urlparts[1].split(/[&;]/g);
349
+ for ( var i = pars.length; i-- > 0;) {
350
+ if (pars[i].lastIndexOf(prefix, 0) !== -1) {
351
+ pars.splice(i, 1);
352
+ }
353
+ }
354
+
355
+ return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
356
+ }
357
+
358
+ const toRemove = [
359
+ 'optin_monster_api_action_done',
360
+ 'optin_monster_api_action_type',
361
+ 'optin_monster_api_action_id',
362
+ ];
363
+ let url = document.location.href;
364
+
365
+ window.location.search.split('&').forEach( bit => {
366
+ toRemove.forEach( key => {
367
+ if ( 0 === bit.indexOf( key ) ) {
368
+ url = removeParam( bit.split('=')[0], url );
369
+ }
370
+ } );
371
+ });
372
+
373
+ window.history.replaceState( null, null, url );
374
+ }
375
+ }
376
+
377
  });
assets/js/tooltip.min.js CHANGED
File without changes
optin-monster-wp-api.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: OptinMonster is the best WordPress popup plugin that helps you grow your email list and sales with email popups, exit intent popups, floating bars and more!
6
  * Author: OptinMonster Team
7
  * Author URI: https://optinmonster.com
8
- * Version: 1.9.9
9
  * Text Domain: optin-monster-api
10
  * Domain Path: languages
11
  * WC requires at least: 3.2.0
@@ -62,7 +62,7 @@ class OMAPI {
62
  *
63
  * @var string
64
  */
65
- public $version = '1.9.9';
66
 
67
  /**
68
  * The name of the plugin.
@@ -133,6 +133,13 @@ class OMAPI {
133
  */
134
  public $woocommerce;
135
 
 
 
 
 
 
 
 
136
  /**
137
  * OMAPI_Actions object (loaded only in the admin)
138
  *
@@ -247,7 +254,6 @@ class OMAPI {
247
  * @since 1.0.0
248
  */
249
  public function load_plugin_textdomain() {
250
-
251
  $domain = 'optin-monster-api';
252
  $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
253
 
@@ -280,10 +286,17 @@ class OMAPI {
280
  define( 'OPTINMONSTER_APP_URL', 'https://app.optinmonster.com' );
281
  }
282
 
 
 
 
 
283
  if ( ! defined( 'OPTINMONSTER_CDN_URL' ) ) {
284
- define( 'OPTINMONSTER_CDN_URL', is_admin()
 
 
285
  ? 'https://a.omwpapi.com'
286
- : 'https://a.omappapi.com' );
 
287
  }
288
 
289
  if ( ! defined( 'OPTINMONSTER_APIJS_URL' ) ) {
@@ -317,7 +330,7 @@ class OMAPI {
317
  // Check/set the plugin options.
318
  $option = get_option( 'optin_monster_api' );
319
  if ( empty( $option ) ) {
320
- $option = OMAPI::default_options();
321
  update_option( 'optin_monster_api', $option );
322
  }
323
 
@@ -355,11 +368,13 @@ class OMAPI {
355
 
356
  // Register global components.
357
  $this->ajax = new OMAPI_Ajax();
 
358
  $this->type = new OMAPI_Type();
359
  $this->output = new OMAPI_Output();
360
  $this->shortcode = new OMAPI_Shortcode();
361
  $this->woocommerce = new OMAPI_WooCommerce();
362
- $this->url = plugin_dir_url( __FILE__ );
 
363
 
364
  // Fire a hook to say that the global classes are loaded.
365
  do_action( 'optin_monster_api_global_loaded' );
@@ -428,9 +443,7 @@ class OMAPI {
428
  * @return array|bool Array of optin data or false if none found.
429
  */
430
  public function get_optin( $id ) {
431
-
432
- return get_post( $id );
433
-
434
  }
435
 
436
  /**
@@ -442,9 +455,49 @@ class OMAPI {
442
  * @return array|bool Array of optin data or false if none found.
443
  */
444
  public function get_optin_by_slug( $slug ) {
 
 
445
 
446
- return get_page_by_path( $slug, OBJECT, 'omapi' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
447
 
 
 
 
 
 
 
 
448
  }
449
 
450
  /**
@@ -474,6 +527,10 @@ class OMAPI {
474
  return false;
475
  }
476
 
 
 
 
 
477
  // Return the optin data.
478
  return $optins;
479
  }
@@ -490,7 +547,7 @@ class OMAPI {
490
  $option = get_option( 'optin_monster_api' );
491
  if ( ! empty( $key ) && ! empty( $subkey ) ) {
492
  return isset( $option[ $key ][ $subkey ] ) ? $option[ $key ][ $subkey ] : $default;
493
- } else if ( ! empty( $key ) ) {
494
  return isset( $option[ $key ] ) ? $option[ $key ] : $default;
495
  } else {
496
  return $option;
@@ -548,10 +605,11 @@ class OMAPI {
548
  }
549
 
550
  // Return the API credentials.
551
- return apply_filters( 'optin_monster_api_creds',
 
552
  array(
553
- 'key' => $key,
554
- 'user' => $user,
555
  'apikey' => $apikey,
556
  )
557
  );
@@ -579,8 +637,8 @@ class OMAPI {
579
  */
580
  public function can_migrate() {
581
  if ( false == ( $old_optins = get_transient( '_om_old_optins' ) ) ) {
582
- $args = array(
583
- 'post_type' => 'optin',
584
  'posts_per_page' => -1,
585
  );
586
  $old_optins = get_posts( $args );
@@ -654,7 +712,7 @@ class OMAPI {
654
  * @return bool
655
  */
656
  public static function is_mailpoet_active() {
657
- return class_exists( 'WYSIJA_object' ) || class_exists( 'MailPoet\\API\\API' );
658
  }
659
 
660
  /**
@@ -689,8 +747,8 @@ class OMAPI {
689
  *
690
  * @since 1.9.0
691
  *
692
- * @param string $file The view file.
693
- * @param mixed $data Arbitrary data to be made available to the view file.
694
  *
695
  * @return void
696
  */
@@ -703,8 +761,8 @@ class OMAPI {
703
  *
704
  * @since 1.9.0
705
  *
706
- * @param string $file The view file.
707
- * @param mixed $data Arbitrary data to be made available to the view file.
708
  *
709
  * @return void
710
  */
@@ -731,6 +789,7 @@ class OMAPI {
731
  'is_invalid' => false,
732
  'installed' => time(),
733
  'connected' => '',
 
734
  'welcome' => array(
735
  'status' => 'none',
736
  ),
@@ -761,6 +820,30 @@ class OMAPI {
761
 
762
  }
763
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
764
  /**
765
  * Hides unrelated admin notices.
766
  *
@@ -806,6 +889,63 @@ class OMAPI {
806
  }
807
  }
808
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
809
  /**
810
  * Returns the singleton instance of the class.
811
  *
@@ -822,7 +962,6 @@ class OMAPI {
822
  return self::$instance;
823
 
824
  }
825
-
826
  }
827
 
828
  register_activation_hook( __FILE__, 'optin_monster_api_activation_hook' );
@@ -838,9 +977,9 @@ register_activation_hook( __FILE__, 'optin_monster_api_activation_hook' );
838
  function optin_monster_api_activation_hook( $network_wide ) {
839
 
840
  global $wp_version;
841
- if ( version_compare( $wp_version, '3.5.1', '<' ) && ! defined( 'OPTINMONSTER_FORCE_ACTIVATION' ) ) {
842
  deactivate_plugins( plugin_basename( __FILE__ ) );
843
- wp_die( sprintf( __( 'Sorry, but your version of WordPress does not meet OptinMonster\'s required version of <strong>3.5.1</strong> to run properly. The plugin has been deactivated. <a href="%s">Click here to return to the Dashboard</a>.', 'optin-monster-api' ), get_admin_url() ) );
844
  }
845
 
846
  $instance = OMAPI::get_instance();
@@ -863,7 +1002,7 @@ function optin_monster_api_activation_hook( $network_wide ) {
863
 
864
  // If we don't have api credentials, set up the redirect on plugin activation.
865
  if ( ! $instance->get_api_credentials() ) {
866
- $options = $instance->get_option();
867
  $options['welcome']['status'] = 'none';
868
  update_option( 'optin_monster_api', $options );
869
  }
@@ -940,8 +1079,8 @@ if ( ! function_exists( 'optin_monster_tag' ) ) {
940
  *
941
  * @since 1.0.0
942
  *
943
- * @param int $string The post name of the optin to load.
944
- * @param bool $return Flag to echo or return the optin HTML.
945
  */
946
  function optin_monster_tag( $id, $return = false ) {
947
 
5
  * Description: OptinMonster is the best WordPress popup plugin that helps you grow your email list and sales with email popups, exit intent popups, floating bars and more!
6
  * Author: OptinMonster Team
7
  * Author URI: https://optinmonster.com
8
+ * Version: 1.9.10
9
  * Text Domain: optin-monster-api
10
  * Domain Path: languages
11
  * WC requires at least: 3.2.0
62
  *
63
  * @var string
64
  */
65
+ public $version = '1.9.10';
66
 
67
  /**
68
  * The name of the plugin.
133
  */
134
  public $woocommerce;
135
 
136
+ /**
137
+ * OMAPI_MailPoet object.
138
+ *
139
+ * @var OMAPI_MailPoet;
140
+ */
141
+ public $mailpoet;
142
+
143
  /**
144
  * OMAPI_Actions object (loaded only in the admin)
145
  *
254
  * @since 1.0.0
255
  */
256
  public function load_plugin_textdomain() {
 
257
  $domain = 'optin-monster-api';
258
  $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
259
 
286
  define( 'OPTINMONSTER_APP_URL', 'https://app.optinmonster.com' );
287
  }
288
 
289
+ if ( ! defined( 'OPTINMONSTER_API_URL' ) ) {
290
+ define( 'OPTINMONSTER_API_URL', 'https://api.omwpapi.com' );
291
+ }
292
+
293
  if ( ! defined( 'OPTINMONSTER_CDN_URL' ) ) {
294
+ define(
295
+ 'OPTINMONSTER_CDN_URL',
296
+ is_admin()
297
  ? 'https://a.omwpapi.com'
298
+ : 'https://a.omappapi.com'
299
+ );
300
  }
301
 
302
  if ( ! defined( 'OPTINMONSTER_APIJS_URL' ) ) {
330
  // Check/set the plugin options.
331
  $option = get_option( 'optin_monster_api' );
332
  if ( empty( $option ) ) {
333
+ $option = self::default_options();
334
  update_option( 'optin_monster_api', $option );
335
  }
336
 
368
 
369
  // Register global components.
370
  $this->ajax = new OMAPI_Ajax();
371
+ $this->blocks = new OMAPI_Blocks();
372
  $this->type = new OMAPI_Type();
373
  $this->output = new OMAPI_Output();
374
  $this->shortcode = new OMAPI_Shortcode();
375
  $this->woocommerce = new OMAPI_WooCommerce();
376
+ $this->mailpoet = new OMAPI_MailPoet();
377
+ $this->url = plugin_dir_url( __FILE__ );
378
 
379
  // Fire a hook to say that the global classes are loaded.
380
  do_action( 'optin_monster_api_global_loaded' );
443
  * @return array|bool Array of optin data or false if none found.
444
  */
445
  public function get_optin( $id ) {
446
+ return get_post( absint( $id ) );
 
 
447
  }
448
 
449
  /**
455
  * @return array|bool Array of optin data or false if none found.
456
  */
457
  public function get_optin_by_slug( $slug ) {
458
+ return get_page_by_path( sanitize_text_field( $slug ), OBJECT, 'omapi' );
459
+ }
460
 
461
+ /**
462
+ * Get all data for given campaign (optin).
463
+ *
464
+ * @since 1.9.10
465
+ *
466
+ * @param WP_Post $campaign The campaign post object.
467
+ *
468
+ * @return array
469
+ */
470
+ public function collect_campaign_data( $campaign ) {
471
+ $meta = array();
472
+ $keys = get_post_meta( $campaign->ID );
473
+
474
+ if ( ! empty( $keys ) ) {
475
+ foreach ( $keys as $key => $x ) {
476
+ $val = get_post_meta( $campaign->ID, $key, true );
477
+ switch ( $key ) {
478
+ case '_omapi_never':
479
+ case '_omapi_only':
480
+ $val = OMAPI_Utils::unique_array( $val );
481
+ break;
482
+ case '_omapi_taxonomies':
483
+ $val = ! empty( $val )
484
+ ? array_map( array( 'OMAPI_Utils', 'unique_array' ), $val )
485
+ : array();
486
+ break;
487
+ }
488
+ $meta[ $key ] = $val;
489
+ }
490
+ }
491
+
492
+ $type = get_post_meta( $campaign->ID, '_omapi_type', true );
493
 
494
+ return array(
495
+ 'id' => $campaign->post_name,
496
+ 'post' => $campaign,
497
+ 'type' => $type,
498
+ 'inline' => OMAPI_Utils::is_inline_type( $type ),
499
+ 'post_meta' => $meta,
500
+ );
501
  }
502
 
503
  /**
527
  return false;
528
  }
529
 
530
+ foreach ( $optins as $optin ) {
531
+ $optin->campaign_type = get_post_meta( $optin->ID, '_omapi_type', true );
532
+ }
533
+
534
  // Return the optin data.
535
  return $optins;
536
  }
547
  $option = get_option( 'optin_monster_api' );
548
  if ( ! empty( $key ) && ! empty( $subkey ) ) {
549
  return isset( $option[ $key ][ $subkey ] ) ? $option[ $key ][ $subkey ] : $default;
550
+ } elseif ( ! empty( $key ) ) {
551
  return isset( $option[ $key ] ) ? $option[ $key ] : $default;
552
  } else {
553
  return $option;
605
  }
606
 
607
  // Return the API credentials.
608
+ return apply_filters(
609
+ 'optin_monster_api_creds',
610
  array(
611
+ 'key' => $key,
612
+ 'user' => $user,
613
  'apikey' => $apikey,
614
  )
615
  );
637
  */
638
  public function can_migrate() {
639
  if ( false == ( $old_optins = get_transient( '_om_old_optins' ) ) ) {
640
+ $args = array(
641
+ 'post_type' => 'optin',
642
  'posts_per_page' => -1,
643
  );
644
  $old_optins = get_posts( $args );
712
  * @return bool
713
  */
714
  public static function is_mailpoet_active() {
715
+ return OMAPI_MailPoet::is_active();
716
  }
717
 
718
  /**
747
  *
748
  * @since 1.9.0
749
  *
750
+ * @param string $file The view file.
751
+ * @param mixed $data Arbitrary data to be made available to the view file.
752
  *
753
  * @return void
754
  */
761
  *
762
  * @since 1.9.0
763
  *
764
+ * @param string $file The view file.
765
+ * @param mixed $data Arbitrary data to be made available to the view file.
766
  *
767
  * @return void
768
  */
789
  'is_invalid' => false,
790
  'installed' => time(),
791
  'connected' => '',
792
+ 'beta' => false,
793
  'welcome' => array(
794
  'status' => 'none',
795
  ),
820
 
821
  }
822
 
823
+ /**
824
+ * Gets all site IDs associated with this site
825
+ *
826
+ * @since 1.9.10
827
+ *
828
+ * @return array
829
+ */
830
+ public function get_site_ids() {
831
+ $option = $this->get_option();
832
+ return ! empty( $option['siteIds'] ) ? (array) $option['siteIds'] : array();
833
+ }
834
+
835
+ /**
836
+ * Gets the site ID associated with this site
837
+ *
838
+ * @since 1.9.10
839
+ *
840
+ * @return string
841
+ */
842
+ public function get_site_id() {
843
+ $option = $this->get_option();
844
+ return ! empty( $option['siteId'] ) ? (string) $option['siteId'] : '';
845
+ }
846
+
847
  /**
848
  * Hides unrelated admin notices.
849
  *
889
  }
890
  }
891
 
892
+ /**
893
+ * Get beta version.
894
+ *
895
+ * @param string $format The php date format.
896
+ *
897
+ * @return bool
898
+ */
899
+ public function beta_version( $format = 'd M Y H:i:s' ) {
900
+ $version = false;
901
+ if ( false !== strpos( $this->version, 'beta' ) ) {
902
+ $file = plugin_dir_path( __FILE__ ) . '.betaversion';
903
+ if ( file_exists( $file ) ) {
904
+ ob_start();
905
+ include plugin_dir_path( __FILE__ ) . '.betaversion';
906
+ $timestamp = ob_get_clean();
907
+
908
+ if ( ! empty( $timestamp ) ) {
909
+ $version = date( $format, (int) $timestamp );
910
+ }
911
+ }
912
+ }
913
+
914
+ return $version;
915
+ }
916
+
917
+ /**
918
+ * Get the asset version for enqueued assets.
919
+ *
920
+ * @since 1.9.10
921
+ *
922
+ * @return mixed
923
+ */
924
+ public function asset_version() {
925
+ if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
926
+ return time();
927
+ }
928
+
929
+ if ( defined( 'OPTINMONSTER_ENV' ) && 'dev' === strtolower( OPTINMONSTER_ENV ) ) {
930
+ return time();
931
+ }
932
+
933
+ return $this->beta_enabled() && $this->beta_version( 'U' )
934
+ ? $this->beta_version( 'U' )
935
+ : $this->version;
936
+ }
937
+
938
+ /**
939
+ * Check if beta is enabled.
940
+ *
941
+ * @return bool
942
+ */
943
+ public function beta_enabled() {
944
+ $option = $this->get_option();
945
+
946
+ return apply_filters( 'optin_monster_beta_enabled', ! empty( $option['beta'] ) );
947
+ }
948
+
949
  /**
950
  * Returns the singleton instance of the class.
951
  *
962
  return self::$instance;
963
 
964
  }
 
965
  }
966
 
967
  register_activation_hook( __FILE__, 'optin_monster_api_activation_hook' );
977
  function optin_monster_api_activation_hook( $network_wide ) {
978
 
979
  global $wp_version;
980
+ if ( version_compare( $wp_version, '4.7.0', '<' ) && ! defined( 'OPTINMONSTER_FORCE_ACTIVATION' ) ) {
981
  deactivate_plugins( plugin_basename( __FILE__ ) );
982
+ wp_die( sprintf( __( 'Sorry, but your version of WordPress does not meet OptinMonster\'s required version of <strong>4.7.0</strong> to run properly. The plugin has been deactivated. <a href="%s">Click here to return to the Dashboard</a>.', 'optin-monster-api' ), get_admin_url() ) );
983
  }
984
 
985
  $instance = OMAPI::get_instance();
1002
 
1003
  // If we don't have api credentials, set up the redirect on plugin activation.
1004
  if ( ! $instance->get_api_credentials() ) {
1005
+ $options = $instance->get_option();
1006
  $options['welcome']['status'] = 'none';
1007
  update_option( 'optin_monster_api', $options );
1008
  }
1079
  *
1080
  * @since 1.0.0
1081
  *
1082
+ * @param int $string The post name of the optin to load.
1083
+ * @param bool $return Flag to echo or return the optin HTML.
1084
  */
1085
  function optin_monster_tag( $id, $return = false ) {
1086
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: marketing, popups, popup builder, newsletter, conversion, optin forms, for
4
  Requires at least: 4.7.0
5
  Tested up to: 5.4.2
6
  Requires PHP: 5.3
7
- Stable tag: 1.9.9
8
  License: GNU General Public License v2.0 or later
9
 
10
  Create popups, opt-in forms, & floating bars to get more email newsletter subscribers, leads, and increase sales conversion - #1 marketing popup plugin.
@@ -218,7 +218,7 @@ Other Powerful Popup Features:
218
 
219
  After reading this feature list, you can probably imagine why OptinMonster is the best WordPress popup form plugin in the market.
220
 
221
- <a href="https://optinmonster.com/wp/utm_source=orgplugin&utm_medium=link&utm_campaign=wpreadme" rel="friend">Give OptinMonster a try</a>.
222
 
223
  = Credits =
224
 
@@ -471,6 +471,32 @@ Syed Balkhi
471
 
472
  **Most Recent Changes:**
473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
474
  = 1.9.9 =
475
  * Fix issue where if multiple post tags were selected, popups and other campaigns would only appear on the first tag selected.
476
  * Fix campaign shortcode suggestion in admin being incorrect.
@@ -492,8 +518,4 @@ Syed Balkhi
492
  * You can now use Gravity Forms AJAX submissions and form validation with your OptinMonster campaigns.
493
  * Update admin notices to use the recommended classes
494
 
495
- = 1.9.5 =
496
- * Add support for www domains in Api.js embed code.
497
- * Improve MailPoet error outputs.
498
-
499
  **[View entire changelog](https://plugins.svn.wordpress.org/optinmonster/trunk/CHANGELOG.md)**
4
  Requires at least: 4.7.0
5
  Tested up to: 5.4.2
6
  Requires PHP: 5.3
7
+ Stable tag: 1.9.10
8
  License: GNU General Public License v2.0 or later
9
 
10
  Create popups, opt-in forms, & floating bars to get more email newsletter subscribers, leads, and increase sales conversion - #1 marketing popup plugin.
218
 
219
  After reading this feature list, you can probably imagine why OptinMonster is the best WordPress popup form plugin in the market.
220
 
221
+ <a href="https://optinmonster.com/wp/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpreadme" rel="friend">Give OptinMonster a try</a>.
222
 
223
  = Credits =
224
 
471
 
472
  **Most Recent Changes:**
473
 
474
+ = 1.9.10 =
475
+ * New Gutenberg block for embedding inline campaigns.
476
+ * Improved syncing of data between the OptinMonster app and the WordPress plugin to help with shortcode parsing, and adding/removing campaigns when going live or pausing. Will also retain previously saved Output Settings when un-pausing a campaign and refreshing.
477
+ * Improvements to a11y across the plugin's admin pages.
478
+ * Updated Constant Contact branding
479
+ * Updates to improve performance on the plugin's admin pages.
480
+ * Minified assets to improve performance on the plugin's admin pages.
481
+ * Increase timeout time for the WooCommerce auto-generate keys request to accomodate for some servers.
482
+ * Clean up admin notices when on the OptinMonster plugin's admin pages.
483
+ * New About Us page.
484
+ * Added filter for auto-enabling new campaigns (true by default).
485
+ * Added filter for changing the API enqueue location from the default footer.
486
+ * Added plugin settings menu links to plugin action links in the Plugins table.
487
+ * Improvements to the Welcome page to allow connecting account directly.
488
+ * Improvements to the account-connection process.
489
+ * Improvements to the Campaigns page.
490
+ * Improvements to the Campaigns' Output Settings pages.
491
+ * Fix bug with mailpoet phone number possibly being set to 0.
492
+ * Fix bug to allow campaigns to show on categories, even when the category is registered to a non-"post" post-type.
493
+ * Fixed potential issues with storing our embed code for multisite installations.
494
+ * Fixed bug where cookie-delete button was not deleting all OptinMonster cookies for given user.
495
+ * Improved WooCommerce connect screen by showing the auto-generate option by default.
496
+ * Removed duplicate WooCommerce categories/tags from the Output Settings.
497
+ * Various other bug fixes, and performance updates.
498
+ * Improved debug output.
499
+
500
  = 1.9.9 =
501
  * Fix issue where if multiple post tags were selected, popups and other campaigns would only appear on the first tag selected.
502
  * Fix campaign shortcode suggestion in admin being incorrect.
518
  * You can now use Gravity Forms AJAX submissions and form validation with your OptinMonster campaigns.
519
  * Update admin notices to use the recommended classes
520
 
 
 
 
 
521
  **[View entire changelog](https://plugins.svn.wordpress.org/optinmonster/trunk/CHANGELOG.md)**
views/about.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h2></h2>
2
+ <div class="omapi-box omapi-box--flex">
3
+ <div class="omapi-box__half">
4
+ <p><strong><?php esc_html_e( 'Over the years, we found that many businesses struggle to collect emails simply because the tools aren’t easy to use and are far too expensive. So we started with a simple goal: build powerful enterprise-level technology to help businesses grow their customer base and revenue.', 'optin-monster-api' ); ?></strong></p>
5
+ <p><?php esc_html_e( 'Since our launch in 2013, we have been improving conversions for small independent businesses to Fortune 500 companies. Over a billion people see a website with OptinMonster on it every month. Our customers are seeing huge increases in their subscriber growth and overall sales', 'optin-monster-api' ); ?></p>
6
+ <p><?php esc_html_e( 'We are humbly considered thought leaders by many in our space because of our rapid growth and innovations. Whatever the market conditions or current trends, you will always find OptinMonster leading the way to help our customers gain competitive business advantage and stay ahead of the curve.', 'optin-monster-api' ); ?></p>
7
+ </div>
8
+ <div class="omapi-box__half">
9
+ <div class="omapi-box__image">
10
+ <img src="<?php echo esc_url( $this->url . 'assets/images/omteam.jpg' ); ?>" alt="OptinMonster Team">
11
+ <div class="omapi-box__image-subtitle">
12
+ <?php printf( esc_html__( 'The %1$s Team: %2$s', 'optin-monster-api' ), 'OptinMonster', 'Syed, Christina, Muneeb, Keri, Pranaya, Anna, Tommy, Thomas, Justin, Rahul, Erica, Ben, Devin, Calista, Brandon,
 Jonathan, Briana' ); ?>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <div class="notice notice-error" style="display:none;" id="om-plugin-alerts"></div>
18
+ <div class="omapi-plugin-recommendations">
19
+ <?php foreach ( $data['plugins'] as $plugin_id => $plugin ) : ?>
20
+ <div class="omapi-plugin-recommendation omapi-plugin-recommendation--<?php echo $plugin['class']; ?>">
21
+ <div class="omapi-plugin-recommendation__details">
22
+ <div class="omapi-plugin-recommendation__image-wrapper">
23
+ <img src="<?php echo esc_url( $plugin['icon'] ); ?>" alt="<?php echo esc_html( $plugin['name'] ); ?>">
24
+ </div>
25
+ <div class="omapi-plugin-recommendation__text-wrapper">
26
+ <h5 class="omapi-plugin-recommendation__name">
27
+ <?php echo esc_html( $plugin['name'] ); ?>
28
+ </h5>
29
+ <p class="omapi-plugin-recommendation__description">
30
+ <?php echo esc_html( $plugin['desc'] ); ?>
31
+ </p>
32
+ </div>
33
+ </div>
34
+ <div class="omapi-plugin-recommendation__actions">
35
+ <div class="omapi-plugin-recommendation__status">
36
+ <strong><?php esc_html_e( 'Status:', 'optin-monster-api' ); ?></strong> <?php echo $plugin['active'] ? '<span class="omapi-green">'. $plugin['status'] .'</span>' : $plugin['status']; ?>
37
+ </div>
38
+ <div class="omapi-plugin-recommendation__action-button">
39
+ <form class="install-plugin-form">
40
+ <input type="hidden" name="plugin" value="<?php echo esc_attr( $plugin_id ); ?>">
41
+ <input type="hidden" name="url" value="<?php echo esc_attr( $plugin['url'] ); ?>">
42
+ <?php if ( empty( $plugin['installed'] ) ) : ?>
43
+ <?php wp_nonce_field( 'install_plugin', 'nonce' ); ?>
44
+ <input type="hidden" name="action" value="install">
45
+ <button type="submit" class="button button-omapi-blue button-install">
46
+ <?php esc_html_e( 'Install Plugin', 'optin-monster-api' ); ?>
47
+ </button>
48
+ <?php elseif ( empty( $plugin['active'] ) ): ?>
49
+ <input type="hidden" name="action" value="activate">
50
+ <?php wp_nonce_field( 'activate_plugin', 'nonce' ); ?>
51
+ <button type="submit" class="button button-omapi-blue button-activate">
52
+ <?php esc_html_e( 'Activate Plugin', 'optin-monster-api' ); ?>
53
+ </button>
54
+ <?php else: ?>
55
+ <button disabled class="button button-omapi-outline disabled">
56
+ <?php esc_html_e( 'Already Active', 'optin-monster-api' ); ?>
57
+ </button>
58
+ <?php endif; ?>
59
+ </form>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ <?php endforeach; ?>
64
+ </div>
views/constantcontact.php ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+ .admin_page_optin-monster-constant-contact #wpbody {
3
+ background: #fff;
4
+ }
5
+
6
+ .notice {
7
+ display: none;
8
+ }
9
+
10
+ .om-cc-wrap {
11
+ max-width: 970px;
12
+ }
13
+
14
+ .om-cc-wrap h1 {
15
+ /*color: #1a5285;*/
16
+ font-size: 30px;
17
+ margin: 0 0 15px 0;
18
+ }
19
+
20
+ .om-cc-wrap h2 {
21
+ /*color: #1a5285;*/
22
+ font-size: 26px;
23
+ margin: 0 0 15px 0;
24
+ text-align: left;
25
+ }
26
+
27
+ .om-cc-wrap p {
28
+ font-size: 16px;
29
+ font-weight: 300;
30
+ color: #333;
31
+ margin: 1.2em 0;
32
+ }
33
+
34
+ .om-cc-wrap ul,
35
+ .om-cc-wrap ol {
36
+ margin: 1.6em 2.5em 2em;
37
+ line-height: 1.5;
38
+ font-size: 16px;
39
+ font-weight: 300;
40
+ }
41
+
42
+ .om-cc-wrap ul {
43
+ list-style: disc;
44
+ }
45
+
46
+ .om-cc-wrap li {
47
+ margin-bottom: 0.8em;
48
+ }
49
+
50
+ .om-cc-wrap hr {
51
+ margin: 2.2em 0;
52
+ }
53
+
54
+ .om-cc-wrap .logo {
55
+ float: right;
56
+ margin-top: 0.8em;
57
+ border: 1px solid #ddd;
58
+ }
59
+
60
+ .om-cc-wrap .reasons {
61
+ margin: 2.2em 400px 2.2em 2em;
62
+ }
63
+
64
+ .om-cc-wrap .reasons li {
65
+ margin-bottom: 1.4em;
66
+ }
67
+
68
+ .om-cc-wrap .steps {
69
+ clear: both;
70
+ display: -webkit-box;
71
+ display: -ms-flexbox;
72
+ display: flex;
73
+ -ms-flex-wrap: wrap;
74
+ flex-wrap: wrap;
75
+ }
76
+
77
+ .om-cc-wrap .step {
78
+ -webkit-box-flex: 1;
79
+ -ms-flex-positive: 1;
80
+ flex-grow: 1;
81
+ -ms-flex-negative: 1;
82
+ flex-shrink: 1;
83
+ margin-bottom: 1.4em;
84
+ padding: 0 1em 0 0;
85
+ -ms-flex-preferred-size: 50%;
86
+ flex-basis: 50%;
87
+ -webkit-box-sizing: border-box;
88
+ box-sizing: border-box;
89
+ }
90
+
91
+ .om-cc-wrap .step a {
92
+ -webkit-box-shadow: rgba(0, 35, 60, 0.1) 3px 7px 13px 0px;
93
+ box-shadow: rgba(0, 35, 60, 0.1) 3px 7px 13px 0px;
94
+ border: 1px solid #efefef;
95
+ display: block;
96
+ }
97
+
98
+ .om-cc-wrap .step a:hover {
99
+ border-color: #d9d9d9;
100
+ }
101
+
102
+ .om-cc-wrap .step img {
103
+ max-width: 100%;
104
+ height: auto;
105
+ display: block;
106
+ }
107
+
108
+ .om-cc-wrap .dashicons-yes {
109
+ color: #19BE19;
110
+ font-size: 26px;
111
+ }
112
+
113
+ .om-cc-wrap .button {
114
+ background-color: #0078C3;
115
+ border: 1px solid #005990;
116
+ border-radius: 4px;
117
+ color: #fff;
118
+ font-size: 16px;
119
+ font-weight: 600;
120
+ height: auto;
121
+ line-height: 1;
122
+ margin-bottom: 10px;
123
+ padding: 14px 30px;
124
+ text-align: center;
125
+ }
126
+
127
+ .om-cc-wrap .button:hover,
128
+ .om-cc-wrap .button:focus {
129
+ background-color: #005990;
130
+ color: #fff
131
+ }
132
+
133
+ @media only screen and (max-width: 767px) {
134
+ .om-cc-wrap h1 {
135
+ font-size: 26px;
136
+ }
137
+
138
+ .om-cc-wrap h2 {
139
+ font-size: 22px;
140
+ }
141
+
142
+ .om-cc-wrap p {
143
+ font-size: 14px;
144
+ }
145
+
146
+ .om-cc-wrap ul,
147
+ .om-cc-wrap ol {
148
+ font-size: 14px;
149
+ }
150
+
151
+ .om-cc-wrap .logo {
152
+ width: 120px;
153
+ }
154
+
155
+ .om-cc-wrap .reasons {
156
+ margin-right: 150px;
157
+ }
158
+ }
159
+ </style>
160
+ <div class="wrap omapi-page om-cc-wrap">
161
+ <h1><?php esc_html_e( 'Grow Your Website with OptinMonster + Email Marketing', 'optin-monster-api' ); ?></h1>
162
+ <p><?php esc_html_e( 'Wondering if email marketing is really worth your time?', 'optin-monster-api' ); ?></p>
163
+ <p><?php echo wp_kses( __( 'Email is hands-down the most effective way to nurture leads and turn them into customers, with a return on investment (ROI) of <strong>$44 back for every $1 spent</strong> according to the Direct Marketing Association.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></p>
164
+ <p><?php esc_html_e( 'Here are 3 big reasons why every smart business in the world has an email list:', 'optin-monster-api' ); ?></p>
165
+ <a href="<?php echo $data['signup_url']; ?>" target="_blank" rel="noopener noreferrer">
166
+ <img width="350" class="logo" src="<?php echo $data['images_url'] .'constant-contact-OM.png'; ?>" alt="<?php esc_attr_e( 'OptinMonster with Constant Contact - Try us free', 'optin-monster-api' ); ?>"/>
167
+ </a>
168
+ <ol class="reasons">
169
+ <li><?php echo wp_kses( __( '<strong>Email is still #1</strong> - At least 91% of consumers check their email on a daily basis. You get direct access to your subscribers, without having to play by social media&#39;s rules and algorithms.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
170
+ <li><?php echo wp_kses( __( '<strong>You own your email list</strong> - Unlike with social media, your list is your property and no one can revoke your access to it.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
171
+ <li><?php echo wp_kses( __( '<strong>Email converts</strong> - People who buy products marketed through email spend 138% more than those who don&#39;t receive email offers.', 'optin-monster-api' ), array( 'strong' => array() ) ); ?></li>
172
+ </ol>
173
+ <p><?php esc_html_e( 'That&#39;s why it&#39;s crucial to start collecting email addresses and building your list as soon as possible.', 'optin-monster-api' ); ?></p>
174
+ <p>
175
+ <?php
176
+ printf(
177
+ wp_kses(
178
+ /* translators: %s - WPBeginners.com Guide to Email Lists URL. */
179
+ __( 'For more details, see this guide on <a href="%s" target="_blank" rel="noopener noreferrer">why building your email list is so important</a>.', 'optin-monster-api' ),
180
+ array(
181
+ 'a' => array(
182
+ 'href' => array(),
183
+ 'target' => array(),
184
+ 'rel' => array(),
185
+ ),
186
+ )
187
+ ),
188
+ 'https://optinmonster.com/beginners-guide-to-email-marketing/'
189
+ );
190
+ ?>
191
+ </p>
192
+ <hr/>
193
+ <h2><?php esc_html_e( 'You&#39;ve Already Started - Here&#39;s the Next Step (It&#39;s Easy)', 'optin-monster-api' ); ?></h2>
194
+ <p><?php esc_html_e( 'Here are the 3 things you need to build an email list:', 'optin-monster-api' ); ?></p>
195
+ <ol>
196
+ <li><?php esc_html_e( 'A Website or Blog', 'optin-monster-api' ); ?> <span class="dashicons dashicons-yes"></span></li>
197
+ <?php // TODO: update the following line ?>
198
+ <li><?php esc_html_e( 'High-Converting Form Builder', 'optin-monster-api' ); ?> <span class="dashicons dashicons-yes"></span></li>
199
+ <li><strong><?php esc_html_e( 'The Best Email Marketing Service', 'optin-monster-api' ); ?></strong></li>
200
+ </ol>
201
+ <p><?php esc_html_e( 'With a powerful email marketing service like Constant Contact, you can instantly send out mass notifications and beautifully designed newsletters to engage your subscribers.', 'optin-monster-api' ); ?></p>
202
+ <p>
203
+ <a href="<?php echo $data['signup_url']; ?>" class="button" target="_blank" rel="noopener noreferrer">
204
+ <?php esc_html_e( 'Get Started with Constant Contact for Free', 'optin-monster-api' ); ?>
205
+ </a>
206
+ </p>
207
+ <p><?php esc_html_e( 'OptinMonster plugin makes it fast and easy to capture all kinds of visitor information right from your WordPress site - even if you don&#39;t have a Constant Contact account.', 'optin-monster-api' ); ?></p>
208
+ <p><?php esc_html_e( 'But when you combine OptinMonster with Constant Contact, you can nurture your contacts and engage with them even after they leave your website. When you use Constant Contact + OptinMonster together, you can:', 'optin-monster-api' ); ?></p>
209
+ <ul>
210
+ <li><?php esc_html_e( 'Seamlessly add new contacts to your email list', 'optin-monster-api' ); ?></li>
211
+ <li><?php esc_html_e( 'Create and send professional email newsletters', 'optin-monster-api' ); ?></li>
212
+ <li><?php esc_html_e( 'Get expert marketing and support', 'optin-monster-api' ); ?></li>
213
+ </ul>
214
+ <p>
215
+ <a href="<?php echo $data['signup_url']; ?>" target="_blank" rel="noopener noreferrer">
216
+ <strong><?php esc_html_e( 'Try Constant Contact Today', 'optin-monster-api' ); ?></strong>
217
+ </a>
218
+ </p>
219
+ <hr/>
220
+ <h2><?php esc_html_e( 'OptinMonster Makes List Building Easy', 'optin-monster-api' ); ?></h2>
221
+ <p><?php esc_html_e( 'When creating OptinMonster, our goal was to make a conversion optimization tool that was both EASY and POWERFUL.', 'optin-monster-api' ); ?></p>
222
+ <p><?php esc_html_e( 'Here&#39;s how it works.', 'optin-monster-api' ); ?></p>
223
+ <div class="steps">
224
+ <div class="step1 step">
225
+ <a href="<?php echo $data['images_url'] . 'om-step-1.png'; ?>"><img src="<?php echo $data['images_url'] . 'om-step-1-sm.png'; ?>"></a>
226
+ <p><?php esc_html_e( '1. Select a design from our beautiful, high-converting template library.', 'optin-monster-api' ); ?></p>
227
+ </div>
228
+ <div class="step2 step">
229
+ <a href="<?php echo $data['images_url'] . 'om-step-2.png'; ?>"><img src="<?php echo $data['images_url'] . 'om-step-2-sm.png'; ?>"></a>
230
+ <p><?php esc_html_e( '2. Drag and drop elements to completely customize the look and feel of your campaign.', 'optin-monster-api' ); ?></p>
231
+ </div>
232
+ <div class="step3 step">
233
+ <a href="<?php echo $data['images_url'] . 'om-step-3.png'; ?>"><img src="<?php echo $data['images_url'] . 'om-step-3-sm.png'; ?>"></a>
234
+ <p><?php esc_html_e( '3. Connect your Constant Contact email list.', 'optin-monster-api' ); ?></p>
235
+ </div>
236
+ <div class="step4 step">
237
+ <a href="<?php echo $data['images_url'] . 'om-step-4.png'; ?>"><img src="<?php echo $data['images_url'] . 'om-step-4-sm.png'; ?>"></a>
238
+ <p><?php esc_html_e( '4. Sync your campaign to your WordPress site, then hit Go Live.', 'optin-monster-api' ); ?></p>
239
+ </div>
240
+ </div>
241
+ <p><?php esc_html_e( 'It doesn&#39;t matter what kind of business you run, what kind of website you have, or what industry you are in - you need to start building your email list today.', 'optin-monster-api' ); ?></p>
242
+ <p><?php esc_html_e( 'With Constant Contact + OptinMonster, growing your list is easy.', 'optin-monster-api' ); ?></p>
243
+ <p>
244
+ <a href="<?php echo $data['signup_url']; ?>" target="_blank" rel="noopener noreferrer">
245
+ <strong><?php esc_html_e( 'Try Constant Contact Today', 'optin-monster-api' ); ?></strong>
246
+ </a>
247
+ </p>
248
+ </div>
views/logo.svg ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class ="omapi-svg-logo" width="100%" height="100%" viewBox="0 0 716 112" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
2
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
3
+ <path d="M565.437,342.797C565.437,343.888 564.892,344.524 563.711,344.707C561.166,345.071 547.717,345.071 545.355,344.616C544.174,344.344 543.54,343.526 543.54,342.162C543.54,338.891 543.903,328.168 543.903,324.897C543.903,322.354 543.63,313.993 543.63,311.447C543.63,305.905 541.268,303.179 536.451,303.179C533.543,303.179 527.546,306.541 527.546,309.813L527.546,342.526C527.546,343.889 526.91,344.616 525.635,344.799C523,345.161 510.097,345.072 507.735,344.708C506.462,344.525 505.827,343.798 505.827,342.709L505.917,314.176C505.917,304.089 505.099,296.183 503.555,290.458C503.372,289.64 503.281,288.459 504.371,288.187C506.916,287.914 510.277,287.46 514.549,286.823C520.999,285.551 524.544,284.916 525.361,284.916C526.544,284.916 526.272,293.094 527.451,293.094C527.906,293.094 529.178,291.731 533.994,288.914C538.81,286.097 542.992,284.733 546.536,284.733C556.35,284.733 565.164,289.548 565.164,299.998C565.164,311.63 565.164,318.809 565.255,331.167C565.255,336.44 565.346,340.346 565.346,342.981L565.437,342.797ZM605.785,295.545C605.785,295.908 605.51,296.453 604.875,297.18C599.967,295.908 592.516,297.453 592.516,303.45C592.516,308.72 604.421,313.358 604.421,325.352C604.421,329.35 602.695,334.984 599.697,337.436C593.699,342.525 584.975,346.795 577.251,346.795C575.343,346.795 567.619,333.892 567.619,332.165C567.619,331.802 567.891,331.62 568.255,331.529C571.071,330.984 573.98,330.439 576.796,329.984C580.342,328.802 582.158,326.986 582.158,324.351C582.158,322.533 581.158,320.534 579.07,318.171C575.344,314.082 573.434,311.901 573.254,311.629C562.803,296.088 580.615,281.277 597.063,281.277C598.607,281.277 605.695,294.272 605.695,295.453L605.785,295.545ZM652.946,326.804C652.946,328.714 652.038,335.8 652.038,337.71C652.038,340.073 651.765,340.162 649.675,341.345C644.496,344.16 638.679,345.615 632.319,345.615C620.596,345.615 614.781,341.162 614.781,332.166C614.781,327.716 615.417,312.631 615.417,308.086C615.417,303.272 608.42,307.27 608.42,303.815C608.42,302.725 608.693,298.908 608.693,297.909C608.693,296.454 608.42,291.547 608.42,290.185C608.42,289.367 609.692,288.913 612.328,288.821C613.782,288.821 614.599,288.367 614.69,287.64C614.962,286.095 615.053,283.642 614.962,280.371C614.781,275.191 614.69,273.192 614.69,272.919C614.69,268.194 615.145,265.922 616.053,265.922C617.78,265.922 624.049,267.376 625.504,267.557C627.592,267.83 630.683,268.284 634.864,268.739C635.864,268.83 636.408,269.193 636.408,269.738C636.408,272.464 635.589,281.734 635.589,284.46C635.589,286.459 636.137,287.458 637.317,287.458C639.679,287.458 647.767,287.094 650.222,287.094C651.13,287.094 651.584,287.368 651.584,288.004C651.584,289.821 650.947,294.547 650.947,296.364L651.039,304.815C651.039,305.633 650.494,306.087 649.311,306.087C645.132,305.996 640.863,305.905 636.68,305.905C636.044,305.905 635.772,306.814 635.772,308.54L635.864,317.173C635.864,323.534 636.679,326.805 643.405,326.805C647.222,326.805 652.946,323.718 652.946,326.716L652.946,326.804ZM690.476,307.903C690.476,299.906 680.572,294.727 675.119,301.633C673.575,303.632 672.847,305.904 672.847,308.63C672.847,309.719 673.392,310.266 674.575,310.266C677.573,310.266 682.208,309.811 688.568,308.902C689.931,308.719 690.568,308.358 690.568,307.903L690.476,307.903ZM711.74,311.629C711.74,315.719 710.379,318.079 707.742,318.626C707.289,318.717 703.107,319.171 695.202,319.989C690.385,320.534 683.298,321.17 673.847,321.898C675.575,330.166 689.295,331.712 697.836,326.714C699.381,325.714 700.927,324.804 702.471,323.804C704.289,324.715 709.741,335.163 709.741,337.073C709.741,337.346 709.469,337.798 708.834,338.437C703.926,343.706 696.292,346.342 685.842,346.342C666.759,346.342 653.492,334.256 653.492,315.08C653.492,296.726 665.124,283.003 683.844,283.003C691.567,283.003 698.201,285.82 703.653,291.545C709.103,297.179 711.83,303.903 711.83,311.717L711.74,311.629ZM752.813,306.813C752.813,309.902 749.363,309.175 746.816,308.995C743.092,308.72 738.639,308.72 736.64,310.447C735.457,311.446 734.822,313.629 734.822,316.808C734.822,319.718 735.005,329.714 735.005,332.62C735.005,334.528 735.459,341.161 735.459,343.07C735.459,344.07 734.822,344.615 733.46,344.706C729.552,345.069 719.376,345.069 715.287,344.615C713.923,344.434 713.288,343.797 713.288,342.615L713.377,313.537C713.377,303.995 712.469,296.181 710.743,290.092C710.56,289.274 710.469,288.184 711.56,288.002C713.832,287.73 717.012,287.275 721.375,286.639C727.735,285.367 731.097,284.731 731.279,284.731C733.097,284.731 732.37,292.364 733.733,292.364C734.278,292.364 734.821,291.274 738.731,289.184C742.637,287.093 746.364,286.003 749.906,286.003C752.177,286.003 753.268,286.457 753.268,287.457C753.268,288.638 753.177,290.274 752.905,292.455C752.268,298.361 752.632,301.815 752.632,306.813L752.813,306.813ZM404.505,342.344C404.505,343.706 403.869,344.524 402.687,344.706C400.236,345.069 386.967,345.069 384.515,344.615C383.333,344.343 382.698,343.343 382.698,341.616C382.698,338.437 383.061,328.075 383.061,324.987C383.061,317.899 382.97,312.901 382.788,309.902C382.516,305.086 380.244,302.724 375.973,302.724C372.156,302.724 367.613,306.54 367.159,310.447C366.977,312.174 366.886,317.08 366.886,325.352C366.886,328.531 367.249,339.436 367.249,342.708C367.249,344.071 366.704,344.707 365.523,344.707L347.166,344.707C346.077,344.707 345.44,343.889 345.44,342.253C345.44,338.983 345.804,328.351 345.804,325.081C345.804,322.534 345.531,313.994 345.531,311.447C345.531,296.546 329.72,304.178 329.72,309.54L329.81,342.436C329.81,344.524 329.628,344.616 327.539,344.797C323.177,345.159 315.816,345.159 310.273,344.707C308.274,344.524 308.274,344.524 308.274,342.436L308.365,313.358C308.365,306.723 307.91,299.272 306.911,291.002C306.729,290.003 306.548,288.913 307.638,288.549C309.637,287.731 316.725,287.368 318.088,287.094C319.451,286.822 325.358,285.005 327.629,285.005C329.447,285.005 328.538,293.547 329.356,293.456C331.81,292.819 337.535,284.551 349.439,284.551C356.526,284.551 363.796,287.913 365.704,294.819C369.976,289.003 378.335,284.551 385.515,284.551C395.69,284.551 404.234,289.548 404.234,300.18C404.234,303.815 403.871,315.901 403.871,319.535C403.871,323.807 404.234,338.255 404.234,342.526L404.505,342.344Z" style="fill:white;fill-rule:nonzero;"/>
4
+ </g>
5
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
6
+ <path d="M79.096,314.536C79.096,308.448 75.098,302.45 68.465,302.45C58.559,302.45 54.379,315.445 60.558,322.988C66.738,330.529 79.096,326.35 79.096,314.536M145.432,315.081C145.432,303.359 132.619,298.815 126.713,306.63C121.806,313.173 123.714,327.35 134.709,327.35C141.798,327.349 145.432,323.26 145.432,315.081M167.878,315.173C167.878,332.165 156.973,345.523 139.525,345.523C132.801,345.523 124.441,340.889 124.714,340.889C124.168,340.889 123.896,341.524 123.896,342.707C123.896,346.342 124.532,357.7 124.532,361.335C124.532,362.607 123.896,363.243 122.533,363.243C119.443,363.243 106.993,363.515 104.813,362.971C103.631,362.698 102.995,361.971 102.995,360.699L103.087,313.991C103.087,304.54 102.359,296.635 100.996,290.183C100.814,289.365 100.724,288.274 101.632,287.911C104.904,286.639 116.445,284.913 120.079,284.913C123.805,284.913 122.442,291.182 123.623,291.182C123.169,291.182 124.986,290.092 128.803,287.911C132.71,285.729 136.163,284.64 139.344,284.64C157.245,284.64 167.968,297.453 167.968,315.081L167.878,315.173ZM214.221,326.622C214.221,329.258 213.313,334.982 213.313,337.526C213.313,339.709 213.131,339.98 210.95,341.161C205.771,343.978 199.955,345.434 193.594,345.434C181.871,345.434 176.056,340.981 176.056,331.985C176.056,327.35 176.692,312.538 176.692,307.904C176.692,302.997 169.695,307.177 169.695,303.634C169.695,302.543 169.967,298.726 169.967,297.726C169.967,296.273 169.695,291.366 169.695,290.002C169.695,289.184 170.967,288.73 173.602,288.64C175.056,288.64 175.874,288.185 175.965,287.458C176.238,285.913 176.328,283.46 176.238,280.188C176.056,275.009 175.965,272.464 175.965,272.737C175.965,268.012 176.419,265.74 177.328,265.74C179.509,265.74 184.507,267.103 186.779,267.376C188.868,267.648 191.958,268.102 196.138,268.557C197.138,268.648 197.683,269.012 197.683,269.557C197.683,272.646 196.865,281.188 196.865,284.277C196.865,286.277 197.41,287.276 198.592,287.276C200.954,287.276 209.042,286.913 211.496,286.913C212.404,286.913 212.858,287.185 212.858,287.822C212.858,289.639 212.222,294.364 212.222,296.182L212.313,304.633C212.313,305.451 211.768,305.905 210.587,305.905C206.225,305.814 202.318,305.723 197.956,305.723C197.32,305.723 197.047,306.632 197.047,308.359L197.138,316.991C197.138,323.352 198.047,326.624 204.68,326.624C208.951,326.624 214.221,323.441 214.221,326.532L214.221,326.622ZM237.757,316.535C237.757,321.533 238.12,337.89 238.12,342.888C238.12,343.706 237.575,344.251 236.575,344.434C233.759,344.887 220.764,344.979 217.947,344.434C217.038,344.251 216.493,343.98 216.312,343.616C216.039,343.071 216.584,318.719 216.584,316.537C216.584,305.087 216.13,295.909 215.221,289.094C214.857,286.095 215.585,286.277 221.946,287.004C230.124,287.822 231.487,286.731 237.757,286.731C239.484,286.731 239.211,287.822 239.12,289.094C238.212,296.998 237.757,306.086 237.757,316.535M239.302,271.464C239.302,278.46 235.304,282.005 227.398,282.005C214.857,282.005 212.04,269.464 219.129,263.739C226.58,257.742 239.302,261.831 239.302,271.464M304.366,342.615C304.366,343.706 303.821,344.343 302.639,344.523C300.095,344.887 286.646,344.887 284.283,344.434C283.102,344.16 282.466,343.344 282.466,341.98C282.466,338.71 282.829,327.987 282.829,324.716C282.829,322.17 282.556,313.809 282.556,311.266C282.556,305.723 280.194,302.997 275.378,302.997C272.288,302.997 266.472,306.45 266.472,309.631L266.472,342.345C266.472,343.708 265.836,344.434 264.564,344.616C261.565,344.979 249.479,344.979 246.662,344.524C245.39,344.344 244.754,343.616 244.754,342.525L244.845,313.994C244.845,303.907 244.027,296.001 242.482,290.276C242.301,289.368 242.301,288.277 243.3,288.005C245.845,287.732 249.207,287.277 253.478,286.641C259.93,285.369 263.473,284.733 264.292,284.733C265.472,284.733 265.2,292.912 266.382,292.912C265.928,292.912 268.108,291.549 272.924,288.732C277.741,285.915 281.921,284.552 285.465,284.552C295.279,284.552 304.093,289.368 304.093,299.818C304.093,311.449 304.093,318.629 304.184,330.987C304.184,336.257 304.275,340.163 304.275,342.799L304.366,342.615ZM98.907,314.536C98.907,332.983 86.73,345.614 68.192,345.614C50.381,345.614 37.659,333.165 37.659,315.264C37.659,296.726 49.2,283.64 68.192,283.64C86.548,283.64 98.907,296.181 98.907,314.536" style="fill:white;fill-rule:nonzero;"/>
7
+ </g>
8
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
9
+ <g opacity="0.149002">
10
+ <clipPath id="_clip1">
11
+ <rect x="385.878" y="344.16" width="139.94" height="15.086"/>
12
+ </clipPath>
13
+ <g clip-path="url(#_clip1)">
14
+ <path d="M455.848,344.16C494.47,344.16 525.819,347.522 525.819,351.704C525.819,355.884 494.469,359.246 455.848,359.246C417.228,359.246 385.879,355.884 385.879,351.704C385.878,347.522 417.228,344.16 455.848,344.16" style="fill:black;fill-rule:nonzero;"/>
15
+ </g>
16
+ </g>
17
+ </g>
18
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
19
+ <path d="M497.921,284.186C498.831,283.641 499.012,280.278 499.104,279.279C499.376,277.007 502.193,276.008 504.011,277.189C507.192,279.46 508.827,283.823 509.28,287.548C509.735,291.364 509.372,296.453 506.646,299.452C503.738,302.724 496.377,303.724 492.016,303.269C490.835,303.178 489.744,302.905 488.653,302.724L486.563,284.004L488.837,284.458C491.108,284.912 495.743,285.368 497.833,284.186L497.921,284.186Z" style="fill:rgb(153,153,102);fill-rule:nonzero;"/>
20
+ </g>
21
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
22
+ <path d="M505.009,280.551C504.464,279.824 503.828,279.097 503.101,278.643C502.374,278.097 501.011,278.552 500.918,279.461L500.829,280.096C502.193,279.642 503.737,280.006 505.009,280.551M507.554,293.364C508.099,290.456 507.826,287.093 506.827,284.186C506.1,283.277 505.372,282.551 504.009,282.005C502.282,281.278 501.374,281.551 500.559,282.278C500.467,283.005 500.283,283.55 500.104,284.095C504.829,285.64 506.828,290.183 507.555,293.454L507.555,293.364L507.554,293.364ZM493.741,286.639C492.106,286.639 490.379,286.457 488.653,286.094L490.287,301.178C492.471,301.633 495.013,301.633 497.284,301.361C498.92,295.545 497.284,288.73 493.651,286.549L493.741,286.639ZM498.83,285.64C498.195,286.003 497.283,286.276 496.196,286.457C499.466,289.911 500.466,296.181 499.282,301.088C502.009,300.543 504.28,299.543 505.462,298.271C505.735,297.998 505.916,297.634 506.19,297.362C506.19,292.182 504.1,286.639 499.102,285.549C499.01,285.64 499.01,285.64 498.918,285.64L498.83,285.64Z" style="fill:rgb(192,192,160);fill-rule:nonzero;"/>
23
+ </g>
24
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
25
+ <path d="M497.921,295.453C495.74,295.999 493.378,296.09 491.65,295.908C490.924,295.817 490.287,295.726 489.651,295.544L488.561,286.185C490.287,286.548 492.015,286.73 493.65,286.73C496.013,288.184 497.56,291.637 497.832,295.453L497.921,295.453ZM504.556,282.277C504.644,282.823 504.736,283.368 504.827,283.912C505.009,285.003 505.009,286.275 504.918,287.548C503.735,286.094 502.192,284.822 500.103,284.095C500.283,283.55 500.466,283.004 500.557,282.277C501.281,281.641 502.281,281.277 504.008,282.005C504.192,282.095 504.373,282.186 504.556,282.277M503.192,278.733C503.465,279.188 503.645,279.642 503.828,280.096C502.828,279.824 501.829,279.732 500.738,280.006L500.829,279.37C500.918,278.46 502.281,278.006 503.01,278.552L503.193,278.642L503.193,278.733L503.192,278.733ZM498.83,285.64C498.194,286.003 497.283,286.275 496.195,286.457C498.194,288.547 499.282,291.637 499.647,294.909C500.918,294.453 502.1,293.818 502.828,292.91C503.556,292.182 501.646,286.094 499.012,285.549C498.92,285.64 498.92,285.64 498.83,285.64" style="fill:rgb(251,250,196);fill-rule:nonzero;"/>
26
+ </g>
27
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
28
+ <path d="M412.685,284.186C411.774,283.641 411.594,280.278 411.501,279.279C411.229,277.007 408.412,276.008 406.595,277.189C403.413,279.46 401.779,283.823 401.325,287.548C400.871,291.364 401.234,296.453 403.96,299.452C406.868,302.724 414.228,303.724 418.59,303.269C419.771,303.178 420.862,302.905 421.953,302.724L424.042,284.004L421.769,284.458C419.498,284.912 414.863,285.368 412.773,284.186L412.685,284.186Z" style="fill:rgb(153,153,102);fill-rule:nonzero;"/>
29
+ </g>
30
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
31
+ <path d="M405.597,280.551C406.142,279.824 406.778,279.097 407.504,278.643C408.232,278.097 409.595,278.552 409.688,279.461L409.776,280.096C408.413,279.642 406.868,280.006 405.597,280.551M403.051,293.364C402.507,290.456 402.78,287.093 403.779,284.186C404.506,283.277 405.233,282.551 406.596,282.005C408.323,281.278 409.232,281.551 410.047,282.278C410.139,283.005 410.323,283.55 410.502,284.095C405.777,285.64 403.778,290.183 403.05,293.454L403.05,293.364L403.051,293.364ZM416.865,286.639C418.5,286.639 420.227,286.457 421.953,286.094L420.318,301.178C418.135,301.633 415.592,301.633 413.321,301.361C411.685,295.545 413.321,288.73 416.955,286.549L416.865,286.639ZM411.776,285.64C412.411,286.003 413.323,286.276 414.41,286.457C411.139,289.911 410.14,296.181 411.323,301.088C408.597,300.543 406.326,299.543 405.143,298.271C404.87,297.998 404.69,297.634 404.416,297.362C404.416,292.182 406.506,286.639 411.504,285.549C411.595,285.64 411.595,285.64 411.688,285.64L411.776,285.64Z" style="fill:rgb(192,192,160);fill-rule:nonzero;"/>
32
+ </g>
33
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
34
+ <path d="M412.685,295.453C414.866,295.999 417.228,296.09 418.955,295.908C419.682,295.817 420.318,295.726 420.954,295.544L422.044,286.185C420.318,286.548 418.591,286.73 416.956,286.73C414.593,288.184 413.048,291.637 412.774,295.453L412.685,295.453ZM406.05,282.277C405.961,282.823 405.87,283.368 405.778,283.912C405.597,285.003 405.597,286.275 405.689,287.548C406.87,286.094 408.414,284.822 410.503,284.095C410.323,283.55 410.14,283.004 410.048,282.277C409.324,281.641 408.325,281.277 406.598,282.005C406.414,282.095 406.233,282.186 406.05,282.277M407.414,278.733C407.141,279.188 406.961,279.642 406.778,280.096C407.777,279.824 408.777,279.732 409.868,280.006L409.776,279.37C409.688,278.46 408.325,278.006 407.596,278.552L407.413,278.642L407.413,278.733L407.414,278.733ZM411.776,285.64C412.412,286.003 413.323,286.275 414.411,286.457C412.412,288.547 411.323,291.637 410.959,294.909C409.688,294.453 408.505,293.818 407.777,292.91C407.051,292.182 408.96,286.094 411.594,285.549C411.685,285.64 411.685,285.64 411.776,285.64" style="fill:rgb(251,250,196);fill-rule:nonzero;"/>
35
+ </g>
36
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
37
+ <path d="M422.77,280.551C419.59,280.278 416.499,280.914 413.41,281.369L416.136,278.733C418.773,276.189 422.316,273.917 425.681,272.281C430.677,269.737 436.403,267.829 442.126,267.284C438.126,265.557 433.583,264.739 429.314,263.739C445.763,260.287 466.843,259.014 481.929,271.827C490.563,279.188 495.287,292.819 495.287,305.177C495.287,351.796 415.866,351.796 415.866,305.177C415.866,298.907 417.41,292.91 420.319,287.457C419.229,287.73 418.229,288.093 417.136,288.548L412.323,290.547L415.773,286.639C417.864,284.277 420.227,282.278 422.953,280.733L422.77,280.551Z" style="fill:rgb(142,212,30);fill-rule:nonzero;"/>
38
+ </g>
39
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
40
+ <path d="M458.393,266.193C466.118,267.101 473.659,269.646 479.927,275.007C487.56,281.459 491.65,293.454 491.65,304.268C491.65,324.076 475.293,334.346 458.392,334.891L458.392,266.193L458.393,266.193Z" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
41
+ </g>
42
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
43
+ <path d="M429.131,276.28C435.129,272.281 444.944,271.009 456.758,271.646C454.668,269.193 452.76,267.647 449.943,266.284C455.304,266.102 459.574,267.284 470.206,270.919C461.03,265.557 449.763,263.104 439.22,264.285C443.036,265.375 446.671,267.102 450.033,269.374C439.22,268.193 426.769,273.372 421.771,277.643C425.044,277.28 427.95,277.915 431.042,279.279C426.68,280.823 423.862,282.187 421.135,284.822C425.86,282.459 429.586,280.46 435.584,279.188C433.221,278.37 431.949,276.916 429.131,276.28" style="fill:rgb(161,225,65);fill-rule:nonzero;"/>
44
+ </g>
45
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
46
+ <path d="M455.483,265.284C466.39,265.284 475.203,273.826 475.203,284.458C475.203,294.999 466.39,303.632 455.483,303.632C444.58,303.632 435.767,295.09 435.767,284.458C435.765,273.917 444.58,265.284 455.483,265.284" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
47
+ </g>
48
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
49
+ <path d="M424.225,302.36C424.861,301.178 484.654,300.724 485.836,302.36C487.924,305.086 486.745,307.721 485.836,309.993L424.225,309.993C423.68,307.539 422.771,304.904 424.225,302.36" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
50
+ </g>
51
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
52
+ <path d="M425.043,304.086C425.679,302.541 483.926,301.905 485.108,304.086C487.107,307.811 485.925,311.446 485.108,314.536L425.043,314.536C424.497,311.173 423.68,307.63 425.043,304.086" style="fill:rgb(75,113,19);fill-rule:nonzero;"/>
53
+ </g>
54
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
55
+ <path d="M473.477,264.467C472.66,248.928 451.758,247.292 446.307,259.469C455.939,254.198 465.752,256.107 473.477,264.467" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
56
+ </g>
57
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
58
+ <path d="M461.845,251.563C455.759,250.654 449.125,253.29 446.399,259.377C450.033,257.378 453.76,256.47 457.303,256.47C458.031,255.107 459.757,252.472 461.938,251.563L461.845,251.563Z" style="fill:rgb(133,197,31);fill-rule:nonzero;"/>
59
+ </g>
60
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
61
+ <path d="M455.483,263.285C465.297,263.285 473.204,271.191 473.204,281.005C473.204,290.819 465.297,298.725 455.483,298.725C445.671,298.725 437.766,290.819 437.766,281.005C437.766,271.191 445.67,263.285 455.483,263.285" style="fill:rgb(211,232,239);fill-rule:nonzero;"/>
62
+ </g>
63
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
64
+ <path d="M444.308,267.829C450.214,262.922 458.484,262.922 462.663,268.011C466.843,273.009 465.39,281.096 459.483,286.094C453.575,291.001 445.307,291.001 441.125,285.912C436.947,280.914 438.402,272.827 444.308,267.829" style="fill:white;fill-rule:nonzero;"/>
65
+ </g>
66
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
67
+ <path d="M455.938,275.008C462.844,275.008 468.388,280.188 468.388,286.639C468.388,293.091 462.842,298.271 455.938,298.271C449.034,298.271 443.489,293.091 443.489,286.639C443.489,280.188 449.033,275.008 455.938,275.008" style="fill:rgb(13,130,223);fill-rule:nonzero;"/>
68
+ </g>
69
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
70
+ <path d="M455.938,275.008C459.3,275.008 462.39,276.28 464.571,278.279C463.754,281.096 462.027,283.913 459.482,286.094C454.575,290.183 448.034,290.82 443.58,288.093C443.489,287.639 443.489,287.185 443.489,286.639C443.489,280.188 449.033,275.008 455.938,275.008" style="fill:rgb(3,153,237);fill-rule:nonzero;"/>
71
+ </g>
72
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
73
+ <path d="M455.938,279.188C460.3,279.188 463.935,282.55 463.935,286.639C463.935,290.729 460.391,294.09 455.938,294.09C451.577,294.09 447.942,290.729 447.942,286.639C447.942,282.55 451.485,279.188 455.938,279.188" style="fill:rgb(35,35,35);fill-rule:nonzero;"/>
74
+ </g>
75
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
76
+ <path d="M455.938,279.188C458.755,279.188 461.209,280.551 462.663,282.55C461.844,283.822 460.754,285.003 459.482,286.003C456.209,288.73 452.21,289.911 448.668,289.638C448.214,288.73 447.942,287.639 447.942,286.548C447.942,282.459 451.485,279.097 455.938,279.097L455.938,279.188Z" style="fill:rgb(50,50,50);fill-rule:nonzero;"/>
77
+ </g>
78
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
79
+ <path d="M448.941,275.644C452.212,275.644 454.847,278.098 454.847,281.187C454.847,284.277 452.212,286.731 448.941,286.731C445.67,286.731 443.035,284.277 443.035,281.187C443.035,278.098 445.67,275.644 448.941,275.644" style="fill:white;fill-rule:nonzero;"/>
80
+ </g>
81
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
82
+ <path d="M414.138,308.448C441.581,304.359 469.117,304.722 496.56,308.448C498.559,322.805 497.468,336.438 496.56,350.157C469.117,351.248 441.581,351.431 414.138,350.157C412.502,336.255 412.322,322.351 414.138,308.448" style="fill:rgb(156,174,179);fill-rule:nonzero;"/>
83
+ </g>
84
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
85
+ <path d="M422.044,347.341C444.308,348.157 466.481,348.069 488.743,347.341C480.747,342.796 472.75,338.437 463.754,335.983C460.844,337.346 457.757,338.437 454.667,339.345C454.212,339.435 454.212,339.435 453.758,339.345C451.212,338.527 448.669,337.527 446.214,336.438C437.49,338.981 429.585,342.707 421.952,347.433L422.044,347.341ZM416.773,313.173C415.592,324.169 415.773,335.255 416.956,346.25C424.953,341.253 433.494,337.254 442.489,334.438C432.13,328.986 424.86,321.17 416.773,313.173M491.65,310.993C467.389,308.083 443.035,307.811 418.773,310.993C428.768,322.168 439.766,331.348 454.396,336.162C469.933,331.712 480.655,321.988 491.65,310.993M493.741,346.25C494.469,335.255 495.195,324.26 494.014,313.265C485.837,321.353 477.112,329.076 466.934,334.436C476.385,337.253 485.201,341.435 493.834,346.249L493.741,346.249L493.741,346.25Z" style="fill:rgb(211,232,239);fill-rule:nonzero;"/>
86
+ </g>
87
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
88
+ <path d="M422.044,347.341C432.765,347.705 443.487,347.886 454.303,347.886L454.303,339.345C454.212,339.345 454.122,339.345 453.849,339.253C451.305,338.438 448.762,337.437 446.307,336.346C437.583,338.89 429.678,342.615 422.044,347.341M416.773,313.173C415.592,324.169 415.773,335.255 416.956,346.25C424.953,341.253 433.494,337.254 442.489,334.438C432.13,328.986 424.86,321.17 416.773,313.173M454.303,308.72C442.399,308.72 430.586,309.447 418.773,310.994C428.679,322.17 439.766,331.258 454.303,336.163L454.303,308.72Z" style="fill:white;fill-rule:nonzero;"/>
89
+ </g>
90
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
91
+ <path d="M438.855,315.264C438.765,315.627 438.583,315.992 438.403,316.355C438.219,316.9 437.856,317.443 437.403,317.807C436.312,318.625 434.95,318.354 433.766,317.898C431.131,316.807 429.315,314.172 428.223,311.628C426.952,308.718 426.86,306.63 427.587,303.449C445.943,302.45 464.754,302.268 482.564,303.358L482.564,303.449L482.838,303.449C483.111,306.539 482.838,307.811 482.112,310.358C481.293,313.265 479.565,316.807 476.659,318.17C475.568,318.717 474.296,318.989 473.296,318.261C472.843,317.898 472.481,317.353 472.206,316.807C471.57,315.808 471.39,314.356 471.207,313.264C470.844,313.991 470.39,314.445 469.662,314.626C468.481,314.899 467.118,315.079 465.936,315.171C464.755,315.263 463.485,315.355 462.21,315.355C460.302,315.355 458.211,315.171 456.396,314.628C456.124,315.719 455.669,316.716 454.579,317.079C453.398,317.443 451.943,317.626 450.671,317.718C449.308,317.807 447.945,317.899 446.673,317.899C444.583,317.899 442.22,317.718 440.312,316.9C439.584,316.627 439.128,316.081 438.858,315.355L438.858,315.264L438.855,315.264Z" style="fill:rgb(153,153,102);fill-rule:nonzero;"/>
92
+ </g>
93
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
94
+ <path d="M469.66,302.814C470.388,306.903 470.205,312.174 469.024,312.446C467.206,312.901 460.209,313.629 456.757,312.357C455.846,310.631 455.846,306.269 455.938,302.725C460.664,302.724 465.389,302.724 469.66,302.814M440.308,303.632C439.673,305.541 439.037,307.721 438.401,310.358C438.037,311.994 437.764,313.629 437.49,314.809C437.127,316.444 436.309,316.718 434.764,316.081C430.765,314.356 428.678,307.632 428.857,303.541C431.584,303.359 435.674,303.178 440.307,302.996C444.761,302.905 449.759,302.814 454.757,302.814C455.209,307.812 455.209,313.81 454.121,315.081C452.21,315.72 444.761,316.628 441.124,314.992C439.488,314.266 440.124,308.177 440.215,303.724L440.308,303.632ZM470.388,302.814C470.931,304.995 471.568,307.267 472.203,310.175C472.566,311.992 472.75,313.721 473.021,314.9C473.385,316.717 474.112,316.99 475.565,316.264C479.111,314.445 481.11,307.72 481.017,303.269C478.384,303.087 474.658,302.905 470.388,302.814" style="fill:rgb(192,192,160);fill-rule:nonzero;"/>
95
+ </g>
96
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
97
+ <path d="M455.938,305.268C460.209,305.268 464.482,305.268 468.388,305.358C469.024,307.631 469.024,311.72 466.297,312.719C463.39,312.993 459.209,313.082 456.756,312.174C456.121,310.901 455.938,308.084 455.938,305.268M440.217,305.54C444.125,305.449 448.578,305.358 453.031,305.358C453.483,308.63 454.302,315.173 450.213,315.536C447.214,315.809 443.489,315.809 441.125,314.809C439.765,314.173 439.945,309.63 440.126,305.631L440.217,305.54ZM429.041,306.086C430.949,305.904 433.492,305.812 436.49,305.722C436.854,305.722 437.581,314.718 437.581,314.718C437.217,316.354 436.4,316.627 434.855,315.991C431.674,314.628 429.675,310.082 429.129,306.176L429.041,306.086ZM473.022,314.9C473.385,316.717 474.113,316.99 475.566,316.264C478.476,314.809 480.292,310.083 480.838,305.995C479.112,305.812 477.022,305.722 474.566,305.631C473.113,306.722 472.839,314.264 473.022,314.9" style="fill:rgb(251,250,196);fill-rule:nonzero;"/>
98
+ </g>
99
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
100
+ <path d="M448.123,305.449C448.307,308.995 448.123,312.537 447.671,312.809C446.763,313.357 443.4,314.082 441.765,312.719C441.126,312.266 441.218,308.811 441.31,305.54C443.49,305.449 445.763,305.449 448.216,305.358L448.123,305.449ZM463.391,305.358C463.481,307.994 463.299,310.447 462.936,310.629C462.119,311.082 458.937,311.629 457.302,310.538C456.757,310.175 456.757,307.72 456.847,305.268L463.392,305.268L463.392,305.358L463.391,305.358ZM434.675,305.812C434.584,306.812 434.584,307.995 434.584,309.175L434.584,312.809C434.584,314.173 434.221,314.445 433.493,313.809C432.041,312.719 430.767,309.266 430.222,306.086C431.494,305.994 433.04,305.904 434.675,305.812M479.747,305.904C478.563,305.812 477.201,305.722 475.657,305.722C475.657,306.721 475.749,307.811 475.749,308.994L475.749,312.901C475.749,314.355 476.021,314.628 476.748,313.991C478.02,312.809 479.202,309.357 479.747,305.904" style="fill:white;fill-rule:nonzero;"/>
101
+ </g>
102
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
103
+ <path d="M419.591,348.068C418.591,352.611 414.045,355.61 409.504,355.428C403.234,355.154 393.51,348.249 393.692,341.434C393.783,337.618 396.6,334.163 399.508,331.984C402.325,329.8 407.05,327.531 410.686,328.53C414.32,329.53 416.864,334.528 418.046,337.798C419.135,340.616 420.227,345.071 419.498,348.069L419.591,348.069L419.591,348.068Z" style="fill:rgb(133,197,31);fill-rule:nonzero;"/>
104
+ </g>
105
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
106
+ <path d="M418.046,347.613C418.135,347.068 418.228,346.522 418.228,345.886C417.047,340.888 414.229,335.164 411.049,334.256C406.142,332.8 396.238,339.344 396.781,346.069C399.508,350.249 405.325,353.702 409.504,353.882C413.32,354.065 417.228,351.519 418.047,347.703L418.047,347.613L418.046,347.613Z" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
107
+ </g>
108
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
109
+ <path d="M413.502,342.524C414.773,339.98 412.686,335.527 409.504,335.89C406.142,336.345 398.872,341.343 398.872,345.251C398.872,347.705 402.234,349.432 405.777,348.433C408.413,347.705 412.502,344.615 413.502,342.524M416.319,348.885C416.955,347.34 416.046,344.615 414.229,344.886C412.321,345.251 407.776,348.521 407.959,350.339C408.048,351.794 410.594,353.066 412.594,352.338C414.047,351.794 415.773,350.157 416.319,348.885" style="fill:rgb(93,141,23);fill-rule:nonzero;"/>
110
+ </g>
111
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
112
+ <path d="M408.504,330.712C408.595,332.348 405.414,333.8 404.142,332.62C403.051,330.529 403.326,327.985 404.233,327.44C405.233,326.895 407.687,327.895 408.504,330.712" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
113
+ </g>
114
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
115
+ <path d="M402.325,333.711C402.686,335.526 400.235,337.073 399.052,336.255C397.508,334.71 396.964,331.984 397.688,331.348C398.417,330.712 401.052,331.712 402.325,333.711" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
116
+ </g>
117
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
118
+ <path d="M397.69,338.254C398.238,339.436 397.054,341.071 395.691,340.981C394.239,339.89 392.876,337.346 393.419,336.709C393.965,335.983 396.419,336.709 397.69,338.254" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
119
+ </g>
120
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
121
+ <path d="M420.953,321.352C421.681,319.989 419.682,319.078 418.046,318.442C416.408,317.898 415.592,317.898 414.956,319.261C414.228,320.624 413.865,322.713 415.592,323.258C417.227,323.804 420.317,322.713 421.045,321.35L420.953,321.35L420.953,321.352Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
122
+ </g>
123
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
124
+ <path d="M422.408,316.264C422.59,317.808 420.407,318.626 418.592,318.99C416.865,319.354 416.137,319.171 415.957,317.626C415.773,316.079 416.229,313.628 418.047,313.265C419.771,312.902 422.225,314.718 422.408,316.264" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
125
+ </g>
126
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
127
+ <path d="M422.77,311.174C422.955,312.629 420.771,313.358 418.956,313.721C417.229,314.082 416.501,313.902 416.321,312.358C416.136,310.903 416.593,308.632 418.319,308.268C420.047,307.904 422.499,309.631 422.682,311.083L422.77,311.174Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
128
+ </g>
129
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
130
+ <path d="M408.504,307.812C408.776,308.996 411.048,308.72 412.775,308.36C414.501,307.905 415.138,307.541 414.774,306.36C414.501,305.178 413.41,303.543 411.687,303.997C409.96,304.451 408.233,306.633 408.504,307.905L408.504,307.812Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
131
+ </g>
132
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
133
+ <path d="M406.96,322.261L407.504,323.805L406.323,322.897C405.776,322.442 405.324,321.806 404.96,321.079C405.049,321.806 405.142,322.262 405.324,322.897C403.598,320.079 402.051,316.99 403.05,312.902C403.961,309.175 407.687,307.448 410.322,306.722C411.957,306.268 413.773,305.995 415.408,306.177C416.408,306.268 418.135,306.54 418.862,307.448C419.589,308.36 419.953,310.266 420.134,311.538C420.406,313.537 420.317,315.627 420.045,317.626C419.771,319.442 419.227,321.17 418.318,322.624C417.591,323.715 416.772,324.532 415.684,324.988C414.409,325.532 413.137,325.623 411.773,325.351C409.958,324.988 408.322,323.897 406.867,322.352L406.96,322.261Z" style="fill:rgb(133,197,31);fill-rule:nonzero;"/>
134
+ </g>
135
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
136
+ <path d="M417.955,308.72C419.046,309.994 419.591,315.357 418.318,319.263C417.955,319.355 417.5,319.445 417.047,319.445C415.047,319.628 413.137,318.72 411.866,317.629C411.957,318.174 412.139,318.537 412.321,318.81C411.23,318.358 410.322,316.994 409.685,315.448C409.774,316.721 409.958,317.266 410.139,317.994C408.775,317.539 407.686,315.994 406.867,314.36C406.14,312.905 406.231,310.814 407.503,309.907C410.865,307.453 416.591,307.271 417.862,308.816L417.955,308.72Z" style="fill:rgb(161,225,65);fill-rule:nonzero;"/>
137
+ </g>
138
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
139
+ <path d="M491.106,348.068C492.105,352.611 496.648,355.61 501.193,355.428C507.462,355.154 517.185,348.249 517.002,341.434C516.914,337.618 514.094,334.163 511.188,331.984C508.371,329.8 503.644,327.531 500.01,328.53C496.377,329.53 493.832,334.528 492.65,337.798C491.559,340.616 490.469,345.071 491.198,348.069L491.106,348.069L491.106,348.068Z" style="fill:rgb(133,197,31);fill-rule:nonzero;"/>
140
+ </g>
141
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
142
+ <path d="M492.561,347.613C492.469,347.068 492.376,346.522 492.376,345.886C493.559,340.888 496.375,335.164 499.556,334.256C504.463,332.8 514.367,339.344 513.823,346.069C511.096,350.249 505.279,353.702 501.101,353.882C497.284,354.065 493.376,351.519 492.558,347.703L492.558,347.613L492.561,347.613Z" style="fill:rgb(112,169,27);fill-rule:nonzero;"/>
143
+ </g>
144
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
145
+ <path d="M497.194,342.524C495.92,339.98 498.01,335.527 501.193,335.89C504.555,336.345 511.824,341.343 511.824,345.251C511.824,347.705 508.462,349.432 504.918,348.433C502.282,347.705 498.194,344.615 497.194,342.524M494.377,348.885C493.741,347.34 494.649,344.615 496.467,344.886C498.375,345.251 502.917,348.521 502.737,350.339C502.646,351.794 500.102,353.066 498.102,352.338C496.648,351.794 494.922,350.157 494.377,348.885" style="fill:rgb(93,141,23);fill-rule:nonzero;"/>
146
+ </g>
147
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
148
+ <path d="M502.102,330.712C502.01,332.348 505.192,333.8 506.463,332.62C507.554,330.529 507.28,327.985 506.373,327.44C505.373,326.895 502.918,327.895 502.102,330.712" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
149
+ </g>
150
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
151
+ <path d="M508.28,333.711C507.919,335.526 510.37,337.073 511.553,336.255C513.097,334.71 513.641,331.984 512.917,331.348C512.188,330.712 509.552,331.712 508.28,333.711" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
152
+ </g>
153
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
154
+ <path d="M512.915,338.254C512.368,339.436 513.552,341.071 514.914,340.981C516.366,339.89 517.729,337.346 517.186,336.709C516.64,335.983 514.187,336.709 512.915,338.254" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
155
+ </g>
156
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
157
+ <path d="M489.651,321.352C488.924,319.989 490.923,319.078 492.561,318.442C494.197,317.898 495.012,317.898 495.649,319.261C496.376,320.624 496.74,322.713 495.012,323.258C493.378,323.804 490.287,322.713 489.56,321.35L489.651,321.35L489.651,321.352Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
158
+ </g>
159
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
160
+ <path d="M488.288,316.264C488.107,317.808 490.287,318.626 492.105,318.99C493.832,319.354 494.559,319.171 494.74,317.626C494.922,316.079 494.469,313.628 492.65,313.265C490.924,312.902 488.471,314.718 488.288,316.264" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
161
+ </g>
162
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
163
+ <path d="M487.835,311.174C487.651,312.629 489.834,313.358 491.649,313.721C493.376,314.082 494.104,313.902 494.284,312.358C494.469,310.903 494.013,308.632 492.285,308.268C490.559,307.904 488.106,309.631 487.924,311.083L487.835,311.174Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
164
+ </g>
165
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
166
+ <path d="M502.192,307.812C501.918,308.996 499.646,308.72 497.919,308.36C496.195,307.905 495.557,307.541 495.92,306.36C496.195,305.178 497.283,303.543 499.009,303.997C500.737,304.451 502.463,306.633 502.192,307.905L502.192,307.812Z" style="fill:rgb(44,68,12);fill-rule:nonzero;"/>
167
+ </g>
168
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
169
+ <path d="M503.646,322.261L503.101,323.805L504.282,322.897C504.83,322.442 505.282,321.806 505.645,321.079C505.556,321.806 505.464,322.262 505.282,322.897C507.008,320.079 508.555,316.99 507.555,312.902C506.645,309.175 502.918,307.448 500.284,306.722C498.648,306.268 496.833,305.995 495.197,306.177C494.198,306.268 492.471,306.54 491.744,307.448C491.016,308.36 490.653,310.266 490.472,311.538C490.2,313.537 490.288,315.627 490.562,317.626C490.835,319.442 491.378,321.17 492.288,322.624C493.014,323.715 493.834,324.532 494.922,324.988C496.197,325.532 497.468,325.623 498.832,325.351C500.647,324.988 502.283,323.897 503.739,322.352L503.646,322.261Z" style="fill:rgb(133,197,31);fill-rule:nonzero;"/>
170
+ </g>
171
+ <g transform="matrix(1,0,0,1,-37.6592,-251.388)">
172
+ <path d="M492.65,308.72C491.559,309.994 491.014,315.357 492.287,319.263C492.65,319.355 493.105,319.445 493.558,319.445C495.558,319.628 497.467,318.72 498.739,317.629C498.647,318.174 498.466,318.537 498.284,318.81C499.375,318.358 500.283,316.994 500.919,315.448C500.83,316.721 500.646,317.266 500.466,317.994C501.83,317.539 502.918,315.994 503.738,314.36C504.464,312.905 504.374,310.814 503.102,309.907C499.74,307.453 494.014,307.271 492.743,308.816L492.65,308.72Z" style="fill:rgb(161,225,65);fill-rule:nonzero;"/>
173
+ </g>
174
+ </svg>
views/notification-close-js.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ (function() {
3
+ var turnOff = function() {
4
+ window.setUserSetting( 'om_cybermonday_notice', 'off' );
5
+ };
6
+ if ( jQuery ) {
7
+ jQuery( function( $ ) {
8
+ $( '#om-cybermonday-notice' ).on( 'click', '.notice-dismiss', turnOff );
9
+ });
10
+ } else {
11
+ var el = document.getElementById( 'om-cybermonday-notice' );
12
+ el.addEventListener('click', function( e ) {
13
+ if ( ( ' ' + e.target.className + ' ' ).indexOf( ' notice-dismiss ' ) > -1 ) {
14
+ turnOff();
15
+ }
16
+ });
17
+ }
18
+ setTimeout( turnOff, 4000 );
19
+ })();
20
+ </script>
views/notification-css.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+ #om-cybermonday-notice {
3
+ display: block;
4
+ text-align: center;
5
+ position: relative;
6
+ overflow: hidden;
7
+ }
8
+ #om-cybermonday-notice p {
9
+ font-size: 1.3em;
10
+ margin: 1.5em 0 1em;
11
+ }
12
+ #om-cybermonday-notice a {
13
+ border: 0;
14
+ text-decoration: none;
15
+ display: block;
16
+ margin: 15px auto 8px;
17
+ max-width: 510px;
18
+ background: #0b82de;
19
+ font-size: 1.2em;
20
+ padding: 0.65rem 1.25rem .75rem;
21
+ color: #fff;
22
+ text-align: center;
23
+ border-radius: 3px;
24
+ color: #fff !important;
25
+ }
26
+ #archie-peeking {
27
+ position: absolute;
28
+ bottom: -31px;
29
+ right: -44px;
30
+ width: 120px;
31
+ height: auto;
32
+ -webkit-transform: rotate(-18deg);
33
+ transform: rotate(-18deg);
34
+ -webkit-animation: omring 6.5s 1s ease-in-out infinite;
35
+ -webkit-transform-origin: 40% 150px;
36
+ -moz-animation: omring 6.5s 1s ease-in-out infinite;
37
+ -moz-transform-origin: 40% 150px;
38
+ animation: omring 6.5s 1s ease-in-out infinite;
39
+ transform-origin: 40% 150px;
40
+ }
41
+ @-webkit-keyframes omring{
42
+ 0%{transform:rotate(-18deg)}
43
+ 1%{transform:rotate(-20deg)}
44
+ 2%{transform:rotate(-10deg)}
45
+ 3%{transform:rotate(-20deg)}
46
+ 4%{transform:rotate(-10deg)}
47
+ 5%{transform:rotate(-18deg)}
48
+ 6%{transform:rotate(-12deg)}
49
+ 7%{transform:rotate(-17deg)}
50
+ 8%{transform:rotate(-14deg)}
51
+ 9%{transform:rotate(-16deg)}
52
+ 10%{transform:rotate(-18deg)}
53
+ 100%{transform:rotate(-18deg)}
54
+ }
55
+ @-moz-keyframes omring{
56
+ 0%{transform:rotate(-18deg)}
57
+ 1%{transform:rotate(-20deg)}
58
+ 2%{transform:rotate(-10deg)}
59
+ 3%{transform:rotate(-20deg)}
60
+ 4%{transform:rotate(-10deg)}
61
+ 5%{transform:rotate(-18deg)}
62
+ 6%{transform:rotate(-12deg)}
63
+ 7%{transform:rotate(-17deg)}
64
+ 8%{transform:rotate(-14deg)}
65
+ 9%{transform:rotate(-16deg)}
66
+ 10%{transform:rotate(-18deg)}
67
+ 100%{transform:rotate(-18deg)}
68
+ }
69
+ @keyframes omring{
70
+ 0%{transform:rotate(-18deg)}
71
+ 1%{transform:rotate(-20deg)}
72
+ 2%{transform:rotate(-10deg)}
73
+ 3%{transform:rotate(-20deg)}
74
+ 4%{transform:rotate(-10deg)}
75
+ 5%{transform:rotate(-18deg)}
76
+ 6%{transform:rotate(-12deg)}
77
+ 7%{transform:rotate(-17deg)}
78
+ 8%{transform:rotate(-14deg)}
79
+ 9%{transform:rotate(-16deg)}
80
+ 10%{transform:rotate(-18deg)}
81
+ 100%{transform:rotate(-18deg)}
82
+ }
83
+ </style>
views/notification-pulse-css.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+ .om-pulse{
3
+ text-align: center;
4
+ cursor: pointer;
5
+ z-index: 99;
6
+ left: 123px;
7
+ top: 7px;
8
+ }
9
+ .om-pulse, .om-pulse:before {
10
+ display: inline-block;
11
+ width: 12px;
12
+ height: 12px;
13
+ border-radius: 100%;
14
+ background-color: #74ba0d;
15
+ position: absolute;
16
+ top: 7px;
17
+ right: 40px;
18
+ }
19
+ .om-pulse:before {
20
+ content: '';
21
+ border: 1px solid #74ba0d;
22
+ left: -3px;
23
+ top: -3px;
24
+ width: 16px;
25
+ height: 16px;
26
+ background: transparent;
27
+ }
28
+ .om-pulse:after{
29
+ content: '';
30
+ position: absolute;
31
+ top: -2px;
32
+ left: -2px;
33
+ width: 16px;
34
+ height: 16px;
35
+ background-color: #7dd004;
36
+ border-radius: 100%;
37
+ z-index: -1;
38
+ animation: ompulse 2s infinite;
39
+ will-change: transform;
40
+ }
41
+
42
+ .om-pulse:hover:after{
43
+ animation: none;
44
+ }
45
+
46
+ @-webkit-keyframes ompulse{
47
+ 0%{transform: scale(1);opacity: 1;}
48
+ 100%{transform: scale(2);opacity: 0;}
49
+ }
50
+ @-moz-keyframes ompulse{
51
+ 0%{transform: scale(1);opacity: 1;}
52
+ 100%{transform: scale(2);opacity: 0;}
53
+ }
54
+ @keyframes ompulse{
55
+ 0%{transform: scale(1);opacity: 1;}
56
+ 100%{transform: scale(2);opacity: 0;}
57
+ }
58
+ </style>
views/notification.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="om-cybermonday-notice" class="notice notice-info is-dismissible">
2
+ <p>
3
+ <img id="archie-peeking" src="<?php echo $this->url; ?>assets/css/images/dashboard-icon.png" alt="<?php esc_attr_e( 'Archie, OptinMonster Mascot', 'optin-monster-api' ); ?>">
4
+ OptinMonster Black Friday / Cyber Monday special - <strong>35% off</strong> all purchases, upgrades and pre-payments!
5
+ <a
6
+ href="<?php echo esc_url( $data['url'] ); ?>"
7
+ target="_blank" rel="noopener"
8
+ title="Click here to claim your Cyber Monday deal."
9
+ >Click here to claim your deal &rarr;</a>
10
+ </p>
11
+ </div>
views/plugin-banner.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script src="//use.typekit.net/pef1xgi.js"></script>
2
+ <script>try{Typekit.load();}catch(e){}</script>
3
+ <div class="omapi-static-banner">
4
+ <div class="inner-container">
5
+ <div class="logo-wrapper">
6
+ <?php require dirname( __FILE__ ) . '/logo.svg' ?>
7
+ <span class="omapi-logo-version">
8
+ <?php printf( esc_html__( 'v%s', 'optin-monster-api' ), $this->version ); ?>
9
+ <?php if ( $this->beta_version() ) : ?>
10
+ &mdash; <strong>Beta Version: <?php echo $this->beta_version(); ?></strong>
11
+ <?php endif; ?>
12
+ </span>
13
+ </div>
14
+ <div class="static-menu">
15
+ <ul>
16
+ <li>
17
+ <a target="_blank" rel="noopener" href="https://optinmonster.com/docs/"><?php esc_html_e( 'Need Help?', 'optin-monster-api' ); ?> </a>
18
+ </li>
19
+ <li>
20
+ <a href="https://optinmonster.com/contact-us/" target="_blank" rel="noopener"><?php esc_html_e( 'Send Us Feedback', 'optin-monster-api' ); ?></a>
21
+ </li>
22
+ <?php if ( $this->get_api_credentials() ) : ?>
23
+ <li class="omapi-menu-button">
24
+ <a id="omapi-create-new-optin-button" href="<?php echo esc_url( OPTINMONSTER_APP_URL . '/campaigns/new/' ); ?>" class="button button-secondary omapi-new-optin" title="<?php echo esc_attr_e( 'Create New Campaign', 'optin-monster-api' ); ?>" rel="noopener"><?php esc_html_e( 'Create New Campaign', 'optin-monster-api' ); ?></a>
25
+ </li>
26
+ <?php endif; ?>
27
+ </ul>
28
+ </div>
29
+ </div>
30
+ </div>
views/review.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="notice notice-info is-dismissible om-review-notice">
2
+ <div class="om-notice-wrap">
3
+ <h3><?php esc_html_e( 'Are you enjoying OptinMonster?', 'optin-monster-api' ); ?></h3>
4
+ <p style="margin-bottom:0">
5
+ <a href="#" class="button button-primary om-review-btns" data-res="yes" rel="noopener"><?php esc_html_e( 'Yes!', 'optin-monster-api' ); ?> 🙂</a>
6
+ <a href="#" class="button button-secondary om-review-btns" data-res="no" target="_blank" rel="noopener"><?php esc_html_e( 'Not Really!', 'optin-monster-api' ); ?></a>
7
+ <?php if ( ! $this->get_api_credentials() ) : ?>
8
+ <a href="<?php echo esc_url( $this->welcome->get_link() ); ?>" class="om-dismiss-review-notice om-dismiss-review-notice-delay button button-secondary" rel="noopener">
9
+ <?php esc_html_e( 'What is OptinMonster?', 'optin-monster-api' ); ?>
10
+ </a>
11
+ <?php endif; ?>
12
+ </p>
13
+ </div>
14
+ <br>
15
+ <div class="om-notice-review">
16
+ <div class="om-steps om-step-yes" style="display: none">
17
+ <p><?php esc_html_e( 'That\'s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'optin-monster-api' ); ?></p>
18
+ <p><strong>~ Thomas Griffin<br><?php printf( esc_html__( 'Co-Founder of %1$s', 'optin-monster-api' ), 'OptinMonster' ); ?></strong></p>
19
+ <p>
20
+ <a href="https://wordpress.org/support/plugin/optinmonster/reviews/?filter=5#new-post" class="om-dismiss-review-notice button button-primary" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Ok, you deserve it', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
21
+ <a href="#" class="om-dismiss-review-notice om-dismiss-review-notice-delay" rel="noopener noreferrer"><?php esc_html_e( 'Nope, maybe later!', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
22
+ <a href="#" class="om-dismiss-review-notice" rel="noopener noreferrer"><?php esc_html_e( 'I already did!', 'optin-monster-api' ); ?></a>
23
+ </p>
24
+ </div>
25
+ <div class="om-steps om-step-no" style="display: none">
26
+ <p><?php printf( esc_html__( 'We\'re sorry to hear you aren\'t enjoying %1$s. We would love a chance to improve. Could you take a minute and let us know what we can do better?', 'optin-monster-api' ), 'OptinMonster' ); ?></p>
27
+ <p>
28
+ <a href="https://optinmonster.com/plugin-review-feedback/" class="om-dismiss-review-notice button button-primary" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Give feedback', 'optin-monster-api' ); ?></a>&nbsp;&nbsp;
29
+ <a href="#" class="om-dismiss-review-notice" rel="noopener noreferrer"><?php esc_html_e( 'No thanks!', 'optin-monster-api' ); ?></a>
30
+ </p>
31
+ </div>
32
+ </div>
33
+ </div>
views/trustpulse-settings-page.php CHANGED
@@ -1,12 +1,21 @@
1
  <div id="wrap" class="trustpulse-wrap">
2
  <h1 class="tp-heading">Boost Your Sales and Conversions with Social Proof Notifications</h1>
3
  <div class="tp-admin-box">
4
- <p>
5
- TrustPulse helps you leverage the true power of social proof to instantly increase trust, conversions and sales by up to 15%
6
- </p>
7
- <div class="tp-content-row">
8
- <a target="_blank" rel="noopener" href="<?php echo TRUSTPULSE_APP_URL; ?>checkout/1/monthly/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="tp-content-row__item tp-button tp-button--green">Get Started For Free</a>
9
- </div>
 
 
 
 
 
 
 
 
 
10
  </div>
11
  <h2 class="tp-heading">Top 4 Reasons Why People Love TrustPulse</h2>
12
  <p class="tp-subheading">Here's why smart business owners love TrustPulse, and you will too!</p>
@@ -62,12 +71,4 @@
62
  <img class="tp-works-on__icon" src="<?php echo $this->url . 'assets/css/images/logo-formidable.png'; ?>" alt="Formidable">
63
  </div>
64
  </div>
65
- <div class="tp-admin-box">
66
- <p>
67
- Join other smart business owners who use TrustPulse to convert visitors into subscribers and customers.
68
- </p>
69
- <div class="tp-content-row">
70
- <a target="_blank" rel="noopener" href="<?php echo TRUSTPULSE_APP_URL; ?>checkout/1/monthly/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="tp-content-row__item tp-button tp-button--green">Get Started For Free</a>
71
- </div>
72
- </div>
73
  </div>
1
  <div id="wrap" class="trustpulse-wrap">
2
  <h1 class="tp-heading">Boost Your Sales and Conversions with Social Proof Notifications</h1>
3
  <div class="tp-admin-box">
4
+ <p>TrustPulse helps you leverage the true power of social proof to instantly increase trust, conversions and sales by up to 15%</p>
5
+ <div class="notice notice-error" style="display:none;" id="om-plugin-alerts"></div>
6
+ <form class="install-plugin-form">
7
+ <?php wp_nonce_field( 'install_plugin', 'nonce' ); ?>
8
+ <input type="hidden" name="plugin" value="trustpulse-api/trustpulse.php">
9
+ <input type="hidden" name="url" value="https://downloads.wordpress.org/plugin/trustpulse-api.zip">
10
+
11
+ <?php if ( $data['has_plugin'] ) : ?>
12
+ <input type="hidden" name="action" value="activate">
13
+ <button type="submit" id="activateButton" class="button button-primary button-activate">Activate the TrustPulse Plugin</button>
14
+ <?php else : ?>
15
+ <input type="hidden" name="action" value="install">
16
+ <button type="submit" id="installButton" class="button button-primary button-install">Install & Activate the TrustPulse Plugin</button>
17
+ <?php endif; ?>
18
+ </form>
19
  </div>
20
  <h2 class="tp-heading">Top 4 Reasons Why People Love TrustPulse</h2>
21
  <p class="tp-subheading">Here's why smart business owners love TrustPulse, and you will too!</p>
71
  <img class="tp-works-on__icon" src="<?php echo $this->url . 'assets/css/images/logo-formidable.png'; ?>" alt="Formidable">
72
  </div>
73
  </div>
 
 
 
 
 
 
 
 
74
  </div>
views/welcome.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="omapi-welcome-content">
2
+ <div class="inner-container">
3
+ <h1><?php esc_html_e( 'Welcome to OptinMonster', 'optin-monster-api' ); ?></h1>
4
+
5
+ <div class="omapi-well welcome-connect">
6
+ <p><?php esc_html_e( 'Please connect to or create an OptinMonster account to start using OptinMonster. This will enable you to start turning website visitors into subscribers & customers.', 'optin-monster-api' ); ?></p>
7
+ <div class="actions">
8
+ <a class="button button-omapi-green button-hero" href="<?php echo $data['button_link']; ?>" target="_blank"><?php echo $data['button_text']; ?></a>
9
+ <span class="or">or</span>
10
+ <a class="button button-omapi-gray button-hero omapi-authorize-button" href="<?php echo $data['api_link']; ?>"><?php esc_html_e( 'Connect Your Account', 'optin-monster-api' ) ?></a>
11
+ </div>
12
+ </div>
13
+ <div id="js__omapi-video-well" class="omapi-well welcome-data-vid">
14
+ <h2><?php esc_html_e( 'Get More Email Subscribers, FAST!', 'optin-monster-api' ); ?></h2>
15
+ <p><?php esc_html_e( 'OptinMonster helps you convert abandoning website visitors into email subscribers with smart web forms and behavior personalization.', 'optin-monster-api' ); ?></p>
16
+ <div class="actions">
17
+ <a id="js_omapi-welcome-video-link" class="omapi-video-link" href="https://www.youtube.com/embed/jbP9C9bQtv4?rel=0&amp;controls=0&amp;showinfo=0&amp;autoplay=1">
18
+ <img width="188" src="<?php echo plugins_url( '/assets/css/images/video-cta-button.png', OMAPI_FILE ) ?>">
19
+ </a>
20
+ </div>
21
+ <div class="omapi-welcome-video-holder">
22
+ <iframe id="js__omapi-welcome-video-frame" width="640" height="360" src="" frameborder="0" allowfullscreen></iframe>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="omapi-sub-title">
27
+ <h2><?php esc_html_e( 'Top 4 Reasons Why People Love OptinMonster', 'optin-monster-api' ); ?></h2>
28
+ <p><?php esc_html_e( 'Here\'s why smart business owners love OptinMonster, and you will too!', 'optin-monster-api' ); ?></p>
29
+ </div>
30
+ <div class="divider"></div>
31
+
32
+ <div class="omapi-feature-box omapi-clear">
33
+ <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-builder.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Form Builder', 'optin-monster-api' ); ?>" /></div>
34
+ <div class="omapi-feature-text">
35
+ <h3><?php esc_html_e( 'Build high converting forms in minutes, not hours', 'optin-monster-api' ); ?></h3>
36
+ <p><?php esc_html_e( 'Create visually stunning optin forms that are optimized for the highest conversion rates.', 'optin-monster-api' ); ?></p>
37
+ <p><?php esc_html_e( 'You can create various types of optin forms such as lightbox popups, floating bars, slide-ins, and more.', 'optin-monster-api' ); ?></p>
38
+ </div>
39
+ </div>
40
+
41
+ <div class="omapi-feature-box omapi-clear">
42
+ <div class="omapi-feature-text">
43
+ <h3><?php esc_html_e( 'Convert abandoning visitors into subscribers & customers', 'optin-monster-api' ); ?></h3>
44
+ <p><?php esc_html_e( 'Did you know that over 70% of visitors who abandon your website will never return?', 'optin-monster-api' ); ?></p>
45
+ <p><?php esc_html_e( 'Our exit-intent&reg; technology detects user behavior and prompts them with a targeted campaign at the precise moment they are about to leave.', 'optin-monster-api' ); ?></p>
46
+ </div>
47
+ <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-exit-animated.gif', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Exit Intent Technology', 'optin-monster-api' ); ?>" /></div>
48
+ </div>
49
+
50
+ <div class="omapi-feature-box omapi-clear">
51
+ <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-ab-testing.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster uses smart A/B testing', 'optin-monster-api' ); ?>" /></div>
52
+ <div class="omapi-feature-text">
53
+ <h3><?php esc_html_e( 'Easily A/B test your ideas and increase conversions', 'optin-monster-api' ); ?></h3>
54
+ <p><?php esc_html_e( 'A/B testing helps you eliminate the guess work and make data-driven decisions on what works best.', 'optin-monster-api' ); ?></p>
55
+ <p><?php esc_html_e( 'Try different content, headlines, layouts, and styles to see what converts best with our smart and easy to use A/B testing tool.', 'optin-monster-api' ); ?></p>
56
+ </div>
57
+ </div>
58
+
59
+ <div class="omapi-feature-box omapi-clear">
60
+ <div class="omapi-feature-text">
61
+ <h3><?php esc_html_e( 'Measuring your results has never been easier', 'optin-monster-api' ); ?></h3>
62
+ <p><?php esc_html_e( 'Get the stats that matter and take action to imrpove your lead-generation strategy.', 'optin-monster-api' ); ?></p>
63
+ <p><?php esc_html_e( 'Our built-in analytics help you analyze clicks, views, and overall conversion rates for each page and optin form.', 'optin-monster-api' ); ?></p>
64
+ </div>
65
+ <div class="omapi-feature-image"><img src="<?php echo plugins_url( '/assets/css/images/features-analytics.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster Segmenting with Page Level Targeting', 'optin-monster-api' ); ?>" /></div>
66
+ </div>
67
+
68
+ <div class="omapi-single-cta">
69
+ <a class="button button-omapi-green button-hero" href="<?php echo $data['button_link']; ?>" target="_blank"><?php echo $data['button_text']; ?></a>
70
+ </div>
71
+ <div class="omapi-well welcome-featuredin">
72
+ <h2><?php esc_html_e( 'OptinMonster has been featured in:', 'optin-monster-api' ); ?></h2>
73
+ <img src="<?php echo plugins_url( '/assets/css/images/featured-logos.png', OMAPI_FILE ); ?>" alt="<?php esc_attr_e( 'OptinMonster has been featured in Inc., Forbes, VB, Yahoo, Entrepreneur, Huff Post, and more', 'optin-monster-api' ); ?>" />
74
+ </div>
75
+
76
+ <div class="omapi-reviews">
77
+ <div class="omapi-well omapi-mini-well">
78
+ <div class="omapi-talking-head">
79
+ <img src="<?php echo plugins_url( '/assets/css/images/michaelstelzner.png', OMAPI_FILE ); ?>">
80
+ </div>
81
+ <p class="ompai-review">
82
+ <?php _e( '<strong>We added more than 95,000 names to our email list</strong> using OptinMonster\'s Exit Intent&reg; technology. We strongly recommend it!', 'optin-monster-api' ); ?>
83
+ <span class="reviewer-name"><?php esc_html_e( 'Michael Stelzner', 'optin-monster-api' ); ?></span>
84
+ <span class="reviewer-title"><?php esc_html_e( 'Founder Social Media Examiner', 'optin-monster-api' ); ?></span>
85
+ </p>
86
+ </div>
87
+ <div class="omapi-well omapi-mini-well">
88
+ <div class="omapi-talking-head">
89
+ <img src="<?php echo plugins_url( '/assets/css/images/neilpatel.png', OMAPI_FILE ); ?>">
90
+ </div>
91
+ <p class="ompai-review">
92
+ <?php _e( 'Exit Intent&reg; popups have doubled my email opt-in rate. <strong>When done right, you can see an instant 10% lift on driving sales.</strong> I highly recommend that you use OptinMonster for growing your email list and sales.', 'optin-monster-api' ); ?>
93
+ <span class="reviewer-name"><?php esc_html_e( 'Neil Patel', 'optin-monster-api' ); ?></span>
94
+ <span class="reviewer-title"><?php esc_html_e( 'Founder QuickSprout', 'optin-monster-api' ); ?></span>
95
+ </p>
96
+ </div>
97
+ <div class="omapi-well omapi-mini-well">
98
+ <div class="omapi-talking-head">
99
+ <img src="<?php echo plugins_url( '/assets/css/images/matthewwoodward.png', OMAPI_FILE ); ?>">
100
+ </div>
101
+ <p class="ompai-review">
102
+ <?php _e( 'OptinMonster played a critical role in increasing my email optin conversion rate by 469%. In real numbers, <strong>that is the difference between $7,765 and $47,748 per month.</strong>', 'optin-monster-api' ); ?>
103
+ <span class="reviewer-name"><?php esc_html_e( 'Matthew Woodward', 'optin-monster-api' ); ?></span>
104
+ <span class="reviewer-title"><?php esc_html_e( 'SEO Expert', 'optin-monster-api' ); ?></span>
105
+ </p>
106
+ </div>
107
+ </div>
108
+
109
+ <div class="omapi-well welcome-connect">
110
+ <p><?php esc_html_e( 'Join the thousands of users who use OptinMonster to convert abandoning website visitors into subscribers and customers.', 'optin-monster-api' ); ?></p>
111
+ <div class="actions">
112
+ <a class="button button-omapi-green button-hero" href="<?php echo $data['button_link']; ?>" target="_blank"><?php echo $data['button_text']; ?></a>
113
+ <span class="or">or</span>
114
+ <a class="button button-omapi-gray button-hero omapi-authorize-button" href="<?php echo $data['api_link']; ?>"><?php esc_html_e( 'Connect Your Account', 'optin-monster-api' ) ?></a>
115
+ </div>
116
+ </div>
117
+
118
+ </div>
119
+
120
+ <form style="display:none" method="post" action="<?php echo esc_url( add_query_arg( 'optin_monster_api_view', 'api', $data['api_link'] ) ); ?>">
121
+ <?php wp_nonce_field( 'omapi_nonce_api', 'omapi_nonce_api' ); ?>
122
+ <input type="hidden" name="omapi_panel" value="api" />
123
+ <input type="hidden" name="omapi_save" value="true" />
124
+ <input type="password" id="omapi-field-apikey" name="omapi[api][apikey]" />
125
+ </form>
126
+ </div>