diff --git a/trunk/chargify.php b/trunk/chargify.php index 349b45e..79c2d4f 100644 --- a/trunk/chargify.php +++ b/trunk/chargify.php @@ -1,11 +1,13 @@ ID; + if(empty($user->chargify_custid)) + return; + + $d = get_option('chargify'); + $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); + $connector = new ChargifyConnector($opt); + + $sub = $connector->getSubscriptionsByCustomerID($user->chargify_custid); + if(is_array($sub)) + { + //get user subscriptions + $usub = get_usermeta($user_id,'chargify_level',true); + foreach($sub as $s) + { + switch($s->getState()) + { + case 'canceled': + case 'expired': + case 'trial_ended': + if(isset($usub[$s->getProduct()->getHandle()])) + { + unset($usub[$s->getProduct()->getHandle()]); + update_usermeta($user_id,'chargify_level',$usub); + } + break; + + case 'paused': + case 'trialing': + case 'active': + if(!isset($usub[$s->getProduct()->getHandle()])) + { + $usub[$s->getProduct()->getHandle()] = time(); + update_usermeta($user_id,'chargify_level',$usub); + } + break; + } + } + } + } function adminScripts() { $pluginurl = WP_PLUGIN_URL . '/' . plugin_basename(dirname(__FILE__)); @@ -61,12 +105,12 @@ function manualTrim($text) function checkAccess($posts) { $chargify = get_option('chargify'); - + $u = wp_get_current_user(); if($u->roles[0] == 'administrator') { return $posts; - } + } if($u->ID && get_user_meta($u->ID,'chargify_access_check',true) < time()) { @@ -75,7 +119,7 @@ function checkAccess($posts) foreach($posts as $k => $post) { - $d = get_post_meta($post->ID, 'chargify_access', true); + $d = get_post_meta($post->ID, 'chargify_access', true); if(isset($d['levels']) && is_array($d["levels"]) && !empty($d['levels'])) { if(!$u->ID ||(is_array($d["levels"]) && !array_intersect_key($u->chargify_level,$d["levels"]))) @@ -86,7 +130,7 @@ function checkAccess($posts) $post->post_content = strlen(trim($post->post_excerpt)) ? $post->post_excerpt : self::manualTrim($post->post_content); break; default: - $post->post_content = self::partialcontent($post->post_content); + $post->post_content = self::partialcontent($post->post_content); } } else @@ -106,13 +150,13 @@ function checkAccess($posts) $post->post_content = strlen(trim($post->post_excerpt)) ? $post->post_excerpt : self::manualTrim($post->post_content); break; default: - $post->post_content = self::partialcontent($post->post_content); + $post->post_content = self::partialcontent($post->post_content); } } } } } - + $posts[$k] = $post; } return $posts; @@ -135,7 +179,7 @@ function products($fresh = false) $d = get_option('chargify'); $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); if($fresh) - { + { $connector = new ChargifyConnector($opt); $products = $connector->getAllProducts(); } @@ -169,7 +213,7 @@ function partialprotect($atts,$content = null) global $post; $chargify = get_option("chargify"); - $d = get_post_meta($post->ID, 'chargify_access', true); + $d = get_post_meta($post->ID, 'chargify_access', true); $u = wp_get_current_user(); if(current_user_can( 'manage_options' )) return $content; @@ -212,6 +256,7 @@ function subscriptionListShortCode($atts) } $d = get_option("chargify"); $return_url = $_GET['return_url']; + $plan = $_GET['plan']; if($_POST['chargifySignupFirst']) $first = $_POST['chargifySignupFirst']; @@ -235,7 +280,7 @@ function subscriptionListShortCode($atts) if($d["chargifySignupType"] == 'api') - { + { $monthDrop = ''; - + $products = self::products(); $form ='
@@ -271,8 +316,11 @@ function subscriptionListShortCode($atts) Email - - + '; + + $form = apply_filters('chargify_signup_form_extra',$form,$d,$_REQUEST); + + $form .= ' Payment Info @@ -310,7 +358,7 @@ function subscriptionListShortCode($atts) Credit Card Expiration '.$monthDrop.'/'.$yearDrop.' - + '; $productdisplayed = 0; foreach($products as $p) @@ -337,7 +385,7 @@ function subscriptionListShortCode($atts) $form =' - + @@ -353,50 +401,87 @@ function subscriptionListShortCode($atts) - - - - - '; - + '; + + $form = apply_filters('chargify_signup_form_extra',$form,$d,$_REQUEST); + $products = self::products(); $productdisplayed = 0; if(is_array($products)) foreach($products as $p) { - if ((isset($filteraccountingcodes[$p->getAccountCode()]) && $filteraccountingcodes[$p->getAccountCode()]) || count($filteraccountingcodes) == 0) { - $form .= ''; - $form .= ''; - if(isset($current_user->chargify_level[$p->getHandle()])) - { - $form .= ''; + $pNameAdjusted = sanitize_title_with_dashes($p->getName()); + /* + $planNameAdjusted = str_replace('-', ' ', $plan); + $pName = strtolower($planName); + $pNameAdjusted = strtolower($planNameAdjusted); + */ + if ((isset($filteraccountingcodes[$p->getAccountCode()]) && $filteraccountingcodes[$p->getAccountCode()]) || count($filteraccountingcodes) == 0) + { + if(!isset($plan)) + { + $form .= ''; + $form .= ''; + if(isset($current_user->chargify_level[$p->getHandle()])) + { + $form .= ''; + } + else + { + $form .= ''; + + $form .= ''; + $productdisplayed = 1; + } } else - $form .= ''; - $form .= ''; - $productdisplayed = 1; + { + if($plan == $pNameAdjusted) + { + if(isset($current_user->chargify_level[$p->getHandle()])) + { + $form .= ''; + } + else + { + $form .= ''; + } + } + else + $form .= ''; + + $form .= ''; + $productdisplayed = 1; + } } } + if(!$productdisplayed) { $form = '

Subscriber Information

Email

Subscription Level

'.$p->getName().'
$'.$p->getPriceInDollars().' '.($p->getInterval() == 1 ? 'each '.$p->getIntervalUnit() : 'every '.$p->getInterval().' '.$p->getIntervalUnit().'s').'
'.$p->getDescription().'

'; - $form .= 'You already have access to this level

'.$p->getName().'
$'.$p->getPriceInDollars().' '.($p->getInterval() == 1 ? 'each '.$p->getIntervalUnit() : 'every '.$p->getInterval().' '.$p->getIntervalUnit().'s').'
'.$p->getDescription().'

You already have access to this level

You already have access to this level

'; } $form .= '
No products found
'; $form .= '
'; - - } - return $form; + return apply_filters('chargify_signup_form',$form,$d,$_REQUEST,$products); } + function userActionsUpdate($user_id) { - if($_POST["chargifyCancelSubscription"]) + global $current_user; + + if(isset($_POST["chargifyCancelSubscription"]) && is_numeric($_POST['chargifyCancelSubscription']) && ($user_id == $current_user->ID || current_user_can('activate_plugins'))) { $d = get_option('chargify'); $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); $connector = new ChargifyConnector($opt); $connector->cancelSubscription($_POST["chargifyCancelSubscription"]); + + //get rid of it on our side + $sub = $connector->getSubscriptionsBySubscriptionID($_POST['chargifyCancelSubscription']); + $usub = get_usermeta($user_id,'chargify_level',true); + unset($usub[$sub->getProduct()->getHandle()]); + update_usermeta($user_id,'chargify_level',$usub); } } function userActions($u) @@ -413,20 +498,22 @@ function userActions($u) { foreach($sub as $s) { - echo ''.$s->getProduct()->getName().'
$'.$s->getProduct()->getPriceInDollars().' '.($s->getProduct()->getInterval() == 1 ? 'each '.$s->getProduct()->getIntervalUnit() : 'every '.$s->getProduct()->getInterval().' '.$s->getProduct()->getIntervalUnit().'s').'
'.$s->getProduct()->getDescription() . '
Subscription Status:'.$s->getState().'
Check this box to cancel this subscription'; + echo ''.$s->getProduct()->getName().'
$'.$s->getProduct()->getPriceInDollars().' '.($s->getProduct()->getInterval() == 1 ? 'each '.$s->getProduct()->getIntervalUnit() : 'every '.$s->getProduct()->getInterval().' '.$s->getProduct()->getIntervalUnit().'s').'
'.$s->getProduct()->getDescription() . '
Subscription Status:'.$s->getState().''; + //echo 'Check this box to cancel this subscription'; } } } function metaAccessBox() { global $post; - $d = get_post_meta($post->ID, 'chargify_access', true); + $d = get_post_meta($post->ID, 'chargify_access', true); if(isset($d["levels"])) $levels = $d["levels"]; - + $products = self::products(); $form = 'User levels that can access this content Note: If you don\'t choose any levels below this will be a public post
'; $form .= ''; + if(is_array($products)) foreach($products as $p) { $form .= 'getHandle()]) && isset($levels[$p->getHandle()]) ? "checked" : "").'> '.$p->getName(); @@ -438,7 +525,7 @@ function metaAccessBox() $form .= '
'; } echo $form; - } + } function subscriptionCreate() { global $current_user; @@ -447,17 +534,26 @@ function subscriptionCreate() $d = get_option('chargify'); $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); $connector = new ChargifyConnector($opt); - $sub = $connector->getSubscriptionsBySubscriptionId($_GET["subscription_id"]); + $sub = $connector->getSubscriptionsBySubscriptionId(htmlspecialchars($_GET["subscription_id"])); + $subid = (htmlspecialchars($_GET["subscription_id"])); if($sub->getState() == 'active' || $sub->getState() == 'trialing') { - $trans = get_transient('chargify-'.$_GET['customer_reference']); + $customer = $connector->getCustomerByReference(htmlspecialchars($_GET['customer_reference'])); + $customer_email = $customer->getEmail(); + $trans = get_transient('chargify-'.md5($customer_email)); + if(is_array($trans) && isset($trans['user_email'])) { $email = $trans['user_email']; $user_pass = $trans['user_pass']; + if (isset($trans['user_login'])) { + $user_login = $trans['user_login']; + } else { + $user_login = $trans['user_email']; + } $args = array( - 'user_login' => $email, + 'user_login' => $user_login, 'user_pass' => $user_pass, 'user_email' => $email, ); @@ -477,12 +573,17 @@ function subscriptionCreate() //this ensures that it won't do all this work twice //it's a filthy hack but it works for now $_REQUEST["chargify.subscriptionPost"] = $user_id; - delete_transient('chargify-'.$_GET['customer_reference']); - - update_usermeta( $user_id, 'chargify_level', array($sub->getProduct()->getHandle()=>time())); + $customer = $connector->getCustomerByReference($_GET['customer_reference']); + $customer_email = $customer->getEmail(); + delete_transient('chargify-'.md5($customer_email)); + + update_usermeta( $user_id, 'chargify_level', array($sub->getProduct()->getHandle()=>time())); update_usermeta( $user_id, 'chargify_custid', $sub->getCustomer()->getId()); - + + update_usermeta( $user_id, 'first_name', $sub->getCustomer()->getFirstName()); + update_usermeta( $user_id, 'last_name', $sub->getCustomer()->getLastName()); + if(isset($trans['existing_user']) && $trans['existing_user'] == true) { if($trans['return_url']) @@ -496,10 +597,15 @@ function subscriptionCreate() else { wp_new_user_notification($user_id, $user_pass); - self::login( $user_id, $email,$trans['return_url']); + self::login( $user_id, $email,$trans['return_url']."?customer_id=".$sub->getCustomer()->getId()."&customer_reference=".$sub->getCustomer()->getReference()."&subscription_id=".$subid); } } } + else + { + //echo ''; + } + } } } @@ -507,25 +613,41 @@ function subscriptionRedirect() { global $current_user; if ( wp_verify_nonce( $_POST['chargify_signup_noncename'], plugin_basename(__FILE__) ) && is_numeric($_POST["submit"])) - { - + { + if(!is_email($_POST["chargifySignupEmail"]) || !strlen($_POST["chargifySignupFirst"]) || !strlen($_POST["chargifySignupLast"])) { - $_POST["chargify_signup_error"] = array('ERROR'=>"All fields are required. Please enter a name and valid email address"); + $_POST["chargify_signup_error"] = array('ERROR'=>"All fields are required. Please enter a name and valid email address."); return 0; } - + $d = get_option("chargify"); - $user_login = sanitize_user( $_POST["chargifySignupEmail"] ); + $user_login = sanitize_user( apply_filters('chargify_signup_username',$_POST["chargifySignupEmail"]) ); $user_email = apply_filters( 'user_registration_email', $_POST["chargifySignupEmail"] ); - if((username_exists($user_login) || email_exists($user_email)) && !$current_user->ID) + + if (strpos($user_login, '@') || strpos($user_login, '_')) { + $_POST["chargify_signup_error"] = array('ERROR'=>"You cannot have an @ symbol or an underscore in your username."); + return 0; + } + + if(email_exists($user_email) && !$current_user->ID) { - $_POST["chargify_signup_error"] = array('ERROR'=>"That email address is already in use, please choose another."); + $_POST["chargify_signup_error"] = array('ERROR'=>"That email address is already in use, please choose another."); + return 0; + } + elseif(username_exists($user_login) && !$current_user->ID) + { + $_POST["chargify_signup_error"] = array('ERROR'=>"That user name is already in use, please choose another."); return 0; } else { - $user_pass = wp_generate_password(); + $user_pass = apply_filters('chargify_signup_pass',wp_generate_password()); + + if(!$user_pass) { + $_POST["chargify_signup_error"] = array('ERROR'=>"Password mismatch, please try again."); + return 0; + } $return_url = $_REQUEST['return_url']; $trans = array(); $trans["user_login"] = $user_login; @@ -537,17 +659,17 @@ function subscriptionRedirect() if($current_user->ID) $trans['existing_user'] = true; - set_transient("chargify-".md5($user_email.$_POST['submit']),$trans); + set_transient("chargify-".md5($user_email),$trans); $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); $connector = new ChargifyConnector($opt); $product = $connector->getProductByID($_POST['submit']); - + $pubpage = array_shift($product->public_signup_pages); if(is_array($pubpage)) { - $uri = '?first_name='.urlencode($_POST["chargifySignupFirst"]).'&last_name='.urlencode($_POST["chargifySignupLast"]).'&email='.urlencode($_POST["chargifySignupEmail"]).'&reference='.urlencode(md5($user_email.$_POST['submit'])); - + $uri = '?first_name='.urlencode($_POST["chargifySignupFirst"]).'&last_name='.urlencode($_POST["chargifySignupLast"]).'&email='.urlencode($_POST["chargifySignupEmail"]).'&reference='.urlencode(md5($user_email.$_POST['submit'].time())); + header("Location: ".$pubpage['url'].$uri); exit; @@ -570,7 +692,7 @@ function subscriptionRedirect() { global $wpdb; $sub_ids = json_decode(file_get_contents('php://input')); - + if($sub_ids !== NULL && is_array($sub_ids)) { $d = get_option('chargify'); @@ -584,9 +706,9 @@ function subscriptionRedirect() $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE meta_key = 'chargify_custid' AND meta_value = %s", $sub->getCustomer()->getId() ) ); if ( $cur && $cur->user_id ) { - delete_usermeta( $cur->user_id, 'chargify_level'); + delete_usermeta( $cur->user_id, 'chargify_level'); } - } + } } } } @@ -595,13 +717,14 @@ function updateSubscription() { $d = get_option('chargify'); $u = wp_get_current_user(); - + if(!is_array($u->chargify_level)) update_user_meta($u->ID,'chargify_level',array($u->chargify_level=>strtotime($u->user_registered))); - + $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); $connector = new ChargifyConnector($opt); $subs = $connector->getSubscriptionsByCustomerID($u->chargify_custid); + if(is_array($subs)) foreach($subs as $sub) { if($sub->getState() == 'canceled') @@ -640,7 +763,7 @@ function displayForm($content) $content = do_shortcode('[chargify]').$content; } - return $content; + return $content; } function subscriptionPost($content) { @@ -648,7 +771,7 @@ function subscriptionPost($content) //Process full CC single form if ( wp_verify_nonce( $_POST['chargify_signupcc_noncename'], plugin_basename(__FILE__) )) - { + { $d = get_option('chargify'); $opt = array("api_key" => $d["chargifyApiKey"],"test_api_key" => $d["chargifyTestApiKey"],"domain" => $d["chargifyDomain"],"test_domain" => $d["chargifyTestDomain"],"test_mode"=>($d["chargifyMode"] == 'test'? TRUE : FALSE)); $connector = new ChargifyConnector($opt); @@ -673,12 +796,12 @@ function subscriptionPost($content) '.$_POST["chargifySignupExpYr"].' '; - + $user_login = sanitize_user( $_POST["chargifySignupEmail"] ); $user_email = apply_filters( 'user_registration_email', $_POST["chargifySignupEmail"] ); if(username_exists($user_login) || email_exists($user_email)) { - $_POST["chargify_signup_error"]['ERROR'] = 'That email address is already in use, please choose another'; + $_POST["chargify_signup_error"]['ERROR'] = 'That email address is already in use, please choose another.'; return 0; } else @@ -686,7 +809,7 @@ function subscriptionPost($content) $res = $connector->createCustomerAndSubscription($xml); if(strlen($res->error)) { - $_POST["chargify_signup_error"]['ERROR'] = ''.$res->error.''; + $_POST["chargify_signup_error"]['ERROR'] = ''.$res->error.''; return 0; } else @@ -699,32 +822,32 @@ function subscriptionPost($content) ); $user_id = wp_insert_user($args); wp_new_user_notification($user_id, $user_pass); - update_usermeta( $user_id, 'chargify_level', array($res->getProduct()->getHandle() => 1)); - update_usermeta( $user_id, 'chargify_custid', $res->getCustomer()->getId()); + update_usermeta( $user_id, 'chargify_level', array($res->getProduct()->getHandle() => 1)); + update_usermeta( $user_id, 'chargify_custid', $res->getCustomer()->getId()); $_POST["chargify_signup_error"]['ERROR'] = ''.$d['chargifyThankYou'].''; if(!$_POST['return_url']) $_POST['return_url'] = site_url(); - self::login( $user_id, $user_email,$_POST['return_url']); + self::login( $user_id, $user_email,$_POST['return_url']); } - } + } } } function metaAccessBoxSave($post_id) { if ( !wp_verify_nonce( $_POST['access_noncename'], plugin_basename(__FILE__) )) - { - return $post_id; + { + return $post_id; } - if ( 'page' == $_POST['post_type'] ) + if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id )) { return $post_id; } - } - else + } + else { if ( !current_user_can( 'edit_post', $post_id )) { @@ -739,11 +862,9 @@ function metaAccessBoxSave($post_id) $levels[$handle] = $access['drip']; $data["levels"] = $levels; - + update_post_meta($post_id, 'chargify_access', $data); } - - function activate() { @@ -758,7 +879,7 @@ function activate() 'chargifyDefaultNoAccess'=>'You are not allowed to see this post. Please upgrade your account to see this content', 'chargifySignupLink'=>'' ); - + if(!get_option("chargify")) { add_option("chargify",$data); @@ -798,13 +919,13 @@ function controlForm() $d["chargifyTestDomain"] = $_REQUEST["chargifyTestDomain"]; $d["chargifyMode"] = $_REQUEST["chargifyMode"]; $d["chargifyNoAccessAction"] = $_REQUEST["chargifyNoAccessAction"]; - $d["chargifyDefaultNoAccess"] = $_REQUEST["chargifyDefaultNoAccess"]; + $d["chargifyDefaultNoAccess"] = stripslashes($_REQUEST["chargifyDefaultNoAccess"]); //$d["chargifyThankYou"] = $_REQUEST["chargifyThankYou"]; $d["chargifySignupLink"] = $signupurl; $d["chargifySignupType"] = $_REQUEST["chargifySignupType"]; $d["chargifyOrderFormPos"] = $_REQUEST["chargifyOrderFormPos"]; - $prods = stripslashes_deep($_REQUEST['chargifyproduct']); + $prods = stripslashes_deep($_REQUEST['chargifyproduct']); //foreach($prods as $k=>$v) // $prods[$k]['raw'] = $v['raw']; @@ -819,7 +940,7 @@ function controlForm() { if($v['enable'] == 'on') { - $product = $connector->updateProduct($k, array('return_url'=>$signupurl,'accounting_code'=>$v['acctcode'],'description'=>$v['description'],'name'=>$v['name'])); + $product = $connector->updateProduct($k, array('return_url'=>$signupurl,'accounting_code'=>$v['acctcode'],'description'=>stripslashes($v['description']),'name'=>$v['name'])); $d['chargifyProducts'][$k]['raw'] = base64_encode(serialize($product)); } } @@ -842,48 +963,53 @@ function controlForm() echo 'Messages and Pages'; echo 'Help'; echo ''; - + echo '
'; echo '

Account Settings

'; echo '

Get this information from your Chargify account. Unless you have multiple accounts, the test values for the API Key and Test Domain are likely the same as their non-test counterparts.

- - +
+ - + - + - + - + - +
.chargify.com
.chargify.com
Test Live
'; echo '
'; echo '
'; echo '

Chargify Product Settings

'; echo ''; $products = self::products(true); + if(is_array($products)) foreach($products as $p) { $sync = 'sync'; if($d['chargifyProducts'][$p->id]['raw'] != base64_encode(serialize($p)) && $d['chargifyProducts'][$p->id]['enable'] == 'on') - $sync = 'outofsync'; + $sync = 'outofsync'; + $url = $d['chargifySignupLink'].'?plan='.strtolower(sanitize_title_with_dashes($p->getName())); + echo ''; echo '
'; echo '
'.$p->getName().'Out of Syncid]['enable']?' CHECKED':'').'>Enable
'; echo '
Name
'; - echo '
Description
'; + echo '
Description
'; echo '
Accounting Code
'; + echo '
Direct Link
'.$url.'
'; + //echo '
Return Parameters
'; //echo '
Return URL: '.$p->getReturnUrl().'
'; echo '
'; @@ -892,16 +1018,16 @@ function controlForm() echo '
'; echo '

Signup Type

'; echo '

How will your site process signups. NOTE: Most users should leave this set to default.

- - +
+ - + - +
Default When a user creates a subscription they will go to Chargify to enter their payment information and be redirected back to this site to see the thank you page
API Style Advanced Option: When a user creates a subscription they will enter their payment information on this site and the account will be created without the user ever leaving the site.
IMPORTANT: Since you will be collecting credit card information in this mode you shouldn\'t activate this without having an SSL certificate on your site!
'; echo '

Order Page

'; echo '

Choose the page that will display the Chargify subscription order form

'; @@ -917,14 +1043,14 @@ function controlForm() echo 'Currently: '.get_the_title(url_to_postid( $d['chargifySignupLink'] )).' Edit Order Page'; else echo 'Order Page Not Set'; - echo ' + echo ' Order Form Position '; echo 'If there isn\'t a [chargify] shortcode does the orderform get placed on top or bottom of content'; echo ' - '; + '; echo '
'; echo '
'; echo '

No Access Message

@@ -935,11 +1061,11 @@ function controlForm() echo '

'; echo ''; echo '
'; - + $pluginurl = WP_PLUGIN_URL . '/' . plugin_basename(dirname(__FILE__)); ?>