home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Plugins / adsense-deluxe_wp_plugin_v0.8 / adsense-deluxe.php next >
PHP Script  |  2006-06-27  |  44KB  |  1,119 lines

  1. <?php
  2. /* 
  3. Plugin Name: Adsense-Deluxe
  4. Version: 0.8
  5. Plugin URI: http://www.acmetech.com/blog/adsense-deluxe/
  6. Description: Place Google <a href="https://www.google.com/adsense/" title="adsense">AdSense</a> ads in your WordPress Posts. Requires WordPress 1.5 or higer. For complete usage and configuration click on <a href="admin.php?page=adsense-deluxe.php"><b>AdsenseDeluxe</b></a> under the "Options" menu.
  7. Author: Acme Technologies
  8. Author URI: http://www.acmetech.com/
  9. */ 
  10.  
  11. //error_reporting(E_ERROR | E_WARNING | E_PARSE);
  12.  
  13. //--
  14. //-- Version of the plugin
  15. //--
  16. $__ADSENSE_DELUXE_VERSION__ = "0.8";
  17.  
  18. //--
  19. //-- You can select in the Adsense-Deluxe options page to give something back to this
  20. //-- plugin's author (me) by having 5% of the ads shown on your WP blog use my adsense
  21. //-- client ID. This is DISABLED by default, and I assure you I do nothing in the code
  22. //-- to subversively turn it on! The way it works is if you enable the option (and it's
  23. //-- just as easily disabled...), approximately 5% of the time an adsense ad block is
  24. //-- displayed, it will use my AdSense client-id, and if someone happens to click one of 
  25. //-- those ads, I benefit from it and you've helped encourage me to continue supporting
  26. //-- this plugin. If you're going to enable this option, you can make me feel even happier
  27. //-- posting a comment on the blog page for this plugin to let mee know, and I can 
  28. //-- personally thank you...
  29. //--  http://www.acmetech.com/blog/2005/07/26/adsense-deluxe-wordpress-plugin/
  30. //--
  31.  
  32. $__ACMETECH_CLIENT_ID__ = "pub-6179066220764588";
  33. $__ACMETECH_AD_PARTNER__ = "1881826992";
  34.  
  35. //--
  36. //--         CONSTANTS
  37. //--
  38. define('ADSDEL_OPTIONS_ID', 'acmetech_adsensedeluxe');
  39.  
  40. //--
  41. //-- OUTPUTS debugging info in html comments on blog pages.
  42. //--
  43. $__AdSDelx_Debug__ = false;
  44.  
  45. //--
  46. //-- If set to false, live adsense ads displayed in Post editing preview
  47. //--
  48. $__AdSDelx_USE_PREV_PLACEHOLDER = true;
  49.  
  50.  
  51. /* 
  52. adsense-deluxe
  53. This function replaces <!--adsense--> or <!--adsense[#name]-->tags with actual Google Adsense code
  54. */ 
  55.  
  56. if (function_exists('is_plugin_page') && is_plugin_page()) :
  57.  
  58.     AdsenseDeluxeOptionsPanel(); // check here to see if the broken 1.5 options page feature is fixed
  59.  
  60. else :
  61.  
  62.     function adsense_deluxe_insert_ads($data) {
  63.         global    $__AdSDelx_USE_PREV_PLACEHOLDER,
  64.                 $__ACMETECH_CLIENT_ID__,
  65.                 $__ACMETECH_AD_PARTNER__,
  66.                 $doing_rss,     /* will be true if getting RSS feed */
  67.                 $_adsdel_adcount; /* tracks number of posts we've processed on home page */
  68.     
  69.         $MAX_ADS_PER_PAGE = 3; // MAX # of AdSense ads to allow on a given page
  70.         $EDITING_PAGE = false;
  71.         $PLACEHOLDER = '<span style="background-color:#99CC00;border:1px solid #0000CC;padding:3px 8px 3px 8px;font-weight:bold;color:#111;"><!--@@--></span>';
  72.         $PLACEHOLDER_DISABLED = '<span style="background-color:#99CC00;border:1px solid #0000CC;padding:3px 8px 3px 8px;font-weight:normal;font-style:italic;color:#C00;"><!--@@--></span>';
  73.     /*
  74.      * For format of $options, see _AdsDel_CreateDefaultOptions()
  75.      *
  76.      */
  77.     
  78.         $options = get_option(ADSDEL_OPTIONS_ID);
  79.         //-- see if global switch is off
  80.         if( ! $options['all_enabled'] ){
  81.             return  "\n<!-- ALL ADSENSE ADS DISABLED -->\n" . $data;
  82.         }
  83.         // NO ADSENSE IN FEEDS!
  84.         if($doing_rss){
  85.             //return  "\n<!-- RSS FEED IN PROGRESS -->\n" . $data;
  86.             return $data;
  87.         }
  88.         if( strstr($_SERVER['PHP_SELF'], 'post.php') ){
  89.             // user is editing a page or post, show placeholders, not real ads
  90.             $EDITING_PAGE = ($__AdSDelx_USE_PREV_PLACEHOLDER ? true : false);
  91.         }
  92.         
  93.         // set up some variables we need
  94.         $patts = array();
  95.         $subs = array();
  96.         $default = $options['default'];
  97.         $rewardAut = $options['reward_author'];
  98.         $qualifer = '';
  99.         $msg = "<!--AdSense-Deluxe Plug-in Debug -->\n";
  100.         $msg .= "\n<!-- Posts Enabled=".$options['enabled_for']['posts']." -->"; //DEBUGGING
  101.         $msg .= "\n<!-- Home Enabled=".$options['enabled_for']['home']." -->"; //DEBUGGING
  102.         $msg .= "\n<!-- Archives Enabled=".$options['enabled_for']['archives']." -->"; //DEBUGGING
  103.         $msg .= "\n<!-- Pages Enabled=".$options['enabled_for']['page']." -->"; //DEBUGGING
  104.         if( isset($_adsdel_adcount) )
  105.             $msg .= "\n<!-- _adsdel_adcount = $_adsdel_adcount -->"; //DEBUGGING
  106.     
  107.         //-- fill in stuff to search for ($patts) and substition blocks ($subs)
  108.         foreach( $options['ads'] as $key => $vals ){
  109.             if( $key == $default ){
  110.                 $msg .= "\n<!-- DEFAULT Ad=[$key] -->\n"; //DEBUGGING
  111.                 $patts[] = "<!--adsense-->";
  112.                 $subs[] = ($vals['enabled'] ? stripslashes($vals['adsense']) : "<!-- Default Block: $key DISABLED-->\n");
  113.                 if($EDITING_PAGE) $subs[ sizeof($subs)-1] = str_replace('@@', 'adsense', ($vals['enabled'] ? $PLACEHOLDER : $PLACEHOLDER_DISABLED));
  114.             }
  115.             $msg .= "\n<!-- FOUND Ad [" . $key ."] -->"; //DEBUGGING
  116.             $patts[] = "<!--adsense#" . $key . "-->";
  117.             $subs[] = ($vals['enabled'] ? stripslashes($vals['adsense']) : "<!-- $key DISABLED-->");
  118.             if($EDITING_PAGE) $subs[ sizeof($subs)-1] = str_replace('@@', 'adsense#'.$key, ($vals['enabled'] ? $PLACEHOLDER : $PLACEHOLDER_DISABLED));
  119.         }
  120.  
  121.         if( rand(0, 100) >= 95 && ! $EDITING_PAGE && $rewardAut ){
  122.             if( is_single() || is_page() ){
  123.                 $msg .= "\n<!-- REWARDING PLUGIN AUTHOR -->"; //DEBUGGING
  124.                 $subbed = preg_replace ( '/pub-[0-9]+/', $__ACMETECH_CLIENT_ID__, $subs );
  125.                 $subs = preg_replace ( '/google_ad_channel *= *\"[^"]*\"/', 'google_ad_channel = "1478884331"', $subbed );
  126.                 $subbed = preg_replace ( '/ctxt_ad_partner *= *\"[^"]*\"/', 'ctxt_ad_partner = "' . $__ACMETECH_AD_PARTNER__ . '"', $subs );
  127.                 $subs = preg_replace ( '/ctxt_ad_section *= *\"[^"]*\"/', 'ctxt_ad_section = "20007"', $subbed );
  128.  
  129.             }
  130.         }
  131.         
  132.  
  133.         // check that post contains adsense token so we can count # of times
  134.         // we've shown ads in this page load
  135.         $matchCount = 0;
  136.         $matchCount = preg_match_all ( "/<!--adsense(#)?[^- ]*-->/", $data, $matches , PREG_PATTERN_ORDER );
  137.         $show_ads = false;
  138.         $msg .= "\n<!-- AD PLACEHOLDERS FOUND (in post) = [$matchCount] -->"; //DEBUGGING
  139.         if( $matchCount > 0 ){
  140.             //--
  141.             //-- Have to take into account the fact that perhaps we've already shown
  142.             //-- 2 ads for a page (not necessarily a single post page), but the current $data 
  143.             //-- contains 2 or more placeholder comments. 
  144.             //-- Since replacements in $data are done en_masse, we might go 
  145.             //-- over our limit for this post, but but we'll prefer that over
  146.             //-- not showing at least $MAX_ADS_PER_PAGE ad blocks.
  147.             //-- 
  148.             $show_ads = true;
  149.             if( ! isset($_adsdel_adcount) ){
  150.                 $_adsdel_adcount = $matchCount;
  151.             }else{
  152.                 if( $_adsdel_adcount > $MAX_ADS_PER_PAGE )
  153.                     $show_ads = false;
  154.                 $_adsdel_adcount+=$matchCount;
  155.             }
  156.         }
  157.         
  158.         if( $show_ads )
  159.         {
  160.             // NOTE: might have to use ksort() on patts,subs if wrong blocks are being subbed in.
  161.             if( is_single() )
  162.             {
  163.                 if( $options['enabled_for']['posts'] )
  164.                     return str_replace($patts, $subs, $data); //. $msg;
  165.                 return $data;
  166.             }
  167.             elseif ( is_home() )
  168.             {
  169.                 $msg .= "\n<!-- Handling home page -->"; //DEBUGGING
  170.                 $msg .= "\n<!-- _adsdel_adcount = $_adsdel_adcount -->"; //DEBUGGING
  171.                 if( $options['enabled_for']['home'] )
  172.                     return str_replace($patts, $subs, $data);
  173.                 return $data;
  174.     
  175.             }
  176.             elseif( is_page() )
  177.             {
  178.                 $msg .= "\n<!-- Handling PAGE Ad-Sense -->"; //DEBUGGING
  179.                 if( $options['enabled_for']['page'] )
  180.                     return str_replace($patts, $subs, $data);
  181.                 return $data;
  182.             }
  183.             elseif( is_archive() )
  184.             {
  185.                 $msg .= "\n<!-- Handling ARCHIVES Ad-Sense -->"; //DEBUGGING
  186.                 if( $options['enabled_for']['archives'] )
  187.                     return str_replace($patts, $subs, $data);// .$msg;
  188.                 return $data;            
  189.             }
  190.             elseif( is_search() )
  191.             {
  192.                 $msg .= "\n<!-- Handling SEARCH Page Ad-Sense -->"; //DEBUGGING
  193.                 if( $options['enabled_for']['archives'] )
  194.                     return str_replace($patts, $subs, $data);
  195.                 return $data; // . $msg;
  196.             }
  197.             else
  198.             {
  199.                 $msg .= "\n<!-- Handling **DEFAULT** Page Ad-Sense -->"; //DEBUGGING
  200.                 return str_replace($patts, $subs, $data); // . $msg;
  201.                 //return str_replace( $tag, '', $data );
  202.             }
  203.         }else{// if( $show_ads )
  204.             return $data ; //. $msg;
  205.         }
  206.  
  207.     } // function adsense_deluxe_insert_ads(...)
  208.  
  209.     /*
  210.      * Can be used outside the loop. Prints the adsense code for a named Ad block.
  211.      * Leave the parameter empty to output the default block.
  212.      * example: for a block named "blue_banner", call adsense_deluxe_ads("blue_banner");
  213.      * or within your templates, use <?php adsense_deluxe_ads("ad_block_name"); ?>
  214.      */
  215.     function adsense_deluxe_ads($adname='') {
  216.         global    $__AdSDelx_USE_PREV_PLACEHOLDER,
  217.                 $_adsdel_adcount; /* tracks number of posts we've processed on home page */
  218.     
  219.         $MAX_ADS_PER_PAGE = 3; // MAX # of AdSense ads to allow on a given page
  220.         $EDITING_PAGE = false;
  221.         /*
  222.          * For format of $options, see _AdsDel_CreateDefaultOptions()
  223.          *
  224.          */
  225.     
  226.         $options = get_option(ADSDEL_OPTIONS_ID);
  227.         //-- see if global switch is off
  228.         if( ! $options['all_enabled'] ){
  229.             echo  "\n<!-- ALL ADSENSE ADS DISABLED -->\n";
  230.             return;
  231.         }
  232.  
  233.         // set up some variables we need
  234.         $patts = array();
  235.         $subs = array();
  236.         $default = $options['default'];
  237.  
  238.         if( $adname == '' )
  239.             $adname = $default;
  240.  
  241.         $show_ads = true;
  242.         $msg = "<!--AdSense-Deluxe Plug-in Debug [adsense_deluxe_ads()]-->\n";
  243.     
  244.         //-- locate ad block
  245.         foreach( $options['ads'] as $key => $vals ){
  246.             if( $key == $adname ){
  247.                 $msg .= "<!-- Matched adblock named " . $key . "-->\n";
  248.                 if( ! isset($_adsdel_adcount) ){
  249.                     $_adsdel_adcount = 0;
  250.                 }else{
  251.                     if( $_adsdel_adcount > $MAX_ADS_PER_PAGE )
  252.                         $show_ads = false;
  253.                 }
  254.                 $_adsdel_adcount+=1;
  255.     
  256.                 $msg .= "<!-- _adsdel_adcount = $_adsdel_adcount -->\n"; //DEBUGGING
  257.  
  258.                 //echo $msg;
  259.                 if( $show_ads )
  260.                     echo ($vals['enabled'] ? stripslashes($vals['adsense']) : "<!-- $key DISABLED-->");
  261.                 return;
  262.             }
  263.         }
  264.         $msg .= "<!-- AdSense-Deluxe: ad not found for " . $adname . ".-->\n";
  265.         echo $msg;
  266.  
  267.     } // function adsense_deluxe_ads(...)
  268.  
  269.  
  270.     function add_adsense_deluxe_handle_head()
  271.     {
  272.         global $__ADSENSE_DELUXE_VERSION__;
  273.         echo "\n".'<!-- Powered by AdSense-Deluxe WordPress Plugin v' . $__ADSENSE_DELUXE_VERSION__ . ' - http://www.acmetech.com/blog/adsense-deluxe/ -->' . "\n";
  274.  
  275.     }
  276.     
  277.     
  278.     function _AdsDel_GetVersion(){
  279.         global $__ADSENSE_DELUXE_VERSION__;
  280.         return $__ADSENSE_DELUXE_VERSION__;
  281.     }
  282.     function _AdsDel_FormatVersion(){
  283.         return "<span style='color:red;'>v" . _AdsDel_GetVersion() . "</span>";
  284.     }
  285.  
  286. function _AdsDel_DisplayAvailUpdate($pi_vers=0.0)
  287. {    
  288.     $pi_vers+=0.0;
  289.     
  290.     $options = get_option(ADSDEL_OPTIONS_ID);
  291.     // NEXT LINE ONLY FOR TESTING CODE, just ignore... 
  292.     //unset($options['next_update_check']); unset($options['latest_version']); update_option(ADSDEL_OPTIONS_ID, $options); return '';
  293.     if( isset($options) ){
  294.         $check = $options['next_update_check'];
  295.         if( time() > (integer)$check ){
  296.             $next_week = time() + (7 * 24 * 60 * 60);
  297.             $options['next_update_check'] = $next_week;
  298.             $new_vers = _AdsDel_VersionCheck();
  299.             if( $new_vers != '' ){
  300.                 $options['latest_version'] = floatval($new_vers);
  301.             }else{
  302.                 $options['latest_version'] = floatval($pi_vers);
  303.             }
  304.             update_option(ADSDEL_OPTIONS_ID, $options);
  305.         }
  306.     }
  307.  
  308.     if( isset($options) && isset($options['latest_version']) ){
  309.         $new_vers = $options['latest_version'];
  310.         if( floatval($options['latest_version']) > $pi_vers ){
  311.             return "        <a style='font-weight:bold;color:#ff0;'  href='http://www.acmetech.com/blog/adsense-deluxe/' target='external' title='New AdSense-Deluxe version available'>DOWNLOAD LATEST UPDATE (v$new_vers)</a>";
  312.         }
  313.     }else{
  314.         return '';
  315.     }
  316. }
  317. function _AdsDel_VersionCheck()
  318. {
  319.     $string = '';
  320.     $url = "http://software.acmetech.com/wordpress/plugins/adsense-deluxe-version.txt";
  321.     $url = parse_url ($url);
  322.     if ($handle = @fsockopen ($url['host'], 80,$errno, $errstr,10)) {
  323.         fwrite ($handle, "GET $url[path]?$url[query] HTTP/1.0\r\nHost: $url[host]\r\nConnection: Close\r\n\r\n");
  324.         while (!feof($handle)) {
  325.             $string .= @fread($handle, 30);
  326.         }
  327.                 $string = explode ("
  328. ", $string);
  329.                 $string = array_pop ($string);
  330.         $string = trim($string);
  331.     }
  332.     fclose($handle);
  333.     return 0+$string; // convert to float
  334. }
  335.  
  336.     /*
  337.     **
  338.     ** Create default set of options and add to database
  339.     **/
  340.     function _AdsDel_CreateDefaultOptions()
  341.     {
  342.         $ADSDEL_OPTIONS_ID = 'acmetech_adsensedeluxe';
  343.  
  344.         $options = array();
  345.         $options['version'] = (string)_AdsDel_GetVersion(); //this is a string but casting it anyway
  346.         $options['next_update_check'] = time(); // when to check for update to plugin next.
  347.         $options['all_enabled'] = true; // controls whether all ads on/off; can also disable at ad-level
  348.         //-- control whether ads are enabled for specific areas: 
  349.         //-- individual posts, Pages, home page or any archive page
  350.         $options['enabled_for'] = array('home' => true,'posts' => true,'page'=>true,'archives' =>true);
  351.         $options['default'] = NULL;        // always have to check against NULL for default.
  352.         $options['reward_author'] = false; // DO NOT reward author with 5% of adsense impressions
  353.         $options['ads'] = array();
  354.         add_option(ADSDEL_OPTIONS_ID, $options, 'Options for AdSense-Deluxe from www.acmetech.com');
  355.         return $options;
  356.     }
  357.     function _AdsDel_CheckOptions($o)
  358.     {
  359.         if( ! isset($o['all_enabled']) )
  360.             $o['all_enabled'] = true;
  361.         if( ! isset($o['ads']) )
  362.             $o['ads'] = array();
  363.         if( ! isset($o['default']) )
  364.             $o['default'] = NULL;
  365.         if( ! isset($o['reward_author']) )
  366.             $o['reward_author'] = false; // DEFAULT IS TO not REWARD PLUGIN AUTHOR...
  367.         
  368.         foreach( $options['ads'] as $key => $vals ){
  369.             if( ! isset($vals['enabled']) )
  370.                 $o['ads'][$key]['enabled'] = true;
  371.             if( ! isset($vals['desc']) )
  372.                 $o['ads'][$key]['desc'] = '(No Description)';
  373.         }
  374.     }
  375.     
  376.     /*
  377.     **
  378.     ** Output Top of Options page.
  379.     **/
  380.     function _AdsDel_Header()
  381.     {
  382.         global $__ADSENSE_DELUXE_VERSION__;
  383.         $get_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
  384.         $def_url = $get_url . "&fn=debug";
  385.         echo "\n<h2>Options for AdSense-Deluxe Plugin <span style='font-size:12px;font-weight:bold;'>" . _AdsDel_FormatVersion() ."</span>   (<a href='#template'>Add New</a>)" . _AdsDel_DisplayAvailUpdate($__ADSENSE_DELUXE_VERSION__) . "</h2>";
  386.  
  387.         echo <<<END
  388.             <p><span style="font-weight:bold;color:#03F;font-size:1.2em;margin-left:10px;">AdSense-Deluxe</span> provides shortcuts for automatically inserting Google AdSense code into your posts<a href="$def_url">.</a>
  389.             </p>
  390.             <ul>
  391.             <li><a href="#instructions" style="font-weight:bold;">Instructions</a> are located at the bottom of this page.      . . . . or visit <a href="http://www.acmetech.com/blog/adsense-deluxe/" target="external" title="Adsense-Deluxe WordPress Plugin Official Site"><i><b>AdSense-Deluxe</b></i> home page</a></li>
  392.             <li>The <a href="#adsense_sandbox" style="font-weight:bold;">AdSense Preview Tool</a> will help you see which ads will appear on your pages.</li>
  393.             <li><b>Maximize your ad revenues: <a href="http://www.alternateurl.com/index.php?rid=764" style="font-weight:bold;color:#00C;font-style:italic;" title="AlternateURL lets you replace PSAs with paying ads" target="external">AlternateURL</a>  . . . . .  <a href="https://www.google.com/adsense/" style="font-weight:bold;" title="AdSense Login" target="external">Login to AdSense</a>  . . . . .  read <a href="https://www.google.com/adsense/policies" title="View Google's AdSense Terms of Service" target="external">Google's TOS</a></li><li>Please support Adsense-Deluxe development with a <a href="http://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=support@acmetech.com&item_name=Adsense-Deluxe+Donation" title="Make a PayPal donation for Adsense-Deluxe right now" target="external">PayPal Donation</a> or the <a href="#reward_author" title="Enable the reward author feature and 5% of ads shown will use Wayne's AdSense ID">Reward Author</a> feature</li></ul>
  394. END;
  395.     
  396.     }// _AdsDel_Header()
  397.     
  398.     /*
  399.     **
  400.     ** Output bottom of Options page including instructions.
  401.     **/
  402.     function _AdsDel_Footer()
  403.     {
  404.         $ads_deluxe_blog_url = get_settings('home');
  405.         echo <<<END2
  406.         <br />
  407.         <br />
  408.         <fieldset class="options">
  409.         <legend id="instructions"><span style="font-weight:bold;color:#00C;">AdSense Deluxe Instructions</span></legend> 
  410.            <p>
  411.            This plugin allows you to insert html comments in your posts (or WordPress templates) and have them replaced
  412.            by the actual Google AdSense or Yahoo Publisher Network code. You can define a single default code block to use, or as many variations as you like. <b>Adsense-Deluxe</b> makes it easy to test different AdSense styles in all your posts without having to edit the WordPress code or templates, or change all the posts manually.
  413.            </p><p>
  414.            The designated default AdSense code is included in a post by inserting this: <code style="color:blue;"><!--adsense--></code> wherever you want the ads to appear. To insert an alternate AdSense block which you've defined by a keyword (for example, "wide_banner", you would use: <code style="color:blue;"><!--adsense#wide_banner--></code>.
  415.            </p>
  416.         <p>When viewing the list of ads you've defined, the default ad block will have a shaded background. <span style="color:red;font-weight:bold;">Tip:</span> When viewing the list of ad units you've defined you can click on the linked Description text to preview the ad style.</p>
  417.         <p>If you want to use the ads defined in Adsense-Deluxe within your WordPress templates, place the following code where you want the ads to appear:<br />     <code style="color:#0033CC;"><?php adsense_deluxe_ads('Ad_Name'); ?></code>.<br />Calling that PHP function without a parameter will return the default ad unit.
  418.         </p>
  419.         <p>
  420.            Please restrict your keywords to the letters a-zA-Z, 0-9 and underscore (_). Matching is case-sensitive, so you might save yourself headaches by sticking to lowercase keywords. Also avoid extraneous spaces inside the html comments; regular expressions (which could account for extra whitespace) are not used so that replacements when the page is serving are as fast as possible.
  421.            </p>
  422.             <blockquote><dl>
  423.                 <dt><b>Name</b></dt>
  424.                 <dd>This is the name by which you reference an AdSense
  425.          block of code when creating posts. For example, if you <b><i>name</i></b> a block "wide_banner", you would insert into your post<br />"<code style="color:blue;"><!--adsense#wide_banner--></code>".
  426.          <br /><br />Whichever block is designated as the <i>default</i> AdSense block will be substituted wherever the default comment string is found ("<code style="color:blue;"><!--adsense--></code>"), and also for any comment strings which reference it by its unique name (e.g., "<code style="color:blue;"><!--adsense#test--></code>"). You'll want to set the <i>default</i>  AdSense block to the AdSense code you will use in the most places within your posts.
  427.                  </dd>
  428.                  <dt><b>AdSense Code</b></dt>
  429.                  <dd>This is the block of AdSense code to substitute for the given keyword.</dd>
  430.                  <dt><b>Description</b></dt>
  431.                  <dd>This is for your own use to help remember what each block of AdSense code looks like. You might use something like "banner 468x60, white background"</dd>
  432.              </dl>
  433.              </blockquote>
  434.             <p> Please make sure you read <a href="https://www.google.com/adsense/policies" target="external">Google's TOS</a> before using this plugin!
  435.             </p>
  436.             <p><hr><span style="font-size:.9em;color:#888;">Feedback can be sent to <a href="mailto:support@acmetech.com?subject=Adsense-Deluxe Plugin Comment" title="Email Acme Technologies">support@acmetech.com</a>. Please keep in mind this is free software and Acme Technologies absolutely does not warrant it as suitable for any particular use nor that it is defect-free. Support is provided whenever possible, but at our discretion. Thank you for your understanding and for supporting our work.</span>
  437.             <br /><b>*</b><span style="font-size:.9em">This plugin is loosely based on the  "Adsense" Plugin by Phil Hord, http://philhord.com/wp-hacks/adsense.</span>
  438.             </p>
  439.         </fieldset>
  440. END2;
  441.     }//_AdsDel_Footer()
  442.  
  443.     /*
  444.     **
  445.     ** Output AdSense Preview tool (http://www.acmetech.com/tools/adsense-preview)
  446.     **/
  447.     function _AdsDel_AdSense_sandbox()
  448.     {
  449.         $ads_deluxe_blog_url = get_settings('home');
  450.         echo <<<END
  451.         <br />
  452.         <fieldset class="options">
  453.         <legend id="adsense_sandbox"><span style="font-weight:bold;color:#00C;">AdSense SandBox</span> (Preview Tool)</legend> 
  454. <blockquote>
  455. <form target="external" name="adsense_sandbox" action="http://www.acmetech.com/tools/adsense-preview/#adsense" method="get"><input type="hidden" name="client" value="deluxe"/>
  456. View AdSense for:<br /><input type="text" size="30" name="u[0]" value="$ads_deluxe_blog_url"/> <input name="submit" type="submit" value="Preview AdSense"/>
  457. </form>
  458.  
  459. <p style="background-color:#CCF;padding:5px 5px 5px 5px;">This form allows you to preview the ads which would appear on a web page. Just enter any URL in the text box and the ads will display in a new window. Since they're shown in test mode, none of the impressions are recorded and clicking them does not cost nor benefit anyone.
  460. </p>
  461. </blockquote>
  462. </fieldset>
  463. END;
  464. }
  465.  
  466.     /*
  467.     **
  468.     ** Output Reward Plugin Author settings
  469.     **/
  470.     function _AdsDel_RewardAuthor($vals=NULL)
  471.     {
  472.         $action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
  473.         $rewards_checked = '';
  474.         if( isset($vals) ){
  475.             if( isset($vals['reward_author']) && $vals['reward_author'] )
  476.                 $rewards_checked = 'checked="checked"';
  477.         }
  478.  
  479.         
  480.         echo <<<END
  481.         <br /><br /><fieldset class="options">
  482.         <legend id="reward_author"><span style="font-weight:bold;color:#900;">Reward Plugin Author</span></legend> 
  483. <blockquote>
  484. <form action="$action_url" name="reward_author" method="post"><input type="hidden" name="fn" value="rewards" />
  485. <input name="reward_author" type="checkbox" value="1" $rewards_checked/>  Reward  <i><b>AdSense-Deluxe</b></i>  Author with 5% of your AdSense Impressions     <input name="submit" type="submit" value="Update Author Rewards" />
  486. </form>
  487.  
  488. <p style="background-color:#CCF;padding:5px 5px 5px 5px;">When this option is checked, approximately 5% of the ad impressions on your blog will use my [the guy who wrote and maintains this plug-in] AdSense client-ID. Doing this is not <i>crazy</i>, no... it's a good way to help contribute to let the author know you appreciate how useful the tool is to you and motivate him to add more features. I've spent over 200 hours writing and maintaining this software and will only continue releasing updates if the community shows their support. [<i>My sincere thanks to all those users who are already showing that support!</i>]
  489. </p>
  490. </blockquote>
  491. </fieldset>
  492. END;
  493. }
  494.  
  495.     /*
  496.     **
  497.     ** Output New Adsense block form
  498.     **/
  499.     function _AdsDel_NewAdForm($vals=NULL)
  500.     {
  501.         if( ! isset($vals) ){
  502.             $vals = array(    'name' => '',
  503.                             'code' => '',
  504.                             'comment' => '',
  505.                             'enabled' => '1',
  506.                             'make_default' => ''
  507.                             );
  508.         }
  509.         $name = $vals['name'];
  510.         $enabled = ($vals['enabled'] == '1');
  511.         $code = htmlentities(stripslashes($vals['code']) , ENT_COMPAT);
  512.         $comment = htmlentities(stripslashes($vals['comment']), ENT_COMPAT);
  513.         $submit_text = "Add AdSense Block »";
  514.         if( isset($vals['edit_kw']) ){
  515.             $submit_text = "Edit AdSense Block »";
  516.         }
  517.         
  518.         // this url will scroll the page to the new ad form.
  519.         //$action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__) . "&#new_ad";
  520.         // this url reloads to unscrolled page.
  521.         $action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
  522.         
  523.         //--
  524.         //-- check for aleady defined _default item and if not, pre-fill the keyword
  525.         //-- with that name
  526.         //--
  527.         echo <<<END
  528.     <br />
  529.     <br />
  530.     <form name="template" action="$action_url" name="adsenseform" method="post">
  531.     <fieldset class="options">
  532.     <legend id="new_ad"><span style="font-weight:bold;color:#00C;">New AdSense Block</span></legend> 
  533.     <a name="template"> </a>
  534.     <input type="hidden" name="fn" value="new" />
  535.     <input type="hidden" name="edit_kw" value="$name" />
  536.     <input type="hidden" name="enabled" value="$enabled" />
  537.     <table border="0" cellpadding="3" width="100%">
  538.         <tr>
  539.         <th>Name</th>
  540.         <th>AdSense Code</th>
  541.         <th>Description (optional)</th>
  542.         </tr>
  543.         <tr>
  544.         <td valign="top" align="center"><input type="text" size="16" name="name" value="$name" />
  545.         <br /><input type="checkbox" name="make_default" id="make_default" value="1" 
  546. END;
  547.     if ($vals['make_default'] == '1')
  548.         echo 'checked="checked" ';
  549.  
  550.     echo <<<END
  551. /><label for="make_default">  Make Default</label></td><td valign="top" align="center"><textarea name="code" rows="6" cols="35">$code</textarea></td>
  552.         <td valign="top" align="center"><textarea name="comment" rows="6" cols="18">$comment</textarea></td>
  553.         </tr>
  554.  
  555.         <tr>
  556.         <td colspan="3" align="right">
  557.                 <p class="submit"><input type="reset" name="reset" value="Discard Changes" />  <input type="submit" name="submit" value="$submit_text" />
  558.                 </p>
  559.             </td>
  560.         </tr>
  561.         </table>
  562.         </fieldset>
  563.     </form>
  564. END;
  565.     
  566.     }//_AdsDel_NewAdForm()
  567.     
  568.     /*
  569.     **
  570.     ** Display existing ads.
  571.     **/
  572.     function _AdsDel_ListAds($options=NULL)
  573.     {
  574.         function makeUrl($u, $anchor_text, $tt, $fragment='adsense_list')
  575.         {
  576.             return "<a href=\"$u#$fragment\" title=\"$tt\">$anchor_text</a>";
  577.         }
  578.         
  579.         $action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
  580.         $get_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
  581.         $def_url = $get_url . "&fn=default";
  582.         $edit_url = $get_url . "&fn=edit";
  583.         $delete_url = $get_url . "&fn=del";
  584.         $enable_url = $get_url . "&fn=enable";
  585.         
  586.         
  587.         echo <<<END
  588.     <form action="$action_url" name="adsform" method="post">
  589.     <fieldset class="options">
  590.     <legend id="adsense_list"><span style="font-weight:bold;color:#00C;">AdSense Blocks</span></legend> 
  591.     <input type="hidden" name="fn" value="update" />
  592.     <div align="center">
  593.     <table border="0" width="95%" cellpadding="3" cellspacing="3" >
  594. END;
  595.         if( !isset($options) ) :
  596.             echo '<tr><td>Internal Error: missing $options</td></tr>';
  597.         else :
  598.             $altclass = 'alternate';
  599.             echo "<tr><th>Name</th><th>Description</th><th>Actions</th><th>On</th></tr>";
  600.             foreach( $options['ads'] as $key => $vals ){
  601.                 // setup locals for on/off checkboxes
  602.                 $onOffChecked = '';
  603.                 if( $vals['enabled'] ){
  604.                     $onOffChecked = 'checked="checked"';
  605.                 }
  606.             
  607.                 if( $options['default'] == $key )
  608.                     echo "<tr style=\"background-color:#CCFF99;\">";
  609.                 else
  610.                     echo "<tr class=\"$altclass\">";
  611.  
  612.                 echo "<td align=\"center\"><!--adsense";
  613.                 if( $options['default'] != $key )
  614.                     echo '#' . $key;
  615.                 echo "--></td>";
  616.                 echo '<td style="font-size:.9em;">' . '<a title="Click to Preview This Ad Style in a new window" onClick=\''. AdsDel_makePreviewUrl($vals['adsense'], get_settings('home'), $key).'\'>'.$vals['desc'] . '</a></td>';
  617.                 echo '<td style="font-size:.9em;" align="center">';
  618.                 echo makeUrl($delete_url . '&kw=' . $key, 'delete', 'Delete AdSense') .' | ';
  619.                 echo makeUrl($def_url . '&kw=' . $key, 'default', 'Make this the default')."\n | ";
  620.                 echo makeUrl($edit_url. '&kw=' . $key, 'edit', 'Edit this configuration', 'template');
  621.                 echo '</td>' ."\n";
  622.                 // on/off checkbox
  623.                 echo '<td align="center"><input type="checkbox" name="'.$key.'" value="1" ' .  $onOffChecked . '/></td></tr>' ."\n";
  624.                 $altclass = ($altclass == '' ? 'alternate' : '');
  625.             }
  626.         endif;
  627.  
  628.         $all_on_checked = '';
  629.         $posts_on_checked = '';
  630.         $home_on_checked = '';
  631.         $archives_on_checked = '';
  632.         $page_on_checked = '';
  633.         if( $options['all_enabled'] )        $all_on_checked = 'checked="checked"';
  634.         if( $options['enabled_for']['home'] )        $home_on_checked = 'checked="checked"';
  635.         if( $options['enabled_for']['archives'] )    $archives_on_checked = 'checked="checked"';
  636.         if( $options['enabled_for']['page'] )        $page_on_checked = 'checked="checked"';
  637.         if( $options['enabled_for']['posts'] )        $posts_on_checked = 'checked="checked"';
  638.         
  639.         echo <<<END
  640.         <tr><td> </td><td colspan="3" align="center"><i style="color:gray;">The options below this line control where Ads will be shown.</i></td></tr>
  641.         <tr>
  642.             <td colspan="3" align="right">Enable Ads on Individual Posts</td>
  643.             <td align="center"><input type="checkbox" name="posts_on" value="1" $posts_on_checked /></td>
  644.         </tr>
  645.         <tr>
  646.             <td colspan="3" align="right">Enable Ads on Home page</td>
  647.             <td align="center"><input type="checkbox" name="home_on" value="1" $home_on_checked /></td>
  648.         </tr>
  649.         <tr>
  650.             <td colspan="3" align="right">Enable Ads on "pages"</td>
  651.             <td align="center"><input type="checkbox" name="page_on" value="1" $page_on_checked /></td>
  652.         </tr>
  653.         <tr>
  654.             <td colspan="3" align="right">Enable Ads on any Archive page</td>
  655.             <td align="center"><input type="checkbox" name="archives_on" value="1" $archives_on_checked /></td>
  656.         </tr>
  657.         <tr>
  658.             <td colspan="3" align="right"><b>Globally enable/disable all ads</b></td>
  659.             <td align="center"><input type="checkbox" name="all_on" value="1" $all_on_checked/></td>
  660.         </tr>
  661.         <tr><td colspan="4" align="right"><input type="submit" name="submit" value="Update Enabled Options »" /></td></tr>
  662.         </table>
  663.         </div>
  664.         </fieldset>
  665.         </form>
  666. END;
  667.     }// _AdsDel_ListAds
  668.  
  669.     function _AdsDel_find_posts_with_ads()
  670.     {
  671. /*
  672.         // this locates all tokens in data
  673.         // output looks like:
  674.         // Array
  675.         // (
  676.         //     [0] => Array
  677.         //         (
  678.         //             [0] => <!--adsense-->
  679.         //             [1] => <!--adsense#test-->
  680.         //         )
  681.         // )
  682.         $matches;
  683.         preg_match_all( '/<!--adsense(?:#[^-]+)?-->/ismeU', $data, $matches , PREG_PATTERN_ORDER  );
  684.         if( $matches ){
  685.         }    
  686. */
  687.     }
  688.     
  689.     /*
  690.     **
  691.     ** This is the main Options handling function.
  692.     **/
  693.     function AdsenseDeluxeOptionsPanel()
  694.     {
  695.         global $_POST, $_GET;
  696.         
  697.         // check keyword name for only allowed characters
  698.         function valid_kw_chars($text)
  699.         {
  700.             if( preg_match("/[^a-zA-Z0-9_]/",$text) ){
  701.                 return false;
  702.             }
  703.             return true;
  704.         }
  705.         
  706.         // delete specified keyword $kw from options and save the options if $saveOptions = true
  707.         function _AdsDel_DeleteAdsenseBlock( &$options, $kw, $save_options=TRUE )
  708.         {
  709.             $newVals = array();
  710.             $lastKey = NULL;
  711.             foreach( $options['ads'] as $key => $vals ){
  712.                 if( $key == $kw ){
  713.                     echo "\n\n<!-- Matched Keyword $kw -->\n\n";
  714.                     if( $options['default'] == $key )
  715.                         $options['default'] = NULL;
  716.                 }else{
  717.                     $newVals[$key] = $vals;
  718.                     $lastKey = $key;
  719.                 }
  720.             }
  721.             
  722.             // deleted item may have been default AdSense code, so adjust to something else
  723.             if( $options['default'] == NULL ){
  724.                     $options['default'] = $lastKey; //lastKey may be NULL, it's OK.
  725.             }
  726.             
  727.             $options['ads'] = $newVals;
  728.             if( $save_options )
  729.                 update_option(ADSDEL_OPTIONS_ID, $options);
  730.         }
  731.  
  732.  
  733.         // place to pass msgs back to user about state of form submission
  734.         $submit_msgs = array();
  735.  
  736.         $action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__) . "&#new_ad";
  737.  
  738.         // Create option in options database if not there already:
  739.         $options = get_option(ADSDEL_OPTIONS_ID);
  740.         if( !$options){
  741.             $options = _AdsDel_CreateDefaultOptions();
  742.             $submit_msgs[] = "» Created default options.";
  743.         }
  744.  
  745.  
  746.         //--
  747.         //-- Handle post (new adsense block definitions)
  748.         //--
  749.         if ( isset($_POST['fn']) ) {
  750.             
  751.             if (get_magic_quotes_gpc()) {
  752.                 $_GET    = array_map('stripslashes', $_GET);
  753.                 $_POST    = array_map('stripslashes', $_POST);
  754.                 $_COOKIE= array_map('stripslashes', $_COOKIE);
  755.             }
  756.             if( $_POST['fn'] == 'new' ){
  757.                 //_AdsDel_HandlePostNew(&$options,&$submit_msgs,&$newform_values);
  758.                 if( isset($_POST['name']) && $_POST['name'] != '' 
  759.                     && isset($_POST['code']) && $_POST['code'] != '' ){
  760.                     $kw = $_POST['name'];
  761.                     $theCode = $_POST['code'];
  762.                     $desc = $_POST['comment'];
  763.                     $enabled = true;
  764.                     $isDefault = false;
  765.                     if( valid_kw_chars($kw) ){
  766.                     
  767.                         // if editing previous option, delete old first.
  768.                         // [ might be reasons not to do that at this point(?) ]
  769.                         if( isset($_POST['edit_kw']) && $_POST['edit_kw'] != $kw ){
  770.                             $submit_msgs[] = '» Deleting old keyword ' . $_POST['edit_kw'] . '.';
  771.                             _AdsDel_DeleteAdsenseBlock($options, $_POST['edit_kw'], FALSE);
  772.                         }
  773.  
  774.                         if( (isset($_POST['make_default']) && $_POST['make_default'] == '1')
  775.                             || ! isset($options['default']) || $options['default'] == '' ){
  776.                             $options['default'] = $kw;
  777.                         }
  778.                         if( isset($_POST['enabled']) && $_POST['enabled'] == '' )
  779.                             $enabled = false;
  780.                         
  781.                         $options['ads'][$kw] = array('adsense' => $theCode, 'desc' => $desc, 'enabled' => $enabled);
  782.                         update_option(ADSDEL_OPTIONS_ID, $options);
  783.                         $submit_msgs[] = '» New AdSense block added (' . $kw . ').';
  784.                     }else{
  785.                         $submit_msgs[] = '» Invalid characters in Keyword; submission NOT saved';
  786.                         $newform_values = array();
  787.                         $newform_values['name'] = '';
  788.                         $newform_values['code'] = $theCode;
  789.                         $newform_values['comment'] = $desc;
  790.                         $newform_values['make_default'] = ($isDefault ? '1' : '');
  791.                     }//if( valid_kw_chars($kw) )
  792.                 }else{
  793.                     $submit_msgs[] = '» <font color="red">Missing Keyword or Code value</font>; Nothing added.';
  794.                 }
  795.  
  796.             //--
  797.             //-- plugin author mileage rewards program....
  798.             //--
  799.             }elseif( $_POST['fn'] == 'rewards' ){
  800.                 $options['reward_author'] = (isset($_POST['reward_author']) && $_POST['reward_author'] == '1');
  801.                 $submit_msgs[] = '» Author Rewards turned  <b>' . ($options['reward_author'] ? 'ON' : 'OFF') . '</b>';
  802.  
  803.             //--
  804.             //-- Handle change in on/off status
  805.             //--
  806.             }elseif( $_POST['fn'] == 'update' ){
  807.                 // handle all on/off first
  808.                 $options['all_enabled'] = (isset($_POST['all_on']) && $_POST['all_on'] == '1');
  809.                 $submit_msgs[] = '» AdSense ads globally <b><i>'
  810.                     .($options['all_enabled']?'enabled':'disabled')
  811.                     .'</i></b>. Individual ads may still be disabled though.';
  812.                 
  813.                 // update "areas" for turning ads on/off (Pages, Home, Archives)
  814.                 $areas = array('posts_on'=>'posts','page_on' => 'page', 'home_on' => 'home', 'archives_on'=>'archives');
  815.                 foreach($areas as $form_fld => $option_name )
  816.                     $options['enabled_for'][$option_name] = 
  817.                         (isset($_POST[$form_fld]) && $_POST[$form_fld] == '1');
  818. /*                    if((isset($_POST[$form_fld]) && $_POST[$form_fld] == '1') ){
  819.                         $options['enabled_for'][$option_name] = true;
  820.                     }else{
  821.                         $options['enabled_for'][$option_name] = false;
  822.                     }
  823. */
  824.                 // do indivdidual entries now
  825.                 foreach($options[ads] as $key => $val ){
  826.                     if( isset($_POST[$key]) ){
  827.                         $options['ads'][$key]['enabled'] = true;
  828.                         //$submit_msgs[] = "Setting <b>$key</b> to ". $_POST[$key];
  829.                     }else{
  830.                         $options['ads'][$key]['enabled'] = false;
  831.                     }
  832.                 }
  833.                 $submit_msgs[] = "» <b><i>Enabled</i></b> status for all ad blocks updated!";
  834.  
  835.             }else{
  836.                 $submit_msgs[] = '» <font color="red">Unrecognized POST action</font>.';
  837.             }
  838.             
  839.             // make sure we save the (possibly) changed options
  840.             update_option(ADSDEL_OPTIONS_ID, $options);
  841.  
  842.         //--
  843.         //-- GET submissions (delete, make default, edit, on/off)
  844.         //--
  845.             
  846.             
  847.             }elseif ( isset($_GET['fn']) ) {
  848.                 $fn = $_GET['fn'];
  849.                 $kw = $_GET['kw'];
  850.  
  851.                 if( $fn == 'debug' ){
  852.                     $submit_msgs[] = 'Number of ads: ' . sizeof($options['ads']) . "\n";
  853.                     $submit_msgs[] = 'Prefs Version: ' . $options['version'] . "\n";
  854.                     $submit_msgs[] = 'Latest Version: ' . $options['latest_version'] . "\n";
  855.                     $submit_msgs[] = 'Next Version Check: ' . date('Y-m-d', $options['next_update_check']) . "\n";
  856.                     $submit_msgs[] = 'Reward Author?: ' . (isset($options['reward_author']) && $options['reward_author'] == '1' ? 'YES' : 'NO') . "\n";
  857.                     $submit_msgs[] = 'All Enabled?: ' . $options['all_enabled'] . "\n";
  858.                     $submit_msgs[] = 'Ad Block set as default: ' . $options['default'] . "\n";
  859.                     foreach( $options['ads'] as $key => $vals ){
  860.                         $submit_msgs[] = 'BLOCK: ' . $key . ' -- Enabled: ' .$vals['enabled']. "\n";
  861.                         $submit_msgs[] = 'Comment: ' . $vals['desc'] . "\n";
  862.                         if( $key == $kw ){
  863.                             $submit_msgs[] = "DEFAULT = => $key\n";
  864.                         }
  865.                     }
  866.  
  867.                 }elseif( $fn == 'default' ){
  868.                     
  869.                     // while we could just set $options[default] to the $kw, let's be safe
  870.                     // and make sure it exists.
  871.                     foreach( $options['ads'] as $key => $vals ){
  872.                         if( $key == $kw ){
  873.                             $options['default'] = $key;
  874.                             $submit_msgs[] = "» Default changed to $key.";
  875.                         }
  876.                     }
  877.     
  878.                 }elseif($fn == 'edit' ){
  879.                     $newform_values = NULL;
  880.                     foreach( $options['ads'] as $key => $vals ){
  881.                         if( $key == $kw ){
  882.                             $newform_values = array();
  883.                             $newform_values['name'] = $newform_values['edit_kw'] = $key;
  884.                             $newform_values['code'] = $vals['adsense'];
  885.                             $newform_values['comment'] = $vals['desc'];
  886.                             $newform_values['make_default'] = ($options['default'] == $key ? '1' :'');                        
  887.                             $newform_values['enabled'] = ($vals['enabled'] ? '1' :'');                        
  888.                             break;
  889.                         }
  890.                     }
  891.     
  892.                 }elseif($fn == 'enable' ){
  893.                     if( isset($_GET['flipit'] ) ){
  894.                         $flipit = $_GET['flipit'];
  895.                         foreach( $options['ads'] as $key => $vals ){
  896.                             if( $key == $kw ){
  897.                                 if( $flipit == 'on' )
  898.                                     $enable = true;
  899.                                 else
  900.                                     $enable = false;
  901.                                 $options['ads'][$kw]['enabled'] = $enable;
  902.                                 $submit_msgs[] = "» Ad block <i>$key</i> turned " .($enable ? 'on' : 'off');
  903.                             }
  904.                         }
  905.                     }else{
  906.                         $submit_msgs[] = "» <font color=red>Internal Error</font> missing switch\n";
  907.                     }
  908.                 }elseif($fn == 'del' ){
  909.                     $newVals = array();
  910.                     $lastKey = NULL;
  911.                     foreach( $options['ads'] as $key => $vals ){
  912.                         if( $key == $kw ){
  913.                             if( $options['default'] == $key )
  914.                                 $options['default'] = NULL;
  915.                             $submit_msgs[] = "» Removed AdSense block for $kw.";
  916.                         }else{
  917.                             $newVals[$key] = $vals;
  918.                             $lastKey = $key;
  919.                         }
  920.                     }
  921.                     
  922.                     // deleted item may have been default AdSense code, so adjust to something else
  923.                     if( $options['default'] == NULL ){
  924.                             $options['default'] = $lastKey; //lastKey may be NULL, it's OK.
  925.                     }
  926.                     
  927.                     $options['ads'] = $newVals;
  928.                     
  929.                 }else{
  930.                     $submit_msgs[] = "» Unknown function:  $fn .";
  931.                 }
  932.  
  933.             // make sure we save the (possibly) changed options
  934.             update_option(ADSDEL_OPTIONS_ID, $options);
  935.         }
  936.  
  937.         // spit out status msgs first
  938.         if ( count($submit_msgs) > 0 ) {
  939.             echo '<div class="updated"><p>' 
  940.                     . implode('<br />', $submit_msgs )
  941.                     . '</p></div>';    
  942.         }
  943.  
  944.         echo "<div class='wrap'>";
  945.         
  946.         _AdsDel_Header();
  947.         
  948.         _AdsDel_ListAds($options);
  949.         //print_r($options);
  950.         _AdsDel_NewAdForm($newform_values);
  951.  
  952.         _AdsDel_AdSense_sandbox();
  953.         
  954.         _AdsDel_RewardAuthor($options);
  955.         
  956.         _AdsDel_Footer();
  957.  
  958.         echo "\n</div>";
  959.     }
  960.  
  961.  
  962.     //--
  963.     //-- Create mini javascript which will preview the current ad style
  964.     //--
  965.     function AdsDel_makePreviewUrl($adsense_code, $the_url, $winName="preview"){
  966.         $p;
  967.         if( AdsDel_GetASParams($adsense_code, $p) ){
  968.             $as_url = 'http://pagead2.googlesyndication.com/pagead/ads?client=ca-test&adtest=on&url='
  969.                 . urlencode($the_url) 
  970.                 . '&format='. $p['ad_format']
  971.                 . '&color_border=' . $p['color_border'] 
  972.                 . '&color_bg=' . $p['color_bg'] 
  973.                 . '&color_text=' . $p['color_text']
  974.                 . '&color_link=' . $p['color_link']
  975.                 . '&color_url=' . $p['color_url']
  976.                 . '&alternate_color=' . $p['alternate_color']
  977.                 . '&type=' . $p['ad_type'];
  978.             }
  979.         $p['ad_width'] += 10;
  980.         $p['ad_height']+= 10;
  981.         return 'window.open("' . $as_url .'","'.$winName.'","width=' . $p['ad_width'] .',height=' . $p['ad_height'] .'top=120,left=100,resizable=yes"); return false;';
  982.     
  983.     //    return $as_url;
  984.     }
  985.     
  986.     //--
  987.     //-- Extract ad parameters from the raw AS javascript (in $asBlock)
  988.     //-- returns items in params array (see $items below for list of key names)
  989.     //-- Returns boolean false if something goes wrong, true otherwise.
  990.     //--
  991.     function AdsDel_GetASParams($asBloc, &$params)
  992.     {
  993.         $items = array(
  994.             'ad_format'=>'', 'ad_type'=>'', 'ad_width'=>250,'ad_height'=>250,
  995.             'color_border'=>'', 'color_bg'=>'', 'color_link'=>'', 'color_url'=>'', 'color_text'=>'', 'alternate_color'=>'FFFFFF'
  996.         );
  997.         $params = array();
  998.         foreach( $items as $key => $val ){
  999.             if( preg_match ( '/' . $key . ' *= *\"?([^";]+)\"?/', $asBloc, $m ) ){
  1000.                 //echo "$key = $m[1] \n";
  1001.                 //$items[$key] = $m[1];
  1002.                 $params[$key] = $m[1];
  1003.             }else{
  1004.                 $params[$key] = $items[$key]; // set to default
  1005.             }
  1006.         }
  1007.         
  1008.         //echo $as_url . "\n\n";
  1009.         return true; // always true for now...
  1010.     }
  1011.  
  1012.     // creates the AdSense options page button under Options menu in WP-admin
  1013.     function add_adsense_deluxe_menu()
  1014.     {
  1015.      if (function_exists('add_options_page')) {
  1016.       add_options_page('AdSense-Deluxe Configuration', 'AdSenseDeluxe', 8, __FILE__); //'AdsenseDeluxeOptionsPanel'); // wp 1.5.1 version
  1017.       
  1018.      }
  1019.      
  1020.     }
  1021.  
  1022.     //--
  1023.     //-- creates QuickTags button for Adsense-Del. in editor
  1024.     //--
  1025.     function _AdsDel_InsertAdsenseButton()
  1026.     {
  1027.         $rich_editing = false;
  1028.         $tiger_style = 'float:left;padding:2px;margin-right:2px;margin-top:4px;';
  1029.         $button_style = '';
  1030.         if(    strpos($_SERVER['REQUEST_URI'], 'post.php')
  1031.             || strstr($_SERVER['PHP_SELF'], 'page-new.php'))
  1032.         {
  1033.             if( function_exists('get_user_option') ) 
  1034.                 $rich_editing = (get_user_option('rich_editing') == 'true');
  1035.  
  1036.             $check_plugins = get_settings('active_plugins');
  1037.             foreach ($check_plugins as $pi) {
  1038.                 if( false !== strpos($pi,'wp-admin-tiger') )
  1039.                     $button_style = $tiger_style;
  1040.             }
  1041.             
  1042.             if( function_exists('get_option') )
  1043.             {
  1044.                 $opt = get_option(ADSDEL_OPTIONS_ID);
  1045.         
  1046.                 $js = '';
  1047.                 $js2 = '';
  1048.                 foreach( $opt['ads'] as $key => $vals )
  1049.                 {
  1050.                     if( $key == $opt['default'] ) continue;
  1051.                     $n = 'adsense#' . $key ;
  1052.                     $js .= '<option value=\"-' . $n . '-\">   ' . $n . '</option>';
  1053.                     $js2 .= ($js2 == '' ? "" : ',') . ' "' . $key . '"'; // no "adsense#" prepended
  1054.                 }
  1055.             }
  1056. //color:#006633;
  1057.     ?>
  1058. <script language="JavaScript" type="text/javascript"><!--
  1059. //var toolbar = document.getElementById("ed_toolbar");
  1060. if( <?php echo (($rich_editing) ?  "false" : "true");?> ){
  1061. if (document.getElementById('quicktags') != undefined){
  1062.  
  1063.     document.getElementById('quicktags').innerHTML += '<select style=\" background-color:#eee;color:#006633;width:120px;<?php echo $button_style;?>\" class=\"ed_button\" id=\"adsense_delx\" size=\"1\" onChange=\"return InsAdsDelux(this);\"><option style=\"font-weight:bold;\" selected disabled  value=\"\">Ad$ense-Delx</option><option value=\"-adsense-\">adsense</option><?php echo $js;?></select>'
  1064. };
  1065.  
  1066. }
  1067. function InsAdsDelux(ele) {
  1068.     try{
  1069.     if( ele != undefined && ele.value != '')
  1070.         edInsertContent(edCanvas, '<!-'+ ele.value +'->');
  1071.     }catch (excpt) { alert(excpt); }
  1072.     ele.selectedIndex = 0; // reset menu
  1073.     return false;
  1074. }
  1075. var __ADSENSE_DELUXE_ADS = new Array(<?php echo $js2;?>); //WP2.0 Rich Editor
  1076. //--></script>
  1077.     <?php
  1078.         }
  1079.     }
  1080.     
  1081.     add_filter('admin_footer', '_AdsDel_InsertAdsenseButton');
  1082.  
  1083.  
  1084.     if( function_exists('add_action') ){
  1085.         add_action('admin_head', 'add_adsense_deluxe_menu');
  1086.         add_action('wp_head', 'add_adsense_deluxe_handle_head');
  1087. }
  1088.     if( function_exists('add_filter') )
  1089.         add_filter('the_content', 'adsense_deluxe_insert_ads'); 
  1090.  
  1091.  
  1092. endif; // if plugin_page()
  1093.  
  1094.  
  1095. /* ============= NOTES ================= *
  1096. v0.7    2006-01-09
  1097.     - (see readme with plugin download for all release info)
  1098.     - First release for WordPress 2.0 WYSIWYG editor (rich editing) support. May be bugs.
  1099.  
  1100. v0.4    2005-08-
  1101.     - Fixed ASD QuickTag when Tiger-Admin plugin is activated.
  1102.     - You can now click the descriptions in the ads list to preview the ad style.
  1103.     
  1104. v0.3    2005-08-01
  1105.     - Fixed problem of AdSense showing up in Full Text RSS feeds.
  1106.     - Fixed call-time pass-by-reference warnings from PHP.
  1107.     - No longer "rewarding author" on anything other than Post or Page pages.
  1108.     - Fixed problem with only two (2) ads being shown on a given page.
  1109.     - Added AdSense-Deluxe quicktag menu to post editor.
  1110.     - Stopped showing live adsense in post editing previews; now displays a placeholder
  1111.     - Added stripslashes() around calls to edit an ad and to display adsense code in posts.
  1112.         [axodys] reported his ads getting escaped on WP 1.5.3 (with magic_quotes_gpc Off).
  1113.     - Editing an ad which was disabled causes it to be enabled when saving (fixed).
  1114.  
  1115.     + ToDo: run some timing to see check overhead plugin ads to page serving.
  1116. * =============== END NOTES ============ */
  1117.  
  1118. ?>
  1119.