WordPress.org

Plugin Directory

Changeset 1504047


Ignore:
Timestamp:
09/27/16 21:12:24 (10 months ago)
Author:
madjax
Message:

1.4 release

Location:
woocommerce-rejoiner/tags/1.4
Files:
6 copied

Legend:

Unmodified
Added
Removed
  • woocommerce-rejoiner/tags/1.4/includes/class-wc-rejoiner.php

    r1429529 r1504047  
    3636        // Tracking code 
    3737        add_action( 'wp_footer', array( $this, 'rejoiner_tracking_code' ) ); 
    38          
     38                         
    3939        // REST conversion 
    4040        add_action( 'woocommerce_payment_complete', array( $this, 'rejoiner_rest_convert' ), 1, 1 ); 
     
    4242        // JS conversion 
    4343        add_action( 'woocommerce_thankyou', array( $this, 'rejoiner_conversion_code' ), 2, 1 ); 
     44 
     45        // AJAX callback 
     46        add_action( 'wp_ajax_rejoiner_sync', array( $this, 'rejoiner_sync' ) ); 
    4447 
    4548    } 
     
    8285        global $rjconverted; 
    8386         
     87        $current_user = wp_get_current_user(); 
     88         
     89        if( $current_user instanceof WP_User && !empty( $current_user->user_email ) ) 
     90            $current_user_email = $current_user->user_email; 
     91        else 
     92            $current_user_email = false; 
     93         
    8494        if( ( is_cart() || is_checkout() ) && $rjconverted != true ) { 
    8595                 
     
    104114     
    105115                    if( is_array( $product_cats ) ) { 
    106                         $primary_cat = array_pop( $product_cats ); 
    107                         $primary_cat = $this->escape_for_json( $primary_cat->name ); 
     116                         
     117                        foreach( $product_cats as $cat ) { 
     118                             
     119                            $cats[] = $cat->slug; 
     120                                 
     121                        } 
     122                             
     123                        $product_cats_json = json_encode( $cats ); 
     124                         
    108125                    } else { 
    109                         $primary_cat = null; 
    110                     } 
     126                         
     127                        $product_cats_json = null; 
     128 
     129                    }                    
    111130     
    112131                    if( !empty($thumb_url[0]) ) { 
     
    164183                            'image_url' => $this->format_image_url( $image ), 
    165184                            'product_url' => get_permalink( $_product->post->ID ), 
    166                             'category' => $primary_cat                       
     185                            'category' => $product_cats_json                         
    167186                        ); 
    168187                         
     
    184203                            'image_url' => $this->format_image_url( $image ), 
    185204                            'product_url' => get_permalink( $_product->post->ID ), 
    186                             'category' => $primary_cat                           
     205                            'category' => $product_cats_json                             
    187206                        ); 
    188207                         
     
    201220             
    202221            $cartdata = array( 
    203                 'value' =>  $this->format_money( $woocommerce->cart->total ), 
    204                 'totalItems' => $woocommerce->cart->cart_contents_count, 
     222                'cart_value' =>  $this->format_money( $woocommerce->cart->total ), 
     223                'cart_item_count' => $woocommerce->cart->cart_contents_count, 
    205224            ); 
    206225             
    207             $current_user = wp_get_current_user(); 
    208             if( $current_user instanceof WP_User && !empty( $current_user->user_email ) ) 
    209                 $cartdata['email'] = $current_user->user_email; 
    210              
    211             $js = $this->build_rejoiner_push( $items, $cartdata ); 
    212              
    213             echo $js; 
    214          
    215         } 
    216          
    217     } 
    218  
    219     function format_money( $number ) { 
    220          
    221         return number_format( (float)$number, 2, '.', '' ); 
    222          
    223     } 
    224      
    225     function format_description( $text ) { 
    226          
    227         $text = str_replace( "'", "\'", strip_tags( $text ) ); 
    228         $text = str_replace( array("\r", "\n"), "", $text ); 
    229          
    230         return $text; 
    231          
    232     } 
    233  
    234     function format_image_url( $url ) { 
    235          
    236         if( stripos( $url, 'http' ) === false ) { 
    237              
    238             $url = get_site_url() . $url; 
    239              
    240         } 
    241          
    242         return $url; 
    243          
    244     } 
    245      
    246     function escape_for_json( $str ) { 
    247          
    248         return str_ireplace( "'", "\'", $str ); 
    249          
    250     } 
    251      
    252     function build_rejoiner_push( $items, $cart ) { 
    253      
    254         global $woocommerce; 
    255          
    256         $rejoiner_id = $this->rejoiner_id; 
    257         $rejoiner_domain_name = $this->rejoiner_domain_name;         
    258          
    259         $returnUrl = $woocommerce->cart->get_cart_url() . '?rjcart=' . $this->sess; 
    260          
    261         $cart['returnUrl'] = apply_filters( 'rejoiner_returnurl', $returnUrl, $this->sess, $cart ); 
    262          
    263         $cartdata = $this->rejoiner_encode( $cart ); 
    264         $cartjs = "_rejoiner.push(['setCartData', $cartdata]);"; 
    265         $itemjs = ''; 
    266          
    267         foreach( $items as $item ) { 
    268              
    269             $data = $this->rejoiner_encode( $item ); 
    270             $itemjs.= "_rejoiner.push(['setCartItem', $data]);\r\n"; 
    271              
    272         } 
    273          
    274         if( !empty( $rejoiner_id ) && !empty( $rejoiner_domain_name ) ) { 
    275                  
    276             $js = <<<EOF 
     226            $js = $this->build_rejoiner_push( $items, $cartdata, $current_user_email ); 
     227             
     228        } elseif( $rjconverted != true ) { 
     229             
     230            $rejoiner_id = $this->rejoiner_id; 
     231            $rejoiner_domain_name = $this->rejoiner_domain_name; 
     232                         
     233            if( !empty( $rejoiner_id ) && !empty( $rejoiner_domain_name ) ) { 
     234                 
     235                $js = <<<EOF 
    277236<!-- Rejoiner Tracking - added by WooCommerceRejoiner --> 
    278237 
     
    285244    var s = document.createElement('script'); s.type = 'text/javascript'; 
    286245    s.async = true; 
    287     s.src = 'https://s3.amazonaws.com/rejoiner/js/v3/t.js'; 
     246    s.src = 'https://cdn.rejoiner.com/js/v4/rejoiner.lib.js'; 
    288247    var x = document.getElementsByTagName('script')[0]; 
    289248    x.parentNode.insertBefore(s, x); 
    290249})(); 
    291 </script> 
     250 
     251EOF; 
     252 
     253                if( $current_user_email != false ) { 
     254                    $js.= "_rejoiner.push(['setCustomerEmail', { 'email' : '$current_user_email' } ]);"; 
     255                } 
     256 
     257                if( is_product() ) { 
     258                     
     259                    $_product = wc_get_product( get_the_ID() ); 
     260                    $product_id = $_product->post->ID; 
     261                     
     262                    $name = $this->escape_for_json( apply_filters( 'wc_rejoiner_cart_item_name', get_the_title( $product_id ) ) ); 
     263                    $product_url = get_permalink( $product_id ); 
     264                                         
     265                    $thumb_id = get_post_thumbnail_id( $product_id ); 
     266                    $thumb_size = apply_filters( 'wc_rejoiner_thumb_size', 'shop_thumbnail' ); 
     267                    $thumb_url = wp_get_attachment_image_src( $thumb_id, $thumb_size, true ); 
     268                    $thumb_url = $thumb_url[0]; 
     269                     
     270                    $product_cats = get_the_terms( $product_id, 'product_cat'); 
     271                    $product_cats_json = ''; 
     272                     
     273                    if( is_array( $product_cats ) ) { 
     274                         
     275                        foreach( $product_cats as $cat ) { 
     276                             
     277                            $cats[] = $cat->slug; 
     278                             
     279                        } 
     280                         
     281                        $product_cats_json = "'category':" . json_encode( $cats ) .','; 
     282                         
     283                    } 
     284                     
     285                    $price = $this->format_money( $_product->get_price() ); 
     286                     
     287                    $js.= " 
     288    _rejoiner.push(['trackProductView', { 
     289        'product_id': '$product_id', 
     290        'name': '$name', 
     291        $product_cats_json 
     292        'price': $price, 
     293        'product_url': '$product_url', 
     294        'image_url': '$thumb_url' 
     295    }]);                     
     296                    "; 
     297                     
     298                } 
     299             
     300            } 
     301             
     302            $js.= '</script> 
     303            <!-- End Rejoiner Tracking -->'; 
     304                     
     305        } 
     306         
     307        if( isset( $js ) ) 
     308            echo $js; 
     309         
     310    } 
     311 
     312    function rejoiner_sync() { 
     313         
     314        global $woocommerce; 
     315 
     316        $cart = array( 
     317            'cart_value' =>  $this->format_money( $woocommerce->cart->total ), 
     318            'cart_item_count' => $woocommerce->cart->cart_contents_count, 
     319        ); 
     320         
     321        $returnUrl = $woocommerce->cart->get_cart_url() . '?rjcart=' . $this->sess; 
     322        $cart['return_url'] = apply_filters( 'rejoiner_returnurl', $returnUrl, $this->sess, $cart ); 
     323         
     324        wp_send_json( $cart );       
     325 
     326    } 
     327 
     328    function format_money( $number ) { 
     329         
     330        $incents = $number * 100; 
     331        $incents = intval( $incents ); 
     332        return $incents; 
     333         
     334    } 
     335     
     336    function format_description( $text ) { 
     337         
     338        $text = str_replace( "'", "\'", strip_tags( $text ) ); 
     339        $text = str_replace( array("\r", "\n"), "", $text ); 
     340         
     341        return $text; 
     342         
     343    } 
     344 
     345    function format_image_url( $url ) { 
     346         
     347        if( stripos( $url, 'http' ) === false ) { 
     348             
     349            $url = get_site_url() . $url; 
     350             
     351        } 
     352         
     353        return $url; 
     354         
     355    } 
     356     
     357    function escape_for_json( $str ) { 
     358         
     359        return str_ireplace( "'", "\'", $str ); 
     360         
     361    } 
     362     
     363    function build_rejoiner_push( $items, $cart, $current_user_email ) { 
     364     
     365        global $woocommerce, $rjremoved; 
     366         
     367        $rejoiner_id = $this->rejoiner_id; 
     368        $rejoiner_domain_name = $this->rejoiner_domain_name; 
     369        $ajaxurl = admin_url( 'admin-ajax.php' ); 
     370         
     371        $returnUrl = $woocommerce->cart->get_cart_url() . '?rjcart=' . $this->sess; 
     372         
     373        $cart['return_url'] = apply_filters( 'rejoiner_returnurl', $returnUrl, $this->sess, $cart ); 
     374         
     375        $cartdata = $this->rejoiner_encode( $cart ); 
     376        $cartjs = "_rejoiner.push(['setCartData', $cartdata]);"; 
     377        $itemjs = ''; 
     378        $emailjs = ''; 
     379         
     380        if( $current_user_email != false ) 
     381            $emailjs = "_rejoiner.push(['setCustomerEmail', { 'email' : '$current_user_email' } ]);"; 
     382         
     383        foreach( $items as $item ) { 
     384             
     385            $data = $this->rejoiner_encode( $item ); 
     386            $itemjs.= "_rejoiner.push(['setCartItem', $data]);\r\n"; 
     387             
     388        } 
     389         
     390        if( !empty( $rejoiner_id ) && !empty( $rejoiner_domain_name ) ) { 
     391                 
     392            $js = <<<EOF 
     393<!-- Rejoiner Tracking - added by WooCommerceRejoiner --> 
    292394 
    293395<script type='text/javascript'> 
     396    var _rejoiner = _rejoiner || []; 
     397    _rejoiner.push(['setAccount', '{$rejoiner_id}']); 
     398    _rejoiner.push(['setDomain', '{$rejoiner_domain_name}']); 
     399     
     400    (function() { 
     401        var s = document.createElement('script'); s.type = 'text/javascript'; 
     402        s.async = true; 
     403        s.src = 'https://cdn.rejoiner.com/js/v4/rejoiner.lib.js'; 
     404        var x = document.getElementsByTagName('script')[0]; 
     405        x.parentNode.insertBefore(s, x); 
     406    })(); 
     407 
    294408    $cartjs 
    295409    $itemjs 
     410    $emailjs 
     411 
     412    (function ($,r) { 
     413        var Rejoiner = { 
     414            removeInProgress: false, 
     415            init: function() { 
     416                console.log('initialized Rejoiner'); 
     417                $(document).ready(function(){ 
     418                    $( document ).on( 
     419                        'click', 
     420                        'td.product-remove > a', 
     421                        Rejoiner.beginItemRemove  
     422                    ); 
     423                    $( document ).on( 
     424                        'added_to_cart updated_wc_div updated_shipping_method updated_cart_totals', 
     425                        Rejoiner.requestUpdates 
     426                    ); 
     427                }); 
     428            }, 
     429            beginItemRemove: function(e) { 
     430                Rejoiner.removeInProgress = $(this).data('product_id'); 
     431            }, 
     432            requestUpdates: function(e) { 
     433                if (Rejoiner.removeInProgress !== false) { 
     434                    console.log('removing item '+Rejoiner.removeInProgress+' from cart'); 
     435                    r.push(['removeCartItem', {product_id: Rejoiner.removeInProgress}]); 
     436                    Rejoiner.removeInProgress = false; 
     437                    console.log('requesting update setCartData'); 
     438                    $.post( 
     439                        '$ajaxurl',  
     440                        {action: 'rejoiner_sync'}, 
     441                        Rejoiner.updateCartData 
     442                    );                  
     443                }             
     444            }, 
     445            updateCartData: function(data) { 
     446                r.push(['setCartData', data]); 
     447                console.log( 'updated cart data with:'); 
     448                console.log( data ); 
     449            } 
     450        }; 
     451         
     452        Rejoiner.init(); 
     453     
     454    })(jQuery,_rejoiner); 
     455 
    296456</script> 
    297  
    298457<!-- End Rejoiner Tracking --> 
    299458EOF; 
     
    315474        foreach( $array as $key => $val ) { 
    316475             
    317             $items[]= "'$key' : '$val'"; 
     476            if( is_array( json_decode( $val, true ) ) )  
     477                $items[]= "'$key' : $val"; 
     478            else 
     479                $items[]= "'$key' : '$val'";             
    318480             
    319481        } 
     
    337499            return; 
    338500        } 
    339                  
     501 
     502        $order = wc_get_order( $order_id ); 
     503         
     504        $total = $this->format_money( $order->get_total() ); 
     505        $item_count = $order->get_item_count(); 
     506         
     507        $promos = $order->get_used_coupons(); 
     508        if( is_array( $promos ) && ( count( $promos ) > 1 ) ) 
     509            $promo = implode( ',', $promos ); 
     510        elseif( is_array( $promos ) ) 
     511            $promo = array_pop( $promos ); 
     512         
     513        if( isset( $promo ) ) 
     514            $promojs = "'promo': '{$promo}',"; 
     515        else  
     516            $promojs = ''; 
     517             
     518        $returnurl = $order->get_view_order_url(); 
     519         
     520        $line_items = $order->get_items(); 
     521        $items = array(); 
     522 
     523        foreach ( $line_items as $item ) { 
     524             
     525            $_product = $order->get_product_from_item( $item ); 
     526             
     527            $qty = $item['qty']; 
     528             
     529            $linetotal = $order->get_line_total( $item, true, true ); 
     530             
     531            $thumb_id = get_post_thumbnail_id( $_product->post->ID ); 
     532             
     533            $thumb_size = apply_filters( 'wc_rejoiner_thumb_size', 'shop_thumbnail' ); 
     534             
     535            $thumb_url = wp_get_attachment_image_src( $thumb_id, $thumb_size, true );                
     536 
     537            if( !empty($thumb_url[0]) ) { 
     538             
     539                $image = $thumb_url[0]; 
     540                 
     541            } else { 
     542             
     543                $image = wc_placeholder_img( 'shop_thumbnail' ); 
     544                 
     545            } 
     546             
     547            $product_cats = get_the_terms( $_product->post->ID, 'product_cat'); 
     548 
     549            if( is_array( $product_cats ) ) { 
     550                 
     551                foreach( $product_cats as $cat ) { 
     552                     
     553                    $cats[] = $cat->slug; 
     554                         
     555                } 
     556                     
     557                $product_cats_json = json_encode( $cats ); 
     558                 
     559            } else { 
     560                 
     561                $product_cats_json = null; 
     562 
     563            } 
     564         
     565            $_item = array( 
     566                'product_id' => $_product->post->ID, 
     567                'name' => $this->escape_for_json( apply_filters( 'woocommerce_cart_item_name', $_product->get_title() ) ), 
     568                'item_qty' => $qty, 
     569                'price' => $this->format_money( $_product->get_price() ), 
     570                'qty_price' => $this->format_money( $linetotal ), 
     571                'image_url' => $this->format_image_url( $image ), 
     572                'product_url' => get_permalink( $_product->post->ID ), 
     573                'category' => $product_cats_json                             
     574            ); 
     575             
     576            $items[] = $this->rejoiner_encode( $_item ); 
     577             
     578        } 
     579         
     580        $itemsjs = implode( ',', $items );   
     581         
    340582        $js = <<<EOF 
    341583<!-- Rejoiner JavaScript API Conversion - added by WooCommerce Rejoiner --> 
    342584 
    343585<script type='text/javascript'> 
    344 var _rejoiner = _rejoiner || []; 
    345 _rejoiner.push(['setAccount', '{$rejoiner_id}']); 
    346 _rejoiner.push(['setDomain', '{$rejoiner_domain_name}']); 
    347 _rejoiner.push(['sendConversion']); 
    348  
    349 (function() { 
    350     var s = document.createElement('script'); 
    351     s.type = 'text/javascript'; 
    352     s.async = true; 
    353     s.src = 'https://s3.amazonaws.com/rejoiner/js/v3/t.js'; 
    354     var x = document.getElementsByTagName('script')[0]; 
    355     x.parentNode.insertBefore(s, x); 
    356 })(); 
     586    var _rejoiner = _rejoiner || []; 
     587    _rejoiner.push(['setAccount', '{$rejoiner_id}']); 
     588    _rejoiner.push(['setDomain', '{$rejoiner_domain_name}']); 
     589    _rejoiner.push(['sendConversion', { 
     590        cart_data: { 
     591            'cart_value': {$total}, 
     592            'cart_item_count': {$item_count}, 
     593            'customer_order_number': '{$order_id}', 
     594            {$promojs} 
     595            'return_url': '{$returnurl}' 
     596        }, 
     597        cart_items: [ 
     598            $itemsjs         
     599        ]} 
     600    ]); 
     601     
     602    (function() { 
     603        var s = document.createElement('script'); 
     604        s.type = 'text/javascript'; 
     605        s.async = true; 
     606        s.src = 'https://cdn.rejoiner.com/js/v4/rejoiner.lib.js'; 
     607        var x = document.getElementsByTagName('script')[0]; 
     608        x.parentNode.insertBefore(s, x); 
     609    })(); 
    357610</script> 
    358611 
  • woocommerce-rejoiner/tags/1.4/readme.txt

    r1429529 r1504047  
    44Requires at least: 3.8 
    55Tested up to: 4.4.2 
    6 Stable tag: 1.3.5 
     6Stable tag: 1.4 
    77License: GPLv3 
    88License URI: http://www.gnu.org/licenses/gpl-3.0.html 
     
    8080 
    8181== Changelog == 
     82= 1.4 = 
     83* Integrate new Rejoiner API 
     84 
    8285= 1.3.5 = 
    8386* Add product url and category to setCartItem 
  • woocommerce-rejoiner/tags/1.4/woocommerce-rejoiner.php

    r1429529 r1504047  
    66Author: Jackson Whelan 
    77Author URI: http://www.jacksonwhelan.com 
    8 Version: 1.3.5 
     8Version: 1.4 
    99*/ 
    1010 
Note: See TracChangeset for help on using the changeset viewer.