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

Version Description

  • 2017-12-28
Download this release

Release Info

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

Code changes from version 2.3.0 to 2.3.1

CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
 
 
 
 
 
 
 
2
  ### v2.3.0 - 2017-11-27
3
  **Changes:**
4
  * Adds email content wysiwyg editor.
1
 
2
+ ### v2.3.1 - 2017-12-28
3
+ **Changes:**
4
+ * Improves layout and compatibility with various themes.
5
+ * Improves form default email format.
6
+ * Fix issues with various special characters in the magic tag fields.
7
+
8
  ### v2.3.0 - 2017-11-27
9
  **Changes:**
10
  * Adds email content wysiwyg editor.
admin/class-pirateforms-admin.php CHANGED
@@ -67,7 +67,7 @@ class PirateForms_Admin {
67
  && isset( $_GET['page'] ) && $_GET['page'] == 'pirateforms-admin'
68
  ) {
69
  wp_enqueue_style( 'pirateforms_admin_styles', PIRATEFORMS_URL . 'admin/css/wp-admin.css', array(), $this->version );
70
- wp_enqueue_script( 'pirateforms_scripts_admin', PIRATEFORMS_URL . 'admin/js/scripts-admin.js', array( 'jquery' ), $this->version );
71
  wp_localize_script(
72
  'pirateforms_scripts_admin', 'cwp_top_ajaxload', array(
73
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
@@ -251,10 +251,10 @@ class PirateForms_Admin {
251
  }
252
 
253
  // the key(s) will be added to the div as class names
254
- // to enable tooltip popup add 'pirate_dashicons'
255
  return apply_filters(
256
  'pirate_forms_admin_controls', array(
257
- 'pirate_options pirate_dashicons' => array(
258
  'heading' => __( 'Form processing options', 'pirate-forms' ),
259
  'controls' => apply_filters(
260
  'pirate_forms_admin_controls_for_options', array(
@@ -395,7 +395,7 @@ class PirateForms_Admin {
395
  )
396
  ),
397
  ),
398
- 'pirate_fields pirate_dashicons' => array(
399
  'heading' => __( 'Fields Settings', 'pirate-forms' ),
400
  'controls' => apply_filters(
401
  'pirate_forms_admin_controls_for_fields', array(
@@ -546,7 +546,7 @@ class PirateForms_Admin {
546
  )
547
  ),
548
  ),
549
- 'pirate_labels pirate_dashicons' => array(
550
  'heading' => __( 'Fields Labels', 'pirate-forms' ),
551
  'controls' => apply_filters(
552
  'pirate_forms_admin_controls_for_field_labels', array(
@@ -622,7 +622,7 @@ class PirateForms_Admin {
622
  'value' => __( 'Email content', 'pirate-forms' ),
623
  'html' => '<br/><br/>' . esc_attr( __( 'You can use the next magic tags:', 'pirate-forms' ) ) . '<br/>' . PirateForms_Util::get_magic_tags(),
624
  ),
625
- 'default' => PirateForms_Util::get_default_email_content(),
626
  'value' => PirateForms_Util::get_option( 'pirateformsopt_email_content' ),
627
  'wrap' => array(
628
  'type' => 'div',
@@ -637,7 +637,7 @@ class PirateForms_Admin {
637
  )
638
  ),
639
  ),
640
- 'pirate_alerts pirate_dashicons' => array(
641
  'heading' => __( 'Alert Messages', 'pirate-forms' ),
642
  'controls' => apply_filters(
643
  'pirate_forms_admin_controls_for_alerts', array(
@@ -727,7 +727,7 @@ class PirateForms_Admin {
727
  )
728
  ),
729
  ),
730
- 'pirate_smtp pirate_dashicons' => array(
731
  'heading' => __( 'SMTP Options', 'pirate-forms' ),
732
  'controls' => apply_filters(
733
  'pirate_forms_admin_controls_for_smtp', array(
67
  && isset( $_GET['page'] ) && $_GET['page'] == 'pirateforms-admin'
68
  ) {
69
  wp_enqueue_style( 'pirateforms_admin_styles', PIRATEFORMS_URL . 'admin/css/wp-admin.css', array(), $this->version );
70
+ wp_enqueue_script( 'pirateforms_scripts_admin', PIRATEFORMS_URL . 'admin/js/scripts-admin.js', array( 'jquery', 'jquery-ui-tooltip' ), $this->version );
71
  wp_localize_script(
72
  'pirateforms_scripts_admin', 'cwp_top_ajaxload', array(
73
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
251
  }
252
 
253
  // the key(s) will be added to the div as class names
254
+ // to enable tooltip popup add 'pirate_tooltip'
255
  return apply_filters(
256
  'pirate_forms_admin_controls', array(
257
+ 'pirate_options pirate_tooltip' => array(
258
  'heading' => __( 'Form processing options', 'pirate-forms' ),
259
  'controls' => apply_filters(
260
  'pirate_forms_admin_controls_for_options', array(
395
  )
396
  ),
397
  ),
398
+ 'pirate_fields pirate_tooltip' => array(
399
  'heading' => __( 'Fields Settings', 'pirate-forms' ),
400
  'controls' => apply_filters(
401
  'pirate_forms_admin_controls_for_fields', array(
546
  )
547
  ),
548
  ),
549
+ 'pirate_labels pirate_tooltip' => array(
550
  'heading' => __( 'Fields Labels', 'pirate-forms' ),
551
  'controls' => apply_filters(
552
  'pirate_forms_admin_controls_for_field_labels', array(
622
  'value' => __( 'Email content', 'pirate-forms' ),
623
  'html' => '<br/><br/>' . esc_attr( __( 'You can use the next magic tags:', 'pirate-forms' ) ) . '<br/>' . PirateForms_Util::get_magic_tags(),
624
  ),
625
+ 'default' => PirateForms_Util::get_default_email_content( true, null, true ),
626
  'value' => PirateForms_Util::get_option( 'pirateformsopt_email_content' ),
627
  'wrap' => array(
628
  'type' => 'div',
637
  )
638
  ),
639
  ),
640
+ 'pirate_alerts pirate_tooltip' => array(
641
  'heading' => __( 'Alert Messages', 'pirate-forms' ),
642
  'controls' => apply_filters(
643
  'pirate_forms_admin_controls_for_alerts', array(
727
  )
728
  ),
729
  ),
730
+ 'pirate_smtp pirate_tooltip' => array(
731
  'heading' => __( 'SMTP Options', 'pirate-forms' ),
732
  'controls' => apply_filters(
733
  'pirate_forms_admin_controls_for_smtp', array(
admin/css/wp-admin.css CHANGED
@@ -170,47 +170,6 @@
170
  margin-right: 0;
171
  }
172
 
173
- div.pirate_dashicons > form > div > label > span.dashicons {
174
- margin-left: 10px;
175
- color: #888;
176
- }
177
-
178
- div.pirate_dashicons > form > div > label > span.dashicons:after {
179
- display: none;
180
- position: absolute;
181
- margin-left: 5px;
182
- border-right: 5px solid transparent;
183
- border-bottom: 5px solid black;
184
- border-left: 5px solid transparent;
185
- content: "";
186
- }
187
-
188
- div.pirate_dashicons > form > div > label > .pirate_forms_option_description {
189
- display: none;
190
- position: absolute;
191
- z-index: 999;
192
- width: 200px;
193
- margin-top: 4px;
194
- margin-left: 190px;
195
- padding: 15px;
196
- border-radius: 5px;
197
- color: #fff;
198
- background: rgba(0, 0, 0, 0.8);
199
- font-size: 11px;
200
- line-height: 16px;
201
- text-align: left;
202
- }
203
-
204
- div.pirate_dashicons > form > div > label > span.dashicons:hover + .pirate_forms_option_description,
205
- div.pirate_dashicons > form > div > label > span.dashicons:hover::after {
206
- display: block;
207
- }
208
-
209
- div.pirate_dashicons > form > div > label {
210
- width: 400px;
211
- font-weight: normal;
212
- }
213
-
214
  .pirate_forms_contact_settings h3.title,
215
  .pirate_forms_welcome_text {
216
  margin: 10px 0 30px;
170
  margin-right: 0;
171
  }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  .pirate_forms_contact_settings h3.title,
174
  .pirate_forms_welcome_text {
175
  margin: 10px 0 30px;
admin/js/scripts-admin.js CHANGED
@@ -125,4 +125,13 @@ function initAll(){
125
  span.removeClass('dashicons-hidden').addClass('dashicons-visibility');
126
  }
127
  });
 
 
 
 
 
 
 
 
 
128
  }
125
  span.removeClass('dashicons-hidden').addClass('dashicons-visibility');
126
  }
127
  });
128
+
129
+ // tootips in settings.
130
+ jQuery( document ).tooltip({
131
+ items: '.dashicons-editor-help',
132
+ hide: 2000,
133
+ content: function(){
134
+ return jQuery(this).find('div').html();
135
+ }
136
+ });
137
  }
includes/class-pirateforms-html.php CHANGED
@@ -78,7 +78,14 @@ class PirateForms_HTML {
78
  $html .= esc_html( $args['label']['value'] );
79
  }
80
  if ( isset( $args['label']['html'] ) ) {
81
- $html .= $args['label']['html'];
 
 
 
 
 
 
 
82
  }
83
  if ( isset( $args['label']['desc'] ) ) {
84
  $html .= '<div';
@@ -197,7 +204,7 @@ class PirateForms_HTML {
197
  unset( $args['required_msg'] );
198
  }
199
 
200
- $html = '<div class="pirate-forms-file-upload-wrapper"><input type="file" ' . $this->get_common( $args, array( 'value' ) ) . ' style="position: absolute; left: -9999px;" tabindex="-1"><button type="button" class="pirate-forms-file-upload-button" tabindex="-1">' . ( isset( $args['label']['value'] ) ? esc_attr( $args['label']['value'] ) : '' ) . '</button><input type="text" ' . $this->get_common( $text_args ) . ' /></div>';
201
 
202
  return $this->get_wrap( $args, $html );
203
  }
78
  $html .= esc_html( $args['label']['value'] );
79
  }
80
  if ( isset( $args['label']['html'] ) ) {
81
+ $span = $args['label']['html'];
82
+ if ( strpos( $span, 'dashicons-editor-help' ) !== false && isset( $args['label']['desc'] ) && isset( $args['label']['desc']['value'] ) ) {
83
+ $class = isset( $args['label']['desc']['class'] ) ? $args['label']['desc']['class'] : '';
84
+ $span = str_replace( '></', '><div style="display: none" class="' . $class . '">' . $args['label']['desc']['value'] . '</div></', $span );
85
+ unset( $args['label']['desc'] );
86
+ unset( $args['label']['desc']['value'] );
87
+ }
88
+ $html .= $span;
89
  }
90
  if ( isset( $args['label']['desc'] ) ) {
91
  $html .= '<div';
204
  unset( $args['required_msg'] );
205
  }
206
 
207
+ $html = '<div class="pirate-forms-file-upload-wrapper"><input type="file" ' . $this->get_common( $args, array( 'value' ) ) . ' tabindex="-1"></div>';
208
 
209
  return $this->get_wrap( $args, $html );
210
  }
includes/class-pirateforms-util.php CHANGED
@@ -235,7 +235,7 @@ class PirateForms_Util {
235
  /**
236
  * The default email content.
237
  */
238
- public static function get_default_email_content( $html = true, $id = null ) {
239
  $body = array();
240
  $body['heading'] = sprintf( __( 'Contact form submission from %s', 'pirate-forms' ), get_bloginfo( 'name' ) . ' (' . site_url() . ')' );
241
  $body['body'] = array();
@@ -244,7 +244,7 @@ class PirateForms_Util {
244
  $elements = array( 'name', 'email', 'subject', 'message' );
245
  foreach ( $elements as $k ) {
246
  $display = $pirate_forms_options[ 'pirateformsopt_' . $k . '_field' ];
247
- if ( empty( $display ) ) {
248
  continue;
249
  }
250
  $val = $pirate_forms_options[ 'pirateformsopt_label_' . $k ];
@@ -267,7 +267,7 @@ class PirateForms_Util {
267
  }
268
  // replace . and space with _ (PHP does not like dots in variable names so it automatically converts them to _).
269
  $field = strtolower( str_replace( array( ' ', '.' ), '_', stripslashes( sanitize_text_field( $custom['label'] ) ) ) );
270
- $body['body'][ stripslashes( $custom['label'] ) ] = self::MAGIC_TAG_PREFIX . stripslashes( $custom['label'] ) . self::MAGIC_TAG_POSTFIX;
271
  }
272
  }
273
  }
@@ -327,7 +327,9 @@ class PirateForms_Util {
327
  public static function replace_magic_tags( $content, $body ) {
328
  $html = $content;
329
  foreach ( $body['magic_tags'] as $tag => $value ) {
330
- $html = str_replace( self::MAGIC_TAG_PREFIX . $tag . self::MAGIC_TAG_POSTFIX, $value, $html );
 
 
331
  }
332
 
333
  $html = apply_filters( 'pirate_forms_replace_magic_tags', $html, $body['magic_tags'] );
235
  /**
236
  * The default email content.
237
  */
238
+ public static function get_default_email_content( $html = true, $id = null, $first_time = false ) {
239
  $body = array();
240
  $body['heading'] = sprintf( __( 'Contact form submission from %s', 'pirate-forms' ), get_bloginfo( 'name' ) . ' (' . site_url() . ')' );
241
  $body['body'] = array();
244
  $elements = array( 'name', 'email', 'subject', 'message' );
245
  foreach ( $elements as $k ) {
246
  $display = $pirate_forms_options[ 'pirateformsopt_' . $k . '_field' ];
247
+ if ( ! $first_time && empty( $display ) ) {
248
  continue;
249
  }
250
  $val = $pirate_forms_options[ 'pirateformsopt_label_' . $k ];
267
  }
268
  // replace . and space with _ (PHP does not like dots in variable names so it automatically converts them to _).
269
  $field = strtolower( str_replace( array( ' ', '.' ), '_', stripslashes( sanitize_text_field( $custom['label'] ) ) ) );
270
+ $body['body'][ stripslashes( $custom['label'] ) ] = self::MAGIC_TAG_PREFIX . $field . self::MAGIC_TAG_POSTFIX;
271
  }
272
  }
273
  }
327
  public static function replace_magic_tags( $content, $body ) {
328
  $html = $content;
329
  foreach ( $body['magic_tags'] as $tag => $value ) {
330
+ $from = htmlspecialchars( self::MAGIC_TAG_PREFIX . $tag . self::MAGIC_TAG_POSTFIX );
331
+ do_action( 'themeisle_log_event', PIRATEFORMS_NAME, "replacing $from with $value", 'debug', __FILE__, __LINE__ );
332
+ $html = str_replace( $from, $value, $html );
333
  }
334
 
335
  $html = apply_filters( 'pirate_forms_replace_magic_tags', $html, $body['magic_tags'] );
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.3.0';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
69
  public function __construct() {
70
 
71
  $this->plugin_name = 'pirateforms';
72
+ $this->version = '2.3.1';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
languages/pirate-forms.pot CHANGED
@@ -1 +1,684 @@
1
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2017 Themeisle
2
+ # This file is distributed under the GPLv2.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Free & Simple Contact Form Plugin - Pirateforms 2.3.0\n"
6
+ "Report-Msgid-Bugs-To: https://github.com/Codeinwp/pirate-forms/issues\n"
7
+ "POT-Creation-Date: 2017-12-28 13:28:25+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=utf-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: Themeisle Translate Team <friends@themeisle.com>\n"
13
+ "Language-Team: Themeisle Translate <friends@themeisle.com>\n"
14
+ "X-Generator: grunt-wp-i18n 0.5.4\n"
15
+ "X-Poedit-KeywordsList: "
16
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
18
+ "Language: en\n"
19
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+ "X-Poedit-Country: United States\n"
21
+ "X-Poedit-SourceCharset: UTF-8\n"
22
+ "X-Poedit-Basepath: ../\n"
23
+ "X-Poedit-SearchPath-0: .\n"
24
+ "X-Poedit-Bookmarks: \n"
25
+ "X-Textdomain-Support: yes\n"
26
+
27
+ #: admin/class-pirateforms-admin.php:76
28
+ msgid "Please specify the Site Key and Secret Key."
29
+ msgstr ""
30
+
31
+ #: admin/class-pirateforms-admin.php:123 admin/class-pirateforms-admin.php:147
32
+ msgid "Settings"
33
+ msgstr ""
34
+
35
+ #: admin/class-pirateforms-admin.php:154
36
+ msgid "More Features"
37
+ msgstr ""
38
+
39
+ #: admin/class-pirateforms-admin.php:189 admin/class-pirateforms-admin.php:203
40
+ msgid "Send Message"
41
+ msgstr ""
42
+
43
+ #: admin/class-pirateforms-admin.php:250
44
+ msgid "To use this option, please ensure Akismet is activated with a valid key."
45
+ msgstr ""
46
+
47
+ #: admin/class-pirateforms-admin.php:258
48
+ msgid "Form processing options"
49
+ msgstr ""
50
+
51
+ #: admin/class-pirateforms-admin.php:265
52
+ msgid "Contact notification email address"
53
+ msgstr ""
54
+
55
+ #: admin/class-pirateforms-admin.php:268
56
+ msgid "Insert [email] to use the contact form submitter's email."
57
+ msgstr ""
58
+
59
+ #: admin/class-pirateforms-admin.php:268
60
+ msgid ""
61
+ "The notification email will be sent from this address both to the "
62
+ "recipients below and the contact form submitter (if this is activated below "
63
+ "in email confirmation, in which case the domain for this email address "
64
+ "should match your site's domain)."
65
+ msgstr ""
66
+
67
+ #: admin/class-pirateforms-admin.php:284
68
+ msgid "Contact submission recipients"
69
+ msgstr ""
70
+
71
+ #: admin/class-pirateforms-admin.php:287
72
+ msgid ""
73
+ "Email address(es) to receive contact submission notifications. You can "
74
+ "separate multiple emails with a comma."
75
+ msgstr ""
76
+
77
+ #: admin/class-pirateforms-admin.php:303
78
+ msgid "Store submissions in the database"
79
+ msgstr ""
80
+
81
+ #: admin/class-pirateforms-admin.php:306
82
+ msgid ""
83
+ "Should the submissions be stored in the admin area? If chosen, contact form "
84
+ "submissions will be saved under \"All Entries\" on the left (appears after "
85
+ "this option is activated)."
86
+ msgstr ""
87
+
88
+ #: admin/class-pirateforms-admin.php:316 admin/class-pirateforms-admin.php:335
89
+ #: admin/class-pirateforms-admin.php:391 admin/class-pirateforms-admin.php:750
90
+ #: admin/class-pirateforms-admin.php:793
91
+ msgid "Yes"
92
+ msgstr ""
93
+
94
+ #: admin/class-pirateforms-admin.php:322
95
+ msgid "Add a nonce to the contact form:"
96
+ msgstr ""
97
+
98
+ #: admin/class-pirateforms-admin.php:325
99
+ msgid ""
100
+ "Should the form use a WordPress nonce? This helps reduce spam by ensuring "
101
+ "that the form submittor is on the site when submitting the form rather than "
102
+ "submitting remotely. This could, however, cause problems with sites using a "
103
+ "page caching plugin. Turn this off if you are getting complaints about "
104
+ "forms not being able to be submitted with an error of \"Nonce failed!\""
105
+ msgstr ""
106
+
107
+ #: admin/class-pirateforms-admin.php:341
108
+ msgid "Send email confirmation to form submitter"
109
+ msgstr ""
110
+
111
+ #: admin/class-pirateforms-admin.php:344
112
+ msgid ""
113
+ "Adding text here will send an email to the form submitter. The email uses "
114
+ "the \"Successful form submission text\" field from the \"Alert Messages\" "
115
+ "tab as the subject line. Plain text only here, no HTML."
116
+ msgstr ""
117
+
118
+ #: admin/class-pirateforms-admin.php:360
119
+ msgid "Success Page"
120
+ msgstr ""
121
+
122
+ #: admin/class-pirateforms-admin.php:363
123
+ msgid ""
124
+ "Select the page that displays after a successful form submission. The page "
125
+ "will be displayed without pausing on the email form, so please be sure to "
126
+ "configure a relevant thank you message in this page."
127
+ msgstr ""
128
+
129
+ #: admin/class-pirateforms-admin.php:378
130
+ msgid "Integrate with Akismet?"
131
+ msgstr ""
132
+
133
+ #: admin/class-pirateforms-admin.php:381
134
+ msgid ""
135
+ "Checking this option will verify the content of the message with Akismet to "
136
+ "check if it's spam. If it is determined to be spam, the message will be "
137
+ "blocked. %s"
138
+ msgstr ""
139
+
140
+ #: admin/class-pirateforms-admin.php:399
141
+ #: admin/partials/pirateforms-settings-display.php:31
142
+ msgid "Fields Settings"
143
+ msgstr ""
144
+
145
+ #: admin/class-pirateforms-admin.php:407 admin/class-pirateforms-admin.php:557
146
+ msgid "Name"
147
+ msgstr ""
148
+
149
+ #: admin/class-pirateforms-admin.php:416 admin/class-pirateforms-admin.php:435
150
+ #: admin/class-pirateforms-admin.php:454 admin/class-pirateforms-admin.php:473
151
+ #: admin/class-pirateforms-admin.php:491
152
+ msgid "Do not display"
153
+ msgstr ""
154
+
155
+ #: admin/class-pirateforms-admin.php:417 admin/class-pirateforms-admin.php:436
156
+ #: admin/class-pirateforms-admin.php:455 admin/class-pirateforms-admin.php:474
157
+ #: admin/class-pirateforms-admin.php:492
158
+ msgid "Display but not required"
159
+ msgstr ""
160
+
161
+ #: admin/class-pirateforms-admin.php:418 admin/class-pirateforms-admin.php:437
162
+ #: admin/class-pirateforms-admin.php:456 admin/class-pirateforms-admin.php:475
163
+ #: admin/class-pirateforms-admin.php:493
164
+ msgid "Required"
165
+ msgstr ""
166
+
167
+ #: admin/class-pirateforms-admin.php:426
168
+ msgid "Email address"
169
+ msgstr ""
170
+
171
+ #: admin/class-pirateforms-admin.php:445 admin/class-pirateforms-admin.php:583
172
+ #: admin/class-pirateforms-admin.php:585
173
+ msgid "Subject"
174
+ msgstr ""
175
+
176
+ #: admin/class-pirateforms-admin.php:464 admin/class-pirateforms-admin.php:596
177
+ msgid "Message"
178
+ msgstr ""
179
+
180
+ #: admin/class-pirateforms-admin.php:483
181
+ #: public/class-pirateforms-public.php:993
182
+ msgid "Attachment"
183
+ msgstr ""
184
+
185
+ #: admin/class-pirateforms-admin.php:501
186
+ msgid "Add a spam trap"
187
+ msgstr ""
188
+
189
+ #: admin/class-pirateforms-admin.php:510 admin/class-pirateforms-admin.php:812
190
+ msgid "No"
191
+ msgstr ""
192
+
193
+ #: admin/class-pirateforms-admin.php:511
194
+ msgid "Custom"
195
+ msgstr ""
196
+
197
+ #: admin/class-pirateforms-admin.php:512
198
+ msgid "Google reCAPTCHA"
199
+ msgstr ""
200
+
201
+ #: admin/class-pirateforms-admin.php:520
202
+ msgid "Site key"
203
+ msgstr ""
204
+
205
+ #: admin/class-pirateforms-admin.php:523
206
+ msgid "Create an account here "
207
+ msgstr ""
208
+
209
+ #: admin/class-pirateforms-admin.php:523
210
+ msgid "to get the Site key and the Secret key for the reCaptcha."
211
+ msgstr ""
212
+
213
+ #: admin/class-pirateforms-admin.php:538
214
+ msgid "Secret key"
215
+ msgstr ""
216
+
217
+ #: admin/class-pirateforms-admin.php:550
218
+ #: admin/partials/pirateforms-settings-display.php:34
219
+ msgid "Fields Labels"
220
+ msgstr ""
221
+
222
+ #: admin/class-pirateforms-admin.php:559
223
+ msgid "Your Name"
224
+ msgstr ""
225
+
226
+ #: admin/class-pirateforms-admin.php:570
227
+ msgid "Email"
228
+ msgstr ""
229
+
230
+ #: admin/class-pirateforms-admin.php:572
231
+ msgid "Your Email"
232
+ msgstr ""
233
+
234
+ #: admin/class-pirateforms-admin.php:598
235
+ msgid "Your message"
236
+ msgstr ""
237
+
238
+ #: admin/class-pirateforms-admin.php:609
239
+ msgid "Submit button"
240
+ msgstr ""
241
+
242
+ #: admin/class-pirateforms-admin.php:622
243
+ msgid "Email content"
244
+ msgstr ""
245
+
246
+ #: admin/class-pirateforms-admin.php:623
247
+ msgid "You can use the next magic tags:"
248
+ msgstr ""
249
+
250
+ #: admin/class-pirateforms-admin.php:641
251
+ #: admin/partials/pirateforms-settings-display.php:37
252
+ msgid "Alert Messages"
253
+ msgstr ""
254
+
255
+ #: admin/class-pirateforms-admin.php:648
256
+ msgid "Name required and missing"
257
+ msgstr ""
258
+
259
+ #: admin/class-pirateforms-admin.php:650
260
+ msgid "Enter your name"
261
+ msgstr ""
262
+
263
+ #: admin/class-pirateforms-admin.php:661
264
+ msgid "E-mail required and missing"
265
+ msgstr ""
266
+
267
+ #: admin/class-pirateforms-admin.php:663
268
+ msgid "Enter valid email"
269
+ msgstr ""
270
+
271
+ #: admin/class-pirateforms-admin.php:674
272
+ msgid "Subject required and missing"
273
+ msgstr ""
274
+
275
+ #: admin/class-pirateforms-admin.php:676
276
+ msgid "Please enter a subject"
277
+ msgstr ""
278
+
279
+ #: admin/class-pirateforms-admin.php:687
280
+ msgid "Question/comment is missing"
281
+ msgstr ""
282
+
283
+ #: admin/class-pirateforms-admin.php:689
284
+ msgid "Enter your question or comment"
285
+ msgstr ""
286
+
287
+ #: admin/class-pirateforms-admin.php:700
288
+ msgid "Attachment is missing"
289
+ msgstr ""
290
+
291
+ #: admin/class-pirateforms-admin.php:702
292
+ msgid "Please add an attachment"
293
+ msgstr ""
294
+
295
+ #: admin/class-pirateforms-admin.php:713
296
+ msgid "Successful form submission text"
297
+ msgstr ""
298
+
299
+ #: admin/class-pirateforms-admin.php:716
300
+ msgid ""
301
+ "This text is used on the page if no Success Page is chosen above. This is "
302
+ "also used as the confirmation email title, if one is set to send out."
303
+ msgstr ""
304
+
305
+ #: admin/class-pirateforms-admin.php:720
306
+ msgid "Thanks, your email was sent successfully!"
307
+ msgstr ""
308
+
309
+ #: admin/class-pirateforms-admin.php:731
310
+ msgid "SMTP Options"
311
+ msgstr ""
312
+
313
+ #: admin/class-pirateforms-admin.php:738
314
+ msgid "Use SMTP to send emails?"
315
+ msgstr ""
316
+
317
+ #: admin/class-pirateforms-admin.php:741
318
+ msgid "Instead of PHP mail function"
319
+ msgstr ""
320
+
321
+ #: admin/class-pirateforms-admin.php:756
322
+ msgid "SMTP Host"
323
+ msgstr ""
324
+
325
+ #: admin/class-pirateforms-admin.php:768
326
+ msgid "SMTP Port"
327
+ msgstr ""
328
+
329
+ #: admin/class-pirateforms-admin.php:780
330
+ msgid "Use SMTP Authentication?"
331
+ msgstr ""
332
+
333
+ #: admin/class-pirateforms-admin.php:783 admin/class-pirateforms-admin.php:802
334
+ msgid ""
335
+ "If you check this box, make sure the SMTP Username and SMTP Password are "
336
+ "completed."
337
+ msgstr ""
338
+
339
+ #: admin/class-pirateforms-admin.php:799
340
+ msgid "Security?"
341
+ msgstr ""
342
+
343
+ #: admin/class-pirateforms-admin.php:813
344
+ msgid "SSL"
345
+ msgstr ""
346
+
347
+ #: admin/class-pirateforms-admin.php:814
348
+ msgid "TLS"
349
+ msgstr ""
350
+
351
+ #: admin/class-pirateforms-admin.php:821
352
+ msgid "SMTP Username"
353
+ msgstr ""
354
+
355
+ #: admin/class-pirateforms-admin.php:833
356
+ msgid "SMTP Password"
357
+ msgstr ""
358
+
359
+ #: admin/class-pirateforms-admin.php:946
360
+ msgid "Mail Status"
361
+ msgstr ""
362
+
363
+ #: admin/class-pirateforms-admin.php:969
364
+ msgid "Status not captured"
365
+ msgstr ""
366
+
367
+ #: admin/class-pirateforms-admin.php:969
368
+ msgid "Mail sending failed!"
369
+ msgstr ""
370
+
371
+ #: admin/class-pirateforms-admin.php:969
372
+ msgid "Mail sent successfully!"
373
+ msgstr ""
374
+
375
+ #: admin/class-pirateforms-admin.php:1019
376
+ msgid "Sent email successfully!"
377
+ msgstr ""
378
+
379
+ #: admin/class-pirateforms-admin.php:1019
380
+ msgid "Sent email failed!"
381
+ msgstr ""
382
+
383
+ #: admin/partials/pirateforms-settings-display.php:20
384
+ #: includes/class-pirateforms-widget.php:18
385
+ #: includes/class-pirateforms-widget.php:21
386
+ msgid "Pirate Forms"
387
+ msgstr ""
388
+
389
+ #: admin/partials/pirateforms-settings-display.php:25
390
+ msgid "How to use"
391
+ msgstr ""
392
+
393
+ #: admin/partials/pirateforms-settings-display.php:28
394
+ msgid "Options"
395
+ msgstr ""
396
+
397
+ #: admin/partials/pirateforms-settings-display.php:40
398
+ msgid "SMTP"
399
+ msgstr ""
400
+
401
+ #: admin/partials/pirateforms-settings-display.php:47
402
+ msgid "Welcome to Pirate Forms!"
403
+ msgstr ""
404
+
405
+ #: admin/partials/pirateforms-settings-display.php:48
406
+ msgid "To get started, just "
407
+ msgstr ""
408
+
409
+ #: admin/partials/pirateforms-settings-display.php:49
410
+ msgid "configure all the options "
411
+ msgstr ""
412
+
413
+ #: admin/partials/pirateforms-settings-display.php:49
414
+ msgid "you need, hit save and start using the created form."
415
+ msgstr ""
416
+
417
+ #: admin/partials/pirateforms-settings-display.php:54
418
+ msgid "There are 3 ways of using the newly created form:"
419
+ msgstr ""
420
+
421
+ #: admin/partials/pirateforms-settings-display.php:56
422
+ msgid "Add a "
423
+ msgstr ""
424
+
425
+ #: admin/partials/pirateforms-settings-display.php:57
426
+ msgid "widget"
427
+ msgstr ""
428
+
429
+ #: admin/partials/pirateforms-settings-display.php:59
430
+ #: admin/partials/pirateforms-settings-display.php:62
431
+ msgid "Use the shortcode "
432
+ msgstr ""
433
+
434
+ #: admin/partials/pirateforms-settings-display.php:60
435
+ msgid " in any page or post."
436
+ msgstr ""
437
+
438
+ #: admin/partials/pirateforms-settings-display.php:64
439
+ msgid " in the theme's files."
440
+ msgstr ""
441
+
442
+ #: admin/partials/pirateforms-settings-display.php:71
443
+ msgid ""
444
+ "If you are using the default (non-SMTP) configuration which uses the WP/PHP "
445
+ "mail, mails might either land in the spam/junk folders or they might get "
446
+ "lost. So, you might not receive the email even if the status against an "
447
+ "entry reads the mail has been sent successfully. If you face this, please "
448
+ "contact your system administrator. If you continue to face this problem, "
449
+ "you can switch to the SMTP configuration to ensure email deliverability."
450
+ msgstr ""
451
+
452
+ #: admin/partials/pirateforms-settings-display.php:76
453
+ msgid "Are you enjoying Pirate Forms?"
454
+ msgstr ""
455
+
456
+ #: admin/partials/pirateforms-settings-display.php:81
457
+ #. translators: link to WordPress.org repo for PirateForms
458
+ msgid "Rate our plugin on %1$s WordPress.org %2$s. We'd really appreciate it!"
459
+ msgstr ""
460
+
461
+ #: admin/partials/pirateforms-settings-display.php:95
462
+ #. translators: link to blog article about contact form plugins
463
+ msgid ""
464
+ "If you want a more complex Contact Form Plugin please check %1$s this link "
465
+ "%2$s."
466
+ msgstr ""
467
+
468
+ #: admin/partials/pirateforms-settings-display.php:129
469
+ msgid "Save changes"
470
+ msgstr ""
471
+
472
+ #: admin/partials/pirateforms-settings-display.php:138
473
+ msgid "Send Test Email"
474
+ msgstr ""
475
+
476
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:5
477
+ msgid "Extend to FULL version"
478
+ msgstr ""
479
+
480
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:18
481
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:19
482
+ msgid "View more features"
483
+ msgstr ""
484
+
485
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:25
486
+ msgid "Get Our Free Email Course"
487
+ msgstr ""
488
+
489
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:49
490
+ msgid ""
491
+ "Ready to learn how to reduce your website loading times by half? Come and "
492
+ "join the 1st lesson here!"
493
+ msgstr ""
494
+
495
+ #: admin/partials/pirateforms-settings-sidebar-subscribe.php:51
496
+ msgid ""
497
+ "Thank you for subscribing! You have been added to the mailing list and will "
498
+ "receive the next email information in the coming weeks. If you ever wish to "
499
+ "unsubscribe, simply use the \"Unsubscribe\" link included in each "
500
+ "newsletter."
501
+ msgstr ""
502
+
503
+ #: includes/class-pirateforms-html.php:190
504
+ msgid "Upload file"
505
+ msgstr ""
506
+
507
+ #: includes/class-pirateforms-util.php:153
508
+ msgid "Form submission blocked!"
509
+ msgstr ""
510
+
511
+ #: includes/class-pirateforms-util.php:169
512
+ msgid "None"
513
+ msgstr ""
514
+
515
+ #: includes/class-pirateforms-util.php:240
516
+ #: public/class-pirateforms-public.php:547
517
+ msgid "Contact form submission from %s"
518
+ msgstr ""
519
+
520
+ #: includes/class-pirateforms-util.php:256
521
+ #: includes/class-pirateforms-util.php:298
522
+ #: public/class-pirateforms-public.php:574
523
+ msgid "IP address"
524
+ msgstr ""
525
+
526
+ #: includes/class-pirateforms-util.php:257
527
+ #: public/class-pirateforms-public.php:575
528
+ msgid "IP search"
529
+ msgstr ""
530
+
531
+ #: includes/class-pirateforms-util.php:258
532
+ #: includes/class-pirateforms-util.php:299
533
+ #: public/class-pirateforms-public.php:582
534
+ msgid "Came from"
535
+ msgstr ""
536
+
537
+ #: includes/class-pirateforms-util.php:259
538
+ #: includes/class-pirateforms-util.php:300
539
+ #: public/class-pirateforms-public.php:588
540
+ msgid "Sent from page"
541
+ msgstr ""
542
+
543
+ #: includes/class-pirateforms-widget.php:97
544
+ msgid "Title"
545
+ msgstr ""
546
+
547
+ #: includes/class-pirateforms-widget.php:98
548
+ msgid "Text above form"
549
+ msgstr ""
550
+
551
+ #: includes/class-pirateforms-widget.php:101
552
+ msgid "Title:"
553
+ msgstr ""
554
+
555
+ #: includes/class-pirateforms-widget.php:107
556
+ msgid "Subtext:"
557
+ msgstr ""
558
+
559
+ #: includes/class-pirateforms-widget.php:112
560
+ msgid ""
561
+ "Need more forms ? Check our <a href=\"%s\" target=\"_blank\">extended</a> "
562
+ "version for more features"
563
+ msgstr ""
564
+
565
+ #: includes/class-pirateforms.php:251
566
+ msgid "Edit Entry"
567
+ msgstr ""
568
+
569
+ #: includes/class-pirateforms.php:252
570
+ msgid "View Entry"
571
+ msgstr ""
572
+
573
+ #: includes/class-pirateforms.php:253
574
+ msgid "All Entries"
575
+ msgstr ""
576
+
577
+ #: includes/class-pirateforms.php:254
578
+ msgid "Search Entries"
579
+ msgstr ""
580
+
581
+ #: includes/class-pirateforms.php:255
582
+ msgid "Parent Entries:"
583
+ msgstr ""
584
+
585
+ #: includes/class-pirateforms.php:256
586
+ msgid "No entries found."
587
+ msgstr ""
588
+
589
+ #: includes/class-pirateforms.php:257
590
+ msgid "No entries found in Trash."
591
+ msgstr ""
592
+
593
+ #: includes/class-pirateforms.php:261
594
+ msgid "Entries from Pirate Forms"
595
+ msgstr ""
596
+
597
+ #: public/class-pirateforms-public.php:104
598
+ msgid "I'm human!"
599
+ msgstr ""
600
+
601
+ #: public/class-pirateforms-public.php:362
602
+ msgid "Submit"
603
+ msgstr ""
604
+
605
+ #: public/class-pirateforms-public.php:464
606
+ msgid "Sorry, an error occured."
607
+ msgstr ""
608
+
609
+ #: public/class-pirateforms-public.php:526
610
+ msgid "Nonce failed!"
611
+ msgstr ""
612
+
613
+ #: public/class-pirateforms-public.php:534
614
+ #: public/class-pirateforms-public.php:599
615
+ msgid "Form submission failed!"
616
+ msgstr ""
617
+
618
+ #: public/class-pirateforms-public.php:559
619
+ msgid "Please enter one or more Contact submission recipients"
620
+ msgstr ""
621
+
622
+ #: public/class-pirateforms-public.php:805
623
+ msgid "Invalid CAPTCHA"
624
+ msgstr ""
625
+
626
+ #: public/class-pirateforms-public.php:817
627
+ msgid "Incorrect CAPTCHA"
628
+ msgstr ""
629
+
630
+ #: public/class-pirateforms-public.php:826
631
+ msgid "Submission blocked!"
632
+ msgstr ""
633
+
634
+ #: public/class-pirateforms-public.php:955
635
+ msgid "Uploaded file type is not allowed for %s"
636
+ msgstr ""
637
+
638
+ #: public/class-pirateforms-public.php:963
639
+ msgid "Uploaded file is too large %s"
640
+ msgstr ""
641
+
642
+ #: public/class-pirateforms-public.php:977
643
+ msgid "There was an unknown error uploading the file %s"
644
+ msgstr ""
645
+
646
+ #. Plugin Name of the plugin/theme
647
+ msgid "Free & Simple Contact Form Plugin - Pirateforms"
648
+ msgstr ""
649
+
650
+ #. Plugin URI of the plugin/theme
651
+ msgid "http://themeisle.com/plugins/pirate-forms/"
652
+ msgstr ""
653
+
654
+ #. Description of the plugin/theme
655
+ msgid "Easily creates a nice looking, simple contact form on your WP site."
656
+ msgstr ""
657
+
658
+ #. Author of the plugin/theme
659
+ msgid "Themeisle"
660
+ msgstr ""
661
+
662
+ #. Author URI of the plugin/theme
663
+ msgid "http://themeisle.com"
664
+ msgstr ""
665
+
666
+ #: includes/class-pirateforms.php:247
667
+ msgctxt "post type general name"
668
+ msgid "Entries"
669
+ msgstr ""
670
+
671
+ #: includes/class-pirateforms.php:248
672
+ msgctxt "post type singular name"
673
+ msgid "Entry"
674
+ msgstr ""
675
+
676
+ #: includes/class-pirateforms.php:249
677
+ msgctxt "admin menu"
678
+ msgid "Entries"
679
+ msgstr ""
680
+
681
+ #: includes/class-pirateforms.php:250
682
+ msgctxt "add new on admin bar"
683
+ msgid "Entry"
684
+ msgstr ""
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.3.0
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.3.0' );
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.3.1
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.3.1' );
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
@@ -193,7 +193,7 @@ class PirateForms_Public {
193
  if ( ! empty( $field ) && ! empty( $label ) ) :
194
  $required = $field === 'req' ? true : false;
195
  $wrap_classes = array(
196
- ( ! empty( $subjectField ) ? 'col-xs-12 col-sm-4' : 'col-xs-12 col-sm-6' ) . ' contact_name_wrap pirate_forms_three_inputs form_field_wrap',
197
  );
198
  // If this field was submitted with invalid data
199
  if ( isset( $_SESSION[ $error_key ]['contact-name'] ) ) {
@@ -222,7 +222,7 @@ class PirateForms_Public {
222
  if ( ! empty( $field ) && ! empty( $label ) ) :
223
  $required = $field === 'req' ? true : false;
224
  $wrap_classes = array(
225
- ( ! empty( $subjectField ) ? 'col-xs-12 col-sm-4' : 'col-xs-12 col-sm-6' ) . ' contact_email_wrap pirate_forms_three_inputs form_field_wrap',
226
  );
227
  // If this field was submitted with invalid data
228
  if ( isset( $_SESSION[ $error_key ]['contact-email'] ) ) {
@@ -251,7 +251,7 @@ class PirateForms_Public {
251
  if ( ! empty( $field ) && ! empty( $label ) ) :
252
  $required = $field === 'req' ? true : false;
253
  $wrap_classes = array(
254
- 'col-xs-12 col-sm-4 contact_subject_wrap pirate_forms_three_inputs form_field_wrap',
255
  );
256
  // If this field was submitted with invalid data
257
  if ( isset( $_SESSION[ $error_key ]['contact-subject'] ) ) {
@@ -335,7 +335,7 @@ class PirateForms_Public {
335
  'id' => 'pirate-forms-captcha',
336
  'wrap' => array(
337
  'type' => 'div',
338
- 'class' => implode( ' ', apply_filters( 'pirateform_wrap_classes_captcha', array( 'col-xs-12 col-sm-6 form_field_wrap form_captcha_wrap' ) ) ),
339
  ),
340
  );
341
  endif;
@@ -367,7 +367,7 @@ class PirateForms_Public {
367
  'class' => 'pirate-forms-submit-button btn btn-primary',
368
  'wrap' => array(
369
  'type' => 'div',
370
- 'class' => implode( ' ', apply_filters( 'pirateform_wrap_classes_submit', array( 'col-xs-12 col-sm-6 form_field_wrap contact_submit_wrap' ) ) ),
371
  ),
372
  'value' => $pirateformsopt_label_submit_btn,
373
  );
@@ -415,7 +415,7 @@ class PirateForms_Public {
415
  * @param PirateForms_PhpFormBuilder $form_builder The form builder object.
416
  */
417
  public function render_fields( $form_builder ) {
418
- echo '<div class="pirate_forms_three_inputs_wrap">';
419
 
420
  if ( isset( $form_builder->contact_name ) ) {
421
  echo $form_builder->contact_name;
@@ -448,6 +448,8 @@ class PirateForms_Public {
448
  }
449
 
450
  echo $form_builder->contact_submit;
 
 
451
  }
452
 
453
  /**
@@ -644,7 +646,7 @@ class PirateForms_Public {
644
  $subject = $pirate_forms_contact_subject;
645
  }
646
 
647
- $mail_body = ! empty( $pirate_forms_options['pirateformsopt_email_content'] ) ? $pirate_forms_options['pirateformsopt_email_content'] : PirateForms_Util::get_default_email_content( true, $form_id );
648
  $mail_body = PirateForms_Util::replace_magic_tags( $mail_body, $body );
649
 
650
  do_action( 'pirate_forms_before_sending', $pirate_forms_contact_email, $site_recipients, $subject, $mail_body, $headers, $attachments );
193
  if ( ! empty( $field ) && ! empty( $label ) ) :
194
  $required = $field === 'req' ? true : false;
195
  $wrap_classes = array(
196
+ ( ! empty( $subjectField ) ? 'col-xs-12 col-sm-6' : 'col-xs-12' ) . ' contact_name_wrap pirate_forms_three_inputs form_field_wrap',
197
  );
198
  // If this field was submitted with invalid data
199
  if ( isset( $_SESSION[ $error_key ]['contact-name'] ) ) {
222
  if ( ! empty( $field ) && ! empty( $label ) ) :
223
  $required = $field === 'req' ? true : false;
224
  $wrap_classes = array(
225
+ ( ! empty( $subjectField ) ? 'col-xs-12 col-sm-6' : 'col-xs-12' ) . ' contact_email_wrap pirate_forms_three_inputs form_field_wrap',
226
  );
227
  // If this field was submitted with invalid data
228
  if ( isset( $_SESSION[ $error_key ]['contact-email'] ) ) {
251
  if ( ! empty( $field ) && ! empty( $label ) ) :
252
  $required = $field === 'req' ? true : false;
253
  $wrap_classes = array(
254
+ 'col-xs-12 contact_subject_wrap pirate_forms_three_inputs form_field_wrap',
255
  );
256
  // If this field was submitted with invalid data
257
  if ( isset( $_SESSION[ $error_key ]['contact-subject'] ) ) {
335
  'id' => 'pirate-forms-captcha',
336
  'wrap' => array(
337
  'type' => 'div',
338
+ 'class' => implode( ' ', apply_filters( 'pirateform_wrap_classes_captcha', array( 'col-xs-12 ' . ( $pirate_forms_options['pirateformsopt_recaptcha_field'] !== 'yes' ? 'col-sm-6 ' : '' ) . 'form_field_wrap form_captcha_wrap' ) ) ),
339
  ),
340
  );
341
  endif;
367
  'class' => 'pirate-forms-submit-button btn btn-primary',
368
  'wrap' => array(
369
  'type' => 'div',
370
+ 'class' => implode( ' ', apply_filters( 'pirateform_wrap_classes_submit', array( 'col-xs-12 ' . ( ( ! empty( $pirate_forms_options['pirateformsopt_recaptcha_field'] ) && ( $pirate_forms_options['pirateformsopt_recaptcha_field'] !== 'yes' ) ) ? 'col-sm-6 ' : '' ) . 'form_field_wrap contact_submit_wrap' ) ) ),
371
  ),
372
  'value' => $pirateformsopt_label_submit_btn,
373
  );
415
  * @param PirateForms_PhpFormBuilder $form_builder The form builder object.
416
  */
417
  public function render_fields( $form_builder ) {
418
+ echo '<div class="pirate-forms-fields-container"><div class="pirate_forms_three_inputs_wrap">';
419
 
420
  if ( isset( $form_builder->contact_name ) ) {
421
  echo $form_builder->contact_name;
448
  }
449
 
450
  echo $form_builder->contact_submit;
451
+
452
+ echo '</div>';
453
  }
454
 
455
  /**
646
  $subject = $pirate_forms_contact_subject;
647
  }
648
 
649
+ $mail_body = ! empty( $pirate_forms_options['pirateformsopt_email_content'] ) ? $pirate_forms_options['pirateformsopt_email_content'] : PirateForms_Util::get_default_email_content( true, $form_id, true );
650
  $mail_body = PirateForms_Util::replace_magic_tags( $mail_body, $body );
651
 
652
  do_action( 'pirate_forms_before_sending', $pirate_forms_contact_email, $site_recipients, $subject, $mail_body, $headers, $attachments );
public/css/front.css CHANGED
@@ -1,7 +1,8 @@
1
  /*
2
- Version: 2.3.0
3
  */
4
- .pirate_forms_wrap .form_field_wrap {
 
5
  margin-bottom: 20px;
6
  }
7
 
@@ -15,81 +16,70 @@ Version: 2.3.0
15
  margin-bottom: 20px;
16
  }
17
 
 
18
  .sidebar .form_field_wrap,
19
  .sidebar-wrap .form_field_wrap,
20
  #sidebar-secondary .form_field_wrap {
21
  width: 100%;
 
22
  }
23
 
24
- .sidebar .pirate-forms-submit-button,
25
- .sidebar-wrap .pirate-forms-submit-button,
26
- #sidebar-secondary .pirate-forms-submit-button {
27
- float: left !important;
28
- width: 100%;
29
- margin-left: 0;
30
- }
31
-
32
- .sidebar .pirate_forms_wrap label,
33
- .sidebar-wrap .pirate_forms_wrap label,
34
- #sidebar-secondary .pirate_forms_wrap label {
35
- display: none;
36
- }
37
-
38
- .pirate_forms_clearfix {
39
  clear: both;
 
 
 
40
  }
41
 
42
  .contact_submit_wrap {
43
  text-align: right;
44
  }
45
 
46
- .pirate-forms-file-upload-hidden {
47
- display: none;
48
- visibility: hidden;
49
- position: absolute;
50
- left: -9999px;
51
  }
52
 
53
- .pirate-forms-file-upload {
54
- display: block;
55
- width: auto;
56
  }
57
 
58
- .pirate-forms-file-upload label {
59
- display: block;
60
- margin-bottom: 5px;
61
  }
62
 
63
- .pirate-forms-file-upload-wrapper {
64
- position: relative;
65
- margin-bottom: 5px;
 
66
  }
67
 
68
- .pirate-forms-file-upload-input {
69
- float: left;
70
- width: 70% !important;
71
- border: none !important;
72
- outline: none !important;
73
- -webkit-transition: all 0.2s ease-in;
74
- transition: all 0.2s ease-in;
75
- /* IE 9 Fix */
76
  }
77
 
78
- .pirate-forms-file-upload-input:hover,
79
- .pirate-forms-file-upload-input:focus {
80
- outline: none;
 
81
  }
82
 
83
- .pirate-forms-file-upload-button {
84
  display: inline-block;
85
- float: left;
86
- margin-left: -1px;
87
- cursor: pointer;
88
- /* IE 9 Fix */
89
- -webkit-transition: all 0.2s ease-in;
90
- transition: all 0.2s ease-in;
91
  }
92
 
93
- .pirate-forms-maps-custom span {
94
- margin-left: 5px;
 
 
95
  }
1
  /*
2
+ Version: 2.3.1
3
  */
4
+ .pirate_forms_wrap .form_field_wrap,
5
+ .widget .pirate_forms_wrap .form_field_wrap {
6
  margin-bottom: 20px;
7
  }
8
 
16
  margin-bottom: 20px;
17
  }
18
 
19
+ .widget .form_field_wrap,
20
  .sidebar .form_field_wrap,
21
  .sidebar-wrap .form_field_wrap,
22
  #sidebar-secondary .form_field_wrap {
23
  width: 100%;
24
+ max-width: 100%;
25
  }
26
 
27
+ .pirate_forms_clearfix,
28
+ .pirate-forms-fields-container:after,
29
+ .pirate-forms-file-upload-wrapper:after {
30
+ display: block;
31
+ visibility: hidden;
 
 
 
 
 
 
 
 
 
 
32
  clear: both;
33
+ height: 0;
34
+ font-size: 0;
35
+ content: " ";
36
  }
37
 
38
  .contact_submit_wrap {
39
  text-align: right;
40
  }
41
 
42
+ .pirate-forms-maps-custom label {
43
+ display: inline-block;
44
+ cursor: pointer;
 
 
45
  }
46
 
47
+ .pirate-forms-maps-custom span {
48
+ margin-left: 5px;
 
49
  }
50
 
51
+ .pirate-forms-fields-container {
52
+ margin-right: -15px;
53
+ margin-left: -15px;
54
  }
55
 
56
+ .pirate-forms-fields-container .form_field_wrap {
57
+ box-sizing: border-box;
58
+ padding-right: 15px;
59
+ padding-left: 15px;
60
  }
61
 
62
+ .pirate_forms_three_inputs_wrap .form_field_wrap input {
63
+ box-sizing: border-box;
64
+ width: 100%;
65
+ max-width: 100%;
66
+ margin: 0;
 
 
 
67
  }
68
 
69
+ .pirate-forms-fields-container .form_field_wrap textarea {
70
+ width: 100%;
71
+ max-width: 100%;
72
+ margin: 0;
73
  }
74
 
75
+ .pirate_forms_wrap .form_field_wrap .pirate-forms-submit-button {
76
  display: inline-block;
77
+ width: auto;
78
+ max-width: 100%;
 
 
 
 
79
  }
80
 
81
+ @media (max-width: 480px) {
82
+ .pirate_forms_wrap .form_field_wrap .pirate-forms-submit-button {
83
+ width: 100%;
84
+ }
85
  }
readme.md CHANGED
@@ -177,6 +177,13 @@ Activating the Pirate Contact Form plugin is just like any other plugin. If you'
177
  4. Screenshot 4. Enabling SMTP
178
 
179
  ## Changelog ##
 
 
 
 
 
 
 
180
  ### 2.3.0 - 2017-11-27 ###
181
 
182
  * Adds email content wysiwyg editor.
177
  4. Screenshot 4. Enabling SMTP
178
 
179
  ## Changelog ##
180
+ ### 2.3.1 - 2017-12-28 ###
181
+
182
+ * Improves layout and compatibility with various themes.
183
+ * Improves form default email format.
184
+ * Fix issues with various special characters in the magic tag fields.
185
+
186
+
187
  ### 2.3.0 - 2017-11-27 ###
188
 
189
  * Adds email content wysiwyg editor.
readme.txt CHANGED
@@ -87,6 +87,7 @@ This plugin started as a fork of https://wordpress.org/plugins/proper-contact-fo
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>.
@@ -156,6 +157,15 @@ You can follow the full documentation [here](http://docs.themeisle.com/article/4
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:
@@ -177,6 +187,13 @@ Activating the Pirate Contact Form plugin is just like any other plugin. If you'
177
  4. Screenshot 4. Enabling SMTP
178
 
179
  == Changelog ==
 
 
 
 
 
 
 
180
  = 2.3.0 - 2017-11-27 =
181
 
182
  * Adds email content wysiwyg editor.
87
  == Frequently Asked Questions ==
88
 
89
 
90
+
91
  = How I can get support for this contact form plugin ? =
92
 
93
  You can learn more about PirateForms and ask for help by <a href="https://themeisle.com/contact/" >visiting ThemeIsle website</a>.
157
  = How to add attributes to form in Pirate Forms =
158
  [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)
159
 
160
+ = How to change default email content in Pirate forms =
161
+ [http://docs.themeisle.com/article/779-how-to-change-default-email-content-in-pirate-forms](http://docs.themeisle.com/article/779-how-to-change-default-email-content-in-pirate-forms)
162
+
163
+ = How to change default email content per form in Pirate forms =
164
+ [http://docs.themeisle.com/article/780-how-to-change-default-email-content-per-form-in-pirate-forms](http://docs.themeisle.com/article/780-how-to-change-default-email-content-per-form-in-pirate-forms)
165
+
166
+ = How to install and use extended version of Pirate Forms =
167
+ [http://docs.themeisle.com/article/787-how-to-install-and-use-extended-version-of-pirate-forms](http://docs.themeisle.com/article/787-how-to-install-and-use-extended-version-of-pirate-forms)
168
+
169
  == Installation ==
170
 
171
  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:
187
  4. Screenshot 4. Enabling SMTP
188
 
189
  == Changelog ==
190
+ = 2.3.1 - 2017-12-28 =
191
+
192
+ * Improves layout and compatibility with various themes.
193
+ * Improves form default email format.
194
+ * Fix issues with various special characters in the magic tag fields.
195
+
196
+
197
  = 2.3.0 - 2017-11-27 =
198
 
199
  * Adds email content wysiwyg editor.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit1fb09e2a03b8b1f08b8c28e6eb4a37c2::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit30e0d35d9f2c7d783fb1a973f446e13b::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit9220f162d29535efe69cbfc410dc6bcd::getLoader();
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The class that exposes endpoints.
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Endpoints
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Endpoints' ) ) :
16
+ /**
17
+ * Expose endpoints for ThemeIsle SDK.
18
+ */
19
+ final class ThemeIsle_SDK_Endpoints {
20
+
21
+ const SDK_ENDPOINT = 'themeisle-sdk';
22
+ const SDK_ENDPOINT_VERSION = 1;
23
+
24
+ const HASH_FILE = 'themeisle-hash.json';
25
+
26
+ // if true, the endpoint will expect a product slug and will return the value only for that.
27
+ const PRODUCT_SPECIFIC = false;
28
+
29
+ /**
30
+ * @var ThemeIsle_SDK_Product $products Array of Themeisle Product.
31
+ */
32
+ static protected $products = array();
33
+
34
+ /**
35
+ * ThemeIsle_SDK_Endpoints constructor.
36
+ *
37
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
38
+ */
39
+ public function __construct( $product_object ) {
40
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
41
+ self::$products[] = $product_object;
42
+ }
43
+ $this->setup_endpoints();
44
+ }
45
+
46
+ /**
47
+ * Setup endpoints.
48
+ */
49
+ private function setup_endpoints() {
50
+ global $wp_version;
51
+ if ( version_compare( $wp_version, '4.4', '<' ) ) {
52
+ // no REST support.
53
+ return;
54
+ }
55
+
56
+ $this->setup_rest();
57
+ }
58
+
59
+ /**
60
+ * Setup REST endpoints.
61
+ */
62
+ private function setup_rest() {
63
+ add_action( 'rest_api_init', array( $this, 'rest_register' ) );
64
+ }
65
+
66
+ /**
67
+ * Registers the endpoints
68
+ */
69
+ function rest_register() {
70
+ register_rest_route(
71
+ self::SDK_ENDPOINT . '/v' . self::SDK_ENDPOINT_VERSION,
72
+ '/checksum/' . ( self::PRODUCT_SPECIFIC ? '(?P<slug>.*)/' : '' ),
73
+ array(
74
+ 'methods' => 'GET',
75
+ 'callback' => array( $this, 'checksum' ),
76
+ )
77
+ );
78
+ }
79
+
80
+ /**
81
+ * The checksum endpoint.
82
+ *
83
+ * @param WP_REST_Request $data the request.
84
+ *
85
+ * @return WP_REST_Response Response or the error
86
+ */
87
+ function checksum( WP_REST_Request $data ) {
88
+ $products = self::$products;
89
+ if ( self::PRODUCT_SPECIFIC ) {
90
+ $params = $this->validate_params( $data, array( 'slug' ) );
91
+ foreach ( self::$products as $product ) {
92
+ if ( $params['slug'] === $product->get_slug() ) {
93
+ $products = array( $product );
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ $response = array();
99
+ $custom_css = $this->has_custom_css();
100
+ if ( is_bool( $custom_css ) ) {
101
+ $response['custom_css'] = $custom_css;
102
+ }
103
+
104
+ $response['child_theme'] = $this->get_theme_properties();
105
+
106
+ foreach ( $products as $product ) {
107
+ $files = array();
108
+ switch ( $product->get_type() ) {
109
+ case 'plugin':
110
+ $files = array();
111
+ break;
112
+ case 'theme':
113
+ $files = array( 'style.css', 'functions.php' );
114
+ break;
115
+ }
116
+
117
+ $error = '';
118
+
119
+ // if any element in the $files array contains a '/', this would imply recursion is required.
120
+ $diff = $this->generate_diff( $product, $files, array_reduce( $files, array( $this, 'is_recursion_required' ), false ) );
121
+ if ( is_wp_error( $diff ) ) {
122
+ $error = $diff->get_error_message();
123
+ $diff = array();
124
+ }
125
+
126
+ $response['products'][] = array(
127
+ 'slug' => $product->get_slug(),
128
+ 'version' => $product->get_version(),
129
+ 'diffs' => $diff,
130
+ 'error' => $error,
131
+ );
132
+ }
133
+
134
+ return new WP_REST_Response( array( 'checksum' => $response ) );
135
+ }
136
+
137
+ /**
138
+ * Get the current theme properties.
139
+ *
140
+ * @return array Properties of the current theme.
141
+ */
142
+ function get_theme_properties() {
143
+ if ( ! is_child_theme() ) {
144
+ return false;
145
+ }
146
+
147
+ $properties = array();
148
+ $theme = wp_get_theme();
149
+ // @codingStandardsIgnoreStart
150
+ $properties['name'] = $theme->Name;
151
+ // @codingStandardsIgnoreEnd
152
+
153
+ // get the files in the child theme.
154
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
155
+ WP_Filesystem();
156
+ global $wp_filesystem;
157
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), get_stylesheet_directory() );
158
+ $list = $wp_filesystem->dirlist( $path, false, false );
159
+ if ( $list ) {
160
+ $list = array_keys( self::flatten_dirlist( $list ) );
161
+ $properties['files'] = $list;
162
+ }
163
+ return $properties;
164
+ }
165
+
166
+ /**
167
+ * Check if custom css has been added to the theme.
168
+ *
169
+ * @return bool Whether custom css has been added to the theme.
170
+ */
171
+ private function has_custom_css() {
172
+ $query = new WP_Query(
173
+ array(
174
+ 'post_type' => 'custom_css',
175
+ 'post_status' => 'publish',
176
+ 'numberposts' => 1,
177
+ 'update_post_meta_cache' => false,
178
+ 'update_post_term_cache' => false,
179
+ )
180
+ );
181
+
182
+ if ( $query->have_posts() ) {
183
+ $query->the_post();
184
+ $content = get_the_content();
185
+ // if the content contains a colon, a CSS rule has been added.
186
+ return strpos( $content, ':' ) === false ? false : true;
187
+ }
188
+ return false;
189
+ }
190
+
191
+ /**
192
+ * Check if recursion needs to be enabled on the WP_Filesystem by reducing the array of files to a boolean.
193
+ *
194
+ * @param string $carry Value of the previous iteration.
195
+ * @param string $item Value of the current iteration.
196
+ *
197
+ * @return bool Whether to recurse or not.
198
+ */
199
+ function is_recursion_required( $carry, $item ) {
200
+ if ( ! $carry ) {
201
+ return ( strpos( $item, '/' ) !== false );
202
+ }
203
+ return $carry;
204
+ }
205
+
206
+ /**
207
+ * Generate the diff of the files.
208
+ *
209
+ * @param ThemeIsle_SDK_Product $product Themeisle Product.
210
+ * @param array $files Array of files.
211
+ * @param bool $recurse Whether to recurse or not.
212
+ *
213
+ * @return string
214
+ */
215
+ private function generate_diff( $product, $files, $recurse = false ) {
216
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
217
+ WP_Filesystem();
218
+ global $wp_filesystem;
219
+
220
+ $diff = array();
221
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), plugin_dir_path( $product->get_basefile() ) );
222
+ $list = $wp_filesystem->dirlist( $path, false, $recurse );
223
+ // nothing found.
224
+ if ( ! $list ) {
225
+ return $diff;
226
+ }
227
+ $list = array_keys( self::flatten_dirlist( $list ) );
228
+
229
+ // now let's get the valid files that actually exist.
230
+ if ( empty( $files ) ) {
231
+ $files = $list;
232
+ } else {
233
+ $files = array_intersect( $files, $list );
234
+ }
235
+
236
+ // fetch the calculated hashes.
237
+ if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
238
+ return new WP_Error( 'themeisle_sdk_hash_not_found', sprintf( __( '%s not found', 'themeisle-sdk' ), self::HASH_FILE ) );
239
+ }
240
+
241
+ $hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
242
+ ksort( $hashes );
243
+
244
+ $diff = array();
245
+ foreach ( $files as $file ) {
246
+ // file does not exist in the hashes.
247
+ if ( ! array_key_exists( $file, $hashes ) ) {
248
+ continue;
249
+ }
250
+ $new = md5( $wp_filesystem->get_contents( $path . $file ) );
251
+ $old = $hashes[ $file ];
252
+
253
+ // same hash, bail.
254
+ if ( $new === $old ) {
255
+ continue;
256
+ }
257
+ $diff[] = $file;
258
+ }
259
+ return $diff;
260
+ }
261
+
262
+ /**
263
+ * Flatten the results of WP_Filesystem::dirlist() for iterating over.
264
+ *
265
+ * @access private
266
+ *
267
+ * @param array $nested_files Array of files as returned by WP_Filesystem::dirlist().
268
+ * @param string $path Relative path to prepend to child nodes. Optional.
269
+ * @return array $files A flattened array of the $nested_files specified.
270
+ */
271
+ private static function flatten_dirlist( $nested_files, $path = '' ) {
272
+ $files = array();
273
+ foreach ( $nested_files as $name => $details ) {
274
+ $files[ $path . $name ] = $details;
275
+ // Append children recursively
276
+ if ( ! empty( $details['files'] ) ) {
277
+ $children = self::flatten_dirlist( $details['files'], $path . $name . '/' );
278
+ // Merge keeping possible numeric keys, which array_merge() will reindex from 0..n
279
+ $files = $files + $children;
280
+ }
281
+ }
282
+ return $files;
283
+ }
284
+
285
+ /**
286
+ * Validates the parameters to the API
287
+ *
288
+ * @param WP_REST_Request $data the request.
289
+ * @param array $params the parameters to validate.
290
+ *
291
+ * @return array of parameter name=>value
292
+ */
293
+ private function validate_params( WP_REST_Request $data, $params ) {
294
+ $collect = array();
295
+ foreach ( $params as $param ) {
296
+ $value = sanitize_text_field( $data[ $param ] );
297
+ if ( empty( $value ) ) {
298
+ return new WP_Error(
299
+ 'themeisle_' . $param . '_invalid', sprintf( __( 'Invalid %', 'themeisle-sdk' ), $param ), array(
300
+ 'status' => 403,
301
+ )
302
+ );
303
+ } else {
304
+ $collect[ $param ] = $value;
305
+ }
306
+ }
307
+
308
+ return $collect;
309
+ }
310
+
311
+ }
312
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php CHANGED
@@ -73,6 +73,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
73
  add_action( 'admin_init', array( $this, 'activate_license' ) );
74
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
75
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
 
76
  }
77
 
78
  /**
73
  add_action( 'admin_init', array( $this, 'activate_license' ) );
74
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
75
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
76
+ add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
77
  }
78
 
79
  /**
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-loader.php CHANGED
@@ -76,6 +76,9 @@ if ( ! class_exists( 'ThemeIsle_SDK_Loader' ) ) :
76
  if ( ! $product_object->is_external_author() ) {
77
  new ThemeIsle_SDK_Rollback( $product_object );
78
  }
 
 
 
79
  return self::$instance;
80
  }
81
 
76
  if ( ! $product_object->is_external_author() ) {
77
  new ThemeIsle_SDK_Rollback( $product_object );
78
  }
79
+
80
+ new ThemeIsle_SDK_Endpoints( $product_object );
81
+
82
  return self::$instance;
83
  }
84
 
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-logger.php CHANGED
@@ -77,6 +77,13 @@ if ( ! class_exists( 'ThemeIsle_SDK_Logger' ) ) :
77
  * Send the statistics to the api endpoint
78
  */
79
  public function send_log() {
 
 
 
 
 
 
 
80
  wp_remote_post(
81
  $this->logging_url, array(
82
  'method' => 'POST',
@@ -86,10 +93,12 @@ if ( ! class_exists( 'ThemeIsle_SDK_Logger' ) ) :
86
  'X-ThemeIsle-Event' => 'log_site',
87
  ),
88
  'body' => array(
89
- 'site' => get_site_url(),
90
- 'slug' => $this->product->get_slug(),
91
- 'version' => $this->product->get_version(),
92
- 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
 
 
93
  ),
94
  )
95
  );
77
  * Send the statistics to the api endpoint
78
  */
79
  public function send_log() {
80
+ $environment = array();
81
+ $theme = wp_get_theme();
82
+ $environment['theme'] = array();
83
+ $environment['theme']['name'] = $theme->get( 'Name' );
84
+ $environment['theme']['author'] = $theme->get( 'Author' );
85
+ $environment['plugins'] = get_option( 'active_plugins' );
86
+
87
  wp_remote_post(
88
  $this->logging_url, array(
89
  'method' => 'POST',
93
  'X-ThemeIsle-Event' => 'log_site',
94
  ),
95
  'body' => array(
96
+ 'site' => get_site_url(),
97
+ 'slug' => $this->product->get_slug(),
98
+ 'version' => $this->product->get_version(),
99
+ 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
100
+ 'environment' => $environment,
101
+ 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
102
  ),
103
  )
104
  );
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -11,7 +11,7 @@
11
  */
12
 
13
  // Current SDK version and path.
14
- $themeisle_sdk_version = '1.9.2';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
11
  */
12
 
13
  // Current SDK version and path.
14
+ $themeisle_sdk_version = '2.0.0';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
vendor/codeinwp/themeisle-sdk/start.php CHANGED
@@ -24,6 +24,7 @@ $files_to_load = array(
24
  'class-themeisle-sdk-widget.php',
25
  'class-themeisle-sdk-widget-dashboard-blog.php',
26
  'class-themeisle-sdk-widgets-factory.php',
 
27
  );
28
 
29
  foreach ( $files_to_load as $file ) {
24
  'class-themeisle-sdk-widget.php',
25
  'class-themeisle-sdk-widget-dashboard-blog.php',
26
  'class-themeisle-sdk-widgets-factory.php',
27
+ 'class-themeisle-sdk-endpoints.php',
28
  );
29
 
30
  foreach ( $files_to_load as $file ) {
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInitee8868fb85498203ce6a1cdc3be4909f
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequireee8868fb85498203ce6a1cdc3be4909f($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequireee8868fb85498203ce6a1cdc3be4909f($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 ComposerAutoloaderInit1fb09e2a03b8b1f08b8c28e6eb4a37c2
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit1fb09e2a03b8b1f08b8c28e6eb4a37c2', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit1fb09e2a03b8b1f08b8c28e6eb4a37c2', '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
+ composerRequire1fb09e2a03b8b1f08b8c28e6eb4a37c2($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire1fb09e2a03b8b1f08b8c28e6eb4a37c2($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 ComposerAutoloaderInit30e0d35d9f2c7d783fb1a973f446e13b {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit30e0d35d9f2c7d783fb1a973f446e13b {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit30e0d35d9f2c7d783fb1a973f446e13b', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit30e0d35d9f2c7d783fb1a973f446e13b', '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 ComposerAutoloaderInit9220f162d29535efe69cbfc410dc6bcd {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit9220f162d29535efe69cbfc410dc6bcd', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit9220f162d29535efe69cbfc410dc6bcd', '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": "1933233168091b9e72df9df60b234b7650d6b00b"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/1933233168091b9e72df9df60b234b7650d6b00b",
14
- "reference": "1933233168091b9e72df9df60b234b7650d6b00b",
15
  "shasum": ""
16
  },
17
- "time": "2017-11-23 13:26:34",
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": "3a40b987f7852134bd29bb8a1ecfaca6b7c1f236"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/3a40b987f7852134bd29bb8a1ecfaca6b7c1f236",
14
+ "reference": "3a40b987f7852134bd29bb8a1ecfaca6b7c1f236",
15
  "shasum": ""
16
  },
17
+ "time": "2017-12-28 13:15:26",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {