Contact Form & SMTP Plugin for WordPress by PirateForms - Version 2.2.4

Version Description

  • 2017-11-13
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 Contact Form & SMTP Plugin for WordPress by PirateForms
Version 2.2.4
Comparing to
See all releases

Code changes from version 2.2.3 to 2.2.4

CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
 
 
 
 
 
 
 
 
 
2
  ### v2.2.3 - 2017-10-24
3
  **Changes:**
4
  * Improves compatibility with Hestia theme.
1
 
2
+ ### v2.2.4 - 2017-11-13
3
+ **Changes:**
4
+ * Improved assets loading, loading them only they are necessary.
5
+ * Remove hide/show effect for reCaptcha.
6
+ * Add toggle for password field.
7
+ * Add new docs, keeping them in sync with HelpScout .
8
+ * Adds more integration with the pro version.
9
+
10
  ### v2.2.3 - 2017-10-24
11
  **Changes:**
12
  * Improves compatibility with Hestia theme.
admin/class-pirateforms-admin.php CHANGED
@@ -207,7 +207,7 @@ class PirateForms_Admin {
207
  if ( isset( $zerif_contactus_recaptcha_show ) && ( $zerif_contactus_recaptcha_show == '1' ) ) :
208
  $pirate_forms_contactus_recaptcha_show = '';
209
  else :
210
- $pirate_forms_contactus_recaptcha_show = 'yes';
211
  endif;
212
  $zerif_contactus_button_label = get_theme_mod( 'zerif_contactus_button_label', __( 'Send Message', 'pirate-forms' ) );
213
  if ( ! empty( $zerif_contactus_button_label ) ) :
@@ -532,7 +532,7 @@ class PirateForms_Admin {
532
  'value' => PirateForms_Util::get_option( 'pirateformsopt_recaptcha_secretkey' ),
533
  'wrap' => array(
534
  'type' => 'div',
535
- 'class' => 'pirate-forms-grouped pirateformsopt_recaptcha',
536
  ),
537
  ),
538
  )
@@ -881,7 +881,7 @@ class PirateForms_Admin {
881
  if ( isset( $params['pirateformsopt_email_recipients'] ) ) :
882
  $pirate_forms_zerif_lite_mods['zerif_contactus_email'] = $params['pirateformsopt_email_recipients'];
883
  endif;
884
- if ( isset( $params['pirateformsopt_recaptcha_field'] ) && ( $params['pirateformsopt_recaptcha_field'] == 'yes' ) ) :
885
  $pirate_forms_zerif_lite_mods['zerif_contactus_recaptcha_show'] = 0;
886
  else :
887
  $pirate_forms_zerif_lite_mods['zerif_contactus_recaptcha_show'] = 1;
207
  if ( isset( $zerif_contactus_recaptcha_show ) && ( $zerif_contactus_recaptcha_show == '1' ) ) :
208
  $pirate_forms_contactus_recaptcha_show = '';
209
  else :
210
+ $pirate_forms_contactus_recaptcha_show = 'custom';
211
  endif;
212
  $zerif_contactus_button_label = get_theme_mod( 'zerif_contactus_button_label', __( 'Send Message', 'pirate-forms' ) );
213
  if ( ! empty( $zerif_contactus_button_label ) ) :
532
  'value' => PirateForms_Util::get_option( 'pirateformsopt_recaptcha_secretkey' ),
533
  'wrap' => array(
534
  'type' => 'div',
535
+ 'class' => 'pirate-forms-grouped pirateformsopt_recaptcha pirate-forms-password-toggle',
536
  ),
537
  ),
538
  )
881
  if ( isset( $params['pirateformsopt_email_recipients'] ) ) :
882
  $pirate_forms_zerif_lite_mods['zerif_contactus_email'] = $params['pirateformsopt_email_recipients'];
883
  endif;
884
+ if ( isset( $params['pirateformsopt_recaptcha_field'] ) && ( $params['pirateformsopt_recaptcha_field'] == 'custom' ) ) :
885
  $pirate_forms_zerif_lite_mods['zerif_contactus_recaptcha_show'] = 0;
886
  else :
887
  $pirate_forms_zerif_lite_mods['zerif_contactus_recaptcha_show'] = 1;
admin/css/pirate-forms-extended-mailchimp-integration.jpg CHANGED
Binary file
admin/css/wp-admin.css CHANGED
@@ -368,3 +368,7 @@ input#save.pirate-forms-save-button {
368
  margin-right: 10px;
369
  margin-left: 5px;
370
  }
 
 
 
 
368
  margin-right: 10px;
369
  margin-left: 5px;
370
  }
371
+
372
+ .pirate-forms-password-toggle span.dashicons {
373
+ cursor: pointer;
374
+ }
admin/js/scripts-admin.js CHANGED
@@ -2,6 +2,10 @@
2
  /* global console */
3
 
4
  jQuery(document).ready(function() {
 
 
 
 
5
  jQuery('.pirate-forms-nav-tabs a').click(function (event) {
6
  event.preventDefault();
7
  jQuery(this).parent().addClass('active');
@@ -107,4 +111,16 @@ jQuery(document).ready(function() {
107
  }
108
  });
109
 
110
- });
 
 
 
 
 
 
 
 
 
 
 
 
2
  /* global console */
3
 
4
  jQuery(document).ready(function() {
5
+ initAll();
6
+ });
7
+
8
+ function initAll(){
9
  jQuery('.pirate-forms-nav-tabs a').click(function (event) {
10
  event.preventDefault();
11
  jQuery(this).parent().addClass('active');
111
  }
112
  });
113
 
114
+ // add visibility toggle to password type fields
115
+ jQuery('.pirate-forms-password-toggle').append('<span class="dashicons dashicons-visibility"></span>');
116
+ jQuery('.pirate-forms-password-toggle span').on('click', function(){
117
+ var span = jQuery(this);
118
+ if(span.hasClass('dashicons-visibility')){
119
+ span.parent().find('input[type="password"]').attr('type', 'text');
120
+ span.removeClass('dashicons-visibility').addClass('dashicons-hidden');
121
+ }else{
122
+ span.parent().find('input[type="text"]').attr('type', 'password');
123
+ span.removeClass('dashicons-hidden').addClass('dashicons-visibility');
124
+ }
125
+ });
126
+ }
admin/partials/upsell.php CHANGED
@@ -26,8 +26,8 @@ Layout For Upsell Page of Pirate forms
26
  </div>
27
  <div class="pro-feature">
28
  <div class="pro-feature-features">
29
- <h2>MailChimp Integraton</h2>
30
- <p>Send your visitors details directly to MailChimp and connect with them via various emailing campaigns.
31
  </p>
32
  </div>
33
  <div class="pro-feature-image">
26
  </div>
27
  <div class="pro-feature">
28
  <div class="pro-feature-features">
29
+ <h2>Multiple Integrations</h2>
30
+ <p>Send your visitors details directly to MailChimp, GetResponse, Aweber or Sendinblue and connect with them via various emailing campaigns.
31
  </p>
32
  </div>
33
  <div class="pro-feature-image">
includes/class-pirateforms.php CHANGED
@@ -69,7 +69,7 @@ class PirateForms {
69
  public function __construct() {
70
 
71
  $this->plugin_name = 'pirateforms';
72
- $this->version = '2.2.3';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
69
  public function __construct() {
70
 
71
  $this->plugin_name = 'pirateforms';
72
+ $this->version = '2.2.4';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
pirate-forms.php CHANGED
@@ -16,7 +16,7 @@
16
  * Plugin Name: Free & Simple Contact Form Plugin - Pirateforms
17
  * Plugin URI: http://themeisle.com/plugins/pirate-forms/
18
  * Description: Easily creates a nice looking, simple contact form on your WP site.
19
- * Version: 2.2.3
20
  * Author: Themeisle
21
  * Author URI: http://themeisle.com
22
  * Text Domain: pirate-forms
@@ -36,7 +36,7 @@ if ( ! defined( 'WPINC' ) ) {
36
  define( 'PIRATEFORMS_NAME', 'Pirate Forms' );
37
  define( 'PIRATEFORMS_SLUG', 'pirate-forms' );
38
  define( 'PIRATEFORMS_USELL_LINK', 'https://themeisle.com/plugins/pirate-forms-extended/' );
39
- define( 'PIRATE_FORMS_VERSION', '2.2.3' );
40
  define( 'PIRATEFORMS_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) );
41
  define( 'PIRATEFORMS_URL', plugin_dir_url( __FILE__ ) );
42
  define( 'PIRATEFORMS_BASENAME', plugin_basename( __FILE__ ) );
16
  * Plugin Name: Free & Simple Contact Form Plugin - Pirateforms
17
  * Plugin URI: http://themeisle.com/plugins/pirate-forms/
18
  * Description: Easily creates a nice looking, simple contact form on your WP site.
19
+ * Version: 2.2.4
20
  * Author: Themeisle
21
  * Author URI: http://themeisle.com
22
  * Text Domain: pirate-forms
36
  define( 'PIRATEFORMS_NAME', 'Pirate Forms' );
37
  define( 'PIRATEFORMS_SLUG', 'pirate-forms' );
38
  define( 'PIRATEFORMS_USELL_LINK', 'https://themeisle.com/plugins/pirate-forms-extended/' );
39
+ define( 'PIRATE_FORMS_VERSION', '2.2.4' );
40
  define( 'PIRATEFORMS_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) );
41
  define( 'PIRATEFORMS_URL', plugin_dir_url( __FILE__ ) );
42
  define( 'PIRATEFORMS_BASENAME', plugin_basename( __FILE__ ) );
public/class-pirateforms-public.php CHANGED
@@ -74,7 +74,7 @@ class PirateForms_Public {
74
  public function enqueue_styles_and_scripts() {
75
 
76
  /* style for frontpage contact */
77
- wp_enqueue_style( 'pirate_forms_front_styles', PIRATEFORMS_URL . 'public/css/front.css', array(), $this->version );
78
  /* recaptcha js */
79
  $deps = array( 'jquery' );
80
  $pirate_forms_options = get_option( 'pirate_forms_settings_array' );
@@ -85,14 +85,14 @@ class PirateForms_Public {
85
  } else {
86
  $pirate_forms_contactus_language = get_locale();
87
  }
88
- wp_enqueue_script( 'recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $pirate_forms_contactus_language . '' );
89
  $deps[] = 'recaptcha';
90
  endif;
91
  endif;
92
 
93
- wp_enqueue_script( 'pirate_forms_scripts', PIRATEFORMS_URL . 'public/js/scripts.js', $deps, $this->version );
94
 
95
- wp_enqueue_script( 'pirate_forms_scripts_general', PIRATEFORMS_URL . 'public/js/scripts-general.js', array( 'jquery' ), $this->version );
96
  $pirate_forms_errors = '';
97
  if ( ! empty( $_SESSION['pirate_forms_contact_errors'] ) ) :
98
  $pirate_forms_errors = $_SESSION['pirate_forms_contact_errors'];
@@ -114,6 +114,10 @@ class PirateForms_Public {
114
  * @since 1.0.0
115
  */
116
  public function display_form( $atts, $content = null ) {
 
 
 
 
117
  PirateForms_Util::session_start();
118
  $atts = shortcode_atts(
119
  array(
@@ -326,7 +330,7 @@ class PirateForms_Public {
326
  $elements[] = array(
327
  'placeholder' => stripslashes( sanitize_text_field( $label ) ),
328
  'type' => 'div',
329
- 'class' => 'g-recaptcha pirate-forms-g-recaptcha',
330
  'custom' => array( 'data-sitekey' => $pirateformsopt_recaptcha_sitekey ),
331
  'id' => 'pirate-forms-captcha',
332
  'wrap' => array(
@@ -790,7 +794,7 @@ class PirateForms_Public {
790
  $captcha = $_POST['g-recaptcha-response'];
791
  }
792
  if ( ! $captcha ) {
793
- $_SESSION[ $error_key ]['pirate-forms-captcha'] = __( 'Wrong reCAPTCHA', 'pirate-forms' );
794
 
795
  return false;
796
  }
@@ -802,7 +806,7 @@ class PirateForms_Public {
802
  $result = json_decode( $response_body, true );
803
  endif;
804
  if ( isset( $result['success'] ) && ( $result['success'] == false ) ) {
805
- $_SESSION[ $error_key ]['pirate-forms-captcha'] = __( 'Wrong reCAPTCHA', 'pirate-forms' );
806
 
807
  return false;
808
  }
74
  public function enqueue_styles_and_scripts() {
75
 
76
  /* style for frontpage contact */
77
+ wp_register_style( 'pirate_forms_front_styles', PIRATEFORMS_URL . 'public/css/front.css', array(), $this->version );
78
  /* recaptcha js */
79
  $deps = array( 'jquery' );
80
  $pirate_forms_options = get_option( 'pirate_forms_settings_array' );
85
  } else {
86
  $pirate_forms_contactus_language = get_locale();
87
  }
88
+ wp_register_script( 'recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $pirate_forms_contactus_language . '' );
89
  $deps[] = 'recaptcha';
90
  endif;
91
  endif;
92
 
93
+ wp_register_script( 'pirate_forms_scripts', PIRATEFORMS_URL . 'public/js/scripts.js', $deps, $this->version );
94
 
95
+ wp_register_script( 'pirate_forms_scripts_general', PIRATEFORMS_URL . 'public/js/scripts-general.js', array( 'jquery' ), $this->version );
96
  $pirate_forms_errors = '';
97
  if ( ! empty( $_SESSION['pirate_forms_contact_errors'] ) ) :
98
  $pirate_forms_errors = $_SESSION['pirate_forms_contact_errors'];
114
  * @since 1.0.0
115
  */
116
  public function display_form( $atts, $content = null ) {
117
+ wp_enqueue_script( 'pirate_forms_scripts' );
118
+ wp_enqueue_script( 'pirate_forms_scripts_general' );
119
+ wp_enqueue_style( 'pirate_forms_front_styles' );
120
+
121
  PirateForms_Util::session_start();
122
  $atts = shortcode_atts(
123
  array(
330
  $elements[] = array(
331
  'placeholder' => stripslashes( sanitize_text_field( $label ) ),
332
  'type' => 'div',
333
+ 'class' => 'g-recaptcha pirate-forms-google-recaptcha',
334
  'custom' => array( 'data-sitekey' => $pirateformsopt_recaptcha_sitekey ),
335
  'id' => 'pirate-forms-captcha',
336
  'wrap' => array(
794
  $captcha = $_POST['g-recaptcha-response'];
795
  }
796
  if ( ! $captcha ) {
797
+ $_SESSION[ $error_key ]['pirate-forms-captcha'] = __( 'Invalid CAPTCHA', 'pirate-forms' );
798
 
799
  return false;
800
  }
806
  $result = json_decode( $response_body, true );
807
  endif;
808
  if ( isset( $result['success'] ) && ( $result['success'] == false ) ) {
809
+ $_SESSION[ $error_key ]['pirate-forms-captcha'] = __( 'Incorrect CAPTCHA', 'pirate-forms' );
810
 
811
  return false;
812
  }
public/css/front.css CHANGED
@@ -1,14 +1,10 @@
1
  /*
2
- Version: 2.2.3
3
  */
4
  .pirate_forms_wrap .form_field_wrap {
5
  margin-bottom: 20px;
6
  }
7
 
8
- .pirate-forms-g-recaptcha {
9
- display: none;
10
- }
11
-
12
  .pirate_forms_wrap {
13
  float: left;
14
  width: 100%;
1
  /*
2
+ Version: 2.2.4
3
  */
4
  .pirate_forms_wrap .form_field_wrap {
5
  margin-bottom: 20px;
6
  }
7
 
 
 
 
 
8
  .pirate_forms_wrap {
9
  float: left;
10
  width: 100%;
public/js/scripts.js CHANGED
@@ -1,26 +1,6 @@
1
  /* global jQuery */
2
  jQuery(document).ready(function() {
3
 
4
- /* show/hide reCaptcha */
5
-
6
- var thisOpen = false;
7
- jQuery('.pirate_forms .form-control').each(function(){
8
- if ( jQuery(this).val().length > 0 ){
9
- thisOpen = true;
10
- jQuery('.zerif-g-recaptcha').css('display','block').delay(1000).css('opacity','1');
11
- return false;
12
- }
13
- });
14
- if ( thisOpen === false && (typeof jQuery('.pirate_forms textarea').val() !== 'undefined') && (jQuery('.pirate_forms textarea').val().length > 0) ) {
15
- thisOpen = true;
16
- jQuery('.pirate-forms-g-recaptcha').css('display','block').delay(1000).css('opacity','1');
17
- }
18
- jQuery('.pirate_forms input, .pirate_forms textarea').focus(function(){
19
- if ( !jQuery('.pirate-forms-g-recaptcha').hasClass('recaptcha-display') ) {
20
- jQuery('.pirate-forms-g-recaptcha').css('display','block').delay(1000).css('opacity','1');
21
- }
22
- });
23
-
24
  jQuery('.pirate-forms-file-upload-button').on('click', function () {
25
  var $button = jQuery(this);
26
  $button.parent().find('input[type=file]').on('change', function(){
1
  /* global jQuery */
2
  jQuery(document).ready(function() {
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  jQuery('.pirate-forms-file-upload-button').on('click', function () {
5
  var $button = jQuery(this);
6
  $button.parent().find('input[type=file]').on('change', function(){
readme.md CHANGED
@@ -134,6 +134,15 @@ Activating the Pirate Contact Form plugin is just like any other plugin. If you'
134
  4. Screenshot 4. Enabling SMTP
135
 
136
  ## Changelog ##
 
 
 
 
 
 
 
 
 
137
  ### 2.2.3 - 2017-10-24 ###
138
 
139
  * Improves compatibility with Hestia theme.
134
  4. Screenshot 4. Enabling SMTP
135
 
136
  ## Changelog ##
137
+ ### 2.2.4 - 2017-11-13 ###
138
+
139
+ * Improved assets loading, loading them only they are necessary.
140
+ * Remove hide/show effect for reCaptcha.
141
+ * Add toggle for password field.
142
+ * Add new docs, keeping them in sync with HelpScout .
143
+ * Adds more integration with the pro version.
144
+
145
+
146
  ### 2.2.3 - 2017-10-24 ###
147
 
148
  * Improves compatibility with Hestia theme.
readme.txt CHANGED
@@ -86,6 +86,7 @@ This plugin started as a fork of https://wordpress.org/plugins/proper-contact-fo
86
 
87
  == Frequently Asked Questions ==
88
 
 
89
  = How I can get support for this contact form plugin ? =
90
 
91
  You can learn more about PirateForms and ask for help by <a href="https://themeisle.com/contact/" >visiting ThemeIsle website</a>.
@@ -113,7 +114,49 @@ You can follow the full documentation [here](http://docs.themeisle.com/article/4
113
  [http://docs.themeisle.com/article/663-what-actions-and-filters-are-available-in-pirate-forms](http://docs.themeisle.com/article/663-what-actions-and-filters-are-available-in-pirate-forms)
114
 
115
 
116
- == Installation ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
  Activating the Pirate Contact Form plugin is just like any other plugin. If you've uploaded the plugin package to your server already, skip to step 5 below:
119
 
@@ -134,6 +177,15 @@ Activating the Pirate Contact Form plugin is just like any other plugin. If you'
134
  4. Screenshot 4. Enabling SMTP
135
 
136
  == Changelog ==
 
 
 
 
 
 
 
 
 
137
  = 2.2.3 - 2017-10-24 =
138
 
139
  * Improves compatibility with Hestia theme.
86
 
87
  == Frequently Asked Questions ==
88
 
89
+
90
  = How I can get support for this contact form plugin ? =
91
 
92
  You can learn more about PirateForms and ask for help by <a href="https://themeisle.com/contact/" >visiting ThemeIsle website</a>.
114
  [http://docs.themeisle.com/article/663-what-actions-and-filters-are-available-in-pirate-forms](http://docs.themeisle.com/article/663-what-actions-and-filters-are-available-in-pirate-forms)
115
 
116
 
117
+ = Emails are not being sent, what can i do ? =
118
+ [http://docs.themeisle.com/article/690-emails-are-not-being-sent-what-can-i-do](http://docs.themeisle.com/article/690-emails-are-not-being-sent-what-can-i-do)
119
+
120
+ = Why do I not receive any emails? - Pirate Forms =
121
+ [http://docs.themeisle.com/article/729-why-do-i-not-receive-any-emails-pirate-forms](http://docs.themeisle.com/article/729-why-do-i-not-receive-any-emails-pirate-forms)
122
+
123
+ = How to add reCaptcha to a form in Pirate Forms =
124
+ [http://docs.themeisle.com/article/731-how-to-add-recaptcha-to-a-form-in-pirate-forms](http://docs.themeisle.com/article/731-how-to-add-recaptcha-to-a-form-in-pirate-forms)
125
+
126
+ = How to add Dropdown menu in Subject Field in Pirate Forms =
127
+ [http://docs.themeisle.com/article/725-how-to-add-dropdown-menu-in-subject-field-in-pirate-forms](http://docs.themeisle.com/article/725-how-to-add-dropdown-menu-in-subject-field-in-pirate-forms)
128
+
129
+ = How to save contacts in Mailchimp list in Pirate Forms =
130
+ [http://docs.themeisle.com/article/722-pirate-forms-how-to-save-contacts-in-mailchimp-list](http://docs.themeisle.com/article/722-pirate-forms-how-to-save-contacts-in-mailchimp-list)
131
+
132
+ = How to create a Form Widget in Pirate Forms =
133
+ [http://docs.themeisle.com/article/723-pirate-forms-how-to-create-a-form-widget](http://docs.themeisle.com/article/723-pirate-forms-how-to-create-a-form-widget)
134
+
135
+ = How to create a subscription form in Pirate Forms =
136
+ [http://docs.themeisle.com/article/721-pirate-forms-how-to-create-a-subscription-form](http://docs.themeisle.com/article/721-pirate-forms-how-to-create-a-subscription-form)
137
+
138
+ = How to create multiple forms in Pirate Forms =
139
+ [http://docs.themeisle.com/article/730-how-to-create-multiple-forms-in-pirate-forms](http://docs.themeisle.com/article/730-how-to-create-multiple-forms-in-pirate-forms)
140
+
141
+ = How to add multiple upload fields in Pirate Forms =
142
+ [http://docs.themeisle.com/article/734-how-to-add-multiple-upload-fields-in-pirate-forms](http://docs.themeisle.com/article/734-how-to-add-multiple-upload-fields-in-pirate-forms)
143
+
144
+ = How to add a spam trap in a form in Pirate Forms =
145
+ [http://docs.themeisle.com/article/732-how-to-add-a-spam-trap-in-a-form-in-pirate-forms](http://docs.themeisle.com/article/732-how-to-add-a-spam-trap-in-a-form-in-pirate-forms)
146
+
147
+ = How to change default confirmation email content in Pirate Forms =
148
+ [http://docs.themeisle.com/article/724-how-to-change-default-email-content-in-pirate-forms](http://docs.themeisle.com/article/724-how-to-change-default-email-content-in-pirate-forms)
149
+
150
+ = How to add checkbox field in Pirate Forms =
151
+ [http://docs.themeisle.com/article/733-how-to-add-checkbox-field-in-pirate-forms](http://docs.themeisle.com/article/733-how-to-add-checkbox-field-in-pirate-forms)
152
+
153
+ = How can I change HTML of default form in Pirate Forms =
154
+ [http://docs.themeisle.com/article/745-how-can-i-change-html-of-default-form-in-pirate-forms](http://docs.themeisle.com/article/745-how-can-i-change-html-of-default-form-in-pirate-forms)
155
+
156
+ = How to add attributes to form in Pirate Forms =
157
+ [http://docs.themeisle.com/article/752-how-to-add-attributes-to-form-in-pirate-forms](http://docs.themeisle.com/article/752-how-to-add-attributes-to-form-in-pirate-forms)
158
+
159
+ == Installation ==
160
 
161
  Activating the Pirate Contact Form plugin is just like any other plugin. If you've uploaded the plugin package to your server already, skip to step 5 below:
162
 
177
  4. Screenshot 4. Enabling SMTP
178
 
179
  == Changelog ==
180
+ = 2.2.4 - 2017-11-13 =
181
+
182
+ * Improved assets loading, loading them only they are necessary.
183
+ * Remove hide/show effect for reCaptcha.
184
+ * Add toggle for password field.
185
+ * Add new docs, keeping them in sync with HelpScout .
186
+ * Adds more integration with the pro version.
187
+
188
+
189
  = 2.2.3 - 2017-10-24 =
190
 
191
  * Improves compatibility with Hestia theme.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit418527605c85d2c1198711fa22e21975::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit14571eafe502c71276d0ab8843cfc460::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit6cafb48bf9ec24bd352ed0d2404ac643::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit2aa7ea888b30843b1e979ccd01f6d139::getLoader();
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-deactivate.php CHANGED
@@ -22,21 +22,21 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
22
  * @var array $options_plugin The main options list for plugins.
23
  */
24
  private $options_plugin = array(
25
- 'I only needed the plugin for a short period' => array(
26
  'id' => 1,
27
  ),
28
- 'The plugin broke my site' => array(
29
  'id' => 2,
30
  ),
31
- 'I found a better plugin' => array(
32
  'id' => 3,
33
  'type' => 'text',
34
  'placeholder' => 'What\'s the plugin\'s name?',
35
  ),
36
- 'The plugin suddenly stopped working' => array(
37
  'id' => 4,
38
  ),
39
- 'I no longer need the plugin' => array(
40
  'id' => 5,
41
  'type' => 'textarea',
42
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
@@ -50,13 +50,13 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
50
  * @var array $options_theme The main options list for themes.
51
  */
52
  private $options_theme = array(
53
- 'I don\'t know how to make it look like demo' => array(
54
  'id' => 7,
55
  ),
56
- 'It lacks options' => array(
57
  'id' => 8,
58
  ),
59
- 'Is not working with a plugin that I need' => array(
60
  'id' => 9,
61
  'type' => 'text',
62
  'placeholder' => 'What is the name of the plugin',
@@ -409,10 +409,10 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
409
 
410
  $list = '';
411
  foreach ( $options as $title => $attributes ) {
412
- $id = $attributes['id'];
413
  $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
414
  if ( array_key_exists( 'type', $attributes ) ) {
415
- $list .= '<div>';
416
  $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
417
  switch ( $attributes['type'] ) {
418
  case 'text':
@@ -431,7 +431,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
431
  . '<ul class="ti-list">' . $list . '</ul>'
432
  . '<div class="actions">'
433
  . get_submit_button(
434
- $button_submit_before , 'secondary', $this->product->get_key() . 'ti-deactivate-yes', false, array(
435
  'data-after-text' => $button_submit,
436
  )
437
  )
22
  * @var array $options_plugin The main options list for plugins.
23
  */
24
  private $options_plugin = array(
25
+ 'I only needed the plugin for a short period' => array(
26
  'id' => 1,
27
  ),
28
+ 'The plugin broke my site' => array(
29
  'id' => 2,
30
  ),
31
+ 'I found a better plugin' => array(
32
  'id' => 3,
33
  'type' => 'text',
34
  'placeholder' => 'What\'s the plugin\'s name?',
35
  ),
36
+ 'The plugin suddenly stopped working' => array(
37
  'id' => 4,
38
  ),
39
+ 'I no longer need the plugin' => array(
40
  'id' => 5,
41
  'type' => 'textarea',
42
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
50
  * @var array $options_theme The main options list for themes.
51
  */
52
  private $options_theme = array(
53
+ 'I don\'t know how to make it look like demo' => array(
54
  'id' => 7,
55
  ),
56
+ 'It lacks options' => array(
57
  'id' => 8,
58
  ),
59
+ 'Is not working with a plugin that I need' => array(
60
  'id' => 9,
61
  'type' => 'text',
62
  'placeholder' => 'What is the name of the plugin',
409
 
410
  $list = '';
411
  foreach ( $options as $title => $attributes ) {
412
+ $id = $attributes['id'];
413
  $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
414
  if ( array_key_exists( 'type', $attributes ) ) {
415
+ $list .= '<div>';
416
  $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
417
  switch ( $attributes['type'] ) {
418
  case 'text':
431
  . '<ul class="ti-list">' . $list . '</ul>'
432
  . '<div class="actions">'
433
  . get_submit_button(
434
+ $button_submit_before, 'secondary', $this->product->get_key() . 'ti-deactivate-yes', false, array(
435
  'data-after-text' => $button_submit,
436
  )
437
  )
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-factory.php CHANGED
@@ -21,7 +21,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Factory' ) ) :
21
  /**
22
  * @var array $instances collection of the instances that are registered with the factory
23
  */
24
- private $_instances = array();
25
 
26
  /**
27
  * ThemeIsle_SDK_Feedback_Factory constructor.
@@ -32,8 +32,8 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Factory' ) ) :
32
  public function __construct( $product_object, $feedback_types ) {
33
  if ( $product_object instanceof ThemeIsle_SDK_Product && $feedback_types && is_array( $feedback_types ) ) {
34
  foreach ( $feedback_types as $type ) {
35
- $class = 'ThemeIsle_SDK_Feedback_' . ucwords( $type );
36
- $instance = new $class( $product_object );
37
  $this->_instances[ $type ] = $instance;
38
  $instance->setup_hooks();
39
  }
21
  /**
22
  * @var array $instances collection of the instances that are registered with the factory
23
  */
24
+ private $_instances = array();
25
 
26
  /**
27
  * ThemeIsle_SDK_Feedback_Factory constructor.
32
  public function __construct( $product_object, $feedback_types ) {
33
  if ( $product_object instanceof ThemeIsle_SDK_Product && $feedback_types && is_array( $feedback_types ) ) {
34
  foreach ( $feedback_types as $type ) {
35
+ $class = 'ThemeIsle_SDK_Feedback_' . ucwords( $type );
36
+ $instance = new $class( $product_object );
37
  $this->_instances[ $type ] = $instance;
38
  $instance->setup_hooks();
39
  }
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-translate.php CHANGED
@@ -789,18 +789,20 @@ The process is easy, and you can join by following the link below!';
789
  function can_notify() {
790
  if ( ! $this->product->is_wordpress_available() ) {
791
  $this->disable();
792
-
793
  return false;
794
  }
795
  $show = get_option( $this->product->get_key() . '_translate_flag', 'yes' );
796
  if ( 'no' === $show ) {
797
  return false;
798
  }
799
- $lang = get_user_locale();
800
  if ( 'en_US' === $lang ) {
801
  return false;
802
  }
803
  $languages = $this->get_translations();
 
 
 
804
  if ( ! isset( $languages['translations'] ) ) {
805
  return false;
806
  }
@@ -817,6 +819,21 @@ The process is easy, and you can join by following the link below!';
817
  return true;
818
  }
819
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
820
  /**
821
  * Shows the notification
822
  */
@@ -914,7 +931,7 @@ The process is easy, and you can join by following the link below!';
914
  * @return void|string Html code of the notification.
915
  */
916
  function get_html( $key ) {
917
- $lang = get_user_locale();
918
  $link = $this->get_locale_paths( $lang );
919
  $heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', $this->heading );
920
  $product = $this->product->get_friendly_name();
789
  function can_notify() {
790
  if ( ! $this->product->is_wordpress_available() ) {
791
  $this->disable();
 
792
  return false;
793
  }
794
  $show = get_option( $this->product->get_key() . '_translate_flag', 'yes' );
795
  if ( 'no' === $show ) {
796
  return false;
797
  }
798
+ $lang = $this->get_user_locale();
799
  if ( 'en_US' === $lang ) {
800
  return false;
801
  }
802
  $languages = $this->get_translations();
803
+ if ( ! is_array( $languages ) ) {
804
+ return false;
805
+ }
806
  if ( ! isset( $languages['translations'] ) ) {
807
  return false;
808
  }
819
  return true;
820
  }
821
 
822
+ /**
823
+ * Get the user's locale.
824
+ */
825
+ private function get_user_locale() {
826
+ global $wp_version;
827
+ if ( version_compare( $wp_version, '4.7.0', '>=' ) ) {
828
+ return get_user_locale();
829
+ }
830
+ $user = wp_get_current_user();
831
+ if ( $user ) {
832
+ $locale = $user->locale;
833
+ }
834
+ return $locale ? $locale : get_locale();
835
+ }
836
+
837
  /**
838
  * Shows the notification
839
  */
931
  * @return void|string Html code of the notification.
932
  */
933
  function get_html( $key ) {
934
+ $lang = $this->get_user_locale();
935
  $link = $this->get_locale_paths( $lang );
936
  $heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', $this->heading );
937
  $product = $this->product->get_friendly_name();
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback.php CHANGED
@@ -34,7 +34,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback' ) ) :
34
  */
35
  public function __construct( $product_object ) {
36
  if ( $product_object instanceof ThemeIsle_SDK_Product ) {
37
- $this->product = $product_object;
38
  }
39
  $this->setup_hooks();
40
  }
@@ -52,12 +52,12 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback' ) ) :
52
  * @param string $attributes The attributes of the post body.
53
  */
54
  protected function call_api( $attributes ) {
55
- $slug = $this->product->get_slug();
56
  $version = $this->product->get_version();
57
- $attributes['slug'] = $slug;
58
  $attributes['version'] = $version;
59
 
60
- $response = wp_remote_post(
61
  $this->feedback_url, array(
62
  'body' => $attributes,
63
  )
@@ -70,8 +70,8 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback' ) ) :
70
  * @param array $options The options array.
71
  */
72
  function randomize_options( $options ) {
73
- $new = array();
74
- $keys = array_keys( $options );
75
  shuffle( $keys );
76
 
77
  foreach ( $keys as $key ) {
34
  */
35
  public function __construct( $product_object ) {
36
  if ( $product_object instanceof ThemeIsle_SDK_Product ) {
37
+ $this->product = $product_object;
38
  }
39
  $this->setup_hooks();
40
  }
52
  * @param string $attributes The attributes of the post body.
53
  */
54
  protected function call_api( $attributes ) {
55
+ $slug = $this->product->get_slug();
56
  $version = $this->product->get_version();
57
+ $attributes['slug'] = $slug;
58
  $attributes['version'] = $version;
59
 
60
+ $response = wp_remote_post(
61
  $this->feedback_url, array(
62
  'body' => $attributes,
63
  )
70
  * @param array $options The options array.
71
  */
72
  function randomize_options( $options ) {
73
+ $new = array();
74
+ $keys = array_keys( $options );
75
  shuffle( $keys );
76
 
77
  foreach ( $keys as $key ) {
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-product.php CHANGED
@@ -60,7 +60,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Product' ) ) :
60
  /**
61
  * @var array $allowed_authors The allowed authors.
62
  */
63
- private $allowed_authors = array( 'proteusthemes.com', 'anarieldesign.com' );
64
  /**
65
  * @var bool $requires_license Either user needs to activate it with license.
66
  */
60
  /**
61
  * @var array $allowed_authors The allowed authors.
62
  */
63
+ private $allowed_authors = array( 'proteusthemes.com', 'anarieldesign.com', 'prothemedesign.com' );
64
  /**
65
  * @var bool $requires_license Either user needs to activate it with license.
66
  */
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-rollback.php CHANGED
@@ -195,7 +195,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Rollback' ) ) :
195
  'package' => $rollback['url'],
196
  );
197
 
198
- $temp_object = (object) $temp_array;
199
  $plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;
200
  set_site_transient( 'update_plugins', $plugin_transient );
201
 
195
  'package' => $rollback['url'],
196
  );
197
 
198
+ $temp_object = (object) $temp_array;
199
  $plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;
200
  set_site_transient( 'update_plugins', $plugin_transient );
201
 
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widget.php CHANGED
@@ -29,7 +29,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Widget' ) ) :
29
  */
30
  public function __construct( $product_object ) {
31
  if ( $product_object instanceof ThemeIsle_SDK_Product ) {
32
- $this->product = $product_object;
33
  }
34
  $this->setup_hooks();
35
  }
29
  */
30
  public function __construct( $product_object ) {
31
  if ( $product_object instanceof ThemeIsle_SDK_Product ) {
32
+ $this->product = $product_object;
33
  }
34
  $this->setup_hooks();
35
  }
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-widgets-factory.php CHANGED
@@ -27,8 +27,8 @@ if ( ! class_exists( 'ThemeIsle_SDK_Widgets_Factory' ) ) :
27
  public function __construct( $product_object, $widgets ) {
28
  if ( $product_object instanceof ThemeIsle_SDK_Product && $widgets && is_array( $widgets ) ) {
29
  foreach ( $widgets as $widget ) {
30
- $class = 'ThemeIsle_SDK_Widget_' . str_replace( ' ', '_', ucwords( str_replace( '_', ' ', $widget ) ) );
31
- $instance = new $class( $product_object );
32
  $instance->setup_hooks();
33
  }
34
  }
27
  public function __construct( $product_object, $widgets ) {
28
  if ( $product_object instanceof ThemeIsle_SDK_Product && $widgets && is_array( $widgets ) ) {
29
  foreach ( $widgets as $widget ) {
30
+ $class = 'ThemeIsle_SDK_Widget_' . str_replace( ' ', '_', ucwords( str_replace( '_', ' ', $widget ) ) );
31
+ $instance = new $class( $product_object );
32
  $instance->setup_hooks();
33
  }
34
  }
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit418527605c85d2c1198711fa22e21975
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit418527605c85d2c1198711fa22e21975
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit418527605c85d2c1198711fa22e21975', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit418527605c85d2c1198711fa22e21975', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit418527605c85d2c1198711fa22e21975
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire418527605c85d2c1198711fa22e21975($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire418527605c85d2c1198711fa22e21975($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit14571eafe502c71276d0ab8843cfc460
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit14571eafe502c71276d0ab8843cfc460', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit14571eafe502c71276d0ab8843cfc460', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire14571eafe502c71276d0ab8843cfc460($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire14571eafe502c71276d0ab8843cfc460($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit6cafb48bf9ec24bd352ed0d2404ac643 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit6cafb48bf9ec24bd352ed0d2404ac643 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit6cafb48bf9ec24bd352ed0d2404ac643', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit6cafb48bf9ec24bd352ed0d2404ac643', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit2aa7ea888b30843b1e979ccd01f6d139 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit2aa7ea888b30843b1e979ccd01f6d139', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit2aa7ea888b30843b1e979ccd01f6d139', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
vendor/composer/installed.json CHANGED
@@ -6,15 +6,15 @@
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
- "reference": "1a64ea86e864d07a99c0f6fe89d3a1370df47c35"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/1a64ea86e864d07a99c0f6fe89d3a1370df47c35",
14
- "reference": "1a64ea86e864d07a99c0f6fe89d3a1370df47c35",
15
  "shasum": ""
16
  },
17
- "time": "2017-09-27 13:25:43",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
+ "reference": "a05ab89594381a935573300f0aafdae8c28cefe5"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/a05ab89594381a935573300f0aafdae8c28cefe5",
14
+ "reference": "a05ab89594381a935573300f0aafdae8c28cefe5",
15
  "shasum": ""
16
  },
17
+ "time": "2017-11-13 10:52:46",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {