HDMI BestBuy vs Amazon Digital Vs Digital

BestBuy 6.6 foot hdmi cable
$695.00
http://www.bestbuy.com/site/AudioQuest+-+Coffee+6.6’+HDMI+Cable+-+Brown/Black/1267646.p?id=1218245470758&skuId=1267646&st=AudioQuest%20-%20Coffee%206.6’%20HDMI%20Cable%20-%20Brown/Black&contract_desc=null

vs

$7.99
http://www.amazon.com/AmazonBasics-High-Speed-Meters-Supports-Channel/dp/B001T9NUJE/ref=sr_1_1?ie=UTF8&qid=1295277370&sr=8-1

I don’t think cable business model will last forever.

Haproxy + Varnish + Nginx = real IP problem

If you running Haproxy and your are trying to get the correct REMOTE_ADDR

We had to switch our load balancing from TCP to HTTP

In order to support the xforward header.

Along with nginx real ip module

http://wiki.nginx.org/HttpRealIpModule

The xforward on earlier haproxies does not support tcp or keepalived.

it only work under http. this has changed on latest haproxy like the
beta version 1.53

http://haproxy.1wt.eu/

AutoChimp WordPress plugin mod enable autoresponder

I have been testing out this plugin for wordpress called autochimp. “Version 1.00 | By Wanderer LLC Dev Team ”

Visit plugin site

It seems to be pretty fantastic.

One issue I noticed is that for mailchimp to utilize a autoresponder automatically from leads from this plugin you need to submit a date field or registration date field with the lead. Otherwise the aut oresponder just doesn’t work.

The mod is pretty simple. I created a field on the list then added a field to be sent automatically.

I am not sure if you have to do the first setup but I did and it worked so..

File 88-autochimp.php

Line 408

$merge_vars = array( ‘FNAME’=>$user_info->first_name, ‘LNAME’=>$user_info->last_name, ‘REGDATE’=>date(“Y-m-d”) );

Added the REGDATE line.

I am not sure if it works for sub sites on wordpress. If it doesn’t I attend to modify it so that sub blogs on the network can use it to sync their own mailchimp accounts.

Varnish Rules WordPress Multi-Site

Getting your wordpress site to load fast can be a jaunting task. I have been testing out Varnish Cache for the last 2 weeks and found it to pretty effective and pushing our resource forward.

WordPress is crazy CPU and database intense. I have been playing Varnish and have found that there are several key areas that I need to have working.

First one would be our affiliate module at our site. It sets a cookie every time ends up on our network or on a affiliate link.

First rule looks for our affiliate cookie. If it doesn’t exist it passes the connection directly to Nginx. If it does exist it simply remove the cookie. The content at that point is cached so when the user visits the site again the page does not have to be reloaded.

sub vcl_recv {
# This checks to see if the client has the affiliate cookie if not the page is not cached.
if (req.http.Cookie !~ “affiliate”) {
return(pipe);
}

#This one fixs uploading issues I had with larger files.
if (req.request == “POST” && req.http.Cookie ~ “wordpress_logged_in_” )
{
return(pass);
}

#Clipping

remove req.http.cookie;
return (lookup);
}

sub vcl_fetch {
if (req.url ~ “wp-(login|admin)”) {

return (pass);
}

## This line I found to be critical to stop the user getting someone elses cached cookies. 🙂

if (!(req.url ~ “wp-(login|admin)”)) {
unset beresp.http.set-cookie;
}
set beresp.ttl = 24h;
return (deliver);
}

Uploading Giant GB Files with PHP regardless of limits

Attached is a java app that with a php script that will allow you setup a upload interface for very large files. Basically the java applets splits the file into many peices and submits them to a php file handler. At the end of the batch the php file just assembles them back together. No memory limit. No file upload limit.

javaupload

Specify the upload folder in the split-chunk.php file.

//    specify upload directory – storage
//    for reconstructed uploaded files
$upload_dir = “/uploads/”;
//
//    specify stage directory – temporary storage
//    for uploaded partitions
$stage_dir = “/uploads/stage/”;

//    specify upload directory – storage     //    for reconstructed uploaded files    $upload_dir = “/uploads/”;
//    //    specify stage directory – temporary storage     //    for uploaded partitions    $stage_dir = “/uploads/stage/”;

From there set the upload applet paramaters in the upload_java.php file

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}

<param name=”uc_uploadUrl” value=”split_chunk.php”/>

<param name=”uc_partitionLength” value=”1048576″/>

<param name=”uc_maxFiles” value=”1″/>

<param name=”uc_fileNamePattern” value=”(?i)^.+.(cvs|txt|csv)$”>

<param name=”gc_loggingLevel” value=”DEBUG”/>

<param name=”ac_fireUploaderStatusChanged” value=”true”/>

uc_partitionLength = the max size your php server can handle or less.

BuddyPress BP admin bar mod work.

Problem with buddypress admin bar login functionality.

When a visit comes to a WPMU site and clicks on the login link at the bp admin bar the default function is to direct them to the primary domain login page.

Once they login they are then directed to the primary domain homepage. The user can still login to there admin panel at that point but it causes the user to have to login again at their own domain.

This is not ideal functionality with mapped domains.

I modded the bp-core-adminbar.php file temporarily to test  a alternate method for the login url. Thus far is seems to work.

//echo ‘<li><a href=”‘ . $bp->root_domain . ‘/wp-login.php?redirect_to=’ . urlencode( $bp->root_domain ) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
echo ‘<li><a href=”/wp-login.php?redirect_to=’ . urlencode( ‘http://’.$_SERVER[“HTTP_HOST”].’/wp-admin’) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;

This seems to change the behavior so when the visitor clicks on the login page. They are redirected to the same url. Once they are logged in it directs them into there admin area. Seems more logical.

End plugin looks like this

// **** “Log In” and “Sign Up” links (Visible when not logged in) ********
function custom_bp_adminbar_login_menu() {
global $bp;

if ( is_user_logged_in() )
return false;

//echo ‘<li><a href=”‘ . $bp->root_domain . ‘/wp-login.php?redirect_to=’ . urlencode( $bp->root_domain ) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
echo ‘<li><a href=”/wp-login.php?redirect_to=’ . urlencode( ‘http://’.$_SERVER[“HTTP_HOST”].’/wp-admin’) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
// Show “Sign Up” link if user registrations are allowed
if ( bp_get_signup_allowed() ) {
echo ‘<li><a href=”‘ . bp_get_signup_page(false) . ‘”>’ . __( ‘Sign Up’, ‘buddypress’ ) . ‘</a></li>’;
}
}

function my_alter_bp_adminbar() {
remove_action( ‘bp_adminbar_menus’, ‘bp_adminbar_login_menu’,2);
add_action( ‘bp_adminbar_menus’, ‘custom_bp_adminbar_login_menu’, 2 );
}

// Modify BP Login
add_action(‘wp_footer’,’my_alter_bp_adminbar’,1);

MU Affiliate work – Adding MLM aspect to affiliate program

Affiliate Multi level tree totals
Affiliate report area

Made several minor tweak to enable a virtually unlimited size down line /  commission system

Added tree view. This will display grand totals of all the members that are in your down line.

In the admin area I added a option to set the amount of levels to pay on.

From there this menu will generate the appropriate amount of boxes that can be used to set the percentage to be paid on each level.

2 Levels Deep

Then 9 levels deep

Supporter with 9 levels of commission

In order to store the data efficiently I created this table.


— Table structure for table `wp_affiliate_tree`

CREATE TABLE `wp_affiliate_tree` (
`user_id` bigint(20) NOT NULL,
`ref_user_id` bigint(20) NOT NULL,
`lvl` mediumint(6) NOT NULL,
PRIMARY KEY  (`user_id`,`ref_user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’affiliate support tree’;

Upon a user activation I added a hook to build the new users full tree.

This function activates the new user as a affiliate and builds there tree

function initial_register_affiliate($user_id, $password, $met){
$user_info=get_userdata($user_id);
$reference = $user_info->user_login. ‘-‘ . strrev(sprintf(‘%02d’, $user_id + 35));
update_usermeta($user_id, ‘enable_affiliate’, ‘yes’);
update_usermeta($user_id, ‘affiliate_reference’, $reference);
update_usermeta($user_id, ‘affiliate_hash’, ‘aff’ . md5(AUTH_SALT . $reference));
$refer_user_id=$user_info->affiliate_referrer;
// If referred by another user_id then build upline tree
if($refer_user_id){

global $wpdb;
$sql = $wpdb->prepare( “INSERT IGNORE INTO “.$wpdb->base_prefix.”affiliate_tree (user_id, ref_user_id, lvl) VALUES (%d, %d, 1)”, $user_id,$refer_user_id );
$queryresult = $wpdb->query($sql);

$sql = $wpdb->prepare( “INSERT IGNORE INTO  “.$wpdb->base_prefix.”affiliate_tree (user_id, ref_user_id, lvl)
SELECT %d, ref_user_id, lvl+1 FROM “.$wpdb->base_prefix.”affiliate_tree WHERE  user_id=%d”, $user_id, $refer_user_id );
$queryresult = $wpdb->query($sql);
}
}

From there I tweaked the supporter-amazon.php and paypal file as there was  a bug that was causing the affiliate payment process not to load.

Also on the affiliate program  there were some other random fixes. I worked the code regarding a user showing up on a user page without a referralid.

It now cross references the blog that they landed on with adminstrator of the blog. It uses that data to set the cookie.

There was a problem with the cookie being set by the ‘ref’ get query.. However at that point in the code it was not defined.

if(defined(‘AFFILIATE_CHECKALL’)) {
// We are here if there isn’t a reference passed, so we need to check the referrer.
if(!isset( $_COOKIE[‘affiliate_’ . COOKIEHASH]) && isset($_SERVER[‘HTTP_REFERER’])) {
// We haven’t already been referred here by someone else – note only the first referrer
// within a time period gets the cookie.
$referrer = parse_url($_SERVER[‘HTTP_REFERER’], PHP_URL_HOST);
global $wpdb;

// Check if the user is a valid referrer
//$affiliate = $this->db->get_var( $this->db->prepare( “SELECT user_id FROM {$this->db->usermeta} WHERE meta_key = ‘affiliate_referrer’ AND meta_value=’%s'”, $referrer) );
$affiliate = $this->db->get_var( $this->db->prepare( “SELECT b.user_id FROM ” . $wpdb->base_prefix . “blogs a,  ” . $wpdb->base_prefix . “bp_user_blogs b WHERE  a.blog_id=b.blog_id AND a.domain=’%s’ LIMIT 1”, $referrer) );

// Check for mapped domain.
if(!$affiliate){
$affiliate = $this->db->get_var( $this->db->prepare( “SELECT b.user_id FROM ” . $wpdb->base_prefix . “domain_mapping a,  ” . $wpdb->base_prefix . “bp_user_blogs b WHERE  a.blog_id=b.blog_id AND a.domain=’%s’ LIMIT 1”, $referrer) );
}

if($affiliate) {
$_GET[‘ref’]=$this->db->get_var( $this->db->prepare( “SELECT meta_value FROM {$this->db->usermeta} WHERE meta_key = ‘affiliate_reference’ AND user_id=’%s'”, $affiliate) );
// Update a quick count for this month
do_action( ‘affiliate_click’, $affiliate);
// Store the referrer
do_action( ‘affiliate_referrer’, $affiliate, $referrer );

// Write the affiliate hash out – valid for 30 days.
@setcookie(‘affiliate_’ . COOKIEHASH, ‘aff’ . md5(AUTH_SALT . $_GET[‘ref’]), (time() + (60*60*24*30)), COOKIEPATH, COOKIE_DOMAIN);
} else {
if(defined(‘AFFILIATE_SETNOCOOKIE’)) @setcookie(‘noaffiliate_’ . COOKIEHASH, ‘notanaff’, 0, COOKIEPATH, COOKIE_DOMAIN);
}
}
}

Joseph Jozwik