WordPress.org

Plugin Directory

Changeset 756381


Ignore:
Timestamp:
08/14/13 21:45:35 (8 months ago)
Author:
joedolson
Message:

Commit 1.0.3; bug fixes, layout change, clarification in some admin areas.

Location:
botsmasher
Files:
20 added
5 edited

Legend:

Unmodified
Added
Removed
  • botsmasher/trunk/botsmasher.php

    r755730 r756381  
    44Plugin URI: http://www.joedolson.com/articles/botsmasher/ 
    55Description: BotSmasher smashes bots.  
    6 Version: 1.0.2 
     6Version: 1.0.3 
    77Author: Joe Dolson 
    88Author URI: http://www.joedolson.com/ 
     
    3535 
    3636$bs_api_url = 'https://www.botsmasher.com/api/index.php'; 
    37 $bs_version = '1.0.2';  
     37$bs_version = '1.0.3';  
    3838 
    3939if ( !class_exists('botsmasherClient') ) { 
     
    182182<?php $bs_options = get_option( 'bs_options' ); 
    183183if ( !$options || !isset($options['bs_api_key'] ) || $options['bs_api_key'] == '' ) { 
    184     $message = sprintf(__("You must <a href='%s'>enter a BotSmasher API key</a> to use BotSmasher.", 'my-calendar-submissions'), admin_url('options-general.php?page=botsmasher/botsmasher.php')); 
     184    $message = sprintf(__("You must <a href='%s'>enter a BotSmasher API key</a> to use BotSmasher.", 'botsmasher'), admin_url('options-general.php?page=botsmasher/botsmasher.php')); 
    185185    add_action('admin_notices', create_function( '', "if ( ! current_user_can( 'manage_options' ) ) { return; } else { echo \"<div class='error'><p>$message</p></div>\";}" ) ); 
    186186} ?> 
     
    197197                    <legend><?php _e('BotSmasher Options','botsmasher'); ?></legend> 
    198198                    <ul> 
    199                         <li><label for="bs_api_key"><?php _e('BotSmasher API Key','botsmasher'); ?></label> <input type="text" id="bs_api_key" name="bs_api_key" class="widefat" value="<?php echo esc_attr( $bs_options['bs_api_key'] ); ?>" /></li> 
     199                        <li><label for="bs_api_key"><?php _e('BotSmasher API Key','botsmasher'); ?></label> (<span id="bsak_label"><a href="http://www.botsmasher.com/register.php"><?php _e('Get an API key','botsmasher'); ?></a>) <input type="text" id="bs_api_key" name="bs_api_key" class="widefat" aria-labelledby="bs_api_key bsak_label" value="<?php echo esc_attr( $bs_options['bs_api_key'] ); ?>" /></li> 
    200200                        <li><label for="bs_required_label"><?php _e('Required Label Text','botsmasher'); ?></label> <input type="text" id="bs_required_label" name="bs_required_label" class="widefat" value="<?php echo esc_attr( $bs_options['bs_required_label'] ); ?>" /></li> 
    201201                        <li><input type="checkbox" id="bs_html_email" name="bs_html_email" <?php if ( $bs_options['bs_html_email'] == "on") { echo 'checked="checked" '; } ?>/> <label for="bs_html_email"><?php _e('Send HTML Email','botsmasher'); ?></label></li> 
    202202                        <li><input type="checkbox" id="bs_filter_comments" name="bs_filter_comments" <?php if ( $bs_options['bs_filter_comments'] == "on") { echo 'checked="checked" '; } ?>/> <label for="bs_filter_comments"><?php _e('Filter Comments','botsmasher'); ?></label></li> 
    203203                        <li><input type="checkbox" id="bs_filter_registrations" name="bs_filter_registrations" <?php if ( $bs_options['bs_filter_registrations'] == "on") { echo 'checked="checked" '; } ?>/> <label for="bs_filter_registrations"><?php _e('Filter Registrations','botsmasher'); ?></label></li> 
    204                          
    205                          
    206204                    </ul> 
    207205                </fieldset> 
     
    214212                </div> 
    215213            </div> 
     214            <div class="postbox" id="error-log"> 
     215                <h3><?php _e('BotSmasher API Errors (Last 20)','botsmasher'); ?></h3> 
     216                <div class="inside"> 
     217                    <p> 
     218                    <?php _e('This is a record of errors returned by the BotSmasher API or by WordPress when smashing a bot. If you\'re having trouble with BotSmasher, this is useful information for debugging.','botsmasher'); ?> 
     219                    </p> 
     220                    <div class="bs_error_log"> 
     221                        <?php 
     222                            $exceptions = get_option( 'bs_exceptions' ); 
     223                            $return = ''; 
     224                            if ( is_array( $exceptions ) ) { 
     225                                foreach ( $exceptions as $exception ) { 
     226                                    $date = date_i18n( 'M d, H:i', $exception['date'] ); 
     227                                    $response = $exception['message']; 
     228                                    $report = ( isset( $exception['report'] ) )?$exception['report']:"N/A"; 
     229                                    if ( strpos( $response, 'request limit' ) && date( 'Y-m-d', $exception['date'] ) == date( 'Y-m-d', current_time( 'timestamp' ) ) ) { 
     230                                        $target_link = "http://www.botsmasher.com/contact.php"; 
     231                                        echo "<div class='updated'><p>".sprintf( __('You have reached your BotSmasher API check limit for today. <a href="%s">Raise your limit!</a>'), $target_link )."</p></div>"; 
     232                                    } 
     233                                    $return .= "<tr><th scope='row'>$date</th><td>$response</td><td>$report</td></tr>"; 
     234                                } 
     235                                echo " 
     236                                    <table class='widefat'> 
     237                                        <thead> 
     238                                            <tr> 
     239                                                <th scope='col'>".__('Date','botsmasher')."</th> 
     240                                                <th scope='col'>".__('Message','botsmasher')."</th> 
     241                                                <th scope='col'>".__('Reported by','botsmasher')."</th> 
     242                                            </tr> 
     243                                        </thead> 
     244                                        <tbody> 
     245                                        ".$return." 
     246                                        </tbody> 
     247                                    </table>"; 
     248                            } else { 
     249                                _e('No errors reported.', 'botsmasher' ); 
     250                            } 
     251                        ?> 
     252                    </div>               
     253                </div>           
     254            </div> 
    216255            <div class="postbox" id="get-support"> 
    217256            <h3><?php _e('Get Plug-in Support','botsmasher'); ?></h3> 
     
    219258                <?php bs_get_support_form(); ?> 
    220259                </div> 
    221             </div>           
     260            </div> 
    222261        </div> 
    223262    </div> 
     
    247286                    </form> 
    248287                    </div> 
    249                     <div class="bs_api_usage"> 
    250                     <?php 
    251                         $day_count = $bs_options['bs_daily_api_queries']; 
    252                         $total_count = $bs_options['bs_total_api_queries'] + $day_count; 
    253                         $thwart_count = $bs_options['bs_total_thwarts']; 
    254                         printf( __( 'Total Checks: %1$d<br />Bots Smashed: %2$d<br />Today\'s Checks: %3$d', 'botsmasher' ), $total_count, $thwart_count, $day_count ); 
    255                     ?> 
    256                     </div> 
    257  
    258288                </div> 
    259289            </div> 
     
    261291        <div class="ui-sortable meta-box-sortables"> 
    262292            <div class="postbox"> 
    263                 <h3><?php _e('BotSmasher API Errors (Last 20)','botsmasher'); ?></h3> 
     293                <h3><?php _e('Your API Usage','botsmasher'); ?></h3> 
     294                <?php 
     295                    $day_count = "<strong>".$bs_options['bs_daily_api_queries']."</strong>"; 
     296                    $total_count = "<strong>".( $bs_options['bs_total_api_queries'] + $day_count )."</strong>"; 
     297                    $thwart_count = "<strong>".$bs_options['bs_total_thwarts']."</strong>"; 
     298                ?> 
    264299                <div class="inside"> 
    265                     <div class="bs_error_log"> 
    266                         <?php 
    267                             $exceptions = get_option( 'bs_exceptions' ); 
    268                             $return = ''; 
    269                             if ( is_array( $exceptions ) ) { 
    270                                 foreach ( $exceptions as $exception ) { 
    271                                     $date = date_i18n( 'M d, H:i', $exception['date'] ); 
    272                                     $response = $exception['message']; 
    273                                     if ( strpos( $response, 'request limit' ) && date( 'Y-m-d', $exception['date'] ) == date( 'Y-m-d', current_time( 'timestamp' ) ) ) { 
    274                                         $target_link = "http://www.botsmasher.com/contact.php"; 
    275                                         echo "<div class='updated'><p>".sprintf( __('You have reached your BotSmasher API check limit for today. <a href="%s">Raise your limit!</a>'), $target_link )."</p></div>"; 
    276                                     } 
    277                                     $return .= "<li><strong>$date</strong><br />$response</li>"; 
    278                                 } 
    279                                 echo "<ul>".$return."</ul>"; 
    280                             } else { 
    281                                 _e('No errors reported.', 'botsmasher' ); 
    282                             } 
    283                         ?> 
    284                     </div>               
     300                <p> 
     301                <?php printf( __( 'Total Checks: %1$s<br />Bots Smashed: %2$s<br />Today\'s Checks: %3$s', 'botsmasher' ), $total_count, $thwart_count, $day_count ); ?> 
     302                </p> 
     303                <p>                  
     304                <?php _e( 'The <a href="http://www.botsmasher.com">BotSmasher API</a> was created and is supported by <a href="http://www.karlgroves.com">Karl Groves</a>.','botsmasher'); ?> 
     305                </p> 
    285306                </div> 
    286307            </div> 
     
    344365Language: $language 
    345366Charset: $charset 
    346 Admin Email: $current_user->user_email 
     367User Email: $current_user->user_email 
    347368 
    348369==Extra info:== 
     
    421442function bs_handle_exception( $e, $response ) { 
    422443    if ( defined ( 'BS_DEBUGGING' ) && BS_DEBUGGING == true ) { 
    423         wp_mail( BS_DEBUG_TO, 'BotSmasher: Handled Exception', print_r( $e, 1 )."\n\n".print_r( $response, 1 ) ); 
     444        wp_mail( BS_DEBUG_TO, 'BotSmasher: Handled Exception', print_r( $response, 1 )."\n\n".print_r( $e, 1 ) ); 
    424445    } 
    425446    $exceptions = get_option( 'bs_exceptions' ); 
     
    431452    }    
    432453    if ( $response == 'is_wp_error' ) { 
    433         $message = "BS: ".$e->get_error_message(); 
     454        $message = $e->get_error_message(); 
     455        $report = "WordPress"; 
    434456    } else { 
    435         $message = "WP: ".$e->getMessage(); 
    436     } 
    437     $exceptions[] = array( 'date'=>current_time( 'timestamp' ), 'message'=> $message ); 
     457        $message = $e->getMessage(); 
     458        $report = "BotSmasher"; 
     459    } 
     460    $exceptions[] = array( 'date'=>current_time( 'timestamp' ), 'message'=> $message, 'report'=>$report ); 
    438461    update_option( 'bs_exceptions', $exceptions ); 
    439462} 
  • botsmasher/trunk/botsmasherClient.class.php

    r755730 r756381  
    2929     */ 
    3030    protected function validateOpts() { 
     31     
    3132        // 'key' is absolutely required by botsmasher 
    3233        if (FALSE == array_key_exists('key', $this -> opts)) { 
     
    3940        } 
    4041 
     42        // action not set 
     43        if (FALSE == array_key_exists('action', $this -> opts)){ 
     44            return FALSE; 
     45        }        
    4146        // action is required and must be 'check', 'submit', or 'clear' 
    4247        $actionVals = array('check', 'submit', 'clear'); 
    43         if ((FALSE == array_key_exists('action', $this -> opts)) || !in_array( $this -> opts['action'], $actionVals ) ) { 
     48        if ( !in_array( strtolower( $this -> opts['action'] ), $actionVals ) ) { 
    4449            return FALSE; 
    4550        } 
     
    9095            if ( $result['response']['code'] == 200 ) { 
    9196                $body = $result['body']; 
     97                // some server errors return correct data, but with appended errors. 
     98                // If so, remove appended error so data is parseable. 
     99                $parts = explode( '}}}}', $body ); 
     100                $body = $parts[0].'}}}}'; 
     101 
    92102            }  
    93103        } else { 
     
    116126                switch (json_last_error()) { 
    117127                    case JSON_ERROR_DEPTH : 
    118                         $msg = ' - Maximum stack depth exceeded'; 
     128                        $msg = 'Maximum stack depth exceeded'; 
    119129                        break; 
    120130                    case JSON_ERROR_STATE_MISMATCH : 
    121                         $msg = ' - Underflow or the modes mismatch'; 
     131                        $msg = 'Underflow or the modes mismatch'; 
    122132                        break; 
    123133                    case JSON_ERROR_CTRL_CHAR : 
    124                         $msg = ' - Unexpected control character found'; 
     134                        $msg = 'Unexpected control character found'; 
    125135                        break; 
    126136                    case JSON_ERROR_SYNTAX : 
    127                         $msg = ' - Syntax error, malformed JSON'; 
     137                        $msg = 'Syntax error, malformed JSON'; 
    128138                        break; 
    129139                    case JSON_ERROR_UTF8 : 
    130                         $msg = ' - Malformed UTF-8 characters, possibly incorrectly encoded'; 
     140                        $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded'; 
    131141                        break; 
    132142                    default : 
    133                         $msg = ' - Unknown error'; 
     143                        $msg = 'Unknown error'; 
    134144                        break; 
    135145                } 
     
    154164                    throw new Exception('No valid API key'); 
    155165                } else { 
    156                     throw new Exception('ERROR: NOT ABLE TO DECODE THE RESPONSE'); 
     166                    //throw new Exception('ERROR: NOT ABLE TO DECODE THE RESPONSE'); 
    157167                } 
    158168            } else { 
  • botsmasher/trunk/bs-registrations.php

    r755333 r756381  
    2222 
    2323// pre-define wp_new_user_notification to add text to message. 
    24 function wp_new_user_notification($user_id, $plaintext_pass = '') { 
    25     $user = get_userdata( $user_id ); 
     24if ( !function_exists( 'wp_new_user_notification' ) ) { 
     25    function wp_new_user_notification($user_id, $plaintext_pass = '') { 
     26        $user = get_userdata( $user_id ); 
    2627 
    27     // The blogname option is escaped with esc_html on the way into the database in sanitize_option 
    28     // we want to reverse this for the plain text arena of emails. 
    29     $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); 
    30     $flag_url = admin_url( "user-edit.php?user_id=$user_id&bsflag=true" ); 
    31      
    32     $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n"; 
    33     $message .= sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n"; 
    34     $message .= sprintf(__('E-mail: %s'), $user->user_email) . "\r\n"; 
    35     $message .= sprintf(__('Flag as spam? %s'), $flag_url ) . "\r\n"; 
    36      
    37     @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message); 
     28        // The blogname option is escaped with esc_html on the way into the database in sanitize_option 
     29        // we want to reverse this for the plain text arena of emails. 
     30        $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); 
     31        $flag_url = admin_url( "user-edit.php?user_id=$user_id&bsflag=true" ); 
     32         
     33        $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n"; 
     34        $message .= sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n"; 
     35        $message .= sprintf(__('E-mail: %s'), $user->user_email) . "\r\n"; 
     36        $message .= sprintf(__('Flag as spam? %s'), $flag_url ) . "\r\n"; 
     37         
     38        @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message); 
    3839 
    39     if ( empty($plaintext_pass) ) 
    40         return; 
     40        if ( empty($plaintext_pass) ) 
     41            return; 
    4142 
    42     $message  = sprintf(__('Username: %s'), $user->user_login) . "\r\n"; 
    43     $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n"; 
    44     $message .= wp_login_url() . "\r\n"; 
    45  
    46     wp_mail($user->user_email, sprintf(__('[%s] Your username and password'), $blogname), $message); 
    47  
     43        $message  = sprintf(__('Username: %s'), $user->user_login) . "\r\n"; 
     44        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n"; 
     45        $message .= wp_login_url() . "\r\n"; 
     46         
     47        wp_mail($user->user_email, sprintf(__('[%s] Your username and password'), $blogname), $message); 
     48    } 
    4849} 
    4950 
  • botsmasher/trunk/css/bs-styles.css

    r755333 r756381  
    99.shortcode {padding: 5px; background: #fefefa; outline: 1px solid #e0e0e0; margin: 0 0 10px; font-family: monospace; } 
    1010.shortcode strong { font-family: sans-serif; } 
    11 .bs_api_usage { background: #fff; padding: 10px; border-radius: 5px; font-size: 1.2em; } 
     11.bs_api_usage { background: #fff; padding: 2px 10px; border-radius: 5px; font-size: 1.2em; } 
    1212.bs-widget .prime p { width: 49%; float: left; } 
    1313.bs-widget .prime p:nth-of-type(odd) { margin-right: 5px; } 
  • botsmasher/trunk/readme.txt

    r755730 r756381  
    55Requires at least: 3.4.2 
    66Tested up to: 3.6.0 
    7 Stable tag: 1.0.2 
     7Stable tag: 1.0.3 
    88License: GPLv2 or later 
    99 
     
    1616BotSmasher is a CAPTCHA-less tool to check user submissions for spam. Why CAPTCHA-less? Because your spam isn't your visitors' problem. 
    1717 
    18 <strong>Comments</strong> 
     18[Register with BotSmasher](http://www.botsmasher.com/register.php) to get an API key and start smashing bots! 
     19 
     20= Comments = 
    1921 
    2022All comments supplied by users who aren't administrators are checked by BotSmasher. If they are identified as spam, they'll be flagged as spam and not shown on your site. You can report false positives back to BotSmasher if a real comment gets flagged. 
    2123 
    22 <strong>Registrations</strong> 
     24= Registrations = 
    2325 
    2426New registrations are run through BotSmasher. Anybody flagged by BotSmasher will get a notice that they've been flagged as spam, and directed to contact the site separately. When you get the new user email from WordPress, it'll include a link to the user's profile that enables you to flag that user in BotSmasher. 
    2527 
    26 <strong>Contact Form</strong> 
     28= Contact Form = 
    2729 
    2830BotSmasher includes an integrated and accessible contact form with basic customization options. The contact form shortcode is documented on the settings page, but can also be configured via the widget tool.  
     
    4749 
    4850== Changelog == 
     51 
     52= 1.0.3 = 
     53 
     54* Added link to BotSmasher registration page by API key field. 
     55* Added text to readme about registering with BotSmasher. 
     56* Improved debugging log, modified settings page layout. 
     57* Bug fix: check if registration message function already declared. 
     58* Bug fix: If API JSON data has error message appended, strip it so data is parseable. 
    4959 
    5060= 1.0.2 = 
Note: See TracChangeset for help on using the changeset viewer.