<?php
/*
Plugin Name: AskApache Google 404
Plugin URI: https://www.askapache.com/seo/404-google-wordpress-plugin/
Description: Adds Intelligent SEO Ajax-powered Google Search to 404 pages.  <a href="options-general.php?page=aa-google-404.php">Options configuration panel</a>
Version: 2.3
Author: AskApache
Author URI: https://www.askapache.com
*/

/*
== Installation ==

1. Upload aa-google-404.zip to the /wp-content/plugins/ directory
2. Unzip into its own folder /wp-content/plugins/aa-google-404/aa-google-404.php
3. Activate the plugin through the ‘Plugins’ menu in WordPress by clicking “AskApache Google 404”
4. Go to your Options Panel and open the “AskApache Google 404” submenu. /wp-admin/options-general.php?page=aa-google-404.php
5. Add the code on your pages by including <?php if(function_exists('aa_google_404'))aa_google_404();?> in your templates.
6. Enter in your google Ajax API Key and hit “Update Google API” Button.
*/


/*
<h2>More Info from Google</h2>
// Thanks Google, you Rock from the Start!
<ul>
<li><a href="http://code.google.com/apis/ajaxsearch/">AJAX Search API</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/signup.html">Start Using the API</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/wizards.html">AJAX Search Wizards</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/">Developer Guide</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html">Class Reference</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/samples.html">Code Samples</a></li>
<li><a href="http://code.google.com/apis/ajaxsearch/community-samples.html">Community Samples</a></li>
<li><a href="http://code.google.com/support/bin/topic.py?topic=10021">Knowledge Base</a></li>
<li><a href="http://googleajaxsearchapi.blogspot.com/">AJAX APIs Blog</a></li>
<li><a href="http://groups.google.com/group/Google-AJAX-Search-API">Developer Forum</a>
*/


/*
/--------------------------------------------------------------------\
|                                                                    |
| License: GPL                                                       |
|                                                                    |
| AskApache Google 404 Plugin - Adds Ajax Powered Search to 404 Page |
| Copyright (C) 2007, AskApache, www.askapache.com                   |
| All rights reserved.                                               |
|                                                                    |
| This program is free software; you can redistribute it and/or      |
| modify it under the terms of the GNU General Public License        |
| as published by the Free Software Foundation; either version 2     |
| of the License, or (at your option) any later version.             |
|                                                                    |
| This program is distributed in the hope that it will be useful,    |
| but WITHOUT ANY WARRANTY; without even the implied warranty of     |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      |
| GNU General Public License for more details.                       |
|                                                                    |
| You should have received a copy of the GNU General Public License  |
| along with this program; if not, write to the                      |
| Free Software Foundation, Inc.                                     |
| 51 Franklin Street, Fifth Floor                                    |
| Boston, MA  02110-1301, USA                                        |   
|                                                                    |
\--------------------------------------------------------------------/
*/


function aa_google_404_options_setup() {
    
add_options_page('AskApache Google 404''AA Google 404'8basename(__FILE__), 'aa_google_404_page');
}
add_action('admin_menu''aa_google_404_options_setup');


//---------------------------
function aa_google_404_page() {
    global 
$aa_google_404_api_key,$aa_google_404_code_js,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;
    
$AA_GOOGLE_404_V='2.2';
    
    
// security
    
if ( function_exists('current_user_can') && !current_user_can('manage_options') ) die(__('Cheatin&#8217; uh?'));
    if (! 
user_can_access_admin_page()) {
        
wp_die__('You do not have sufficient permissions to access this page.') );
    }
    
    
    if(
$_SERVER['REQUEST_METHOD']==='POST'){
        
$valid_nonce wp_verify_nonce($_REQUEST['_wpnonce'], 'aa-google-404-update_modify');
        if(!
$valid_nonce)die('not verified!');
        
        if(isset(
$_POST['aagooglecodejs'])) update_option('aa_google_404_code_js',stripslashes($_POST['aagooglecodejs']));
        if(isset(
$_POST['aagooglecodecss'])) update_option('aa_google_404_code_css',stripslashes($_POST['aagooglecodecss']));
        if(isset(
$_POST['aagoogleapikey'])) update_option('aa_google_404_api_key',$_POST['aagoogleapikey']);
        
$aa_status '<div id="message" class="updated fade"><p><strong>Updated successfully</strong>.</p></div>';
    }
    
    
    
$aa_google_404_code_js get_option('aa_google_404_code_js');
    
$aa_google_404_code_css get_option('aa_google_404_code_css');
    
$aa_google_404_api_key get_option('aa_google_404_api_key');
    
    
    
ob_start();
    echo 
'<div id="message" class="updated fade"><p><strong>Preview: default settings</strong>, not what shows up on blog.  <a href="/404-tes/test-page-here/">Test your 404</a></p></div>';
    echo 
'<div class="wrap" style="height:150px; overflow:auto;">';
    echo 
'<div id="searchcontrol"><h3>Loading...</h3></div>';
    echo 
'</div>';
    
$aa_test=ob_get_clean();
    
    
    
$aa_head='<p style="text-align:center;">[ <a href="http://code.google.com/apis/ajaxsearch/">Google AJAX Search API</a> - <a href="https://www.askapache.com/seo/404-google-wordpress-plugin/">AskApache Google 404 Plugin <strong>'$AA_GOOGLE_404_V '</strong></a> - <a href="https://www.askapache.com/">Author Home</a> ]</p><hr style="visibility:hidden;">';
    
    
    
$aa_main ='<div class="wrap"><h2>AskApache Google 404</h2>';
    
    
_e($aa_head);
    
_e($aa_status);

    
_e($aa_test);

    
_e($aa_main);
    
    
aa_form_api_key();
    
aa_form_google_css();
    
aa_form_google_js();
    
}



function 
aa_form_api_key(){
    global 
$aa_google_404_api_key,$aa_google_404_code_js,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;
    echo 
'<hr style="visibility:hidden;"><form name="aa_form_api_key" action="'$_SERVER["REQUEST_URI"] . '" method="post">';
    echo 
'<label for="aagoogleapikey">Google API Key <a href="http://code.google.com/apis/ajaxsearch/signup.html">(Get One)</a></label><br />';
    echo 
'<div class="submit" style="float:right;"><input type="submit" name="updategoogleapikey" id="updategoogleapikey" value="Update Key" class="button" /></div>';
    echo 
'<input size="81" type="text" name="aagoogleapikey" value="'.$aa_google_404_api_key.'" />';
    
wp_nonce_field('aa-google-404-update_modify');
    echo 
'<br style="clear:both;" /></form>';
}


function 
aa_form_google_css(){
    global 
$aa_google_404_api_key,$aa_google_404_code_js,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;
    echo 
'<hr style="visibility:hidden;"><form name="aa_form_google_css" action="'$_SERVER["REQUEST_URI"] . '" method="post">';
    echo 
'<label for="aagooglecodecss">CSS Code</label><br>';
    echo 
'<div class="submit" style="float:right;"><input type="submit" name="updateaagooglecodecss" id="updateaagooglecodecss" value="Update CSS" class="button" /></div>';
    echo 
'<textarea cols="80" rows="10" name="aagooglecodecss" id="aagooglecodecss">'.$aa_google_404_code_css.'</textarea>';
    
wp_nonce_field('aa-google-404-update_modify');
    echo 
'<br style="clear:both;" /></form>';
}


function 
aa_form_google_js(){
    global 
$aa_google_404_api_key,$aa_google_404_code_js,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;
    echo 
'<hr style="visibility:hidden;"><form name="aa_form_google_js" action="'$_SERVER["REQUEST_URI"] . '" method="post">';
    echo 
'<label for="aagooglecodejs">JavaScript Code</label><br>';
    echo 
'<div class="submit" style="float:right;"><input type="submit" name="updateaagooglecodejs" id="updateaagooglecodejs" value="Update JS" class="button" /></div>';
    echo 
'<textarea cols="80" rows="40" name="aagooglecodejs" id="aagooglecodejs">'.$aa_google_404_code_js.'</textarea>';
    
wp_nonce_field('aa-google-404-update_modify');
    echo 
'<br style="clear:both;" /></form></div>';
}


function 
aa_google_404_header(){
    global 
$aa_google_404_api_key,$aa_google_404_code_js,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;
    
    if(
is_404())
    {
    
$aa_google_404_code_css get_option('aa_google_404_code_css');
    
$aa_google_404_code_js get_option('aa_google_404_code_js');
    
$aa_google_404_api_key get_option('aa_google_404_api_key');

    
$aa_good_words=aa_get_req_words();
    
$aa_label=get_option('blogname');
    
$aa_execute=$aa_label.'|'.$aa_good_words;
        
        echo 
'<script language="Javascript" type="text/javascript">
        aalabel="'
.$aa_label.'";
        aamysite="'
.$_SERVER['HTTP_HOST'].'";
        aaexecute="'
.$aa_execute.'";
        </script>'
."\n";


    echo 
'<script src="http://www.google.com/jsapi?key='.$aa_google_404_api_key.'" type="text/javascript"></script>'."\n";
    echo 
$aa_google_404_code_js;
    echo 
$aa_google_404_code_css;

    }
}
add_action('wp_head''aa_google_404_header');





function 
aa_google_404_admin_header(){
    global 
$aa_google_404_api_key,$aa_google_404_code_css,$valid_nonce,$aa_label,$aa_execute,$aa_status;

    
$aa_google_404_code_css get_option('aa_google_404_code_css');

    
$aa_label=get_option('blogname');
    
$aa_execute=preg_replace("/([^\.]+\.)?([^\.]+)\.(\w+)/i""$2"$_SERVER['HTTP_HOST']);
    
    if(isset(
$_POST['aagoogleapikey'])) update_option('aa_google_404_api_key',$_POST['aagoogleapikey']);
    else 
$aa_google_404_api_key get_option('aa_google_404_api_key');
    
    
    echo 
'<script language="Javascript" type="text/javascript">
    aalabel="'
.$aa_label.'";
    aamysite="'
.$_SERVER['HTTP_HOST'].'";
    aaexecute="askapache OR '
.$aa_label.'";
    </script>'
;
    
    
        
$aa_google_404_code_js=
    
'<script language="Javascript" type="text/javascript">
    //<![CDATA[
    google.load("search", "1");
    function OnLoad() {
        var mysiteSearch = new GwebSearch();
        mysiteSearch.setUserDefinedLabel(aalabel);
        mysiteSearch.setSiteRestriction(aamysite);
        customEngineSearch = new GwebSearch();
        customEngineSearch.setUserDefinedLabel("CSE");
        customEngineSearch.setSiteRestriction("002660089121042511758:kk7rwc2gx0i");
        var searchControl = new google.search.SearchControl();
        var drawOptions = new GdrawOptions();
        drawOptions.setDrawMode(GSearchControl.DRAW_MODE_TABBED);
        searchControl.addSearcher(mysiteSearch);
        searchControl.addSearcher(new GwebSearch());
        searchControl.addSearcher(new GblogSearch());
        searchControl.addSearcher(new GvideoSearch());
        searchControl.addSearcher(new GimageSearch());
        searchControl.addSearcher(customEngineSearch);
        searchControl.draw(document.getElementById("searchcontrol"), drawOptions);
        searchControl.execute(aaexecute);
    }
    google.setOnLoadCallback(OnLoad);
    //]]>
    </script>'
;

    echo 
'<script src="http://www.google.com/jsapi?key='.$aa_google_404_api_key.'" type="text/javascript"></script>'."\n";
    echo 
$aa_google_404_code_js;
    echo 
$aa_google_404_code_css;
    
}
$aa_goadm=strpos($_SERVER['REQUEST_URI'], 'aa-google-404.php');
if(
$aa_goadm!==false)add_action('admin_head''aa_google_404_admin_header');



function 
aa_google_404(){
    if(
is_404()){
        echo 
'<div id="searchcontrol"><h3>Loading...</h3></div>';
    }
}


function 
aa_get_req_words(){
    
$word_array=array();
    
$cleaned_words='';

      
$clean_url=$_SERVER['REQUEST_URI'];

      
$cleaner_url explode('#'$clean_url);
      
$clean_url $cleaner_url[0];

      
$cleaner_url explode('?'$clean_url);
      
$clean_url $cleaner_url[0];

      
$cleaner_url explode('.'$clean_url);
      
$clean_url $cleaner_url[0];
      
      
$clean_url html_entity_decode($clean_url);

      
preg_match_all("/[\w]{3,15}/"$clean_url$word_array);
      
      foreach (
$word_array[0] as $k => $word){
            if(
false === strpos($cleaned_words$word))$cleaned_words.=$word." ";
      }
      
      if(
count($word_array[0])<1$cleaned_words.=$_SERVER['HTTP_HOST'];
      
      
$cleaned_words=trim($cleaned_words);
      
$cleaned_words=str_replace(" ","|",$cleaned_words);
      
      return 
$cleaned_words;
}


function 
aa_google_404_activate(){
    
$aa_google_404_api_key='ABQIAAAAulvh3KQawKQWxn64grPVShSrXMCP0pDj9HHVk8NG53Pp2_-7KxQrSRl65MAnUMDqm9AubaFv5BYXEg';
    
    
$aa_label=get_option('blogname');
    
$aa_execute=preg_replace("/([^\.]+\.)?([^\.]+)\.(\w+)/i""$2"$_SERVER['HTTP_HOST']);
    
    
    echo 
'<script language="Javascript" type="text/javascript">
    aalabel="'
.$aa_label.'";
    aamysite="'
.$_SERVER['HTTP_HOST'].'";
    aaexecute="'
.$aa_execute.'";
    </script>'
;

    
    
$aa_google_404_code_css=
    
'<style type="text/css">
    .gsc-control {width:100%;margin:0 auto;position:relative;overflow:hidden;}
    .gsc-control form {width:96%;}
    .gsc-control table {margin:0;padding:0;}
    .gsc-control, .gsc-control * {font-family:"trebuchet ms",verdana,sans-serif;font-size:13px;}
    div.search-control {margin:20px;}
    td.search-control {width:450px;vertical-align:top;}
    </style>'
."\n";
    
    
$aa_google_404_code_js='<script language="Javascript" type="text/javascript">
    //<![CDATA[
    google.load("search", "1");
    function OnLoad() {
        var mysiteSearch = new GwebSearch();
        mysiteSearch.setUserDefinedLabel(aalabel);
        mysiteSearch.setSiteRestriction(aamysite);
        customEngineSearch = new GwebSearch();
        customEngineSearch.setUserDefinedLabel("CSE");
        customEngineSearch.setSiteRestriction("002660089121042511758:kk7rwc2gx0i");
        var searchControl = new google.search.SearchControl();
        var drawOptions = new GdrawOptions();
        drawOptions.setDrawMode(GSearchControl.DRAW_MODE_TABBED);
        searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);
        searchControl.addSearcher(mysiteSearch);
        searchControl.addSearcher(new GwebSearch());
        searchControl.addSearcher(new GblogSearch());
        searchControl.addSearcher(new GvideoSearch());
        searchControl.addSearcher(new GimageSearch());
        searchControl.addSearcher(customEngineSearch);
        searchControl.draw(document.getElementById("searchcontrol"), drawOptions);
        searchControl.execute(aaexecute);
    }
    google.setOnLoadCallback(OnLoad);
    //]]>
    </script>'
."\n";
    
    
update_option('aa_google_404_api_key',$aa_google_404_api_key);
    
update_option('aa_google_404_code_js',stripslashes($aa_google_404_code_js));
    
update_option('aa_google_404_code_css',stripslashes($aa_google_404_code_css));
}


function 
aa_google_404_deactivate(){
    
delete_option('aa_google_404_code_js');
    
delete_option('aa_google_404_code_css');
    
delete_option('aa_google_404_api_key');
}
register_deactivation_hook(__FILE__'aa_google_404_deactivate');
register_activation_hook(__FILE__'aa_google_404_activate');
?>