1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631:
<?php
class Inbound_Mailer_Tokens {
public function __construct() {
self::load_hooks();
}
public function load_hooks() {
add_filter('acf/format_value', array(__CLASS__, 'process_tokens') , 10 , 1);
if (isset($_GET['disable_shortcodes'])) {
return;
}
add_action('media_buttons_context', array(__class__, 'token_button'), 99);
add_action('admin_enqueue_scripts', array(__CLASS__, 'enqueue_js'));
add_action('admin_footer', array(__CLASS__, 'token_generation_popup'));
add_action('admin_footer', array(__CLASS__, 'token_generation_js'));
add_action('admin_footer', array(__CLASS__, 'token_generation_css'));
add_shortcode('post-link', array(__CLASS__, 'process_post_link_shortcode'));
add_shortcode('post-title', array(__CLASS__, 'process_post_title_shortcode'));
add_shortcode('post-content', array(__CLASS__, 'process_post_content_shortcode'));
add_shortcode('featured-image', array(__CLASS__, 'process_post_featured_image_shortcode'));
add_shortcode('unsubscribe-link', array(__CLASS__, 'process_unsubscribe_link'));
add_action('add_meta_boxes', array(__CLASS__, 'load_metaboxes'));
add_action('save_post', array(__CLASS__, 'action_save_data'));
}
public static function token_button() {
global $post;
if (
!isset($post)
||
(
$post->post_type != 'inbound-email'
&&
$post->post_type != 'wp-lead'
)
) {
return;
}
$html = '<a href="#" class="button lead-fields-button" id="lead-fields-button-' . rand(10, 1200) . '" style="padding-left: .4em;" >';
$html .= '<span class="wp-media-buttons-icon" id="inbound_lead_fields_button"></span>' . __('Lead Fields', 'inbound-pro') . '</a>';
return $html;
}
public static function enqueue_js() {
global $post;
if (!isset($post) || $post->post_type != 'inbound-email') {
return;
}
wp_enqueue_script('popModal_js', INBOUND_EMAIL_URLPATH . 'assets/libraries/popModal/popModal.min.js', array('jquery'));
wp_enqueue_style('popModal_css', INBOUND_EMAIL_URLPATH . 'assets/libraries/popModal/popModal.min.css');
}
public static function token_generation_popup() {
global $post;
if (!isset($post) || $post->post_type != 'inbound-email') {
return;
}
$fields = Leads_Field_Map::build_map_array();
?>
<div id="lead_fields_popup_container" style="display:none;">
<table>
<tr>
<td class='lf-label'>
<?php _e('Select Field', 'inbound-mail'); ?>
</td>
<td class='lf-value'>
<select id='lf-field-dropdown' class='form-control'>
<?php
array_shift($fields);
foreach ($fields as $id => $label) {
echo '<option value="' . $id . '">' . $label . '</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td class='lf-label'>
<?php _e('Set Default', 'inbound-mail'); ?>
</td>
<td class='lf-value'>
<input id="lf-default" value="" class='form-control'>
</td>
</tr>
<tr>
<td class='lf-submit' colspan='2'>
<span class='button-primary lf-submit-button' id="lf-insert-shortcode" href='#'><?php _e('Insert Shortcode', 'inbound-pro'); ?></span>
</td>
</tr>
</table>
</div>
<?php
}
public static function token_generation_js() {
global $post;
if (isset($post) && $post->post_type != 'inbound-email') {
return;
}
?>
<script type='text/javascript'>
jQuery(document).ready(function () {
jQuery('body').on('click', '.lead-fields-button', function () {
jQuery('#' + this.id).popModal({
html: jQuery('#lead_fields_popup_container').html(),
placement: 'bottomLeft',
showCloseBut: true,
onDocumentClickClose: true,
onDocumentClickClosePrevent: '',
overflowContent: false,
inline: true,
beforeLoadingContent: 'Please, waiting...',
onOkBut: function () {
},
onCancelBut: function () {
},
onLoad: function () {
},
onClose: function () {
}
});
});
jQuery('body').on('click', '#lf-insert-shortcode', function () {
LFShortcode.build_shortcode();
});
});
var LFShortcode = (function () {
var field_id;
var field_default;
var shortcode;
var construct = {
build_shortcode: function () {
this.field_id = jQuery('#lf-field-dropdown').val();
this.field_default = jQuery('#lf-default').val();
this.generate_shortcode();
this.insert_shortcode();
},
generate_shortcode: function () {
this.shortcode = '[lead-field id="'
+ this.field_id
+ '" default="'
+ this.add_slashes(this.field_default)
+ '"]';
},
insert_shortcode: function () {
wp.media.editor.insert(this.shortcode);
jQuery('.close').click();
},
add_slashes: function (string) {
return string.replace('"', '\"');
;
}
}
return construct;
})();
</script>
<?php
}
public static function token_generation_css() {
global $post;
if (isset($post) && $post->post_type != 'inbound-email') {
return;
}
?>
<style type='text/css'>
.lf-label {
width: 80px;
}
.lf-submit {
padding-top: 10px;
margin-bottom: -10px
}
.lf-submit-button {
width: 100%;
}
</style>
<?php
}
public static function process_unsubscribe_link($params) {
$params = shortcode_atts(array(
'lead_id' => '',
'list_ids' => '-1',
'email_id' => '-1',
'rule_id' => '-1',
'job_id' => '-1'
), $params);
if (isset($params['lead_id'])) {
$params['lead_id'] = intval($params['lead_id']);
} else if (isset($_REQUEST['lead_id'])) {
$params['lead_id'] = intval($_REQUEST['lead_id']);
} else if (isset($_COOKIE['wp_lead_id'])) {
$params['lead_id'] = intval($_COOKIE['wp_lead_id']);
}
$params['variation_id'] = (isset($_REQUEST['inbvid'])) ? intval($_REQUEST['inbvid']) : intval(0);
$unsubscribe_link = Inbound_Mailer_Unsubscribe::generate_unsubscribe_link($params);
return $unsubscribe_link;
}
public static function process_post_content_shortcode($params) {
$params = shortcode_atts(array('id' => null, 'strip-images' => false, 'strip-links' => false), $params);
$post = get_post(trim($params['id']));
$pattern = '/\[(cta).*?\]/';
$content = preg_replace($pattern, '', $post->post_content);
$content = do_shortcode($content);
$content = wpautop($content);
if ($params['strip-images'] && $params['strip-images'] != "false") {
$content = strip_tags($content, '<a><span><div><i><b><small><pre><table><p><h1><h2><h3><h4><h5>');
}
if ($params['strip-links'] && $params['strip-links'] != "false") {
$content = strip_tags($content, '<span><div><i><b><small><pre><table><p><h1><h2><h3><h4><h5><img>');
}
return trim($content);
}
public static function process_post_featured_image_shortcode($params) {
global $post;
$params = shortcode_atts(array('id' => null), $params);
$post = get_post($params['id']);
return wp_get_attachment_url(get_post_thumbnail_id($post->ID));
}
public static function process_post_title_shortcode($params) {
$params = shortcode_atts(array('id' => null), $params);
$post = get_post($params['id']);
return $post->post_title;
}
public static function process_post_link_shortcode($params) {
$params = shortcode_atts(array('id' => null), $params);
return get_permalink($params['id']);
}
public static function process_tokens($field_value , $tokens = array() ) {
global $post, $email_tokens;
if ( !$tokens && ( !isset($post->post_type) || $post->post_type != 'inbound-email' )) {
return $field_value;
}
if (!is_string($field_value) || !strstr($field_value,'{{')) {
return $field_value;
}
if ( !$email_tokens ) {
$email_tokens = array();
if ($tokens) {
$email_tokens = $tokens;
$email_tokens = self::flatten_array($email_tokens);
$email_tokens = (is_array($email_tokens)) ? $email_tokens : array();
}
if (isset($_GET['post_id']) && $_GET['post_id']) {
$post = get_post((int) $_GET['post_id']);
$email_tokens = (array) $post;
$email_tokens['permalink'] = get_the_permalink((int) $_GET['post_id']);
$email_tokens['featured_image'] = wp_get_attachment_url(get_post_thumbnail_id((int)$post->ID));
wp_reset_query();
}
if (isset($_GET['tokens']) && !isset($_GET['tokens'])) {
$tokens = Inbound_API::get_args_from_token($_GET['tokens']);
$tokens = self::flatten_array($tokens);
if (is_array($tokens)) {
$email_tokens = $email_tokens + $tokens;
}
}
}
preg_match_all("/{{(.*?)}}/", $field_value, $matches );
if (!isset($matches[1])) {
return $field_value;
}
foreach ($matches[1] as $token_key) {
if (isset($email_tokens[$token_key])) {
$field_value = str_replace('{{' . $token_key . '}}', $email_tokens[$token_key], $field_value);
} else {
$field_value = str_replace('{{' . $token_key . '}}', '', $field_value);
}
}
$pattern = '/\[(cta).*?\]/';
$field_value = preg_replace($pattern, '', $field_value);
$pattern = '/<script\b[^>]*>(.*?)<\/script>/is';
$field_value = preg_replace($pattern, '', $field_value);
return $field_value;
}
public static function flatten_array($array) {
$flatten = array();
foreach ($array as $k => $value) {
if (is_array($value)) {
foreach ($value as $k1 => $v1) {
$flatten[$k1] = $v1;
}
} else {
$flatten[$k] = $value;
}
}
return $flatten;
}
public static function load_metaboxes() {
global $post, $Inbound_Mailer_Variations;
if ($post->post_type != 'post' && $post->post_type != 'page') {
return;
}
add_meta_box('inbound-email-content-shortcodes', __('Email Setup', 'inbound-pro'), array(__CLASS__, 'display_email_shortcodes'), $post->post_type, 'side', 'low');
}
public static function action_save_data($post_id) {
if (wp_is_post_revision($post_id)) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['inbound_automation_email_sent']) && $_POST['inbound_automation_email_sent'] ) {
update_post_meta( $post_id, 'inbound_automation_email_sent' , (bool) $_POST['inbound_automation_email_sent'] , false );
} else {
delete_post_meta( $post_id , 'inbound_automation_email_sent');
}
}
public static function display_email_shortcodes() {
global $post;
$has_been_sent = get_post_meta($post->ID , 'inbound_automation_email_sent' , true);
$automated_emails = Inbound_Mailer_Post_Type::get_automation_emails_as('ARRAY');
if (!$automated_emails) {
$automated_emails['#no-email-selected'] = __('No Automation emails detected. Please create an automated email first.', 'inbound-pro');
}
$permalink_array = array();
foreach ($automated_emails as $email_id => $email_name) {
if (!is_numeric($email_id)) {
continue;
}
$email_permalink = get_the_permalink($email_id);
$permalink_array[urlencode($email_permalink)] = $email_name;
}
$tokens = array('{{post_title}}', '{{post_content}}', '{{post_excerpt}}', '{{permalink}}', '{{featured_image}}', '{{author_name}}');
$tokens_string = implode('' , $tokens );
?>
<div>
<table style='width:100%'>
<tr>
<td style='width:22%'>
<div class="lp_tooltip" style="display:inline" title="<?php echo sprintf(__('Use these tokens inside email an automated email: %s', 'inbound-pro') , $tokens_string ); ?>">
<?php _e('Post Tokens', 'inbound-pro'); ?>
<i class="fa fa-question-circle"></i>
</div>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="inbound_automation_email_sent" value="true" <?php checked($has_been_sent, true); ?>> <?php _e('Locked' , 'inbound-pro'); ?>
<div class="lp_tooltip" style="display:inline" title="<?php _e('If our Marketing Automation component sends this post as an email to a lead list then this checkbox will enable automatically. Enabling this checkbox will prevent Marketing Automation component from sending it again. This prevents accidental double sending', 'inbound-pro'); ?>">
<i class="fa fa-question-circle"></i>
</div>
</td>
</tr>
<tr>
<td>
<center>
<span style="width:100%;margin-top:5px;" class="button button-default" id="generate-batch-email"><?php _e('Preview as Email', 'inbound-pro'); ?></span>
</center>
</td>
</tr>
</table>
</div>
<script>
jQuery(document).ready(function () {
jQuery('body').on('click', '#generate-batch-email', function (e) {
MailerListener.generate_email();
});
});
var MailerListener = (function () {
var Init = {
init: function () {
},
generate_email: function () {
swal({
title: "<?php _e('Preview Email Version', 'inbound-pro'); ?>",
text: "",
type: "info",
showCancelButton: true,
confirmButtonColor: "#2ea2cc",
confirmButtonText: "<?php _e('Get Preview Link', 'inbound-pro'); ?>",
closeOnConfirm: true,
selectField: {
placeholder: '<?php _e('Select Automated Email Template.', 'inbound-pro'); ?>',
padding: '20px',
width: '400px',
options: <?php echo json_encode($permalink_array); ?>
}
}, function (email_permalink) {
if (!email_permalink) {
return;
}
window.prompt("Copy to clipboard: Ctrl+C, Enter", decodeURIComponent(email_permalink) + '?post_id=<?php echo $post->ID; ?>');
});
}
}
return Init;
})();
</script>
<?php
}
}
function inbound_load_token_engine() {
new Inbound_Mailer_Tokens();
}
add_action('init', 'inbound_load_token_engine', 1);