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: 
<?php

/**
 * Class manages the double optin preparation process
 * @package Shared
 * @subpackage DoubleOptin
 */
class Inbound_List_Double_Optin {

    function __construct() {
        self::add_hooks();
    }

    public static function add_hooks() {

        add_action('admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'));

        /* Modify the Edit lead list page */
        add_action('wplead_list_category_edit_form_fields', array(__CLASS__, 'add_list_settings'));

        /**/
        add_action('add_lead_to_lead_list', array(__CLASS__, 'remove_from_double_optin_list'), 10, 2);

        /* Add the setting saver and getter */
        add_action('wplead_list_category_edit_form', array(__CLASS__, 'lead_list_save_settings'));

        /* Save the settings to the term meta */
        add_action('wp_ajax_lead_list_save_settings', array(__CLASS__, 'ajax_lead_list_save_settings'));
    }


    /**
     *
     */
    public static function enqueue_scripts() {
        $screen = get_current_screen();

        if (!isset($screen) || $screen->id != 'edit-wplead_list_category') {
            return;
        }

        wp_enqueue_script('jquery');
        wp_enqueue_script('thickbox');
        wp_enqueue_style('thickbox');
        wp_enqueue_script('media-upload');

    }

    public static function get_default_email_content($settings) {

        if ($settings['logo']) {
            $logo_html = '<tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                  <td class="logo" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; vertical-align: top; text-align: center;">
                                    <img src="' . $settings['logo'] . '" width="" style="max-width:500px;padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; max-width: 100%; margin: 30px 0;">
                                  </td>
                              </tr>';
        } else {
            $logo_html = "";
        }

        $html = '<!DOCTYPE html>
                    <html >
                      <head>
                        <meta charset="UTF-8">
                        <meta name="viewport" content="width=device-width" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                        <title style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                            ' . $settings['email_subject'] . '
                         </title>
                      </head>

                        <body style="margin: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; padding: 0; border-top: 2px solid #26334D; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; background-color: white; height: 100%; line-height: 1.6; width: 100%;">
                          <table class="body-wrap" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; width: 100%; background-color: white;">
                            <tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                              <td style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; vertical-align: top;"></td>
                              <td width="400" class="container" style="font-size: 14px; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; padding: 0; line-height: 22px; vertical-align: top; margin: 0 auto; display: block; max-width: 400px; clear: both;">
                                <div class="content" style="padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; margin: 0 auto; max-width: 400px; display: block;">
                                  <table width="100%" cellpadding="0" cellspacing="0" class="main" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                    ' . $logo_html . '
                                    <tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                      <td class="content-wrap" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; vertical-align: top;">
                                        <table width="100%" cellpadding="0" cellspacing="0" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                          <tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                            <td class="content-block" style="font-size: 14px; margin: 0; box-sizing: border-box; line-height: 22px; vertical-align: top; color: #8F9BB3; padding: 20px 0; font-family: \'Helvetica Neue\', Helvetica, Arial, \'Lucida Grande\', sans-serif; background: #ffffff; border-radius: 3px; box-shadow: 0 0 0 1px #D8DDE2;">
                                              <p style="margin: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; font-weight: normal; margin-bottom: 0; padding: 0 20px;">
                                              ' . $settings['message'] . '</p>
                                             </td>
                                          </tr>
                                          <tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                                            <td class="action" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; vertical-align: top; padding-top: 20px;">
                                              <a href="[inbound-list-double-optin-link]" style="line-height: 22px; margin: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #ffffff; font-size: 18px; padding: 20px; display: block; font-weight: bold; background: #2980b9; border-radius: 3px; text-decoration: none; text-align: center;">' . $settings['button_text'] . '</a>
                                            </td>
                                          </tr>
                                        </table>
                                      </td>
                                    </tr>
                                  </table>
                                </div>
                              </td>
                            </tr>
                          </table>
                        <div class="footer" style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; width: 100%; clear: both;">
                          <table width="100%" class="footer-table" style="margin: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px; padding: 40px 20px; background: white;">
                            <tr style="margin: 0; padding: 0; box-sizing: border-box; font-family: \'Helvetica Neue\', \'Helvetica\', Helvetica, Arial, sans-serif; color: #8F9BB3; font-size: 14px; line-height: 22px;">
                              <td class="aligncenter content-block" style="margin: 0; box-sizing: border-box; line-height: 22px; vertical-align: top; padding: 20px 0; font-family: \'Helvetica Neue\', Helvetica, Arial, \'Lucida Grande\', sans-serif; color: #8F9BB3; text-align: center; font-size: 12px;">
                                ' . html_entity_decode($settings['footer_text']) . '
                              </td>
                            </tr>
                          </table>
                        </div>
                      </body>
                    </html>
                    ';

        return $html;
    }

    /**
     * Gets the list id of the double optin waiting list
     * @return mixed
     */
    public static function get_double_optin_waiting_list() {
        /*get the double optin waiting list id*/
        if (!defined('INBOUND_PRO_CURRENT_VERSION')) {
            $double_optin_list_id = get_option('list-double-optin-list-id', '');
        } else {
            $settings = Inbound_Options_API::get_option('inbound-pro', 'settings', array());
            $double_optin_list_id = $settings['leads']['list-double-optin-list-id'];
        }

        return $double_optin_list_id;
    }

    /**
     * Saves the list id of the double optin waiting list
     * @return mixed
     */
    public static function save_double_optin_waiting_list() {
        /*get the double optin waiting list id*/
        if (!defined('INBOUND_PRO_CURRENT_VERSION')) {
            update_option('list-double-optin-list-id', $term_id['term_id']);
        } else {
            $settings = Inbound_Options_API::get_option('inbound-pro', 'settings');
            $settings['leads']['list-double-optin-list-id'] = $term_id['term_id'];
            Inbound_Options_API::update_option('inbound-pro', 'settings', $settings);
        }
    }

    /**
     * Saves form options to the term meta
     */
    public static function ajax_lead_list_save_settings() {
        $data = stripslashes_deep($_POST['data']);
        $cleaned = array();
        
        foreach ($data as $key => $value) {
            switch($key) {
                case 'double_optin_email_confirmation_footer_text':
                    $cleaned[sanitize_text_field($key)] = $value;
                    break;
                case 'double_optin_email_confirmation_message':
                    $cleaned[sanitize_text_field($key)] = $value;
                    break;
                default:
                    $cleaned[sanitize_text_field($key)] = sanitize_text_field($value);
                    break;
            }
        }

        /*get the existing stored settings*/
        $meta = get_term_meta((int)$_POST['id'], 'wplead_lead_list_meta_settings', true);

        /**if the settings aren't empty, add each cleaned setting to the settings**/
        if (!empty($meta)) {
            foreach ($cleaned as $setting_name => $setting_value) {
                $meta[$setting_name] = $setting_value;
            }
        } else {
            /*if the settings are empty, just push the cleaned data*/
            $meta = $cleaned;
        }

        update_term_meta((int)$_POST['id'], 'wplead_lead_list_meta_settings', $meta);

        echo json_encode(__('Settings Updated!', 'inbound-pro'));

        die();
    }

    /**
     * Gets the values of all inboundnow-lead-list-option class inputs, and sends them to ajax_lead_list_save_settings for saving.
     * The element attribute "name" is the key for the settings.
     */
    public static function lead_list_save_settings($list) {
        ?>
        <script>
            jQuery(document).ready(function () {
                jQuery('input#submit, .edit-tag-actions .button').on('click', function () {
                    var settingData = {};
                    var id = "<?php echo $list->term_id; ?>";
                    /*get the value of all inboundnow lead list options*/
                    jQuery('.double-optin-setting').each(function () {
                        settingData[jQuery(this).attr("name")] = jQuery(this).val();
                    });

                    jQuery.ajax({
                        type: 'POST',
                        url: ajaxurl,
                        data: {
                            action: 'lead_list_save_settings',
                            id: id,
                            data: settingData,
                        },
                        success: function (response) {
                            console.log(JSON.parse(response));
                        },
                    });

                });
            });
        </script>
        <?php
    }


    /**
     * @param $list
     */
    public static function add_list_settings($list) {

        /* first let's make sure this is not our list for storing unconfirmed leads */
        $double_optin_list_id = self::get_double_optin_waiting_list();

        if ($list->term_id == $double_optin_list_id) {
            return;
        }

        /* get settings */
        $settings = get_term_meta($list->term_id, 'wplead_lead_list_meta_settings', true);
        $settings = (is_array($settings)) ? $settings : array();
        $settings['double_optin'] = (isset($settings['double_optin'])) ? $settings['double_optin'] : 0;
        $settings['double_optin_email_template'] = (isset($settings['double_optin_email_template'])) ? $settings['double_optin_email_template'] : __('Please confirm your subscription', 'inbound-pro');
        $settings['double_optin_email_confirmation_logo'] = (isset($settings['double_optin_email_confirmation_logo'])) ? $settings['double_optin_email_confirmation_logo'] : '';
        $settings['double_optin_email_confirmation_subject'] = (isset($settings['double_optin_email_confirmation_subject'])) ? $settings['double_optin_email_confirmation_subject'] : __('Please confirm your subscription', 'inbound-pro');
        $settings['double_optin_email_confirmation_message'] = (isset($settings['double_optin_email_confirmation_message'])) ? $settings['double_optin_email_confirmation_message'] : __('To activate your subscription, please confirm your email address. If you received this by mistake, please disregard this email.', 'inbound-pro');
        $settings['double_optin_email_confirmation_button_text'] = (isset($settings['double_optin_email_confirmation_button_text'])) ? $settings['double_optin_email_confirmation_button_text'] : __('Confirm email address', 'inbound-pro');
        $settings['double_optin_email_confirmation_footer_text'] = (isset($settings['double_optin_email_confirmation_footer_text'])) ? $settings['double_optin_email_confirmation_footer_text'] : sprintf(__('Powered by %sInbound Now%s', 'inbound-pro'), '<a href="http://www.inboundnow.com">', '</a>');

        /* get email templates */
        $emails = array();
        if (defined('INBOUND_PRO_CURRENT_VERSION')) {

            if (class_exists('Inbound_Mailer_Post_Type')) {
                $emails = Inbound_Mailer_Post_Type::get_automation_emails_as('ARRAY');
            }

            $emails = ($emails) ? $emails : array(__('No Automation emails detected. ', 'inbound-pro'));
        }
        ?>
        <tr class="form-field">
            <th valign="top" scope="row">
                <label><?php _e('Double Opt-in', 'inbound-pro'); ?></label>
            </th>
            <td>
                <select id="double_optin_toggle" class="double-optin-setting" name="double_optin" title="<?php _e('Enable list Double Opt In to send leads an email requesting consent to being added to a list.', 'inbound-pro'); ?>">
                    <option value="0" <?php selected($settings['double_optin'], 0); ?> ><?php _e('Off', 'inbound-pro'); ?></option>
                    <option value="1" <?php selected($settings['double_optin'], 1); ?> ><?php _e('On', 'inbound-pro'); ?></option>
                </select>
            </td>
        </tr>
        <tr class="form-field double-optin-enabled " id="double-optin-email-template">
            <th valign="top" scope="row">
                <label><?php _e('Select Email Template', 'inbound-pro'); ?></label>
            </th>
            <td>
                <select name="double_optin_email_template" id="double_optin_email_template" class="double-optin-setting">
                    <option value='default-email-template' <?php selected($settings['double_optin_email_template'], 'default-email-template'); ?>>
                        <?php _e('Use the default email template', 'inbound-pro'); ?>
                    </option>
                    <?php
                    foreach ($emails as $id => $label) {
                        echo '<option value="' . $id . '" ' . selected($settings['double_optin_email_template'], $id) . '>' . $label . '</option>';
                    }
                    ?>
                </select>
            </td>
        </tr>
        <tr class="form-field double-optin-enabled default-email-setting" id="">
            <th valign="top" scope="row">
                <label> <?php _e('Email Subject', 'inbound-pro'); ?></label>
            </th>
            <td>
                <input type="text" name="double_optin_email_confirmation_subject" size="30" id="double_optin_email_confirmation_subject" class="double-optin-setting" autocomplete="off" value="<?php echo $settings['double_optin_email_confirmation_subject']; ?>">
            </td>
        </tr>
        <tr class="form-field double-optin-enabled default-email-setting" id="">
            <th valign="top" scope="row">
                <label><?php _e('Email Logo', 'inbound-pro'); ?></label>
            </th>
            <td>
                <input type="text" id="double_optin_email_confirmation_logo" name="double_optin_email_confirmation_logo" value="<?php echo esc_url($settings['double_optin_email_confirmation_logo']); ?>" class="double-optin-setting"/>
                <input id="double_optin_email_confirmation_logo_button" type="button" class="button" value="<?php _e('Upload Logo', 'inbound-pro'); ?>"/>
            </td>
        </tr>
        <tr class="form-field double-optin-enabled default-email-setting" id="">
            <th valign="top" scope="row">
                <label><?php _e('Email Message', 'inbound-pro'); ?></label>
            </th>
            <td>
                <textarea name="double_optin_email_confirmation_message" class="double-optin-setting" style="width:100%"><?php echo $settings['double_optin_email_confirmation_message']; ?></textarea>
            </td>
        </tr>
        <tr class="form-field double-optin-enabled default-email-setting" id="">
            <th valign="top" scope="row">
                <label><?php _e('Button Text', 'inbound-pro'); ?></label>
            </th>
            <td>
                <input type="text" name="double_optin_email_confirmation_button_text" size="30" class="double-optin-setting" value="<?php echo $settings['double_optin_email_confirmation_button_text']; ?>">
            </td>
        </tr>
        <tr class="form-field double-optin-enabled default-email-setting" id="">
            <th valign="top" scope="row">
                <label><?php _e('Footer Text', 'inbound-pro'); ?></label>
            </th>
            <td>
                <input type="text" name="double_optin_email_confirmation_footer_text" size="30" class="double-optin-setting" value="<?php echo htmlentities($settings['double_optin_email_confirmation_footer_text']); ?>">
            </td>
        </tr>
        <tr class="form-field double-optin-enabled confirmation-shortcode-notice" id="">
            <th valign="top" scope="row">
                <label><?php _e('Note', 'inbound-pro'); ?></label>
            </th>
            <td>
                <p><?php _e('When using Inbound Pro\'s email component you should use the shortcode below to render your confirmation link. ', 'inbound-pro'); ?></p>
                <pre>[inbound-list-double-optin-link]</pre>
            </td>
        </tr>
        <style type="text/css">
            #wpfooter {
                position: initial;
            }

            .double-optin-enabled {
                display: table-row;
            }
        </style>

        <script>
            jQuery(document).ready(function () {

                /* listen for logo upload */
                jQuery('#double_optin_email_confirmation_logo_button').click(function () {
                    tb_show('', 'media-upload.php?referer=wptuts-settings&type=image&TB_iframe=true&post_id=0', false);
                    return false;
                });

                window.send_to_editor = function (html) {
                    var image_url = jQuery('img', html).attr('src');
                    jQuery('#double_optin_email_confirmation_logo').val(image_url);
                    tb_remove();
                }

                /*if the double optin status has changed*/
                jQuery('#double_optin_toggle').on('change', function () {
                    if (jQuery('#double_optin_toggle').val() != '1') {
                        jQuery('.double-optin-enabled').css({'display': 'none'});
                    } else {
                        jQuery('.double-optin-enabled').css({'display': 'table-row'});
                        jQuery('#double_optin_email_template').trigger('change');
                    }
                });

                /*if the double optin status has changed*/
                jQuery('#double_optin_email_template').on('change', function () {
                    if(jQuery('#double_optin_toggle').val() == '1'){
                        if (jQuery('#double_optin_email_template').val() == 'default-email-template') {
                            jQuery('.default-email-setting').css({'display': 'table-row'});
                            jQuery('.confirmation-shortcode-notice').css({'display': 'none'});
                        } else {
                            jQuery('.default-email-setting').css({'display': 'none'});
                            jQuery('.confirmation-shortcode-notice').css({'display': 'table-row'});
                        }
                    }
                });

                /*trigger a refresh of the email inputs just after the page is loaded*/
                setTimeout(function () {
                    jQuery('#double_optin_toggle').trigger('change');
                    jQuery('#double_optin_email_template').trigger('change');
                }, 240);

            });
        </script>

        <?php
    }

    /**
     *  Sends A Double Optin Confirmation to Lead After Conversion
     */
    public static function send_double_optin_confirmation($lead) {

        /*get the lists*/
        $lists = get_post_meta($lead['id'], 'double_optin_lists', true);

        /*exit if there aren't any lists*/
        if (!isset($lists) || empty($lists)) {
            return;
        }

        /**Loop through the double optin lists the lead has waiting for a response.
         *
         * If the response email is an automated one, shoot it off here.
         * If it's a custom template, add it to the email_contents array to be processed further down the page**/
        $email_contents = array();
        foreach ($lists as $list_id) {
            $list_settings = get_term_meta((int)$list_id, 'wplead_lead_list_meta_settings', true);


            /* if there is a double optin email template and its not a custom one */
            if (!empty($list_settings['double_optin_email_template']) && $list_settings['double_optin_email_template'] != 'default-email-template') {
                $vid = Inbound_Mailer_Variations::get_next_variant_marker($list_settings['double_optin_email_template']);

                $args = array(
                    'email_id' => $list_settings['double_optin_email_template'],
                    'vid' => $vid,
                    'email_address' => $lead['email'],
                    'lead_id' => $lead['id'],
                    'tags' => array('inbound-forms'),
                    'lead_lists' => $lists,
                );

                $response = Inbound_Mail_Daemon::send_solo_email($args);

            } else if ($list_settings['double_optin_email_template'] == 'default-email-template' && !empty($list_settings['double_optin_email_confirmation_subject'])) {
                /* if there is an email template and it's a custom one*/

                /*add the email to the queue of emails to send*/
                $email_contents[$list_id]['logo'] = $list_settings['double_optin_email_confirmation_logo'];
                $email_contents[$list_id]['email_subject'] = $list_settings['double_optin_email_confirmation_subject'];
                $email_contents[$list_id]['message'] = $list_settings['double_optin_email_confirmation_message'];
                $email_contents[$list_id]['button_text'] = $list_settings['double_optin_email_confirmation_button_text'];
                $email_contents[$list_id]['footer_text'] = $list_settings['double_optin_email_confirmation_footer_text'];
            }
        }

        /*exit if there are no response emails*/
        $email_contents = array_filter($email_contents);
        if (!$email_contents) {
            return;
        }


        foreach ($email_contents as $list_id => $email_content) {

            $content = self::get_default_email_content($email_content);
            $confirm_subject = $email_content['email_subject'];

            $args = array(
                'lead_id' => $lead['id'],
                'list_ids' => $lists,
                'email_id' => $lead['email']
            );

            $content = self::add_confirm_link_shortcode_params($content, $args);
            $content = do_shortcode($content, false);
            $content = str_replace(']]>', ']]&gt;', $content);

            $from_name = get_option('blogname', '');
            $from_email = get_option('admin_email');

            $headers = "From: " . $from_name . " <" . $from_email . ">\n";
            $headers .= 'Content-type: text/html';
            $headers = apply_filters('list_double_optin_lead_conversion/headers', $headers);

            wp_mail($lead['email'], $confirm_subject, $content, $headers);

            /* only send once */
            return;
        }

    }

    /**
     * Adds the lead id, the ids of the lists for the lead to confirm, and the lead's email to the shortcode
     * Also removes all text except the link text from the shortcode
     * params: $content: HTML string; the email content, $args : array(lead_id, email_id, list_ids); args to add to the shortcode.
     *
     * This could be reformatted into a general shortcode search and replace function
     */
    public static function add_confirm_link_shortcode_params($content, $args) {
        //regex for finding shortcodes, from https://core.trac.wordpress.org/browser/tags/3.6.1/wp-includes/shortcodes.php#L211
        $shortcode_regex = '/\['                             // Opening bracket
            . '(\\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
            . "(inbound-list-double-optin-link)"         // 2: Shortcode name
            . '(?![\\w-])'                       // Not followed by word character or hyphen
            . '('                                // 3: Unroll the loop: Inside the opening shortcode tag
            . '[^\\]\\/]*'                   // Not a closing bracket or forward slash
            . '(?:'
            . '\\/(?!\\])'               // A forward slash not followed by a closing bracket
            . '[^\\]\\/]*'               // Not a closing bracket or forward slash
            . ')*?'
            . ')'
            . '(?:'
            . '(\\/)'                        // 4: Self closing tag ...
            . '\\]'                          // ... and closing bracket
            . '|'
            . '\\]'                          // Closing bracket
            . '(?:'
            . '('                        // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
            . '[^\\[]*+'             // Not an opening bracket
            . '(?:'
            . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
            . '[^\\[]*+'         // Not an opening bracket
            . ')*+'
            . ')'
            . '\\[\\/\\2\\]'             // Closing shortcode tag
            . ')?'
            . ')'
            . '(\\]?)/';

        preg_match_all($shortcode_regex, $content, $matches);

        /**This adds the lead id, list ids, and lead email to each shortcode.  //There shouldn't be more than one shortcode though...
         * It also removes any atts other than the link text**/
        for ($i = 0; $i < count($matches[0]); $i++) {
            /*if the current shortcode is inbound-inbound-list-double-optin-link*/
            if ($matches[2][$i] == 'inbound-list-double-optin-link') {
                /*if no link text has been specified*/
                $replacement_shortcode = '[list-double-optin-link lead_id=' . (int)$args['lead_id'] . ' list_ids=' . implode(',', $args['list_ids']) . ' email_id=' . sanitize_email($args['email_id']) . ' ]';
                $content = str_replace($matches[0][$i], $replacement_shortcode, $content);
            }
        }

        return $content;
    }

    /**
     * Removes leads from the waiting for double optin confirmation list if they've been added to lists directly
     */
    public static function remove_from_double_optin_list($lead_id, $list_ids) {
        $double_optin_lists = get_post_meta($lead_id, 'double_optin_lists', true);

        /* exit if there's no double optin lists */
        if (empty($double_optin_lists)) {
            return;
        }

        /* exit if the lead hasn't been added to a double optin list */
        if (!in_array($list_ids, $double_optin_lists)) {
            return;
        }

        if (!is_array($list_ids)) {
            $list_ids = array($list_ids);
        }


        foreach ($list_ids as $list_id) {
            if (in_array($list_id, $double_optin_lists)) {
                $index = array_search($list_id, $double_optin_lists);
                unset($double_optin_lists[$index]);
            }
        }

        /**if there are still lists awaiting double optin confirmation after list values have been removed**/
        if (!empty($double_optin_lists)) {
            /*update the meta listing with the remaining lists*/
            update_post_meta($lead_id, 'double_optin_lists', array_values($double_optin_lists));
        } else {
            /**if there are no lists awaiting double optin confirmation**/

            /*get the double optin waiting list id*/
            if (!defined('INBOUND_PRO_CURRENT_VERSION')) {
                $double_optin_list_id = get_option('list-double-optin-list-id', '');
            } else {
                $settings = Inbound_Options_API::get_option('inbound-pro', 'settings', array());
                $double_optin_list_id = $settings['leads']['list-double-optin-list-id'];
            }

            /*remove the meta listing for double optin*/
            delete_post_meta($lead_id, 'double_optin_lists');
            /*remove this lead from the double optin list*/
            wp_remove_object_terms($lead_id, (int)$double_optin_list_id, 'wplead_list_category');
            /*update the lead status*/
            update_post_meta($lead_id, 'wp_lead_status', 'read');
        }

    }


}

new Inbound_List_Double_Optin;
Inbound Pro Plugin - PHP Codex API documentation generated by ApiGen