Overview

Packages

  • ACF
  • Automation
    • Actions
    • Activation
    • LeadProfile
    • Menus
    • Queries
    • Rules
    • Triggers
  • CTA
    • Activation
    • AJAXListeners
    • Cloning
    • Core
    • Display
    • EditPage
    • Enqueues
    • GPLSettings
    • LeadsProfile
    • Loading
    • Menus
    • Notices
    • PlacementMetabox
    • PostType
    • Templates
    • Tracking
    • Variations
    • YOAST
  • InboundPro
    • Activation
    • AdminAJAX
    • AutoLoading
    • Cron
    • DataInterface
    • FieldMapping
    • Funnels
    • InboundNowAPI
    • Installer
    • LeadStatuses
    • Menus
    • Notifications
    • Ouath
    • Reports
    • Settings
    • Tracking
    • Translations
    • Updates
  • LandingPages
    • Activation
    • DataInterfaces
    • Management
    • Menus
    • NeedsAttention
    • Notices
    • Sidebars
    • Templates
    • Tracking
    • Variations
    • WelcomeScreen
    • Widgets
  • Leads
    • Activation
    • Akismet
    • BranchControl
    • BulkActions
    • Dashboard
    • Management
    • Notifications
    • Settings
    • Tracking
    • UserProfile
    • WPLogin
  • Mailer
    • Activation
    • Admin
    • ClickTracking
    • DataInterface
    • InboundForms
    • Leads
    • Management
    • Notifications
    • Scheduling
    • Sending
    • Settings
    • ShortcodesAndTokens
    • SparkPost
    • Templates
    • Unsubscribes
    • Variations
    • YoastSEO
  • None
  • Shared
    • APIs
    • CPT
    • DatabaseRoutines
    • DebugTricks
    • DoubleOptin
    • EventManagement
    • FieldMapping
    • InboundForms
    • LeadSorage
    • MarketingButton
    • Menus
    • Notifications
    • Shortcodes
    • ShortcodesAndTokens
    • StandAloneLicensing
    • Tracking
    • VisualEditor
  • xDepreciated

Classes

  • CTA_Activation
  • CTA_Activation_Update_Routines
  • CTA_Admin_Notices
  • CTA_Ajax_Listeners
  • CTA_Clone_Post
  • CTA_Conversion_Tracking
  • CTA_Dynamic_Widget
  • CTA_Enqueues
  • CTA_Load_Extensions
  • CTA_Menus
  • CTA_Metaboxes
  • CTA_Metaboxes_Global
  • CTA_Post_Type
  • CTA_Render
  • CTA_Settings
  • CTA_Static_Widget
  • CTA_Template_Manager
  • CTA_Template_Manager_List
  • CTA_Variations
  • CTA_WordPress_Leads
  • CTA_WordPress_SEO
  • Inbound_Ajax
  • Inbound_Akismet
  • Inbound_Analytics
  • Inbound_API
  • Inbound_API_Keys_Generation
  • Inbound_API_Keys_Table
  • Inbound_API_Wrapper
  • Inbound_Asset_Loader
  • Inbound_Automation_Action_Add_Remove_List
  • Inbound_Automation_Action_Add_Remove_Tag
  • Inbound_Automation_Action_Create_Lead
  • Inbound_Automation_Action_Create_User
  • Inbound_Automation_Action_Kill_Tasks
  • Inbound_Automation_Action_Relay_Data
  • Inbound_Automation_Action_Send_Email
  • Inbound_Automation_Action_Wait
  • Inbound_Automation_Activation
  • Inbound_Automation_Activation_Update_Routines
  • Inbound_Automation_Adminbar
  • Inbound_Automation_Lead_Profile
  • Inbound_Automation_Loader
  • Inbound_Automation_Plugin
  • Inbound_Automation_Post_Type
  • Inbound_Automation_Processing
  • Inbound_Automation_Query_Lead
  • Inbound_Automation_Query_User
  • Inbound_Automation_Trigger_inbound_double_optin_confirm
  • Inbound_Automation_Trigger_inbound_store_lead_post
  • Inbound_Automation_Trigger_inbound_track_link
  • Inbound_Automation_Trigger_Publish_Post
  • Inbound_Automation_Trigger_Save_Post_Deactivated
  • Inbound_Automation_Trigger_Set_Object_Terms
  • Inbound_Automation_Trigger_Update_Lead
  • Inbound_Automation_Trigger_User_Register
  • Inbound_Calls_To_Action_Plugin
  • Inbound_Confirm_Double_Optin
  • Inbound_Cron
  • Inbound_CTA_Quick_View
  • Inbound_Customizer
  • Inbound_Debug_Scripts
  • Inbound_Email_Meta
  • Inbound_Email_Preview
  • Inbound_Email_Template_Shortcodes
  • Inbound_Event_Report
  • Inbound_Events
  • Inbound_Events_Report
  • Inbound_Extension_Loads
  • Inbound_Forms
  • Inbound_Funnel_Reporting
  • Inbound_Impressions_Report
  • Inbound_Landing_Pages_Plugin
  • Inbound_Lead_Statuses
  • Inbound_Leads
  • Inbound_Leads_Custom_fields
  • Inbound_Leads_Plugin
  • Inbound_License
  • Inbound_List_Double_Optin
  • Inbound_Load_Shared
  • Inbound_Logging_Automation
  • Inbound_Login
  • Inbound_Mail_Daemon
  • Inbound_Mailer_ACF
  • Inbound_Mailer_Activation
  • Inbound_Mailer_Activation_Update_Routines
  • Inbound_Mailer_Ajax_Listeners
  • Inbound_Mailer_Clone_Post
  • Inbound_Mailer_Common_Settings
  • Inbound_Mailer_Customizer
  • Inbound_Mailer_Direct_Email_Leads
  • Inbound_Mailer_Enqueues
  • Inbound_Mailer_Forms_Integration
  • Inbound_Mailer_Load_Templates
  • Inbound_Mailer_Menus
  • Inbound_Mailer_Metaboxes
  • Inbound_Mailer_Notifications
  • Inbound_Mailer_Plugin
  • Inbound_Mailer_Post_Type
  • Inbound_Mailer_Scheduling
  • Inbound_Mailer_Settings
  • Inbound_Mailer_SparkPost
  • Inbound_Mailer_Stats_Report
  • Inbound_Mailer_Template_Manager
  • Inbound_Mailer_Template_Manager_List
  • Inbound_Mailer_Tokens
  • Inbound_Mailer_Tracking
  • Inbound_Mailer_Unsubscribe
  • Inbound_Mailer_Variations
  • Inbound_Mailer_WordPress_SEO
  • Inbound_Maintenance_Lists
  • Inbound_Marketing_Button
  • Inbound_Menus_Admin
  • Inbound_Menus_Adminbar
  • Inbound_Metaboxes_Automation
  • Inbound_Metaboxes_Leads
  • Inbound_Notifications
  • Inbound_Now_Store
  • Inbound_Options_API
  • Inbound_Pro_Activation
  • Inbound_Pro_Admin_Ajax_Listeners
  • Inbound_Pro_Automatic_Updates
  • Inbound_Pro_Downloads
  • Inbound_Pro_Notifications
  • Inbound_Pro_Oauth_Engine
  • Inbound_Pro_Plugin
  • Inbound_Pro_Settings
  • Inbound_Quick_View
  • Inbound_Reporting_Templates
  • Inbound_Search_And_Comment_Report
  • Inbound_Shared_ACF_BootStrap
  • Inbound_Shortcodes
  • Inbound_Shortcodes_Cookies
  • Inbound_Shortcodes_Fields
  • Inbound_SparkPost
  • Inbound_SparkPost_Stats
  • Inbound_Template_Utils
  • Inbound_Templating_Engine
  • Inbound_Tracking
  • Inbound_Translation_Updater
  • Inbound_Updater
  • Inbound_Upgrade_For_More_Reports
  • Inbound_Upgrade_Routines
  • Inbound_Visitor_Event_Report
  • Inbound_Visitor_Impressions_Report
  • Inbound_Visitors_Report
  • INBOUNDNOW_EXTEND
  • Landing_Pages_ACF
  • Landing_Pages_Activation
  • Landing_Pages_Activation_Update_Routines
  • Landing_Pages_Admin_Menus
  • Landing_Pages_Admin_Notices
  • Landing_Pages_Install
  • Landing_Pages_Load_Extensions
  • Landing_Pages_Meta
  • Landing_Pages_Metaboxes
  • Landing_Pages_Post_Type
  • Landing_Pages_Row_Actions
  • Landing_Pages_Settings
  • Landing_Pages_Sidebars
  • Landing_Pages_Split_Testing_Stats
  • Landing_Pages_Template_Management
  • Landing_Pages_Template_Switcher
  • Landing_Pages_Templates_List_Table
  • Landing_Pages_Variations
  • LandingPages_Welcome
  • Leads_Activation
  • Leads_Activation_Update_Routines
  • Leads_Admin_Notices
  • Leads_Batch_Processor
  • Leads_Branching
  • Leads_Dashboard
  • Leads_Field_Map
  • Leads_Manager
  • Leads_Post_Type
  • Leads_Settings
  • Leads_Tracking
  • Leads_User_Profile
  • LeadStorage
  • LP_EXTENSION_LICENSENING
  • LP_EXTENSION_UPDATER
  • LP_Variation_Rotation
  • LP_Widget_Conversion_Area

Functions

  • cta_check_active
  • cta_example_template_function
  • cta_load_dynamic_widget
  • CTA_Load_Extensions
  • cta_load_static_widget
  • CTA_Render
  • inbound_add_conversion_to_lead
  • inbound_automation_check_active
  • inbound_automation_load_definitions
  • inbound_automation_metaboxes
  • inbound_automation_processing
  • inbound_color
  • inbound_color_scheme
  • inbound_confirm_email_service_provider
  • inbound_email_kill_ie8
  • inbound_email_load_templates
  • inbound_form_add_lead_list
  • inbound_form_auto_publish
  • inbound_form_delete_transient
  • inbound_form_get_data
  • inbound_form_save
  • inbound_forms_change_columns
  • inbound_forms_cpt
  • inbound_forms_custom_columns
  • inbound_forms_default_content
  • inbound_get_form_names
  • inbound_get_parent_directory
  • inbound_Hex_2_RGB
  • inbound_inbound_email_example_template_function
  • inbound_load_lead_manager
  • inbound_load_token_engine
  • inbound_mailer_acf_integration
  • Inbound_Mailer_Common_Settings
  • Inbound_Mailer_Load_Templates
  • inbound_qtrans_disable
  • inbound_record_log
  • inbound_register_form_role_capabilities
  • inbound_shortcode_alert
  • inbound_shortcode_callout
  • inbound_shortcode_columns
  • inbound_shortcode_content_box
  • inbound_shortcode_divider
  • inbound_shortcode_empty_paragraph_fix
  • inbound_shortcode_four_fifth_columns
  • inbound_shortcode_full_columns
  • inbound_shortcode_gmap
  • inbound_shortcode_icon
  • inbound_shortcode_intro
  • inbound_shortcode_landing_pages
  • inbound_shortcode_leadp
  • inbound_shortcode_list_icons
  • inbound_shortcode_one_fifth_columns
  • inbound_shortcode_one_fourth_columns
  • inbound_shortcode_one_half_columns
  • inbound_shortcode_one_third_columns
  • inbound_shortcode_portfolio
  • inbound_shortcode_pricing
  • inbound_shortcode_profile
  • inbound_shortcode_social_links
  • inbound_shortcode_tabs
  • inbound_shortcode_teaser
  • inbound_shortcode_testimonial
  • inbound_shortcode_three_fifth_columns
  • inbound_shortcode_three_fourth_columns
  • inbound_shortcode_two_fifth_columns
  • inbound_shortcode_two_third_columns
  • inbound_shortcode_video
  • inbound_store_lead
  • inbound_template_brightness
  • inbound_template_color
  • Inbound_Templating_Engine
  • inbound_travis_check
  • inboundnow_add_master_license
  • json_encode_fallback
  • landingpage_fix_known_wp_title_isses
  • landingpages_is_active
  • load_CTA_Settings
  • load_CTA_Template_Manager
  • load_Inbound_API_Keys_Generation
  • load_Inbound_Lead_Statuses
  • load_Inbound_Leads_Custom_fields
  • load_inbound_mail_daemon
  • load_Inbound_Mailer_Settings
  • load_Inbound_Mailer_Template_Manager
  • load_Inbound_Pro_Downloads
  • lp_ab_testing_get_current_variation_id
  • lp_add_option
  • lp_body_class
  • lp_check_active
  • lp_content_area
  • lp_conversion_area
  • lp_discover_important_wrappers
  • lp_footer
  • lp_generate_drowndown
  • lp_get_parent_directory
  • lp_get_value
  • lp_global_config
  • lp_head
  • lp_in_admin_header
  • lp_init
  • lp_list_feature
  • lp_load_widgets
  • lp_main_headline
  • lp_manage_templates
  • lp_move_template_files
  • lp_rebuild_attributes
  • lp_templates_upload
  • mailer_check_active
  • wp_cta_check_active
  • wp_cta_kill_ie8
  • wp_cta_load_calls_to_action
  • wp_leads_get_page_final_id
  • wpl_url_to_postid
  • wpleads_add_lead_to_list
  • wpleads_check_active
  • wpleads_get_lead_lists_as_array
  • Overview
  • Package
  • Class
  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 description could be refactored. Hosts various methods related to the unsubscribe token, 'lead fields' WYSIWYG feature support, various shortcodes that can be used inside an email, and the previewing of post data inside an automated email.
 *
 * @package Mailer
 * @subpackage  ShortcodesAndTokens
 */


class Inbound_Mailer_Tokens {


    /**
     *  Initialize class
     */
    public function __construct() {


        self::load_hooks();
    }

    /**
     *  Loads hooks and filters
     */
    public function load_hooks() {

        /* Listen for and process email tokens for email previews */
        add_filter('acf/format_value', array(__CLASS__, 'process_tokens') , 10 , 1);

        if (isset($_GET['disable_shortcodes'])) {
            return;
        }

        /* Add button  */
        add_action('media_buttons_context', array(__class__, 'token_button'), 99);

        /* Load supportive libraries */
        add_action('admin_enqueue_scripts', array(__CLASS__, 'enqueue_js'));

        /* Add shortcode generation dialog */
        add_action('admin_footer', array(__CLASS__, 'token_generation_popup'));

        /* Add supportive js */
        add_action('admin_footer', array(__CLASS__, 'token_generation_js'));

        /* Add supportive css */
        add_action('admin_footer', array(__CLASS__, 'token_generation_css'));

        /* Add shortcode handler */
        add_shortcode('post-link', array(__CLASS__, 'process_post_link_shortcode'));

        /* Add shortcode handler */
        add_shortcode('post-title', array(__CLASS__, 'process_post_title_shortcode'));

        /* Add shortcode handler */
        add_shortcode('post-content', array(__CLASS__, 'process_post_content_shortcode'));

        /* Add shortcode handler */
        add_shortcode('featured-image', array(__CLASS__, 'process_post_featured_image_shortcode'));

        /* Add shortcode handler for [unsubscribe-link] */
        add_shortcode('unsubscribe-link', array(__CLASS__, 'process_unsubscribe_link'));

        /* Add information to posts/pages on how to use content shortcodes */
        add_action('add_meta_boxes', array(__CLASS__, 'load_metaboxes'));

        /* Saves all all incoming POST data as meta pairs */
        add_action('save_post', array(__CLASS__, 'action_save_data'));

        /* on draft to publish update post locked status to pending */
        // to do
    }

    /**
     *  Displays token select button
     */
    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;
    }

    /**
     *  Enqueue JS
     */
    public static function enqueue_js() {
        global $post;

        if (!isset($post) || $post->post_type != 'inbound-email') {
            return;
        }

        /* Enqueue popupModal */
        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');


    }

    /**
     *  Token/Shortcode generation script
     */
    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
    }

    /**
     *  Loads JS to support the token generation thickbox
     */
    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 () {

                /* Add listener to throw popup on button click */
                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 () {
                        }
                    });
                });

                /* Add listener to generate shortcode */
                jQuery('body').on('click', '#lf-insert-shortcode', function () {
                    LFShortcode.build_shortcode();
                });

            });

            var LFShortcode = (function () {

                var field_id;
                var field_default;
                var shortcode;

                var construct = {
                    /**
                     *  Builds shortcode given inputs
                     */
                    build_shortcode: function () {
                        this.field_id = jQuery('#lf-field-dropdown').val();
                        this.field_default = jQuery('#lf-default').val();
                        this.generate_shortcode();
                        this.insert_shortcode();
                    },
                    /**
                     *  Generates html shortcode from given inputs
                     */
                    generate_shortcode: function () {
                        this.shortcode = '[lead-field id="'
                            + this.field_id
                            + '" default="'
                            + this.add_slashes(this.field_default)
                            + '"]';
                    },
                    /**
                     *  insert shortcode
                     */
                    insert_shortcode: function () {
                        wp.media.editor.insert(this.shortcode);
                        jQuery('.close').click();
                    },
                    /**
                     *  escapes quotation marks
                     */
                    add_slashes: function (string) {
                        return string.replace('"', '\"');
                        ;
                    }
                }

                return construct;
            })();
        </script>
        <?php
    }

    /**
     *  Loads CSS to support the token generation popup
     */
    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
    }


    /**
     *  Process unsubscribe token
     */
    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);


        /* check to see if lead id is set as a REQUEST */
        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']);
        }

        /* Add variation id to unsubscribe link */
        $params['variation_id'] = (isset($_REQUEST['inbvid'])) ? intval($_REQUEST['inbvid']) : intval(0);

        /* generate unsubscribe link */
        $unsubscribe_link = Inbound_Mailer_Unsubscribe::generate_unsubscribe_link($params);

        return $unsubscribe_link;
    }




    /**
     * Shortcode to generate post content
     */
    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']));

        /* remove cta shortcode */
        $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);
    }

    /**
     * Shortcode to generate post 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));
    }

    /**
     * Shortcode to generate post content
     */
    public static function process_post_title_shortcode($params) {
        $params = shortcode_atts(array('id' => null), $params);

        $post = get_post($params['id']);

        return $post->post_title;
    }


    /**
     * Shortcode to generate post content
     */
    public static function process_post_link_shortcode($params) {
        $params = shortcode_atts(array('id' => null), $params);

        return get_permalink($params['id']);
    }

    /**
     * Hooks into acf/format_value and decodes string is tokens are available via URL
     * Also is callable directly
     * @param $field_value
     * @param $tokens
     * @return mixed|void
     */
    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 post id is present lets set the global email_tokens variable */
            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 tokens are set let's see if we can make use of them. Token strings will fail if they exceed 2000 characters */
            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);
            }
        }

        /* remove cta shortcodes */
        $pattern = '/\[(cta).*?\]/';
        $field_value = preg_replace($pattern, '', $field_value);

        /* remove javascript */
        $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;
    }


    /**
     * Loads Metaboxes
     */
    public static function load_metaboxes() {
        global $post, $Inbound_Mailer_Variations;

        if ($post->post_type != 'post' && $post->post_type != 'page') {
            return;
        }

        /* Show Selected Template */
        add_meta_box('inbound-email-content-shortcodes', __('Email Setup', 'inbound-pro'), array(__CLASS__, 'display_email_shortcodes'), $post->post_type, 'side', 'low');
    }

    /**
     * Updates email variation data on post save
     *
     * @param INT $inbound_email_id of email id
     *
     */
    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 () {
                /* Add listener to prompt sweet alert on unschedule */
                jQuery('body').on('click', '#generate-batch-email', function (e) {
                    MailerListener.generate_email();
                });

            });
            var MailerListener = (function () {

                var Init = {
                    /**
                     *    Initialize immediate UI modifications
                     */
                    init: function () {

                    },
                    /**
                     *    Prompts send test email dialog
                     */
                    generate_email: function () {

                        /* Throw confirmation for scheduling */
                        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
    }

}

/**
 *  Loads token engine on the administrator side
 */
function inbound_load_token_engine() {
    new Inbound_Mailer_Tokens();
}

add_action('init', 'inbound_load_token_engine', 1);
Inbound Pro Plugin - PHP Codex API documentation generated by ApiGen