Plugin Directory

Changeset 2107873


Ignore:
Timestamp:
06/18/2019 08:36:32 AM (7 years ago)
Author:
rsukhar
Message:

Tagging version 1.7

Location:
convertful
Files:
2 added
5 edited
4 copied

Legend:

Unmodified
Added
Removed
  • convertful/tags/1.7/convertful.php

    r2007794 r2107873  
    33/**
    44 * Plugin Name: Convertful - Your Ultimate On-Site Conversion Tool
    5  * Version: 1.6
     5 * Version: 1.7
    66 * Plugin URI: https://convertful.com/
    77 * Description: All the modern on-site conversion solutions, natively integrates with all modern Email Marketing Platforms.
     
    1313
    1414// Global variables for plugin usage (global declaration is needed here for WP CLI compatibility)
    15 global $conv_file, $conv_dir, $conv_uri, $conv_version, $conv_domain;
    16 //$conv_domain = 'http://convertful.local';
    17 $conv_domain = 'https://app.convertful.com';
     15global $conv_file, $conv_dir, $conv_uri, $conv_version, $conv_config;
    1816$conv_file = __FILE__;
    1917$conv_dir = plugin_dir_path( __FILE__ );
     
    2220unset( $conv_matches );
    2321
     22if (file_exists($conv_dir.'config.php'))
     23{
     24    $conv_config = require $conv_dir.'config.php';
     25}
     26
     27/**
     28 * Get script id
     29 * @return string
     30 */
     31function conv_get_script_id()
     32{
     33    global $conv_config;
     34    $url = wp_parse_url($conv_config['host']);
     35    if ( ! preg_match('/^(.*?)(convertful|devcf)\.[a-z]{3,5}$/', $url['host']))
     36    {
     37        return 'optin-api';
     38    }
     39    return 'convertful-api';
     40}
     41
     42/**
     43 * Get script file name
     44 * @return string
     45 */
     46function conv_get_script_filename()
     47{
     48    return conv_get_script_id() === 'convertful-api'
     49        ? 'Convertful.js'
     50        : 'optin.js';
     51}
     52
    2453add_action( 'init', 'conv_init' );
    2554function conv_init() {
    2655    if ( get_option( 'optinguru_owner_id' ) ) {
    27         update_option( 'convertful_owner_id', get_option( 'optinguru_owner_id' ), TRUE );
    28         update_option( 'convertful_site_id', get_option( 'optinguru_site_id', get_option( 'optinguru_website_id' ) ), FALSE );
    29         update_option( 'convertful_token', get_option( 'optinguru_token' ), FALSE );
    30     }
    31     $owner_id = get_option( 'convertful_owner_id' );
     56        update_option( 'conv_owner_id', get_option( 'optinguru_owner_id' ), TRUE );
     57        update_option( 'conv_site_id', get_option( 'optinguru_site_id', get_option( 'optinguru_website_id' ) ), FALSE );
     58        update_option( 'conv_token', get_option( 'optinguru_token' ), FALSE );
     59    }
     60    if ( get_option( 'convertful_owner_id' ) ) {
     61        update_option( 'conv_owner_id', get_option( 'convertful_owner_id' ), TRUE );
     62        update_option( 'conv_site_id', get_option( 'convertful_site_id' ), FALSE );
     63        update_option( 'conv_token', get_option( 'convertful_token' ), FALSE );
     64    }
     65    $owner_id = get_option( 'conv_owner_id' );
    3266    if ( ! is_admin() AND $owner_id !== FALSE ) {
    3367        add_action( 'wp_enqueue_scripts', 'conv_enqueue_scripts' );
     
    4579
    4680function conv_enqueue_scripts() {
    47     global $conv_domain, $conv_version;
    48     wp_enqueue_script( 'convertful-api', $conv_domain . '/Convertful.js', array(), $conv_version, TRUE );
     81    global $conv_config, $conv_version;
     82    $script_id = conv_get_script_id();
     83    wp_enqueue_script( $script_id, $conv_config['host'].'/'.conv_get_script_filename(), array(), $conv_version, TRUE );
    4984
    5085    $tags = array();
     
    66101    $user_meta = wp_get_current_user();
    67102
    68     wp_localize_script( 'convertful-api', 'convPlatformVars', array(
     103    wp_localize_script( $script_id, 'convPlatformVars', array(
    69104        'postType' => get_post_type(),
    70105        'categories' => $categories,
     
    75110
    76111function conv_script_loader_tag( $tag, $handle ) {
    77     if ( $handle !== 'convertful-api' ) {
     112    global $conv_config;
     113    $script_id = conv_get_script_id();
     114    if ( $handle !== $script_id ) {
    78115        return $tag;
    79116    }
    80     global $conv_domain;
    81 
    82     return '<script type="text/javascript" id="convertful-api" src="' . $conv_domain . '/Convertful.js" data-owner="' . get_option( 'convertful_owner_id' ) . '" async="async"></script>';
     117    $script = sprintf( '%s/%s?owner=%s', $conv_config['host'], conv_get_script_filename(), get_option( 'conv_owner_id' ) );
     118    return sprintf(
     119        '<script type="text/javascript" id="%s" src="%s" async="async"></script>',
     120        $script_id,
     121        $script
     122    );
    83123}
    84124
     
    101141    }
    102142    // Taking into account promotional links
    103     $ref_data = get_transient( 'convertful-ref' );
     143    $ref_data = get_transient( 'conv-ref' );
    104144    if ( $ref_data AND strpos( $ref_data, '|' ) !== FALSE ) {
    105145        $ref_data = explode( '|', $ref_data );
    106146        // Preventing violations with lifetime values
    107147        if ( time() - intval( $ref_data[1] ) < DAY_IN_SECONDS ) {
    108             update_option( 'convertful_ref', $ref_data[0], FALSE );
    109         }
    110         delete_transient( 'convertful-ref' );
    111     }
    112     $owner_id = get_option( 'convertful_owner_id' );
     148            update_option( 'conv_ref', $ref_data[0], FALSE );
     149        }
     150        delete_transient( 'conv-ref' );
     151    }
     152    $owner_id = get_option( 'conv_owner_id' );
    113153    if ( $owner_id === FALSE ) {
    114154        $redirect_location = admin_url( 'tools.php?page=conv-settings' );
     
    149189        delete_option( 'optinguru_' . $option_name );
    150190        delete_option( 'convertful_' . $option_name );
     191        delete_option( 'conv_' . $option_name );
    151192    }
    152193}
     
    158199    function conv_get_info() {
    159200
    160         if ( $_POST['access_token'] !== get_option( 'convertful_token' )) {
     201        if ( $_POST['access_token'] !== get_option( 'conv_token' )) {
    161202            wp_send_json_error( array(
    162203                'access_token' => 'Wrong access token',
     
    206247    function conv_complete_authorization() {
    207248
    208         if ( $_POST['access_token'] !== get_option( 'convertful_token' )) {
     249        if ( $_POST['access_token'] !== get_option( 'conv_token' )) {
    209250            wp_send_json_error( array(
    210251                'access_token' => 'Wrong access token',
     
    220261        }
    221262
    222         update_option( 'convertful_owner_id', (int) $_POST['owner_id'], TRUE );
    223         update_option( 'convertful_site_id', (int) $_POST['site_id'], FALSE );
     263        update_option( 'conv_owner_id', (int) $_POST['owner_id'], TRUE );
     264        update_option( 'conv_site_id', (int) $_POST['site_id'], FALSE );
    224265
    225266        wp_send_json_success();
  • convertful/tags/1.7/functions/admin_pages.php

    r2002204 r2107873  
    33add_action( 'admin_menu', 'conv_add_admin_pages', 30 );
    44function conv_add_admin_pages() {
    5     add_submenu_page( 'tools.php', 'Convertful', 'Convertful', 'manage_options', 'conv-settings', 'conv_settings_page' );
     5    global $conv_config;
     6    add_submenu_page( 'tools.php', $conv_config['title'], $conv_config['title'], 'manage_options', 'conv-settings', 'conv_settings_page' );
    67}
    78
     
    910    // Handling return to backend
    1011    if ( isset( $_GET['owner_id'] ) AND isset( $_GET['site_id'] ) AND isset( $_GET['token'] ) AND isset( $_GET['_nonce'] ) AND wp_verify_nonce( $_GET['_nonce'], 'conv_connect' ) ) {
    11         update_option( 'convertful_owner_id', (int) $_GET['owner_id'], TRUE );
    12         update_option( 'convertful_site_id', (int) $_GET['site_id'], FALSE );
    13         update_option( 'convertful_token', $_GET['token'], FALSE );
     12        update_option( 'conv_owner_id', (int) $_GET['owner_id'], TRUE );
     13        update_option( 'conv_site_id', (int) $_GET['site_id'], FALSE );
     14        update_option( 'conv_token', $_GET['token'], FALSE );
    1415        // Redirect
    1516        echo '<script type="text/javascript">location.assign(\'' . admin_url( 'tools.php?page=conv-settings' ) . '\')</script>';
     
    2627
    2728function conv_settings_page() {
    28     global $conv_domain;
     29    global $conv_config;
    2930    conv_handle_return_to_endpoint();
    3031    conv_handle_disconnect_click();
    31     $site_id = get_option( 'convertful_site_id' );
     32    $site_id = get_option( 'conv_site_id' );
    3233    if ( $site_id === FALSE ) {
    33         $connect_url = $conv_domain . '/sites/authorize/WordPressPlugin/';
    34         if ( $ref_username = get_option( 'convertful_ref' ) ) {
     34        $connect_url = $conv_config['host'] . '/sites/authorize/WordPressPlugin/';
     35        if ( $ref_username = get_option( 'conv_ref' ) ) {
    3536            $connect_url .= '?ref=' . $ref_username;
    3637        }
    3738        // Generating access token to use it to authenticate requests
    3839        $access_token = wp_generate_password( 32, false );
    39         update_option( 'convertful_token', $access_token, FALSE );
     40        update_option( 'conv_token', $access_token, FALSE );
    4041        ?>
    4142        <div class="conv-connect">
    4243            <div class="conv-connect-logo">
    43                 <img class="conv-connect-logo-img" src="<?php echo $conv_domain ?>/assets/img/logo_blue.png" srcset="<?php echo $conv_domain ?>/assets/img/[email protected] 2x" alt="Convertful">
     44                <img class="conv-connect-logo-img" src="<?php echo esc_attr($conv_config['logo']) ?>" srcset="<?php echo esc_attr($conv_config['logo@2x']) ?>" alt="<?php echo esc_attr($conv_config['title'])?>">
    4445            </div>
    4546            <div class="conv-connect-box">
    46                 <h1 class="conv-connect-header">Connect Site to Convertful</h1>
     47                <h1 class="conv-connect-header">Connect Site to <?php echo esc_attr($conv_config['title']) ?></h1>
    4748                <form class="conv-connect-card" method="post" action="<?php echo esc_attr( $connect_url ) ?>">
    4849                    <div class="conv-connect-card-body">
    49                         <p>Please create a Convertful Account or connect to an existing Account.<br>
     50                        <p>Please create a <?php echo esc_attr($conv_config['title']) ?> Account or connect to an existing Account.<br>
    5051                            This will allow you to <strong>grow email lists easily</strong> using our top-notch builder
    5152                            with unique features and amazing pre-built form templates!</p>
     
    5960
    6061                        <button class="conv-btn action_connect">
    61                             Connect to Convertful
     62                            Connect to <?php echo esc_attr($conv_config['title']) ?>
    6263                        </button>
    6364                    </div>
    6465                </form>
    6566            </div>
    66             <a href="https://app.convertful.com/docs/connect/wordpress/" class="conv-connect-help" target="_blank">Get help connecting your site</a>
     67            <?php if(isset($conv_config['connect_help_url']) AND ! empty($conv_config['connect_help_url'])): ?>
     68                <a href="<?php echo esc_attr($conv_config['connect_help_url']) ?>" class="conv-connect-help" target="_blank">Get help connecting your site</a>
     69            <?php endif; ?>
    6770        </div>
    6871        <?php
     
    7174        <div class="conv-connect type_success">
    7275            <div class="conv-connect-logo">
    73                 <img class="conv-connect-logo-img" src="<?php echo $conv_domain ?>/assets/img/logo_blue.png" srcset="<?php echo $conv_domain ?>/assets/img/[email protected] 2x" alt="Convertful">
     76                <img class="conv-connect-logo-img" src="<?php echo esc_attr($conv_config['logo']) ?>" srcset="<?php echo esc_attr($conv_config['logo@2x']) ?> 2x" alt="<?php echo esc_attr($conv_config['title']) ?>">
    7477            </div>
    7578            <div class="conv-connect-box">
    76                 <h1 class="conv-connect-header">Site is Connected to Convertful</h1>
     79                <h1 class="conv-connect-header">Site is Connected to <?php echo esc_attr($conv_config['title']) ?></h1>
    7780                <div class="conv-connect-card">
    7881                    <div class="conv-connect-card-body">
    79                         <p>Congratulations! Your site is connected to Convertful.</p>
     82                        <p>Congratulations! Your site is connected to <?php echo esc_attr($conv_config['title']) ?>.</p>
    8083                        <p>Now you can <strong>grow email lists easily</strong> using our top-notch builder
    8184                            with unique features and amazing pre-built form templates!</p>
    8285                    </div>
    8386                    <div class="conv-connect-card-footer">
    84                         <a class="conv-btn action_create" href="<?php echo esc_attr( $conv_domain . '/sites/' . $site_id . '/widgets/create/' ) ?>" target="_blank">
     87                        <a class="conv-btn action_create" href="<?php echo esc_attr( $conv_config['host'] . '/sites/' . $site_id . '/widgets/create/' ) ?>" target="_blank">
    8588                            Create New Optin
    8689                        </a>
  • convertful/tags/1.7/functions/shortcodes.php

    r1679931 r2107873  
    44function conv_register_shortcodes() {
    55    add_shortcode( 'convertful', 'conv_handle_shortcode' );
     6    add_shortcode( 'optin', 'conv_handle_shortcode' );
    67}
    78
    89function conv_handle_shortcode( $atts, $content, $shortcode ) {
    9     return isset( $atts['id'] ) ? '<div class="convertful-' . intval( $atts['id'] ) . '"></div>' : '';
     10    return isset( $atts['id'] ) ? '<div class="'. $shortcode .'-' . intval( $atts['id'] ) . '"></div>' : '';
    1011}
  • convertful/tags/1.7/readme.txt

    r2007794 r2107873  
    33Tags: optin, opt-in, mailchimp, popup, bar, slidein, subscribe, signup, form, email, marketing, lead, campaign
    44Requires at least: 4.0
    5 Tested up to: 5.0.2
    6 Stable tag: 1.6
     5Tested up to: 5.2.1
     6Stable tag: 1.7
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    1212== Description ==
    1313
    14 ### Your Ultimate On-Site Conversion Tool
     14### The All-In-One Tool to Turn Your Visitors Into Leads and Sales
    1515
    16 **[Convertful](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) is the web service that provides you with all the modern on-site conversion solutions, natively integrates with all modern Email Marketing Platforms and provides the simplest WordPress installation.**
     16**[Convertful](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) is the web service that provides you with all the modern on-site conversion solutions, natively integrates with all major Email Marketing Platforms and provides the simplest WordPress installation.**
    1717
    18 [youtube https://www.youtube.com/watch?v=u9tvNnfqDlo]
     18[youtube https://www.youtube.com/watch?v=Z1wsU98F1lk]
    1919
    2020Start with the FREE plan, that already includes:
    2121
    22 * 50 Beautiful Forms Templates
    23 * All Modern Sign-up Form Types: Exit Intent Popups, Floating Bars, Inline Widgets, Scroll Boxes and Welcome Mats
    24 * Responsive Sign-up Forms Creator
     22* All the 5 Modern Widget Types: Exit Intent Popups, Floating Bars, Inline Widgets, Scroll Boxes, and Welcome Mats
     23* Exit Intent + 9 Other Smart Display Rules
     24* 71 Free Starting Templates
     25* Flexible Drag-n-Drop Editor
     26* 27 Native + 1500 Zapier Integrations
     27* Mobile-Friendly Widgets
     28* Live Analytics
     29* Illustrated Manuals and Video-Guides
    2530
    2631> PLEASE NOTE:
    27 > This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account).](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)
     32> This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)).
    2833
    29 ### Provides all the Modern On-Site Conversion Solutions
     34### Provides all the Modern On-Site Conversion Solutions 👇
    3035
    31 * **Exit Intent Popups** which show your offers inside of a lightbox right before visitors leave
    32 * **Floating Bars** that are located at the top or bottom of your pages
    33 * **Inline Widgets** that can be added to sidebars, after posts or to any other place of a page
    34 * **Scroll Boxes** which are shown when a visitor scrolls some part of your blog post
    35 * **Welcome Mats** that are shown to new visitors and help to focus on the offer
    36 * **Yes/No Forms** which break the standard form pattern, and increase conversion
    37 * **Content Upgrades** which offer additional content for a blog post
    38 * **Deadline Funnels** that display countdown timers (including evergreen countdown timers)
    39 * **Content Lockers** that request a visitor to optin in order to read an article
    40 * **Social Optin Popups** which allow visitors to sign-up in 1 click using their Facebook / Twitter / Amazon email address
    41 * **Survey Widgets** which politely ask for a visitor's interest before showing the offer itself
    42 * [Soon] On-Site Retargeting Popups
    43 * [Soon] Spin-to-Win's
    44 * [Soon] Viral Giveaways
    45 * [Soon] Landing Pages
     361. **Spin-to-Win Gamification** — Increase your *Email Subscribers* and *Sales Conversion Rate* by offering your visitors to win a coupon code in exchange for the email address.
     372. **Scratch Card Gamification** — Increase *Email Subscribers*, *Sales Conversion Rate*, and *Percentage or Returning Customers*, by providing the unique gamification experience, which your competitors aren't using yet.
     383. **Segmentation Surveys** — Increase *Sales Conversion Rate*, *Customer Lifetime Value*, and *Email Subscribers* by auto-segmenting ~5.8% of your visitors, and instantly making them personalized highly-relevant offers.
     394. **Quiz Funnels** — Increase *Sales Conversion Rate*, *Customer Lifetime Value*, and *Generate Leads* by offering a personalized answer, solution, or case study for taking a short survey. You can tag your visitors based on their answers to build personal communication in the future.
     405. **Welcome Video Pop-ups** — *Retarget* up to 7.1% of new visitors to the sign-up page and *Increase Sign-ups* by the welcome popup that shows your Hero Video and offers a quick yes/no choice.
     416. **Cart Abandonment Pop-ups** — Reduce <strong>Shopping Cart Abandonment Rate</strong> and increase <strong>Sales Conversion Rate</strong> by offering a discount right before a visitor leaves your cart or checkout pages. It generally recovers ~21% of leaving buyers.
     427. **Welcome Discounts** — Increase *Sales Conversion Rate* and *Email Subscribers* by offering a welcome discount in exchange for an email subscription to first-time visitors. Complementary countdown timer can show an evergreen deadline to boost conversions.
     438. **Follow Coupon Boxes** — Reduce *Abandonment Rate* and increase *Social Followers* by offering a welcome discount to new visitors in exchange for their social follows just before they leave.
     449. **Welcome Giveaway Contests** — Increase *Email Subscribers* by offering a chance to win a valuable giveaway for opting-in. Or increase *Website Traffic* asking to share your store URL.
     4510. **Deadline Funnels** — Generate *Leads* and boost *Sales Conversion Rate* by creating an urgency via live countdown timers. You can add countdown timers to any of your widgets and you can create a personal evergreen deadline for every visitor.
     4611.  **Yes/No Welcome Mats** — Convert ~4.5% of new visitors into *Email Subscribers* by making your best offer with a huge noticeable welcome screen.
     4712. **Targeted Content Upgrades** — Convert ~3.2% of article readers into *Email Subscribers* by offering a highly-relevant additional content in exchange for the opt-in.
     4813. **Yes/No Exit Intent Pop-ups** — Recover ~1.8% of leaving visitors into *Email Subscribers* by gently offering a tripwire right before your visitors leave.
     4914. **Content Lockings** — Convert up to 17.6% of your visitors into *Email Subscribers* and *Leads* by requiring your visitors to opt-in in order to view your premium content.
     5015. **Social Subscription Pop-ups** — Increase *Email Subscribers* and generate more *Leads* by placing a complementary 'Subscribe with Facebook' button. Once a visitor clicks this button, Convertful grabs his/her name and email address and sends straight to your email list. This allows to reduce friction and avoid email typos.
     5116. **Account-Based Personal Offers** — Deep-connect Convertful with your CRM to make the most personalized offers to your site visitors, based on their tags, custom field values, or other properties from the CRM.
    4652
    47 ### Supports all Major Email Marketing Platforms
     53... and so much more!
    4854
    49 You can build email list or generate leads to: ActiveCampaign, ActiveTrail, AWeber, Campaign Monitor, ConstantContact, ConvertFox, ConvertKit, Customer.io, FreshMail, GetResponse, HubSpot, Klaviyo, Mad Mimi, MailChimp, MailerLite, MailUp, Remarkety, seninblue, SendPulse, Sendy, and other email marketing services.
     55### Integrates With What You Already Use
     56
     57You can build email list or generate leads to: ActiveCampaign, ActiveTrail, AWeber, Campaign Monitor, ConstantContact, ConvertFox, ConvertKit, Customer.io, FreshMail, GetResponse, HubSpot, Klaviyo, Mad Mimi, MailChimp, MailerLite, MailUp, Remarkety, sendinblue, SendPulse, Sendy, Zapier, and other email marketing services.
    5058
    5159### Advanced Targeting Rules
     
    5765We created an opt-in form app that cures the main pain points you might have, fast:
    5866
    59 * **Flexible form creator** — We offer a flexible form creator allowing to customize any form element you like: layout, content, colors, positioning, and many more.
     67* **Drag-n-drop Widget Editor** — We offer a flexible form creator allowing to customize any form element you like: layout, content, colors, positioning, and many more.
    6068* **Design and templates variety** — Design quality and diversity are one of our key principles. Use unique in-lines, pop-ups, sideboxes (slideins), fullscreens and floating bars. Use our library of 50+ modern form templates to create the form that suits your site design the best.
    6169* **Right audience, right time, right place** — Flexibly set your forms’ behavior: when and where to show, and when NOT to show them. Convertful forms will never annoy your visitors.
     
    7684> This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account).](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)
    7785
     86
    7887== Frequently Asked Questions ==
    7988
     
    92101
    93102== Changelog ==
     103
     104= 1.7 =
     105* Improved compatibility with White Label Agency features
    94106
    95107= 1.6 =
  • convertful/trunk/convertful.php

    r2007794 r2107873  
    33/**
    44 * Plugin Name: Convertful - Your Ultimate On-Site Conversion Tool
    5  * Version: 1.6
     5 * Version: 1.7
    66 * Plugin URI: https://convertful.com/
    77 * Description: All the modern on-site conversion solutions, natively integrates with all modern Email Marketing Platforms.
     
    1313
    1414// Global variables for plugin usage (global declaration is needed here for WP CLI compatibility)
    15 global $conv_file, $conv_dir, $conv_uri, $conv_version, $conv_domain;
    16 //$conv_domain = 'http://convertful.local';
    17 $conv_domain = 'https://app.convertful.com';
     15global $conv_file, $conv_dir, $conv_uri, $conv_version, $conv_config;
    1816$conv_file = __FILE__;
    1917$conv_dir = plugin_dir_path( __FILE__ );
     
    2220unset( $conv_matches );
    2321
     22if (file_exists($conv_dir.'config.php'))
     23{
     24    $conv_config = require $conv_dir.'config.php';
     25}
     26
     27/**
     28 * Get script id
     29 * @return string
     30 */
     31function conv_get_script_id()
     32{
     33    global $conv_config;
     34    $url = wp_parse_url($conv_config['host']);
     35    if ( ! preg_match('/^(.*?)(convertful|devcf)\.[a-z]{3,5}$/', $url['host']))
     36    {
     37        return 'optin-api';
     38    }
     39    return 'convertful-api';
     40}
     41
     42/**
     43 * Get script file name
     44 * @return string
     45 */
     46function conv_get_script_filename()
     47{
     48    return conv_get_script_id() === 'convertful-api'
     49        ? 'Convertful.js'
     50        : 'optin.js';
     51}
     52
    2453add_action( 'init', 'conv_init' );
    2554function conv_init() {
    2655    if ( get_option( 'optinguru_owner_id' ) ) {
    27         update_option( 'convertful_owner_id', get_option( 'optinguru_owner_id' ), TRUE );
    28         update_option( 'convertful_site_id', get_option( 'optinguru_site_id', get_option( 'optinguru_website_id' ) ), FALSE );
    29         update_option( 'convertful_token', get_option( 'optinguru_token' ), FALSE );
    30     }
    31     $owner_id = get_option( 'convertful_owner_id' );
     56        update_option( 'conv_owner_id', get_option( 'optinguru_owner_id' ), TRUE );
     57        update_option( 'conv_site_id', get_option( 'optinguru_site_id', get_option( 'optinguru_website_id' ) ), FALSE );
     58        update_option( 'conv_token', get_option( 'optinguru_token' ), FALSE );
     59    }
     60    if ( get_option( 'convertful_owner_id' ) ) {
     61        update_option( 'conv_owner_id', get_option( 'convertful_owner_id' ), TRUE );
     62        update_option( 'conv_site_id', get_option( 'convertful_site_id' ), FALSE );
     63        update_option( 'conv_token', get_option( 'convertful_token' ), FALSE );
     64    }
     65    $owner_id = get_option( 'conv_owner_id' );
    3266    if ( ! is_admin() AND $owner_id !== FALSE ) {
    3367        add_action( 'wp_enqueue_scripts', 'conv_enqueue_scripts' );
     
    4579
    4680function conv_enqueue_scripts() {
    47     global $conv_domain, $conv_version;
    48     wp_enqueue_script( 'convertful-api', $conv_domain . '/Convertful.js', array(), $conv_version, TRUE );
     81    global $conv_config, $conv_version;
     82    $script_id = conv_get_script_id();
     83    wp_enqueue_script( $script_id, $conv_config['host'].'/'.conv_get_script_filename(), array(), $conv_version, TRUE );
    4984
    5085    $tags = array();
     
    66101    $user_meta = wp_get_current_user();
    67102
    68     wp_localize_script( 'convertful-api', 'convPlatformVars', array(
     103    wp_localize_script( $script_id, 'convPlatformVars', array(
    69104        'postType' => get_post_type(),
    70105        'categories' => $categories,
     
    75110
    76111function conv_script_loader_tag( $tag, $handle ) {
    77     if ( $handle !== 'convertful-api' ) {
     112    global $conv_config;
     113    $script_id = conv_get_script_id();
     114    if ( $handle !== $script_id ) {
    78115        return $tag;
    79116    }
    80     global $conv_domain;
    81 
    82     return '<script type="text/javascript" id="convertful-api" src="' . $conv_domain . '/Convertful.js" data-owner="' . get_option( 'convertful_owner_id' ) . '" async="async"></script>';
     117    $script = sprintf( '%s/%s?owner=%s', $conv_config['host'], conv_get_script_filename(), get_option( 'conv_owner_id' ) );
     118    return sprintf(
     119        '<script type="text/javascript" id="%s" src="%s" async="async"></script>',
     120        $script_id,
     121        $script
     122    );
    83123}
    84124
     
    101141    }
    102142    // Taking into account promotional links
    103     $ref_data = get_transient( 'convertful-ref' );
     143    $ref_data = get_transient( 'conv-ref' );
    104144    if ( $ref_data AND strpos( $ref_data, '|' ) !== FALSE ) {
    105145        $ref_data = explode( '|', $ref_data );
    106146        // Preventing violations with lifetime values
    107147        if ( time() - intval( $ref_data[1] ) < DAY_IN_SECONDS ) {
    108             update_option( 'convertful_ref', $ref_data[0], FALSE );
    109         }
    110         delete_transient( 'convertful-ref' );
    111     }
    112     $owner_id = get_option( 'convertful_owner_id' );
     148            update_option( 'conv_ref', $ref_data[0], FALSE );
     149        }
     150        delete_transient( 'conv-ref' );
     151    }
     152    $owner_id = get_option( 'conv_owner_id' );
    113153    if ( $owner_id === FALSE ) {
    114154        $redirect_location = admin_url( 'tools.php?page=conv-settings' );
     
    149189        delete_option( 'optinguru_' . $option_name );
    150190        delete_option( 'convertful_' . $option_name );
     191        delete_option( 'conv_' . $option_name );
    151192    }
    152193}
     
    158199    function conv_get_info() {
    159200
    160         if ( $_POST['access_token'] !== get_option( 'convertful_token' )) {
     201        if ( $_POST['access_token'] !== get_option( 'conv_token' )) {
    161202            wp_send_json_error( array(
    162203                'access_token' => 'Wrong access token',
     
    206247    function conv_complete_authorization() {
    207248
    208         if ( $_POST['access_token'] !== get_option( 'convertful_token' )) {
     249        if ( $_POST['access_token'] !== get_option( 'conv_token' )) {
    209250            wp_send_json_error( array(
    210251                'access_token' => 'Wrong access token',
     
    220261        }
    221262
    222         update_option( 'convertful_owner_id', (int) $_POST['owner_id'], TRUE );
    223         update_option( 'convertful_site_id', (int) $_POST['site_id'], FALSE );
     263        update_option( 'conv_owner_id', (int) $_POST['owner_id'], TRUE );
     264        update_option( 'conv_site_id', (int) $_POST['site_id'], FALSE );
    224265
    225266        wp_send_json_success();
  • convertful/trunk/functions/admin_pages.php

    r2002204 r2107873  
    33add_action( 'admin_menu', 'conv_add_admin_pages', 30 );
    44function conv_add_admin_pages() {
    5     add_submenu_page( 'tools.php', 'Convertful', 'Convertful', 'manage_options', 'conv-settings', 'conv_settings_page' );
     5    global $conv_config;
     6    add_submenu_page( 'tools.php', $conv_config['title'], $conv_config['title'], 'manage_options', 'conv-settings', 'conv_settings_page' );
    67}
    78
     
    910    // Handling return to backend
    1011    if ( isset( $_GET['owner_id'] ) AND isset( $_GET['site_id'] ) AND isset( $_GET['token'] ) AND isset( $_GET['_nonce'] ) AND wp_verify_nonce( $_GET['_nonce'], 'conv_connect' ) ) {
    11         update_option( 'convertful_owner_id', (int) $_GET['owner_id'], TRUE );
    12         update_option( 'convertful_site_id', (int) $_GET['site_id'], FALSE );
    13         update_option( 'convertful_token', $_GET['token'], FALSE );
     12        update_option( 'conv_owner_id', (int) $_GET['owner_id'], TRUE );
     13        update_option( 'conv_site_id', (int) $_GET['site_id'], FALSE );
     14        update_option( 'conv_token', $_GET['token'], FALSE );
    1415        // Redirect
    1516        echo '<script type="text/javascript">location.assign(\'' . admin_url( 'tools.php?page=conv-settings' ) . '\')</script>';
     
    2627
    2728function conv_settings_page() {
    28     global $conv_domain;
     29    global $conv_config;
    2930    conv_handle_return_to_endpoint();
    3031    conv_handle_disconnect_click();
    31     $site_id = get_option( 'convertful_site_id' );
     32    $site_id = get_option( 'conv_site_id' );
    3233    if ( $site_id === FALSE ) {
    33         $connect_url = $conv_domain . '/sites/authorize/WordPressPlugin/';
    34         if ( $ref_username = get_option( 'convertful_ref' ) ) {
     34        $connect_url = $conv_config['host'] . '/sites/authorize/WordPressPlugin/';
     35        if ( $ref_username = get_option( 'conv_ref' ) ) {
    3536            $connect_url .= '?ref=' . $ref_username;
    3637        }
    3738        // Generating access token to use it to authenticate requests
    3839        $access_token = wp_generate_password( 32, false );
    39         update_option( 'convertful_token', $access_token, FALSE );
     40        update_option( 'conv_token', $access_token, FALSE );
    4041        ?>
    4142        <div class="conv-connect">
    4243            <div class="conv-connect-logo">
    43                 <img class="conv-connect-logo-img" src="<?php echo $conv_domain ?>/assets/img/logo_blue.png" srcset="<?php echo $conv_domain ?>/assets/img/[email protected] 2x" alt="Convertful">
     44                <img class="conv-connect-logo-img" src="<?php echo esc_attr($conv_config['logo']) ?>" srcset="<?php echo esc_attr($conv_config['logo@2x']) ?>" alt="<?php echo esc_attr($conv_config['title'])?>">
    4445            </div>
    4546            <div class="conv-connect-box">
    46                 <h1 class="conv-connect-header">Connect Site to Convertful</h1>
     47                <h1 class="conv-connect-header">Connect Site to <?php echo esc_attr($conv_config['title']) ?></h1>
    4748                <form class="conv-connect-card" method="post" action="<?php echo esc_attr( $connect_url ) ?>">
    4849                    <div class="conv-connect-card-body">
    49                         <p>Please create a Convertful Account or connect to an existing Account.<br>
     50                        <p>Please create a <?php echo esc_attr($conv_config['title']) ?> Account or connect to an existing Account.<br>
    5051                            This will allow you to <strong>grow email lists easily</strong> using our top-notch builder
    5152                            with unique features and amazing pre-built form templates!</p>
     
    5960
    6061                        <button class="conv-btn action_connect">
    61                             Connect to Convertful
     62                            Connect to <?php echo esc_attr($conv_config['title']) ?>
    6263                        </button>
    6364                    </div>
    6465                </form>
    6566            </div>
    66             <a href="https://app.convertful.com/docs/connect/wordpress/" class="conv-connect-help" target="_blank">Get help connecting your site</a>
     67            <?php if(isset($conv_config['connect_help_url']) AND ! empty($conv_config['connect_help_url'])): ?>
     68                <a href="<?php echo esc_attr($conv_config['connect_help_url']) ?>" class="conv-connect-help" target="_blank">Get help connecting your site</a>
     69            <?php endif; ?>
    6770        </div>
    6871        <?php
     
    7174        <div class="conv-connect type_success">
    7275            <div class="conv-connect-logo">
    73                 <img class="conv-connect-logo-img" src="<?php echo $conv_domain ?>/assets/img/logo_blue.png" srcset="<?php echo $conv_domain ?>/assets/img/[email protected] 2x" alt="Convertful">
     76                <img class="conv-connect-logo-img" src="<?php echo esc_attr($conv_config['logo']) ?>" srcset="<?php echo esc_attr($conv_config['logo@2x']) ?> 2x" alt="<?php echo esc_attr($conv_config['title']) ?>">
    7477            </div>
    7578            <div class="conv-connect-box">
    76                 <h1 class="conv-connect-header">Site is Connected to Convertful</h1>
     79                <h1 class="conv-connect-header">Site is Connected to <?php echo esc_attr($conv_config['title']) ?></h1>
    7780                <div class="conv-connect-card">
    7881                    <div class="conv-connect-card-body">
    79                         <p>Congratulations! Your site is connected to Convertful.</p>
     82                        <p>Congratulations! Your site is connected to <?php echo esc_attr($conv_config['title']) ?>.</p>
    8083                        <p>Now you can <strong>grow email lists easily</strong> using our top-notch builder
    8184                            with unique features and amazing pre-built form templates!</p>
    8285                    </div>
    8386                    <div class="conv-connect-card-footer">
    84                         <a class="conv-btn action_create" href="<?php echo esc_attr( $conv_domain . '/sites/' . $site_id . '/widgets/create/' ) ?>" target="_blank">
     87                        <a class="conv-btn action_create" href="<?php echo esc_attr( $conv_config['host'] . '/sites/' . $site_id . '/widgets/create/' ) ?>" target="_blank">
    8588                            Create New Optin
    8689                        </a>
  • convertful/trunk/functions/shortcodes.php

    r1679931 r2107873  
    44function conv_register_shortcodes() {
    55    add_shortcode( 'convertful', 'conv_handle_shortcode' );
     6    add_shortcode( 'optin', 'conv_handle_shortcode' );
    67}
    78
    89function conv_handle_shortcode( $atts, $content, $shortcode ) {
    9     return isset( $atts['id'] ) ? '<div class="convertful-' . intval( $atts['id'] ) . '"></div>' : '';
     10    return isset( $atts['id'] ) ? '<div class="'. $shortcode .'-' . intval( $atts['id'] ) . '"></div>' : '';
    1011}
  • convertful/trunk/readme.txt

    r2007794 r2107873  
    33Tags: optin, opt-in, mailchimp, popup, bar, slidein, subscribe, signup, form, email, marketing, lead, campaign
    44Requires at least: 4.0
    5 Tested up to: 5.0.2
    6 Stable tag: 1.6
     5Tested up to: 5.2.1
     6Stable tag: 1.7
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    1212== Description ==
    1313
    14 ### Your Ultimate On-Site Conversion Tool
     14### The All-In-One Tool to Turn Your Visitors Into Leads and Sales
    1515
    16 **[Convertful](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) is the web service that provides you with all the modern on-site conversion solutions, natively integrates with all modern Email Marketing Platforms and provides the simplest WordPress installation.**
     16**[Convertful](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) is the web service that provides you with all the modern on-site conversion solutions, natively integrates with all major Email Marketing Platforms and provides the simplest WordPress installation.**
    1717
    18 [youtube https://www.youtube.com/watch?v=u9tvNnfqDlo]
     18[youtube https://www.youtube.com/watch?v=Z1wsU98F1lk]
    1919
    2020Start with the FREE plan, that already includes:
    2121
    22 * 50 Beautiful Forms Templates
    23 * All Modern Sign-up Form Types: Exit Intent Popups, Floating Bars, Inline Widgets, Scroll Boxes and Welcome Mats
    24 * Responsive Sign-up Forms Creator
     22* All the 5 Modern Widget Types: Exit Intent Popups, Floating Bars, Inline Widgets, Scroll Boxes, and Welcome Mats
     23* Exit Intent + 9 Other Smart Display Rules
     24* 71 Free Starting Templates
     25* Flexible Drag-n-Drop Editor
     26* 27 Native + 1500 Zapier Integrations
     27* Mobile-Friendly Widgets
     28* Live Analytics
     29* Illustrated Manuals and Video-Guides
    2530
    2631> PLEASE NOTE:
    27 > This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account).](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)
     32> This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)).
    2833
    29 ### Provides all the Modern On-Site Conversion Solutions
     34### Provides all the Modern On-Site Conversion Solutions 👇
    3035
    31 * **Exit Intent Popups** which show your offers inside of a lightbox right before visitors leave
    32 * **Floating Bars** that are located at the top or bottom of your pages
    33 * **Inline Widgets** that can be added to sidebars, after posts or to any other place of a page
    34 * **Scroll Boxes** which are shown when a visitor scrolls some part of your blog post
    35 * **Welcome Mats** that are shown to new visitors and help to focus on the offer
    36 * **Yes/No Forms** which break the standard form pattern, and increase conversion
    37 * **Content Upgrades** which offer additional content for a blog post
    38 * **Deadline Funnels** that display countdown timers (including evergreen countdown timers)
    39 * **Content Lockers** that request a visitor to optin in order to read an article
    40 * **Social Optin Popups** which allow visitors to sign-up in 1 click using their Facebook / Twitter / Amazon email address
    41 * **Survey Widgets** which politely ask for a visitor's interest before showing the offer itself
    42 * [Soon] On-Site Retargeting Popups
    43 * [Soon] Spin-to-Win's
    44 * [Soon] Viral Giveaways
    45 * [Soon] Landing Pages
     361. **Spin-to-Win Gamification** — Increase your *Email Subscribers* and *Sales Conversion Rate* by offering your visitors to win a coupon code in exchange for the email address.
     372. **Scratch Card Gamification** — Increase *Email Subscribers*, *Sales Conversion Rate*, and *Percentage or Returning Customers*, by providing the unique gamification experience, which your competitors aren't using yet.
     383. **Segmentation Surveys** — Increase *Sales Conversion Rate*, *Customer Lifetime Value*, and *Email Subscribers* by auto-segmenting ~5.8% of your visitors, and instantly making them personalized highly-relevant offers.
     394. **Quiz Funnels** — Increase *Sales Conversion Rate*, *Customer Lifetime Value*, and *Generate Leads* by offering a personalized answer, solution, or case study for taking a short survey. You can tag your visitors based on their answers to build personal communication in the future.
     405. **Welcome Video Pop-ups** — *Retarget* up to 7.1% of new visitors to the sign-up page and *Increase Sign-ups* by the welcome popup that shows your Hero Video and offers a quick yes/no choice.
     416. **Cart Abandonment Pop-ups** — Reduce <strong>Shopping Cart Abandonment Rate</strong> and increase <strong>Sales Conversion Rate</strong> by offering a discount right before a visitor leaves your cart or checkout pages. It generally recovers ~21% of leaving buyers.
     427. **Welcome Discounts** — Increase *Sales Conversion Rate* and *Email Subscribers* by offering a welcome discount in exchange for an email subscription to first-time visitors. Complementary countdown timer can show an evergreen deadline to boost conversions.
     438. **Follow Coupon Boxes** — Reduce *Abandonment Rate* and increase *Social Followers* by offering a welcome discount to new visitors in exchange for their social follows just before they leave.
     449. **Welcome Giveaway Contests** — Increase *Email Subscribers* by offering a chance to win a valuable giveaway for opting-in. Or increase *Website Traffic* asking to share your store URL.
     4510. **Deadline Funnels** — Generate *Leads* and boost *Sales Conversion Rate* by creating an urgency via live countdown timers. You can add countdown timers to any of your widgets and you can create a personal evergreen deadline for every visitor.
     4611.  **Yes/No Welcome Mats** — Convert ~4.5% of new visitors into *Email Subscribers* by making your best offer with a huge noticeable welcome screen.
     4712. **Targeted Content Upgrades** — Convert ~3.2% of article readers into *Email Subscribers* by offering a highly-relevant additional content in exchange for the opt-in.
     4813. **Yes/No Exit Intent Pop-ups** — Recover ~1.8% of leaving visitors into *Email Subscribers* by gently offering a tripwire right before your visitors leave.
     4914. **Content Lockings** — Convert up to 17.6% of your visitors into *Email Subscribers* and *Leads* by requiring your visitors to opt-in in order to view your premium content.
     5015. **Social Subscription Pop-ups** — Increase *Email Subscribers* and generate more *Leads* by placing a complementary 'Subscribe with Facebook' button. Once a visitor clicks this button, Convertful grabs his/her name and email address and sends straight to your email list. This allows to reduce friction and avoid email typos.
     5116. **Account-Based Personal Offers** — Deep-connect Convertful with your CRM to make the most personalized offers to your site visitors, based on their tags, custom field values, or other properties from the CRM.
    4652
    47 ### Supports all Major Email Marketing Platforms
     53... and so much more!
    4854
    49 You can build email list or generate leads to: ActiveCampaign, ActiveTrail, AWeber, Campaign Monitor, ConstantContact, ConvertFox, ConvertKit, Customer.io, FreshMail, GetResponse, HubSpot, Klaviyo, Mad Mimi, MailChimp, MailerLite, MailUp, Remarkety, seninblue, SendPulse, Sendy, and other email marketing services.
     55### Integrates With What You Already Use
     56
     57You can build email list or generate leads to: ActiveCampaign, ActiveTrail, AWeber, Campaign Monitor, ConstantContact, ConvertFox, ConvertKit, Customer.io, FreshMail, GetResponse, HubSpot, Klaviyo, Mad Mimi, MailChimp, MailerLite, MailUp, Remarkety, sendinblue, SendPulse, Sendy, Zapier, and other email marketing services.
    5058
    5159### Advanced Targeting Rules
     
    5765We created an opt-in form app that cures the main pain points you might have, fast:
    5866
    59 * **Flexible form creator** — We offer a flexible form creator allowing to customize any form element you like: layout, content, colors, positioning, and many more.
     67* **Drag-n-drop Widget Editor** — We offer a flexible form creator allowing to customize any form element you like: layout, content, colors, positioning, and many more.
    6068* **Design and templates variety** — Design quality and diversity are one of our key principles. Use unique in-lines, pop-ups, sideboxes (slideins), fullscreens and floating bars. Use our library of 50+ modern form templates to create the form that suits your site design the best.
    6169* **Right audience, right time, right place** — Flexibly set your forms’ behavior: when and where to show, and when NOT to show them. Convertful forms will never annoy your visitors.
     
    7684> This plugin ONLY works as an integration interface to our full-featured [**Convertful**](https://convertful.com/?utm_medium=plugins&utm_source=wordpress-plugin) web service. A Convertful account is needed to activate the plugin (you can create one through the plugin interface or [click here to create your account).](https://app.convertful.com/sign_up/?utm_medium=plugins&utm_source=wordpress-plugin)
    7785
     86
    7887== Frequently Asked Questions ==
    7988
     
    92101
    93102== Changelog ==
     103
     104= 1.7 =
     105* Improved compatibility with White Label Agency features
    94106
    95107= 1.6 =
Note: See TracChangeset for help on using the changeset viewer.