new Ad_ShoppingAds,
$_adsensem['defaults'] = array();
$_adsensem['account-ids'] = array();
$_adsensem['be-nice'] = ADSENSEM_BE_NICE;
$_adsensem['version'] = ADSENSEM_VERSION;
$deluxe=get_option('acmetech_adsensedeluxe');
if(is_array($deluxe)){adsensem_admin::add_notice('upgrade adsense-deluxe','AdSense Manager has detected a previous installation of AdSense Deluxe. Import settings?','yn');}
$update_adsensem = true;
} else if(adsensem_admin::version_upgrade($_adsensem['version'],ADSENSEM_VERSION)){
require('class-upgrade.php');
//Backup cycle
$backup=get_option('plugin_adsensem_backup');
$backup[adsensem_admin::major_version($_adsensem['version'])]=$_adsensem;
update_option('plugin_adsensem_backup',$backup);
adsensem_upgrade::go();
$update_adsensem=true;
}
if($update_adsensem){ update_option('plugin_adsensem', $_adsensem); }
}
function major_version($v){
$mv=explode('.', $v);
return $mv[0]; //Return major version
}
function version_upgrade($old,$new){
$ov=explode('.', $old);
$nv=explode('.', $new);
if($nv[0]>$ov[0]){
return true;
} else if($nv[0]==$ov[0]){
if($nv[1]>$ov[1]){
return true;
} else if($nv[1]==$ov[1]){
if($nv[2]>$ov[2]){
return true;
}
}
}
//else
return false;
}
/*
NOTIFICATION FUNCTIONS
Functions below output notices to update the user on import options, issues with the data imported etc.
*/
function admin_notices(){
global $_adsensem;
?>
$notice){
?>
$value)
{
if(is_array($value)){
?> 'Use Default');
if(is_array(current($list))){$default=array('Default'=>$default);} //If optgroups in use, move the default into one. Smart.
?>
$network){
$count--;
if( $network['display']===false ) { continue; }
if( $network['www-signup']!='' ){ ?>1){echo ', ';} else if($count==1){echo ' and ';}
}
}
function sort_ad_step($a,$b){
$sort_network=strcmp( $GLOBALS['_adsensem_sort_ads_by_network'][$a]->network(), $GLOBALS['_adsensem_sort_ads_by_network'][$b]->network() );
if($sort_network==0){ //Same network, sort name
return strcmp($a,$b);
} else {return $sort_network;}
}
/* Sort ads by the network they're on, allows Manage Ads display to show grouped */
function sort_ads_by_network($ads){
$GLOBALS['_adsensem_sort_ads_by_network']=$ads; //Needed to pass data into the comparison function
uksort($ads,array('adsensem_admin','sort_ad_step'));
$GLOBALS['_adsensem_sort_ads_by_network']='';
return $ads;
}
/*
IMPORTING AND SAVING FUNCTIONS
Functions below are for running the import process from ad network code and for checking the validity
of submitted values, e.g. for names
*/
function import_ad($code){
global $_adsensem_networks;
$imported=false;
//We're attempting to import code
$code=stripslashes($code);
foreach ($_adsensem_networks as $network => $n){
if(call_user_func(array($network,'import_detect_network'),$code))
{
$ad=new $network;
$ad->import_settings($code);
$imported=true;
break; //leave the foreach loop
}
}
if(!$imported){$ad=new Ad_Code(); $ad->import_settings($code);}
return $ad;
}
function validate_name($name,$network=false){
global $_adsensem,$_adsensem_networks;
$name=sanitize_title($name);
if($name==''){
if($network){ $base=$_adsensem_networks[$network]['shortname']; }
else { $base='ad'; }
} else { $base=$name; }
$a=0;
while (isset($_adsensem['ads'][$name]) || ($name=='')){
$a++; $name=$base . '-' . $a;
}
return $name;
}
/*
PROCESS ADMIN/EDITING SUBMISSION
Takes submission from the admin Manage ads area and processes it to save results, import code & update
*/
/* Define and manage AdSense ad blocks for your Wordpress setup */
function admin_manage() {
// Get our options and see if we're handling a form submission.
global $_adsensem, $_adsensem_networks;
$update_adsensem=false;
;
/* Submissions from the manage ads listing at the top of the page */
//if ( $_POST['adsensem-submit']=='manage' ) {
switch ($_POST['adsensem-mode'].':'.$_POST['adsensem-action']){
case 'manage:copy unit':
//Copy selected advert
$copyto=adsensem_admin::validate_name($_POST['adsensem-action-target']);
$_adsensem['ads'][$copyto]=adsensem_clone($_adsensem['ads'][$_POST['adsensem-action-target']]); //clone() php4 hack
$_adsensem['ads'][$copyto]->name=$copyto; //update internal name reference
$_adsensem['ads']=adsensem_admin::sort_ads_by_network($_adsensem['ads']);
$update_adsensem=true;
break;
case 'manage:delete unit':
//Delete selected advert
if($_POST['adsensem-action-target']!=$_adsensem['default-ad']){
unset($_adsensem['ads'][$_POST['adsensem-action-target']]);
$update_adsensem=true;
}
break;
case 'manage:set default':
//Set selected advert as default
$_adsensem['default-ad']=$_POST['adsensem-default-name'];
$update_adsensem=true;
break;
case 'save:edit new':
$name=adsensem_admin::validate_name($_POST['adsensem-name']);
$_adsensem['ads'][$name] = new $_POST['adsensem-action-target']; //temporary to access network-specific functions
$_adsensem['ads'][$name]->name=$name; //Update internal name reference (always, to ensure accuracy)
$_adsensem['ads'][$name]->save_settings();
$_POST['adsensem-mode']='manage';
$_POST['adsensem-action']='';
$update_adsensem=true;
break;
case 'save:edit unit':
case 'apply:edit unit':
/* Changing the name of an Ad, copy and delete old */
if($_POST['adsensem-name']!=$_POST['adsensem-name-old']){
$name=adsensem_admin::validate_name($_POST['adsensem-name']);
$_adsensem['ads'][$name]=adsensem_clone($_adsensem['ads'][$_POST['adsensem-name-old']]);
//$_adsensem['ads'][$name]->name=$name; //Update object-held name
unset($_adsensem['ads'][$_POST['adsensem-name-old']]);
/* We can now use the new $name from this point forward, lovely */
/* Update default if neccessary */
if($_adsensem['default-ad']==$_POST['adsensem-name-old']){$_adsensem['default-ad']=$name;}
$_adsensem['ads'][$name]->name=$name; //Update internal name reference (always, to ensure accuracy)
} else {$name=stripslashes($_POST['adsensem-name']);}
$_adsensem['ads'][$name]->save_settings();
if($_POST['adsensem-mode']!=='apply'){//Only for Save (Apply leave as is, return to edit page)
$_POST['adsensem-mode']='manage';
$_POST['adsensem-action']='';}
$update_adsensem=true;
break;
case 'save:restore defaults':
$temp = new $_POST['adsensem-action-target']; //temporary to access network-specific functions
$temp->reset_defaults();
$_POST['adsensem-mode']='edit';
$_POST['adsensem-action']='edit defaults';
$update_adsensem=true;
break;
case 'save:edit defaults':
$temp = new $_POST['adsensem-action-target']; //temporary to access network-specific functions
$temp->save_settings();
$_adsensem['defaults'][$_POST['adsensem-action-target']]=$temp->p;
$_POST['adsensem-mode']='manage';
$_POST['adsensem-action']='';
$update_adsensem=true;
break;
case 'import:edit code':
$ad=new Ad_Code;
$ad->save_settings(); //adsensem_admin::import_ad($_POST['adsensem-code']);
$name=adsensem_admin::validate_name($_POST['adsensem-name'],$ad->network());
$_adsensem['ads'][$name]=$ad;
$_adsensem['ads'][$name]->name=$name;
//Forces imported unit into the edit mode for changes
$_POST['adsensem-action']='edit unit';
$_POST['adsensem-action-target']=$name;
$update_adsensem=true; $sort_adsensem=true;
break;
case 'import:edit unit':
$ad=adsensem_admin::import_ad($_POST['adsensem-code']);
$name=adsensem_admin::validate_name($_POST['adsensem-name'],$ad->network());
$_adsensem['ads'][$name]=$ad;
$_adsensem['ads'][$name]->name=$name;
//Ensure that account-id passed to defaults when it does not match current submission
//if($_adsensem['defaults'][$ad->network()]['account-id']!==$ad->p['account-id']){$_adsensem['defaults'][$ad->network()]['account-id']=$ad->p['account-id'];}
//Forces imported unit into the edit mode for changes
$_POST['adsensem-action']='edit unit';
$_POST['adsensem-action-target']=$name;
$update_adsensem=true;
break;
case 'import:edit defaults':
$ad=adsensem_admin::import_ad($_POST['adsensem-code']);
if($ad->network=='Ad_Code'){$_POST['adsensem-action']=''; break;}
$_adsensem['defaults'][$ad->network()]=$ad->p;
//Forces imported unit into the edit mode for changes, to skip change mode to 'manage';
$_POST['adsensem-action']='edit defaults';
$_POST['adsensem-action-target']=$ad->network();
$update_adsensem=true;
break;
case 'manage:edit unit': //Pass through stuff to switch modes between pages.
case 'manage:edit defaults':
case 'import:edit new':
$_POST['adsensem-mode']='edit';
break;
default:
$_POST['adsensem-mode']='manage';
$_POST['adsensem-action']='';
} //End switch cases
//Set default ad if it is currently incorrect and there is a valid ad object available
if( (!is_object($_adsensem['ads'][$_adsensem['default-ad']]) ) && ( count($_adsensem['ads']>0) ) ){
$_adsensem['default-ad']=key($_adsensem['ads']);
$update_adsensem==true;
}
if($update_adsensem){
$_adsensem['ads']=adsensem_admin::sort_ads_by_network($_adsensem['ads']);
update_option('plugin_adsensem', $_adsensem);
}
if($_POST['adsensem-mode']=='manage'){ //Managing (i.e. not Importing, or editing)
//If not in edit mode, output the ad listing/tables
////if((sizeof($_adsensem['ads'])==false) || (sizeof($_adsensem['ads'])==0) ){
adsensem_admin::admin_manage_table(); //Only if ads available to list
// }
adsensem_admin::admin_manage_create();
} else {
//If in edit mode, output the editing form (create, edit, defaults, etc.)
adsensem_admin::admin_manage_edit();
}
}
/*
MAIN INTERFACE FUNCTIONS
Output the HTML for the main user interface in admin mode - including managing ads and initiating edit forms
*/
function admin_manage_table(){
// Get our options and see if we're handling a form submission.
global $_adsensem, $_adsensem_networks;
?>
Manage Ads
AdSense Manager Options
AdSense Manager has been redesigned to be as simple to use as possible. To get you started, the instructions below
will guide you through the process of adding your first ad to AdSense Manager. Once you've created the first one
you can simply repeat the process to add as many ads as you like!
Getting Started
Or use .
Create a new ad unit using your network's ad online management system.
Copy the ad code generated (Edit » Copy, from within your browser)