PluginProbe
GetResponse Forms by Optin Cat / 1.3.9
GetResponse Forms by Optin Cat v1.3.9
1.3.4 1.3.5 1.3.6 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 2.0.0 All 36 releases
getresponse / includes / eoi-shortcode.php

eoi-shortcode.php in GetResponse Forms by Optin Cat 1.3.9, at includes/eoi-shortcode.php

449 lines 13.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class EasyOptInsShortcodes {
4
5 var $settings;
6 var $prerequisites = array();
7 var $assets_enqueued = false;
8
9 public function __construct( $settings = array() ) {
10 global $pagenow, $typenow;
11
12 $this->settings = $settings;
13
14 // Add shortcode
15 add_shortcode( $this->settings[ 'shortcode' ], array( $this, 'shortcode_content' ) );
16
17 // Add shortcode aliases
18 foreach ( $settings[ 'shortcode_aliases' ] as $shortcode) {
19 add_shortcode( $shortcode, array( $this, 'shortcode_content' ) );
20 }
21
22 // Add shortcode generator button
23 if ( in_array( $pagenow, array( 'post.php', 'page.php', 'post-new.php', 'post-edit.php' ) ) && $typenow != 'download' ) {
24 add_action( 'admin_head', array( $this, 'button_head' ) );
25 add_action( 'media_buttons', array( $this, 'button' ), 1000 );
26 add_action( 'admin_footer', array( $this, 'button_footer' ) );
27 }
28
29 if ( ! is_admin() ) {
30 add_action( 'wp', array( $this, 'parse_shortcodes' ), 11 );
31 }
32 }
33
34 public function wp_head() {
35 foreach ( $this->prerequisites as $form_id => $head ) {
36 echo $head;
37 $this->prerequisites[ $form_id ] = '';
38 }
39 }
40
41 public function parse_shortcodes() {
42 global $post;
43
44 if ( empty( $post ) ) {
45 return;
46 }
47
48 if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches )
49 && array_key_exists( 2, $matches )
50 && array_key_exists( 3, $matches )
51 && in_array( $this->settings['shortcode'], $matches[2] )
52 ) {
53 foreach ( $matches[3] as $params ) {
54 $params = shortcode_parse_atts( $params );
55 if ( ! empty( $params['id'] ) ) {
56 $this->add_prerequisites_for_form( (int) $params['id'] );
57 }
58 }
59 }
60
61 if ( ! empty( $this->prerequisites ) ) {
62 $this->enqueue_assets();
63 add_action( 'wp_head', array( $this, 'wp_head' ) );
64 }
65 }
66
67 /**
68 * @param int $form_id
69 *
70 * @return string
71 */
72 private function add_prerequisites_for_form( $form_id ) {
73 if ( array_key_exists( $form_id, $this->prerequisites ) ) {
74 return $this->prerequisites[ $form_id ];
75 }
76
77 $head = '';
78
79 $fca_eoi_meta = get_post_meta( $form_id, 'fca_eoi', true );
80 if ( ! $fca_eoi_meta ) {
81 return $head;
82 }
83
84 $layout_id = $fca_eoi_meta['layout'];
85 $layout = new EasyOptInsLayout( $layout_id );
86 $scss_path = $layout->path_to_resource( 'layout', 'scss' );
87
88 $scss = $layout->new_scss_compiler();
89
90 if ( file_exists( $scss_path ) ) {
91 $head .=
92 '<style>' .
93 '.fca_eoi_form p { width: auto; }' . $scss->compile(
94 sprintf( '$ltr: %s;', is_rtl() ? 'false' : 'true' ) .
95 '#fca_eoi_form_' . $form_id . '{' .
96 'input{ max-width: 9999px; }' .
97 file_get_contents( $scss_path ) .
98 '}'
99 ) .
100 '</style>';
101 }
102
103 // Add per form CSS
104 if ( ! EasyOptInsLayout::uses_new_css() ) {
105 $head .= '<style>.fca_eoi_form{ margin: auto; }</style>';
106 }
107
108 $css_for_scss = '';
109 if ( ! empty( $fca_eoi_meta[ $layout_id ] ) ) {
110 $head .= '<style>';
111 $css_for_scss .= "#fca_eoi_form_$form_id {";
112 foreach ( $fca_eoi_meta[ $layout_id ] as $selector => $declarations ) {
113 $css_for_scss .= "$selector{";
114 foreach ( $declarations as $property => $value ) {
115 if ( strlen( $value ) ) {
116 $css_for_scss .= "$property:$value !important;";
117 }
118 }
119 $css_for_scss .= '}';
120 }
121 $css_for_scss .= '}';
122 $head .= $scss->compile( $css_for_scss ) . '</style>';
123 }
124
125 if ( $layout->layout_type != 'lightbox' ) {
126 $head .= '<script>' . EasyOptInsActivity::get_instance()->get_tracking_code( $form_id ) . '</script>';
127 }
128
129 $this->prerequisites[ $form_id ] = $head;
130 return $head;
131 }
132
133 /**
134 * @param int $form_id
135 *
136 * @return string
137 */
138 private function get_prerequisites_for_form( $form_id ) {
139 $prerequisites = $this->add_prerequisites_for_form( $form_id );
140 $this->prerequisites[ $form_id ] = '';
141
142 if ( ! empty( $prerequisites ) ) {
143 $this->enqueue_assets();
144 return $prerequisites;
145 }
146
147 return '';
148 }
149
150 public function button_head() {
151 ?>
152
153 <style>
154 #fca-eoi-media-button {
155 background: url(<?php echo $this->settings['plugin_url'] . '/icon.png' ?>) 0 -1px no-repeat;
156 background-size: 16px 16px;
157 }
158 </style>
159
160 <?php
161 }
162
163 public function button() {
164 $button_title = __( 'Optin Cat' );
165
166 if ( version_compare( $GLOBALS['wp_version'], '3.5', '<' ) ) {
167 echo '<a href="#TB_inline?width=640&inlineId=fca-eoi-shortcode-thickbox" class="thickbox" title="' . $button_title . '">' . $button_title . '</a>';
168 } else {
169 $img = '<span class="wp-media-buttons-icon" id="fca-eoi-media-button"></span>';
170 echo '<a href="#TB_inline?width=640&inlineId=fca-eoi-shortcode-thickbox" class="thickbox button" title="' . $button_title . '" style="padding-left: .4em;">' . $img . $button_title . '</a>';
171 }
172 }
173
174 public function button_footer() {
175 $options = array();
176
177 foreach ( get_posts( array( 'post_type' => 'easy-opt-ins', 'post_status' => 'publish', 'posts_per_page' => -1 ) ) as $post ) {
178 $form_id = $post->ID;
179 $layout = get_post_meta( $form_id, 'fca_eoi_layout', true );
180
181 if ( ! empty( $layout ) && strpos( $layout, 'postbox_' ) === 0 ) {
182 $options[ $form_id ] = empty( $post->post_title ) ? '(no title)' : $post->post_title;
183 }
184 }
185
186 ?>
187
188 <script type="text/javascript">
189 jQuery( function( $ ) {
190 $( '#fca-eoi-shortcode-insert' ).on( 'click', function() {
191 var id = $( '#fca-eoi-shortcode' ).val();
192
193 if ( '' === id ) {
194 alert( <?php echo json_encode( __( 'You must choose a form' ) ) ?> );
195 return;
196 }
197
198 window.send_to_editor( '[<?php echo $this->settings[ 'shortcode' ] ?> id="' + id + '"]' );
199 } );
200 } );
201 </script>
202 <div id="fca-eoi-shortcode-thickbox" style="display: none;">
203 <div class="wrap" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">
204 <p><?php _e('Use the form below to insert an Optin Cat shortcode .' ) ?></p>
205 <div>
206 <select id="fca-eoi-shortcode">
207 <option value=""><?php _e( 'Please select...' ) ?></option>
208 <?php foreach ( $options as $form_id => $title ) { ?>
209 <option value="<?php echo (int) $form_id ?>"><?php echo esc_html( $title ) ?></option>
210 <?php } ?>
211 </select>
212 </div>
213 <p class="submit">
214 <input type="button" id="fca-eoi-shortcode-insert" class="button-primary" value="<?php _e( 'Insert' ) ?>">
215 <a id="fca-eoi-shortcode-cancel" class="button-secondary" onclick="tb_remove();" title="<?php _e( 'Cancel' ) ?>"><?php _e( 'Cancel' ) ?></a>
216 </p>
217 </div>
218 </div>
219
220 <?php
221 }
222
223 public function enqueue_assets() {
224
225 if ( $this->assets_enqueued ) {
226 return;
227 }
228
229 $this->assets_enqueued = true;
230
231 $protocol = is_ssl() ? 'https' : 'http';
232
233 // Get lightboxes
234 $lightboxes = get_posts( array(
235 'post_type' => 'easy-opt-ins',
236 'posts_per_page' => -1,
237 'orderby' => 'ID',
238 'meta_key' => 'fca_eoi_layout',
239 'meta_value' => 'lightbox_',
240 'meta_compare' => 'like',
241 ) );
242
243 // Get postboxes
244 $postboxes = get_posts( array(
245 'post_type' => 'easy-opt-ins',
246 'posts_per_page' => -1,
247 'orderby' => 'ID',
248 'meta_key' => 'fca_eoi_layout',
249 'meta_value' => 'postbox_',
250 'meta_compare' => 'like',
251 ) );
252
253 // Get postboxes
254 $widgets = get_posts( array(
255 'post_type' => 'easy-opt-ins',
256 'posts_per_page' => -1,
257 'orderby' => 'ID',
258 'meta_key' => 'fca_eoi_layout',
259 'meta_value' => 'layout_',
260 'meta_compare' => 'like',
261 ) );
262
263 // Exit function if not optin form exist
264 if ( ! $lightboxes && ! $postboxes && ! $widgets ) {
265 return;
266 }
267
268 wp_enqueue_script( 'jquery' );
269
270 wp_enqueue_style( 'fca_eoi', $this->settings[ 'plugin_url' ].'/assets/style' . ( EasyOptInsLayout::uses_new_css() ? '-new' : '' ) . '.css' );
271 wp_enqueue_script( 'fca_eoi', $this->settings[ 'plugin_url' ].'/assets/script.js' );
272
273 wp_enqueue_style( 'fontawesome', $protocol . '://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css' );
274
275 wp_enqueue_script( 'tooltipster', $this->settings[ 'plugin_url' ] . '/assets/vendor/tooltipster/jquery.tooltipster.min.js' );
276 wp_enqueue_style( 'tooltipster', $this->settings[ 'plugin_url' ] . '/assets/vendor/tooltipster/tooltipster.min.css' );
277
278 wp_enqueue_script( 'featherlight', $this->settings[ 'plugin_url' ] . '/assets/vendor/featherlight/release/featherlight.min.js' );
279 wp_enqueue_style( 'featherlight', $this->settings[ 'plugin_url' ] . '/assets/vendor/featherlight/release/featherlight.min.css' );
280
281 wp_localize_script(
282 'fca_eoi'
283 , 'fca_eoi'
284 , array_merge( $this->settings['error_text'], array(
285 'ajax_url' => admin_url( 'admin-ajax.php' )
286 ) )
287 );
288 }
289
290 public function shortcode_content( $atts ) {
291
292 $form_id = $atts['id'];
293
294 /**
295 * Check that we have a valid post ID
296 */
297 if( empty ( $form_id ) ) {
298 return 'Missing form ID';
299 }
300 if( ! $post = get_post( $form_id ) ) {
301 return 'Wrong form ID';
302 }
303
304 $fca_eoi_meta = get_post_meta( $form_id, 'fca_eoi', true );
305 if( ! $fca_eoi_meta ) {
306 return 'Form doesn\'t exist';
307 }
308
309 // Get template
310 $layout_id = $fca_eoi_meta[ 'layout' ];
311
312 $layout = new EasyOptInsLayout( $layout_id );
313 $layout_type = $layout->layout_type;
314 $html_path = $layout->path_to_resource( 'layout', 'html' );
315 $html_wrap_path = $layout->path_to_html_wrapper();
316
317 if ( ! file_exists( $html_path ) ) {
318 return '';
319 }
320
321 if ( EasyOptInsLayout::uses_new_css() ) {
322 $template = str_replace(
323 '{{{layout}}}',
324 file_get_contents( $html_path ),
325 file_get_contents( $html_wrap_path )
326 );
327 } else {
328 $template = file_get_contents( $html_path );
329 }
330
331 $form_wrapper = '';
332 $form_wrapper_end = '';
333
334 if ( EasyOptInsLayout::uses_new_css() && $layout->layout_type != 'lightbox' ) {
335 $form_wrapper =
336 '<div class="' .
337 'fca_eoi_form_wrapper ' .
338 $layout->layout_class . '_wrapper ' .
339 'fca_eoi_layout_' . $layout->layout_number . '_wrapper' .
340 '">';
341 $form_wrapper_end = '</div>';
342 }
343
344 // Fill template with our formatting stuff
345 $template = str_replace(
346 array(
347 '<form>',
348 '{{{description_copy}}}',
349 '{{{headline_copy}}}',
350 '{{{name_field}}}',
351 '{{{email_field}}}',
352 '{{{submit_button}}}',
353 '{{{privacy_copy}}}',
354 '{{{fatcatapps_link}}}',
355 '</form>',
356 ),
357 array(
358 sprintf(
359 $form_wrapper .
360 '<div id="fca_eoi_form_%s" class="fca_eoi_form_content">' .
361 '<form method="post" action="#" class="fca_eoi_form %s %s" ' .
362 'data-fca_eoi_list_id="%s" data-fca_eoi_thank_you_page="%s" novalidate' .
363 '>' .
364 '<input type="hidden" name="fca_eoi_form_id" value="%s" />'
365 , $form_id
366 , EasyOptInsLayout::uses_new_css()
367 ? 'fca_eoi_layout_' . $layout->layout_number
368 : 'fca_eoi_' . $layout_type
369 , EasyOptInsLayout::uses_new_css()
370 ? $layout->layout_class
371 : 'fca_eoi_' . $layout_id
372 , K::get_var( 'list_id', $fca_eoi_meta )
373 , get_permalink( K::get_var( 'thank_you_page', $fca_eoi_meta ) )
374 ? get_permalink( K::get_var( 'thank_you_page', $fca_eoi_meta ) )
375 : ''
376 , $post->ID
377 ),
378 '<div>{{{description_copy}}}</div>',
379 EasyOptInsLayout::uses_new_css()
380 ? '<div>{{{headline_copy}}}</div>'
381 : '<span>{{{headline_copy}}}</span>',
382 EasyOptInsLayout::uses_new_css()
383 ? '<input class="fca_eoi_form_input_element" type="text" name="name" placeholder="{{{name_placeholder}}}">'
384 : '<input type="text" name="name" placeholder="{{{name_placeholder}}}" />',
385 EasyOptInsLayout::uses_new_css()
386 ? '<input class="fca_eoi_form_input_element" type="email" name="email" placeholder="{{{email_placeholder}}}">'
387 : '<input type="email" name="email" placeholder="{{{email_placeholder}}}" />',
388 EasyOptInsLayout::uses_new_css()
389 ? '<input class="fca_eoi_form_button_element" type="submit" value="{{{button_copy}}}">'
390 : '<input type="submit" value="{{{button_copy}}}" />',
391 EasyOptInsLayout::uses_new_css()
392 ? '<div>{{{privacy_copy}}}</div>'
393 : '<span >{{{privacy_copy}}}</span>',
394 EasyOptInsLayout::uses_new_css()
395 ? '{{#show_fatcatapps_link}}<div class="fca_eoi_layout_fatcatapps_link_wrapper fca_eoi_form_text_element"><a href="http://fatcatapps.com/eoi" target="_blank">Powered by Optin Cat</a></div>{{/show_fatcatapps_link}}'
396 : '{{#show_fatcatapps_link}}<p class="fca_eoi_' . $layout_id . '_fatcatapps_link_wrapper"><a href="http://fatcatapps.com/eoi" target="_blank">Powered by Optin Cat</a></p>{{/show_fatcatapps_link}}',
397 '<input type="hidden" name="id" value="' . $form_id . '"><input type="hidden" name="fca_eoi" value="1"></form></div>' . $form_wrapper_end,
398 ),
399 $template
400 );
401
402 $mustache = new Mustache_Engine;
403 $output = $mustache->render(
404 $template,
405 array(
406 'headline_copy' => $fca_eoi_meta[ 'headline_copy' ],
407 'description_copy' => $fca_eoi_meta[ 'description_copy' ],
408 'privacy_copy' => $fca_eoi_meta[ 'privacy_copy' ],
409 'name_placeholder' => $fca_eoi_meta[ 'name_placeholder' ],
410 'email_placeholder' => $fca_eoi_meta[ 'email_placeholder' ],
411 'button_copy' => $fca_eoi_meta[ 'button_copy' ],
412 'show_name_field' => K::get_var( 'show_name_field', $fca_eoi_meta ),
413 'show_fatcatapps_link' => K::get_var( 'show_fatcatapps_link', $fca_eoi_meta ),
414 )
415 );
416
417 // add the fca_eoi_alter_form
418 $output = apply_filters( 'fca_eoi_alter_form'
419 , $output
420 , $fca_eoi_meta
421 );
422
423 $error_text = '';
424
425 foreach ( $fca_eoi_meta as $key => $value ) {
426 if ( strpos( $key, 'error_text_' ) === 0 ) {
427 $text = substr( $key, 11 );
428 $error_text .= 'fca_eoi[' . json_encode($text) . '] = ' . json_encode($value) . ';';
429 }
430 }
431
432 if ( ! empty( $error_text ) ) {
433 $output .=
434 '<script>' .
435 'if ( typeof fca_eoi === "undefined" ) {' .
436 'fca_eoi = {};' .
437 '}' .
438 $error_text .
439 '</script>';
440 }
441
442 $prerequisites = $this->get_prerequisites_for_form( $form_id );
443 $prerequisites = str_replace('<style', '<style scoped', $prerequisites);
444
445 // Return form with debugging information if applicable
446 return $prerequisites . $output . ( FCA_EOI_DEBUG ? @d( $fca_eoi_meta, $template ) : '' );
447 }
448 }
449