!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\cumbreclima\wp-content\plugins\subscribe-to-comments-reloaded\   drwxrwxrwx
Free 3.24 GB of 39.52 GB (8.2%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     subscribe-to-comments-reloaded.php (79.33 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/*
Plugin Name: Subscribe to Comments Reloaded

Version: 150820
Stable tag: 150820
Requires at least: 2.9.2
Tested up to: 4.2.2

Plugin URI: http://wordpress.org/extend/plugins/subscribe-to-comments-reloaded/
Description: Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notifications. It includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications.
Contributors: camu, reedyseth, andreasbo, raamdev
Author: camu, reedyseth, Raam Dev
*/

// Avoid direct access to this piece of code
if ( ! function_exists'add_action' ) ) {
    
header'Location: /' );
    exit;
}

/**
 * Displays the checkbox to allow visitors to subscribe
 */
function subscribe_reloaded_show() {
    global 
$post$wp_subscribe_reloaded;
    
$checkbox_subscription_type;

    
$is_disabled get_post_meta$post->ID'stcr_disable_subscriptions'true );
    if ( ! empty( 
$is_disabled ) ) {
        return 
$_comment_ID;
    }

    
$show_subscription_box true;
    
$html_to_show          '';
    
$user_link             get_bloginfo'url' ) . get_option'subscribe_reloaded_manager_page''' );

    if ( 
function_exists'qtrans_convertURL' ) ) {
        
$user_link qtrans_convertURL$user_link );
    }

    
$manager_link = ( strpos$user_link'?' ) !== false ) ?
        
"$user_link&amp;srp=$post->ID&amp;srk=" get_option'subscribe_reloaded_unique_key' ) :
        
"$user_link?srp=$post->ID&amp;srk=" get_option'subscribe_reloaded_unique_key' );

    
// Load localization files
    
load_plugin_textdomain'subscribe-reloaded'falsedirnameplugin_basename__FILE__ ) ) . '/langs/' );

    if ( 
$wp_subscribe_reloaded->is_user_subscribed$post->ID'''C' ) ) {
        
$html_to_show          str_replace(
            
'[manager_link]'$user_link,
            
__html_entity_decodestripslashesget_option'subscribe_reloaded_subscribed_waiting_label'"Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>." ) ), ENT_QUOTES'UTF-8' ), 'subscribe-reloaded' )
        );
        
$show_subscription_box false;
    } elseif ( 
$wp_subscribe_reloaded->is_user_subscribed$post->ID'' ) ) {
        
$html_to_show          str_replace(
            
'[manager_link]'$user_link,
            
__html_entity_decodestripslashesget_option'subscribe_reloaded_subscribed_label'"You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions." ) ), ENT_QUOTES'UTF-8' ), 'subscribe-reloaded' )
        );
        
$show_subscription_box false;
    }

    if ( 
$wp_subscribe_reloaded->is_author$post->post_author ) ) { // when the second parameter is empty, cookie value will be used
        
if ( get_option'subscribe_reloaded_admin_subscribe''no' ) == 'no' ) {
            
$show_subscription_box false;
        }
        
$html_to_show .= str_replace(
            
'[manager_link]'$manager_link,
            
__html_entity_decodestripslashesget_option'subscribe_reloaded_author_label'"You can <a href='[manager_link]'>manage the subscriptions</a> of this post." ) ), ENT_QUOTES'UTF-8' ), 'subscribe-reloaded' )
        );
    }

    if ( 
$show_subscription_box ) {
        
$checkbox_label        str_replace(
            
'[subscribe_link]'"$manager_link&amp;sra=s",
            
__html_entity_decodestripslashesget_option'subscribe_reloaded_checkbox_label'"Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting." ) ), ENT_QUOTES'UTF-8' ), 'subscribe-reloaded' )
        );
        
$checkbox_inline_style get_option'subscribe_reloaded_checkbox_inline_style''width:30px' );
        if ( ! empty( 
$checkbox_inline_style ) ) {
            
$checkbox_inline_style " style='$checkbox_inline_style'";
        }
        
$checkbox_html_wrap html_entity_decodestripslashesget_option'subscribe_reloaded_checkbox_html''' ) ), ENT_QUOTES'UTF-8' );
        if ( 
get_option'subscribe_reloaded_enable_advanced_subscriptions''no' ) == 'no' ) {
            switch ( 
get_option'subscribe_reloaded_checked_by_default_value' ) ) {
                case 
'0':
                    
$checkbox_subscription_type 'yes';
                    break;
                case 
'1':
                    
$checkbox_subscription_type 'replies';
                    break;
            }
            
$checkbox_field "<input$checkbox_inline_style type='checkbox' name='subscribe-reloaded' id='subscribe-reloaded' value='$checkbox_subscription_type'" . ( ( get_option'subscribe_reloaded_checked_by_default''no' ) == 'yes' ) ? " checked='checked'" '' ) . " />";
        } else {
            
$checkbox_field "<select name='subscribe-reloaded' id='subscribe-reloaded'>
                                    <option value='none' " 
. ( ( get_option'subscribe_reloaded_default_subscription_type' ) === '0' ) ? "selected='selected'" '' ) . ">" __"Don't subscribe"'subscribe-reloaded' ) . "</option>
                                    <option value='yes' " 
. ( ( get_option'subscribe_reloaded_default_subscription_type' ) === '1' ) ? "selected='selected'" '' ) . ">" __"All"'subscribe-reloaded' ) . "</option>
                                    <option value='replies' " 
. ( ( get_option'subscribe_reloaded_default_subscription_type' ) === '2' ) ? "selected='selected'" '' ) . ">" __"Replies to my comments"'subscribe-reloaded' ) . "</option>
                                </select>"
;
        }
        if ( empty( 
$checkbox_html_wrap ) ) {
            
$html_to_show "$checkbox_field <label for='subscribe-reloaded'>$checkbox_label</label>" $html_to_show;
        } else {
            
$checkbox_html_wrap str_replace'[checkbox_field]'$checkbox_field$checkbox_html_wrap );
            
$html_to_show       str_replace'[checkbox_label]'$checkbox_label$checkbox_html_wrap ) . $html_to_show;
        }
    }
    if ( 
function_exists'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
        
$html_to_show qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$html_to_show );
    }
    echo 
"<!-- Subscribe to Comments Reloaded version $wp_subscribe_reloaded->current_version -->";
    echo 
"<!-- BEGIN: subscribe to comments reloaded -->" $html_to_show "<!-- END: subscribe to comments reloaded -->";
}

// Show the checkbox - You can manually override this by adding the corresponding function in your template
if ( get_option'subscribe_reloaded_show_subscription_box''yes' ) == 'yes' ) {
    
add_action'comment_form''subscribe_reloaded_show' );
}

class 
wp_subscribe_reloaded {

    public 
$current_version '150820';

    
/**
     * Constructor -- Sets things up.
     */
    
public function __construct() {
        
$this->salt defined'NONCE_KEY' ) ? NONCE_KEY 'please create a unique key in your wp-config.php';

        
// What to do when a new comment is posted
        
add_action'comment_post', array( &$this'new_comment_posted' ), 12);
        
// Add hook for the subscribe_reloaded_purge, define on the constructure so that the hook is read on time.
        
add_action('_cron_subscribe_reloaded_purge', array($this'subscribe_reloaded_purge'), 10 );


        
// Provide content for the management page using WP filters
        
if ( ! is_admin() ) {
            
$manager_page_permalink get_option'subscribe_reloaded_manager_page''/comment-subscriptions/' );
            if ( 
function_exists'qtrans_convertURL' ) ) {
                
$manager_page_permalink qtrans_convertURL$manager_page_permalink );
            }
            if ( empty( 
$manager_page_permalink ) ) {
                
$manager_page_permalink get_option'subscribe_reloaded_manager_page''/comment-subscriptions/' );
            }
            if ( ( 
strpos$_SERVER["REQUEST_URI"], $manager_page_permalink ) !== false ) ) {
                
add_filter'the_posts', array( &$this'subscribe_reloaded_manage' ), 10);
            }

            
// removing action hook because it was redundant
        
} else {
            
// Initialization routines that should be executed on activation/deactivation
            
register_activation_hook__FILE__, array( &$this'activate' ) );
            
register_deactivation_hook__FILE__, array( &$this'deactivate' ) );

            
// Hook for WPMU - New blog created
            
add_action'wpmu_new_blog', array( &$this'new_blog' ), 10);

            
// Remove subscriptions attached to a post that is being deleted
            
add_action'delete_post', array( &$this'delete_subscriptions' ), 10);

            
// Monitor actions on existing comments
            
add_action'deleted_comment', array( &$this'comment_deleted' ) );
            
add_action'wp_set_comment_status', array( &$this'comment_status_changed' ) );

            
// Subscribe post authors, if the case
            
if ( get_option'subscribe_reloaded_notify_authors''no' ) == 'yes' ) {
                
add_action'publish_post', array( &$this'subscribe_post_author' ) );
            }

            
// Add a new column to the Edit Comments panel
            
add_filter'manage_edit-comments_columns', array( &$this'add_column_header' ) );
            
add_filter'manage_posts_columns', array( &$this'add_column_header' ) );
            
add_action'manage_comments_custom_column', array( &$this'add_comment_column' ) );
            
add_action'manage_posts_custom_column', array( &$this'add_post_column' ) );

            
// Add appropriate entries in the admin menu
            
add_action'admin_menu', array( &$this'add_config_menu' ) );
            
add_action(
                
'admin_print_styles-subscribe-to-comments-reloaded/options/index.php', array(
                    &
$this,
                    
'add_options_stylesheet'
                
)
            );
            
add_action'admin_print_styles-edit-comments.php', array( &$this'add_post_comments_stylesheet' ) );
            
add_action'admin_print_styles-edit.php', array( &$this'add_post_comments_stylesheet' ) );

            
// Admin notices
            
add_action'admin_init', array( &$this'admin_init' ) );
            
add_action'admin_notices', array( &$this'admin_notices' ) );

            
// Contextual help
            
add_action'contextual_help', array( &$this'contextual_help' ), 10);

            
// Shortcodes to use the management URL sitewide
            
add_shortcode'subscribe-url', array( &$this'subscribe_url_shortcode' ) );

            
// Settings link for plugin on plugins page
            
add_filter'plugin_action_links', array( &$this'plugin_settings_link' ), 10);
            
// Check if the subscribers table is created otherwise create it.
            
if ( ! get_option'subscribe_reloaded_subscriber_table' ) || get_option'subscribe_reloaded_subscriber_table' ) == 'no') {
                
$this->_create_subscriber_table();
            }
        }


    }

    
// end __construct

    
public function admin_init() {

        
$version get_option'subscribe_reloaded_version' );
        if ( 
$version != $this->current_version ) {
            
// Do whatever upgrades needed here.
            
update_option'subscribe_reloaded_version'$this->current_version );
        }
    }

    public function 
admin_notices() {
        if ( 
$notices get_option'subscribe_reloaded_deferred_admin_notices' ) ) {
            foreach ( 
$notices as $notice ) {
                echo 
$notice;
            }
            
delete_option'subscribe_reloaded_deferred_admin_notices' );
        }
    }

    
/**
     * Support for WP MU network activations (experimental)
     */
    
public function activate() {
        global 
$wpdb;

        if ( 
function_exists'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == ) ) {
            
$blogids $wpdb->get_col(
                
$wpdb->prepare(
                    
"
                SELECT blog_id
                FROM 
$wpdb->blogs
                WHERE site_id = %d
                AND deleted = 0
                AND spam = 0"
$wpdb->siteid
                
)
            );

            foreach ( 
$blogids as $blog_id ) {
                
switch_to_blog$blog_id );
                
$this->_activate();
            }
            
restore_current_blog();
        } else {
            
$this->_activate();
        }
    }
    
// end activate

    /**
     * Support for WP MU network activations (experimental)
     */
    
public function new_blog$_blog_id ) {
        
switch_to_blog$_blog_id );
        
$this->_activate();
        
restore_current_blog();
    }
    
// end new_blog

    /**
     * Adds the options to the database and imports the data from other plugins
     */
    
private function _activate() {

        
// Load localization files
        
load_plugin_textdomain'subscribe-reloaded'falsedirnameplugin_basename__FILE__ ) ) . '/langs/' );

        
// Import data from the WP Comment Subscriptions plugin, if needed
        
$this->_import_wpcs_data();

        
// Import data from Subscribe to Comments & Co., if needed
        
$this->_import_stc_data();

        
// Import data from Comment Reply Notification, if needed
        
$this->_import_crn_data();

        
// Starting from version 2.0 StCR uses Wordpress' tables to store the information about subscriptions
        
$this->_update_db();

        
// Since there are some users with the database corrupted due to encoding stuff we need to sanitize
        // their information
        
$this->_sanitize_db_information();

        
// Messages related to the management page
        
global $wp_rewrite;

        if ( empty( 
$wp_rewrite->permalink_structure ) ) {
            
add_option'subscribe_reloaded_manager_page''/?page_id=99999''''yes' );
        } else {
            
add_option'subscribe_reloaded_manager_page''/comment-subscriptions/''''yes' );
        }

        
// Let us make sure that the Unique Key is created
        
delete_option('subscribe_reloaded_unique_key');
        
add_option'subscribe_reloaded_unique_key'$this->generate_key(), '''yes' );

        
add_option'subscribe_reloaded_subscriber_table''no''''yes' );
        
add_option'subscribe_reloaded_data_sanitized''no''''yes' );
        
add_option'subscribe_reloaded_show_subscription_box''yes''''yes' );
        
add_option'subscribe_reloaded_checked_by_default''no''''yes' );
        
add_option'subscribe_reloaded_enable_advanced_subscriptions''no''''yes' );
        
add_option'subscribe_reloaded_default_subscription_type''2''''yes' );
        
add_option'subscribe_reloaded_checked_by_default_value''0''''yes' );
        
add_option'subscribe_reloaded_checkbox_inline_style''width:30px''''yes' );
        
add_option'subscribe_reloaded_checkbox_html'"<p class='comment-form-subscriptions'><label for='subscribe-reloaded'>[checkbox_field] [checkbox_label]</label></p>"'''yes' );
        
add_option'subscribe_reloaded_checkbox_label'__"Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_subscribed_label'__"You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_subscribed_waiting_label'__"Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_author_label'__"You can <a href='[manager_link]'>manage the subscriptions</a> of this post."'subscribe-reloaded' ), '''yes' );

        
add_option'subscribe_reloaded_manager_page_enabled''yes''''yes' );
        
add_option'subscribe_reloaded_virtual_manager_page_enabled''yes''''yes' );
        
add_option'subscribe_reloaded_manager_page_title'__'Manage subscriptions''subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_custom_header_meta'"<meta name='robots' content='noindex,nofollow'>"'''yes' );
        
add_option'subscribe_reloaded_request_mgmt_link'__'To manage your subscriptions, please enter your email address here below. We will send you a message containing the link to access your personal management page.''subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_request_mgmt_link_thankyou'__'Thank you for using our subscription service. Your request has been completed, and you should receive an email with the management link in a few minutes.''subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_subscribe_without_commenting'__"You can follow the discussion on <strong>[post_title]</strong> without having to leave a comment. Cool, huh? Just enter your email address in the form here below and you're all set."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_subscription_confirmed'__"Thank you for using our subscription service. Your request has been completed. You will receive a notification email every time a new comment to this article is approved and posted by the administrator."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_subscription_confirmed_dci'__"Thank you for using our subscription service. In order to confirm your request, please check your email for the verification message and follow the instructions."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_author_text'__"In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list."'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_user_text'__"In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list. You are currently subscribed to:"'subscribe-reloaded' ), '''yes' );

        
add_option'subscribe_reloaded_from_name'get_bloginfo'name' ), '''yes' );
        
add_option'subscribe_reloaded_from_email'get_bloginfo'admin_email' ), '''yes' );
        
add_option'subscribe_reloaded_notification_subject'__'There is a new comment to [post_title]''subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_notification_content'__"There is a new comment to [post_title].\nComment Link: [comment_permalink]\nAuthor: [comment_author]\nComment:\n[comment_content]\nPermalink: [post_permalink]\nManage your subscriptions: [manager_link]"'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_double_check_subject'__'Please confirm your subscription to [post_title]''subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_double_check_content'__"You have requested to be notified every time a new comment is added to:\n[post_permalink]\n\nPlease confirm your request by clicking on this link:\n[confirm_link]"'subscribe-reloaded' ), '''yes' );
        
add_option'subscribe_reloaded_management_subject'__'Manage your subscriptions on [blog_name]''subscribe-reloaded' ) );
        
add_option'subscribe_reloaded_management_content'__"You have requested to manage your subscriptions to the articles on [blog_name]. Follow this link to access your personal page:\n[manager_link]"'subscribe-reloaded' ) );

        
add_option'subscribe_reloaded_purge_days''30''''yes' );
        
add_option'subscribe_reloaded_enable_double_check''no''''yes' );
        
add_option'subscribe_reloaded_notify_authors''no''''yes' );
        
add_option'subscribe_reloaded_enable_html_emails''no''''yes' );
        
add_option'subscribe_reloaded_htmlify_message_links''no''''yes' );
        
add_option'subscribe_reloaded_process_trackbacks''no''''yes' );
        
add_option'subscribe_reloaded_enable_admin_messages''no''''yes' );
        
add_option'subscribe_reloaded_admin_subscribe''no''''yes' );
        
add_option'subscribe_reloaded_admin_bcc''no''''yes' );

        
// Create a new table if not exists to manage the subscribers safer
        
$this->_create_subscriber_table();

        
// Schedule the autopurge hook
        
if ( ! wp_next_scheduled'_cron_subscribe_reloaded_purge' ) ) {
            
wp_clear_scheduled_hook'_cron_subscribe_reloaded_purge' );
            
// Let us bind the schedule event with our desire action.
            
wp_schedule_eventtime() + 15'daily''_cron_subscribe_reloaded_purge' );

        }
    }
    
/**
     * Performs some clean-up maintenance (disable cron job).
     */
    
public function deactivate() {
        global 
$wpdb;
        if ( 
function_exists'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == ) ) {
            
$blogids $wpdb->get_col(
                
$wpdb->prepare(
                    
"
                SELECT blog_id
                FROM 
$wpdb->blogs
                WHERE site_id = %d
                AND deleted = 0
                AND spam = 0"
$wpdb->siteid
                
)
            );

            foreach ( 
$blogids as $blog_id ) {
                
switch_to_blog$blog_id );
                
wp_clear_scheduled_hook'_cron_subscribe_reloaded_purge' );
            }
            
restore_current_blog();
        } else {
            
wp_clear_scheduled_hook'_cron_subscribe_reloaded_purge' );
        }

        
delete_option'subscribe_reloaded_version' );
        
delete_option'subscribe_reloaded_deferred_admin_notices' );
    }

    
// end deactivate

    
private function _create_subscriber_table() {
        global 
$wpdb;
        
$charset_collate $wpdb->get_charset_collate();
        
$errorMsg        '';

        
// If the update option is set to false
        
if ( ! get_option('subscribe_reloaded_subscriber_table') ||  get_option('subscribe_reloaded_subscriber_table') == 'no' ) {
            
// Creation of table and subscribers.
            
$sqlCreateTable " CREATE TABLE " $wpdb->prefix "subscribe_reloaded_subscribers (
                              stcr_id int(11) NOT NULL AUTO_INCREMENT,
                              subscriber_email varchar(100) NOT NULL,
                              salt int(15) NOT NULL,
                              subscriber_unique_id varchar(50) NULL,
                              add_date timestamp NOT NULL DEFAULT NOW(),
                              PRIMARY KEY  (stcr_id),
                              UNIQUE KEY uk_subscriber_email (subscriber_email))
                            ENGINE = InnoDB
                            
$charset_collate";
            require_once( 
ABSPATH 'wp-admin/includes/upgrade.php' );
            
// dbDelta Will create or update the table safety
            // Ref: https://codex.wordpress.org/Creating_Tables_with_Plugins
            
$result dbDelta$sqlCreateTable );

            
$retrieveNumberOfSubscribers "SELECT COUNT(subscriber_email) FROM " $wpdb->prefix "subscribe_reloaded_subscribers";
            
$numSubscribers              $wpdb->get_var$retrieveNumberOfSubscribers );
            
// If subscribers not found then the create routine.
            
if ( $numSubscribers == ) {
                
// Get list of emails to be imported.
                
$retrieveEmails "SELECT DISTINCT REPLACE(meta_key, '_stcr@_', '') AS email FROM " $wpdb->postmeta
                    
" WHERE meta_key LIKE '\_stcr@\_%'";
                
$emails         $wpdb->get_results$retrieveEmailsOBJECT );
                
// insert the records on the new table.
                
foreach ( $emails as $email ) {
                    
// Insert email
                    
$OK $this->add_user_subscriber_table$email->email );

                    if ( ! 
$OK) {
                        
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
                        
$notices[] = '<div class="error"><h3>' __'Important Notice''subscribe-reloaded' ) . '</h3>' .
                            
'<p>The creation of of the table <strong>' $wpdb->prefix 'subscribe_reloaded_subscribers</strong> failed</p></div>';
                        
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
                        break 
1;
                    }
                }
                
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
                
$notices[] = '<div class="updated"><h3>' __'Important Notice''subscribe-reloaded' ) . '</h3>' .
                    
'<p>The creation of table <strong>' $wpdb->prefix 'subscribe_reloaded_subscribers</strong> was successful.</p>'.
                    
'<p>This new table will help to add your subscribers email address safer and prevent the Google PII violation.</p></div>';
                
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
                
update_option('subscribe_reloaded_subscriber_table''yes');
            }
        }
    }

    
/*
     * This will add an user/email to the prefix_subscribe_reloaded_subscribers table.
     * @param String $email email to be added.
     * @return Boolean true|false true on success, false on failure
     * */
    
function remove_user_subscriber_table($_email) {
        global 
$wpdb;

        
$OK $wpdb->query(
            
"DELETE FROM ".$wpdb->prefix."subscribe_reloaded_subscribers WHERE subscriber_email = '$_email'"
        
);
        return 
$OK === false || $OK == || empty( $OK ) ? false $OK;
    }

    
/*
     * This will add an user/email to the prefix_subscribe_reloaded_subscribers table.
     * @param String $email email to be added.
     * @return Boolean true|false true on success, false on failure
     * */
    
function add_user_subscriber_table($_email) {
        global 
$wpdb;
        
$OK false;
        
$checkEmailSql "SELECT COUNT(subscriber_email) FROM " $wpdb->prefix "subscribe_reloaded_subscribers WHERE subscriber_email = %s";
        
$numSubscribers $wpdb->get_var$wpdb->prepare($checkEmailSql$_email) );
        
// If subscribers not found then add it to the subscribers table.
        
if ( (int)$numSubscribers == ) {
            
$salt time();
            
// Insert query
            
$OK $wpdb->insert(
                
$wpdb->prefix "subscribe_reloaded_subscribers",
                array(
                    
"subscriber_email"     => $_email,
                    
"salt"                 => $salt,
                    
"subscriber_unique_id" => $this->generate_temp_key$salt $_email )
                ),
                array(
                    
"%s",
                    
"%d",
                    
"%s"
                
)
            );
        }
        return 
$OK === false || $OK == || empty( $OK ) ? false $OK;
    }

    
/*
     * This will retrieve an user/email from the prefix_subscribe_reloaded_subscribers table.
     * @param String $email email to be added.
     * @return Mix false|unique_key false on failure, key un success
     * */
    
public function get_subscriber_key$email null) {
        global 
$wpdb;
        
$subscriber null;
        
// Check if the user is register and the unique key
        
$retrieveEmail "SELECT salt, subscriber_unique_id FROM ".$wpdb->prefix."subscribe_reloaded_subscribers WHERE subscriber_email = %s";
        if( 
$email != null ) {
            
$subscriber $wpdb->get_row($wpdb->prepare($retrieveEmail,$email), OBJECT);
            if( ! empty( 
$subscriber ) ) {
                return 
$subscriber->subscriber_unique_id;
            }
        }
        return 
false;
    }

    private function 
_sanitize_db_information() {
        global 
$wpdb;

        if ( ! 
get_option"subscribe_reloaded_data_sanitized" ) || get_option"subscribe_reloaded_data_sanitized" ) == "no" ) {
            
$stcr_data            $wpdb->get_results(
                
" SELECT * FROM wp_options WHERE option_name like 'subscribe_reloaded%'
                ORDER BY option_name"
OBJECT
            
);
            
$sctr_data_array_size sizeof$stcr_data );
            
// Lets make sure that there is not another subscription with the same compose key
            
foreach ( $stcr_data as $row ) {
                if ( 
$row->option_name != 'subscribe_reloaded_deferred_admin_notices' ) {
                    
$optionValue $row->option_value;
                    
$optionValue html_entity_decodestripslashes$optionValue ), ENT_QUOTES'UTF-8' );
                    
$optionValue esc_attr$optionValue );
                    
update_option$row->option_name$optionValue );
                }
            }
            
update_option"subscribe_reloaded_data_sanitized""yes" );
            
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
            
$notices[] = '<div class="updated"><h3>' __'Subscribe to Comments Reloaded Important Notice''subscribe-reloaded' ) . '</h3>' .
                
'<p>' __'The information in your database has been sanitize to prevent the raw html messages.''subscribe-reloaded' )
                . 
'</p></div>';
            
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
        }
    } 
// end _sanitize_db_information

    /**
     * Copies the information from the stand-alone table to WP's core table
     */
    
private function _update_db() {
        global 
$wpdb;
        
$stcr_table $wpdb->get_col"SHOW TABLES LIKE '{$wpdb->prefix}subscribe_reloaded'" );

        
// Perform the import only if the target table does not contain any subscriptions
        
$count_postmeta_rows $wpdb->get_var"SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
        if ( ! empty( 
$stcr_table ) && $count_postmeta_rows == ) {
            
$wpdb->query(
                
"
                INSERT INTO 
$wpdb->postmeta (post_id, meta_key, meta_value)
                    SELECT post_ID, CONCAT('_stcr@_', email), CONCAT(dt, '|Y')
                    FROM 
{$wpdb->prefix}subscribe_reloaded
                    WHERE email LIKE '%@%.%' AND status = 'Y'
                    GROUP BY email, post_ID"
            
);
        }
    }
    
// end _update_db

    /**
     * Imports subscription data created with the Subscribe to Comments plugin
     */
    
private function _import_stc_data() {
        global 
$wpdb;

        
// Import the information collected by Subscribe to Comments, if needed
        
$result $wpdb->get_row"DESC $wpdb->comments comment_subscribe"ARRAY_A );

        
// Perform the import only if the target table does not contain any subscriptions
        
$count_postmeta_rows $wpdb->get_var"SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );

        if ( ! empty( 
$result ) && is_array$result ) && $count_postmeta_rows == ) {
            
$wpdb->query(
                
"
                    INSERT INTO 
$wpdb->postmeta (post_id, meta_key, meta_value)
                        SELECT comment_post_ID, CONCAT('_stcr@_', comment_author_email), CONCAT(comment_date, '|Y')
                        FROM 
$wpdb->comments
                        WHERE comment_author_email LIKE '%@%.%' AND comment_subscribe = 'Y'
                        GROUP BY comment_post_ID, comment_author_email"
            
);

            
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
            
$notices[] = '<div class="updated"><h3>' __'Important Notice''subscribe-reloaded' ) . '</h3>' .
                
'<p>' __'Comment subscription data from the <strong>Subscribe to Comments</strong> plugin was detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.''subscribe-reloaded' ) . ( is_plugin_active'subscribe-to-comments/subscribe-to-comments.php' ) ? __' It is recommended that you now <strong>deactivate</strong> Subscribe to Comments to prevent confusion between the two plugins.''subscribe-reloaded' ) : '' ) . '</p>' .
                
'<p>' __'If you have subscription data from Subscribe to Comments Reloaded < v2.0 that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.''subscribe-reloaded' ) . '</p>' .
                
'<p>' __'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.''subscribe-reloaded' ) . '</p></div>';
            
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
        }
    }
    
// end _import_stc_data
    /**
     * Imports subscription data created with the Comment Reply Notification plugin
     * @since 13-May-2014
     */
    
private function _import_crn_data() {
        global 
$wpdb;
        
$crn_data_count          null;
        
$subscriptions_to_import = array();
        
$commentMailColumn       $wpdb->get_var"SHOW COLUMNS FROM $wpdb->comments LIKE 'comment_mail_notify' " );
        if ( empty( 
$commentMailColumn ) ) {
            
$crn_data_count 0;
        } else {
            
// Import the information collected by Subscribe to Comments, if needed
            
$crn_data_count $wpdb->get_var"SELECT COUNT(*) FROM $wpdb->comments WHERE comment_mail_notify = 1" );
        }

        if ( 
$crn_data_count ) { // if $crn_data_count is 0 there is no Comment Reply
            // plugin installed and therefore no comment_mail_notify
            // column.
            // Since we know that there are subscriptions Retrieve all of them from COMMENT_REPLY_NOTIFICATION
            
$crn_data             $wpdb->get_results(
                
" SELECT comment_post_ID, comment_author_email"
                
" FROM wp_comments WHERE comment_mail_notify = '1'"
                
" GROUP BY comment_author_email"
                
OBJECT
            
);
            
$stcr_data            $wpdb->get_results(
                
" SELECT post_id, SUBSTRING(meta_key,8) AS email"
                
"FROM wp_postmeta WHERE meta_key LIKE '_stcr@_%'"
                
ARRAY_N
            
);
            
$sctr_data_array_size sizeof$stcr_data );
            
// Lets make sure that there is not another subscription with the same compose key
            
foreach ( $crn_data as $row ) {
                
// Search the specific compose key in the array
                
for ( $i 0$i $sctr_data_array_size$i ++ ) {
                    
$post_id_in_stcr in_array$row->comment_post_ID$stcr_data[$i] );
                    
$email_in_stcr   in_array$row->comment_author_email$stcr_data[$i] );
                    
// validate with an If
                    
if ( $post_id_in_stcr && $email_in_stcr ) {
                        
// If the same compose key is in StCR search for the next value.
                        
continue 2// the next subscription.
                    
}
                }
                
// 2) Until this point the compose key is not on StCR so is safe to import.
                
$OK $wpdb->insert(
                    
$wpdb->postmeta,
                    array(
                        
"post_id"    => $row->comment_post_ID,
                        
"meta_key"   => "_stcr@_" $row->comment_author_email,
                        
"meta_value" => current_time"mysql" ) . "|R"
                    
),
                    array(
                        
"%d",
                        
"%s",
                        
"%s"
                    
)
                );

            }
            
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
            
$notices[] = '<div class="updated"><h3>' __'Important Notice''subscribe-reloaded' ) . '</h3>' .
                
'<p>' __'Comment subscription data from the <strong>Comment Reply Notification</strong> plugin was detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.''subscribe-reloaded' ) . ( is_plugin_active'comment-reply-notification/comment-reply-notification.php' ) ? __' It is recommended that you now <strong>deactivate</strong> Comment Reply Notification to prevent confusion between the two plugins.''subscribe-reloaded' ) : '' ) . '</p>' .
                
'<p>' __'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.''subscribe-reloaded' ) . '</p></div>';
            
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
        }
    }
    
// end _import_crn_data
    /**
     * Imports options and subscription data created with the WP Comment Subscriptions plugin
     */
    
private function _import_wpcs_data() {
        global 
$wpdb;

        
// Import the information collected by WP Comment Subscriptions, if needed
        
$wpcs_data_count $wpdb->get_var"SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_wpcs@\_%'" );

        
// Perform the import only if the target table does not contain any subscriptions
        
$count_postmeta_rows $wpdb->get_var"SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );

        if ( ! empty( 
$wpcs_data_count ) && $count_postmeta_rows == ) {
            
$wpdb->query(
                
"
                INSERT INTO 
$wpdb->postmeta (post_id, meta_key, meta_value)
                SELECT post_id, REPLACE(meta_key, '_wpcs@_', '_stcr@_') meta_key, meta_value
                FROM 
$wpdb->postmeta
                WHERE meta_key LIKE '%_wpcs@_%'"
            
);

            if ( 
$option get_option'wp_comment_subscriptions_manager_page' ) ) {
                
add_option'subscribe_reloaded_manager_page'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_show_subscription_box' ) ) {
                
add_option'subscribe_reloaded_show_subscription_box'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_checked_by_default' ) ) {
                
add_option'subscribe_reloaded_checked_by_default'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_enable_advanced_subscriptions' ) ) {
                
add_option'subscribe_reloaded_enable_advanced_subscriptions'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_checkbox_inline_style' ) ) {
                
add_option'subscribe_reloaded_checkbox_inline_style'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_checkbox_html' ) ) {
                
add_option'subscribe_reloaded_checkbox_html'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_checkbox_label' ) ) {
                
add_option'subscribe_reloaded_checkbox_label'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_subscribed_label' ) ) {
                
add_option'subscribe_reloaded_subscribed_label'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_subscribed_waiting_label' ) ) {
                
add_option'subscribe_reloaded_subscribed_waiting_label'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_author_label' ) ) {
                
add_option'subscribe_reloaded_author_label'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_htmlify_message_links' ) ) {
                
add_option'subscribe_reloaded_htmlify_message_links'$option );
            }

            if ( 
$option get_option'wp_comment_subscriptions_manager_page_enabled' ) ) {
                
add_option'subscribe_reloaded_manager_page_enabled'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_manager_page_title' ) ) {
                
add_option'subscribe_reloaded_manager_page_title'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_custom_header_meta' ) ) {
                
add_option'subscribe_reloaded_custom_header_meta'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_request_mgmt_link' ) ) {
                
add_option'subscribe_reloaded_request_mgmt_link'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_request_mgmt_link_thankyou' ) ) {
                
add_option'subscribe_reloaded_request_mgmt_link_thankyou'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_subscribe_without_commenting' ) ) {
                
add_option'subscribe_reloaded_subscribe_without_commenting'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_subscription_confirmed' ) ) {
                
add_option'subscribe_reloaded_subscription_confirmed'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_subscription_confirmed_dci' ) ) {
                
add_option'subscribe_reloaded_subscription_confirmed_dci'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_author_text' ) ) {
                
add_option'subscribe_reloaded_author_text'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_user_text' ) ) {
                
add_option'subscribe_reloaded_user_text'$option );
            }

            if ( 
$option get_option'wp_comment_subscriptions_from_name' ) ) {
                
add_option'subscribe_reloaded_from_name'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_from_email' ) ) {
                
add_option'subscribe_reloaded_from_email'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_notification_subject' ) ) {
                
add_option'subscribe_reloaded_notification_subject'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_notification_content' ) ) {
                
add_option'subscribe_reloaded_notification_content'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_double_check_subject' ) ) {
                
add_option'subscribe_reloaded_double_check_subject'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_double_check_content' ) ) {
                
add_option'subscribe_reloaded_double_check_content'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_management_subject' ) ) {
                
add_option'subscribe_reloaded_management_subject'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_management_content' ) ) {
                
add_option'subscribe_reloaded_management_content'$option );
            }

            if ( 
$option get_option'wp_comment_subscriptions_purge_days' ) ) {
                
add_option'subscribe_reloaded_purge_days'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_enable_double_check' ) ) {
                
add_option'subscribe_reloaded_enable_double_check'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_notify_authors' ) ) {
                
add_option'subscribe_reloaded_notify_authors'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_enable_html_emails' ) ) {
                
add_option'subscribe_reloaded_enable_html_emails'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_process_trackbacks' ) ) {
                
add_option'subscribe_reloaded_process_trackbacks'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_enable_admin_messages' ) ) {
                
add_option'subscribe_reloaded_enable_admin_messages'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_admin_subscribe' ) ) {
                
add_option'subscribe_reloaded_admin_subscribe'$option );
            }
            if ( 
$option get_option'wp_comment_subscriptions_admin_bcc' ) ) {
                
add_option'subscribe_reloaded_admin_bcc'$option );
            }

            
$notices   get_option'subscribe_reloaded_deferred_admin_notices', array() );
            
$notices[] = '<div class="updated"><h3>' __'Important Notice''subscribe-reloaded' ) . '</h3>' .
                
'<p>' __'Plugin options and comment subscription data from the <strong>WP Comment Subscriptions</strong> plugin were detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.''subscribe-reloaded' ) . ( is_plugin_active'wp-comment-subscriptions/wp-comment-subscriptions.php' ) ? __' It is recommended that you now <strong>deactivate</strong> WP Comment Subscriptions to prevent confusion between the two plugins.''subscribe-reloaded' ) : '' ) . '</p>' .
                
'<p>' __'If you have subscription data from another plugin (such as Subscribe to Comments or Subscribe to Comments Reloaded < v2.0) that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.''subscribe-reloaded' ) . '</p>' .
                
'<p>' __'<strong>Note:</strong> If you were previously using the <code>wp_comment_subscriptions_show()</code> function or the <code>[wpcs-subscribe-url]</code> shortcode, you\'ll need to replace those with <code>subscribe_reloaded_show()</code> and <code>[subscribe-url]</code> respectively.''subscribe-reloaded' ) . '</p>' .
                
'<p>' __'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.''subscribe-reloaded' ) . '</p></div>';
            
update_option'subscribe_reloaded_deferred_admin_notices'$notices );
        }
    }
    
// end _import_wpcs_data
    /*
     * Add Settings link to plugin on plugins page
     */
    
public function plugin_settings_link$links$file ) {
        if ( 
$file == 'subscribe-to-comments-reloaded/subscribe-to-comments-reloaded.php' ) {
            
$links['settings'] = sprintf'<a href="%s"> %s </a>'admin_url'options-general.php?page=subscribe-to-comments-reloaded/options/index.php' ), __'Settings''subscribe-reloaded' ) );
        }

        return 
$links;
    }

    
/**
     * Takes the appropriate action, when a new comment is posted
     */
    
public function new_comment_posted$_comment_ID 0$_comment_status ) {
        
// Retrieve the information about the new comment
        
$info $this->_get_comment_object$_comment_ID );

        if ( empty( 
$info ) || $info->comment_approved == 'spam' ) {
            return 
$_comment_ID;
        }

        
// Are subscriptions allowed for this post?
        
$is_disabled get_post_meta$info->comment_post_ID'stcr_disable_subscriptions'true );
        if ( ! empty( 
$is_disabled ) ) {
            return 
$_comment_ID;
        }

        
// Process trackbacks and pingbacks?
        
if ( ( get_option'subscribe_reloaded_process_trackbacks''no' ) == 'no' ) && ( $info->comment_type == 'trackback' || $info->comment_type == 'pingback' ) ) {
            return 
$_comment_ID;
        }

        
// Did this visitor request to be subscribed to the discussion? (and s/he is not subscribed)
        
if ( ! empty( $_POST['subscribe-reloaded'] ) && ! empty( $info->comment_author_email ) ) {
            if ( ! 
in_array$_POST['subscribe-reloaded'], array( 'replies''digest''yes' ) ) ) {
                return 
$_comment_ID;
            }

            switch ( 
$_POST['subscribe-reloaded'] ) {
                case 
'replies':
                    
$status 'R';
                    break;
                case 
'digest':
                    
$status 'D';
                    break;
                default:
                    
$status 'Y';
                    break;
            }

            if ( ! 
$this->is_user_subscribed$info->comment_post_ID$info->comment_author_email ) ) {
                if ( 
$this->isDoubleCheckinEnabled$info ) ) {
                    
$this->sendConfirmationEMail$info );
                    
$status "{$status}C";
                }
                
$this->add_subscription$info->comment_post_ID$info->comment_author_email$status );

                
// If comment is in the moderation queue
                
if ( $info->comment_approved == ) {
                    
//don't send notification-emails to all subscribed users
                    
return $_comment_ID;
                }
            }
        }

        
// Send a notification to all the users subscribed to this post
        
if ( $info->comment_approved == ) {
            
$subscriptions $this->get_subscriptions(
                array(
                    
'post_id',
                    
'status'
                
), array(
                    
'equals',
                    
'equals'
                
), array(
                    
$info->comment_post_ID,
                    
'Y'
                
)
            );
            if ( ! empty( 
$info->comment_parent ) ) {
                
$subscriptions array_merge(
                    
$subscriptions$this->get_subscriptions(
                        
'parent''equals', array(
                            
$info->comment_parent,
                            
$info->comment_post_ID
                        
)
                    )
                );
            }

            foreach ( 
$subscriptions as $a_subscription ) {
                
// Skip the user who posted this new comment
                
if ( $a_subscription->email != $info->comment_author_email ) {
                    
$this->notify_user$info->comment_post_ID$a_subscription->email$_comment_ID );
                }
            }
        }

        
// If the case, notify the author
        
if ( get_option'subscribe_reloaded_notify_authors''no' ) == 'yes' ) {
            
$this->notify_user$info->comment_post_IDget_bloginfo'admin_email' ), $_comment_ID );
        }

        return 
$_comment_ID;
    }

    
// end new_comment_posted

    
public function isDoubleCheckinEnabled$info ) {
        
$approved_subscriptions $this->get_subscriptions(
            array(
                
'status',
                
'email'
            
), array(
                
'equals',
                
'equals'
            
), array(
                
'Y',
                
$info->comment_author_email
            
)
        );
        if ( ( 
get_option'subscribe_reloaded_enable_double_check''no' ) == 'yes' ) && ! is_user_logged_in() && empty( $approved_subscriptions ) ) {
            return 
true;
        } else {
            return 
false;
        }
    }

    public function 
sendConfirmationEMail$info ) {
        
// Retrieve the information about the new comment
        
$this->confirmation_email$info->comment_post_ID$info->comment_author_email );
    }

    
/**
     * Performs the appropriate action when the status of a given comment changes
     */
    
public function comment_status_changed$_comment_ID 0$_comment_status ) {
        
// Retrieve the information about the comment
        
$info $this->_get_comment_object$_comment_ID );
        if ( empty( 
$info ) ) {
            return 
$_comment_ID;
        }

        switch ( 
$info->comment_approved ) {
            case 
'0'// Unapproved: change the status of the corresponding subscription (if exists) to 'pending'
                
$this->update_subscription_status$info->comment_post_ID$info->comment_author_email'C' );
                break;

            case 
'1'// Approved
                
$this->update_subscription_status$info->comment_post_ID$info->comment_author_email'-C' );
                
$subscriptions $this->get_subscriptions(
                    array(
                        
'post_id',
                        
'status'
                    
), array(
                        
'equals',
                        
'equals'
                    
), array(
                        
$info->comment_post_ID,
                        
'Y'
                    
)
                );
                if ( ! empty( 
$info->comment_parent ) ) {
                    
$subscriptions array_merge(
                        
$subscriptions$this->get_subscriptions(
                            
'parent''equals', array(
                                
$info->comment_parent,
                                
$info->comment_post_ID
                            
)
                        )
                    );
                }

                foreach ( 
$subscriptions as $a_subscription ) {
                    if ( 
$a_subscription->email != $info->comment_author_email // Skip the user who posted this new comment
                    
{
                        
$this->notify_user$info->comment_post_ID$a_subscription->email$_comment_ID );
                    }
                }
                break;

            case 
'trash':
            case 
'spam':
                
$this->comment_deleted$_comment_ID );
                break;

            default:
                break;
        }

        return 
$_comment_ID;
    }
    
// end comment_status

    /**
     * Performs the appropriate action when a comment is deleted
     */
    
public function comment_deleted$_comment_ID ) {
        global 
$wpdb;

        
$info $this->_get_comment_object$_comment_ID );
        if ( empty( 
$info ) ) {
            return 
$_comment_ID;
        }

        
// Are there any other approved comments sent by this user?
        
$count_approved_comments $wpdb->get_var(
            
"
            SELECT COUNT(*)
            FROM 
$wpdb->comments
            WHERE comment_post_ID = '
$info->comment_post_ID' AND comment_author_email = '$info->comment_author_email' AND comment_approved = 1"
        
);
        if ( 
intval$count_approved_comments ) == ) {
            
$this->delete_subscriptions$info->comment_post_ID$info->comment_author_email );
        }

        return 
$_comment_ID;
    }
    
// end comment_deleted

    /**
     * Subscribes the post author, if the corresponding option is set
     */
    
public function subscribe_post_author$_post_ID ) {
        
$new_post     get_post$_post_ID );
        
$author_email get_the_author_meta'user_email'$new_post->post_author );
        if ( ! empty( 
$author_email ) ) {
            
$this->add_subscription$_post_ID$author_email'Y' );
        }
    }
    
// end subscribe_post_author

    /**
     * Displays the appropriate management page
     */
    
public function subscribe_reloaded_manage$_posts ''$_query '' ) {
        global 
$current_user;

        if ( ! empty( 
$_posts ) ) {
            return 
$_posts;
        }

        
$post_ID = ! empty( $_POST['srp'] ) ? intval$_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval$_GET['srp'] ) : );

        
// Is the post_id passed in the query string valid?
        
$target_post get_post$post_ID );
        if ( ( 
$post_ID ) && ! is_object$target_post ) ) {
            return 
$_posts;
        }

        
// Load localization files
        
load_plugin_textdomain'subscribe-reloaded'falsedirnameplugin_basename__FILE__ ) ) . '/langs/' );

        
$action = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : );
        
$key    = ! empty( $_POST['srk'] ) ? $_POST['srk'] : ( ! empty( $_GET['srk'] ) ? $_GET['srk'] : );
        
$sre = ! empty( $_POST['sre'] ) ? $_POST['sre']  : ( ! empty( $_GET['sre'] ) ?  $_GET['sre']  : '' );

        
$email $this->get_subscriber_email_by_key$sre );
        if( ! 
$email){
            
$email $sre;
        }
        
//$email = $this->get_subscriber_key( $subcriber_email_key );

        
if ( empty( $email ) && ! empty( $current_user->user_email ) ) {
            
$email $this->clean_email$current_user->user_email );
        }

        
// Subscribe without commenting
        
if ( ! empty( $action ) && ( $action == 's' ) && ( $post_ID ) ) {
            
$include_post_content = include WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/templates/subscribe.php';
        } 
// Management page for post authors
        
elseif ( ( $post_ID ) && $this->is_author$target_post->post_author ) ) {
            
$include_post_content = include WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/templates/author.php';
        } 
// Confirm your subscription (double check-in)
        
elseif ( ( $post_ID ) && ! empty( $email ) && ! empty( $key ) && ! empty( $action ) &&
            
$this->is_user_subscribed$post_ID$email'C' ) &&
            
$this->_is_valid_key$key$email ) &&
            ( 
$action == 'c' )
        ) {
            
$include_post_content = include WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/templates/confirm.php';
        } 
// Manage your subscriptions (user)
        
elseif ( ! empty( $email ) && ( ! empty( $key ) && $this->_is_valid_key$key$email ) || current_user_can'read' ) ) ) {
            
$include_post_content = include WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/templates/user.php';
        }

        if ( empty( 
$include_post_content ) ) {
            
$include_post_content = include WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/templates/request-management-link.php';
        }

        global 
$wp_query;

        
$manager_page_title html_entity_decodeget_option'subscribe_reloaded_manager_page_title''Manage subscriptions' ), ENT_COMPAT'UTF-8' );
        if ( 
function_exists'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
            
$manager_page_title qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$manager_page_title );
        } else {
            
$manager_page_title __$manager_page_title'subscribe-reloaded' );
        }

        
$posts[] =
            (object) array(
                
'ID'                    => '9999999',
                
'post_author'           => '1',
                
'post_date'             => '2001-01-01 11:38:56',
                
'post_date_gmt'         => '2001-01-01 00:38:56',
                
'post_content'          => $include_post_content,
                
'post_title'            => $manager_page_title,
                
'post_excerpt'          => '',
                
'post_status'           => 'publish',
                
'comment_status'        => 'closed',
                
'ping_status'           => 'closed',
                
'post_password'         => '',
                
'to_ping'               => '',
                
'pinged'                => '',
                
'post_modified'         => '2001-01-01 11:00:01',
                
'post_modified_gmt'     => '2001-01-01 00:00:01',
                
'post_content_filtered' => '',
                
'post_parent'           => '0',
                
'menu_order'            => '0',
                
'post_type'             => 'page',
                
'post_mime_type'        => '',
                
'post_category'         => '0',
                
'comment_count'         => '0',
                
'filter'                => 'raw',
                
'guid'                  => get_bloginfo'url' ) . '/?page_id=9999999',
                
'post_name'             => get_bloginfo'url' ) . '/?page_id=9999999',
                
'ancestors'             => array()
            );

        
// Make WP believe this is a real page, with no comments attached
        
$wp_query->is_page   true;
        
$wp_query->is_single false;
        
$wp_query->is_home   false;
        
$wp_query->comments  false;

        
// Discard 404 errors thrown by other checks
        
unset( $wp_query->query["error"] );
        
$wp_query->query_vars["error"] = "";
        
$wp_query->is_404              false;

        
// Seems like WP adds its own HTML formatting code to the content, we don't need that here
        
remove_filter'the_content''wpautop' );
        
add_action'wp_head', array( &$this'add_custom_header_meta' ) );

        return 
$posts;
    }
    
// end subscribe_reloaded_manage

    /**
     * Removes old entries from the database
     */
    
public function subscribe_reloaded_purge() {
        global 
$wpdb;

        if ( ( 
$autopurge_interval intvalget_option'subscribe_reloaded_purge_days') ) ) <= ) {
            return 
true;
        }

        
// First retrieve the emails to be deleted
        
$emailsToPurge "SELECT DISTINCT REPLACE(meta_key, '_stcr@_', '') AS email FROM $wpdb->postmeta
                          WHERE meta_key LIKE '\_stcr@\_%'
                          AND STR_TO_DATE(meta_value, '%Y-%m-%d %H:%i:%s') <= DATE_SUB(NOW(),
                          INTERVAL 
$autopurge_interval DAY) AND meta_value LIKE '%C'";

        
$emails $wpdb->get_results$emailsToPurgeOBJECT );
        
// Now if there are emails go ahead and delete them
        
if ( ! empty( $emails ) && is_array$emails ) ) {
            foreach( 
$emails as $row ) {
                
$this->remove_user_subscriber_table($row->email);
            }
        }
        
// Delete old entries on the post_meta table
        
$wpdb->query(
            
"
            DELETE FROM 
$wpdb->postmeta
            WHERE meta_key LIKE '\_stcr@\_%'
                AND STR_TO_DATE(meta_value, '%Y-%m-%d %H:%i:%s') <= DATE_SUB(NOW(), INTERVAL 
$autopurge_interval DAY) AND meta_value LIKE '%C'"
        
);
    }
    
// end subscribe_reloaded_purge

    /**
     * @param null|key $key the Unique Key of the email
     *
     * @return bool|String false if no key is found or the email if found.
     */
    
public function get_subscriber_email_by_key$key null) {
        global 
$wpdb;

        if( 
$key != null ) {
            
// Sanitize the key just for precaution.
            
$key trimesc_attr($key) );
            
// Check if the user is register and the unique key
            
$retrieveEmail "SELECT subscriber_email FROM "
                            
.$wpdb->prefix."subscribe_reloaded_subscribers WHERE subscriber_unique_id = %s";

            
$subscriber $wpdb->get_row($wpdb->prepare($retrieveEmail,$key), OBJECT);

            if( ! empty( 
$subscriber->subscriber_email ) ) {
                return 
$subscriber->subscriber_email;
            }
        }
        return 
false;
    }

    
/**
     * Checks if current logged in user is the author of this post
     */
    
public function is_author$_post_author ) {
        global 
$current_user;

        return ! empty( 
$current_user ) && ( ( $_post_author == $current_user->ID ) || current_user_can'manage_options' ) );
    }
    
// end is_author

    /**
     * Checks if a given email address is subscribed to a post
     */
    
public function is_user_subscribed$_post_ID 0$_email ''$_status '' ) {
        global 
$current_user;

        if ( ( empty( 
$current_user->user_email ) && empty( $_COOKIE['comment_author_email_' COOKIEHASH] ) && empty( $_email ) ) || empty( $_post_ID ) ) {
            return 
false;
        }

        
$operator      = ( $_status != '' ) ? 'equals' 'contains';
        
$subscriptions $this->get_subscriptions(
            array(
                
'post_id',
                
'status'
            
), array(
                
'equals',
                
$operator
            
), array(
                
$_post_ID,
                
$_status
            
)
        );

        if ( empty( 
$_email ) ) {
            
$user_email = ! empty( $current_user->user_email ) ? $current_user->user_email : ( ! empty( $_COOKIE['comment_author_email_' COOKIEHASH] ) ? stripslashesesc_attr$_COOKIE['comment_author_email_' COOKIEHASH] ) ) : '#undefined#' );
        } else {
            
$user_email $_email;
        }

        foreach ( 
$subscriptions as $a_subscription ) {
            if ( 
$user_email == $a_subscription->email ) {
                return 
true;
            }
        }

        return 
false;
    }
    
// end is_user_subscribed

    /**
     * Adds a new subscription
     */
    
public function add_subscription$_post_id 0$_email ''$_status 'Y' ) {
        global 
$wpdb;
        
// Does the post exist?
        
$target_post get_post$_post_id );
        if ( ( 
$_post_id ) && ! is_object$target_post ) ) {
            return;
        }

        
// Filter unwanted statuses
        
if ( ! in_array$_status, array( 'Y''YC''R''RC''C''-C' ) ) || empty( $_status ) ) {
            return;
        }

        
// Using Wordpress local time
        
$dt date_i18n'Y-m-d H:i:s' );

        
$clean_email $this->clean_email$_email );
        
$wpdb->query(
            
$wpdb->prepare(
                
"
            INSERT IGNORE INTO 
$wpdb->postmeta (post_id, meta_key, meta_value)
                SELECT %d, %s, %s
                FROM DUAL
                WHERE NOT EXISTS (
                    SELECT post_id
                    FROM 
$wpdb->postmeta
                    WHERE post_id = %d
                        AND meta_key = %s
                    LIMIT 0,1
                )"
$_post_id"_stcr@_$clean_email""$dt|$_status"$_post_id"_stcr@_$clean_email"
            
)
        );

        
$OK $this->add_user_subscriber_table$clean_email );
        if ( ! 
$OK) {
            
// Catch the error
        
}
    }
    
// end add_subscription

    /**
     * Deletes one or more subscriptions from the database
     */
    
public function delete_subscriptions$_post_id 0$_email '' ) {
        global 
$wpdb;
        
$has_subscriptions false;

        if ( empty( 
$_post_id ) ) {
            return 
0;
        }

        
$posts_where '';
        if ( ! 
is_array$_post_id ) ) {
            
$posts_where "post_id = " intval$_post_id );
        } else {
            foreach ( 
$_post_id as $a_post_id ) {
                
$posts_where .= "post_id = '" intval$a_post_id ) . "' OR ";
            }

            
$posts_where substr$posts_where0, - );
        }

        if ( ! empty( 
$_email ) ) {
            
$emails_where '';
            if ( ! 
is_array$_email ) ) {
                
$emails_where "meta_key = '_stcr@_" $this->clean_email$_email ) . "'";
                
$has_subscriptions $this->retrieve_user_subscriptions$_post_id$_email );
                if( 
$has_subscriptions === false) {
                    
$this->remove_user_subscriber_table$_email );
                }
            } else {
                foreach ( 
$_email as $a_email ) {
                    
$emails_where .= "meta_key = '_stcr@_" $this->clean_email$a_email ) . "' OR ";
                    
// Deletion on every email on the subscribers table.
                    
$has_subscriptions $this->retrieve_user_subscriptions$_post_id$a_email );
                    if( 
$has_subscriptions === false ) {
                        
$this->remove_user_subscriber_table$a_email );
                    }
                }

                
$emails_where substr$emails_where0, - );
            }
            return 
$wpdb->query"DELETE FROM $wpdb->postmeta WHERE ($posts_where) AND ($emails_where)" );
        } else {
            return 
$wpdb->query"DELETE FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%' AND ($posts_where)" );
        }
    }
    
// end delete_subscriptions

    /**
     * The function must search for subscription by a given post id.
     *
     * @param      $_post_id The post ID to search
     * @param       $_email     The user email, use to search the subscriptions.
     * @param bool $in        If set to true the search will return the subscription information, if false then it
     *                        should retrieve all the subscriptions but not the given.
     *
     * @return bool|object     If $in is true then it could return the subscription or false, false means not found,
     *                         if $in is false the it could return the subscriptions or false, false means not found
     */
    
public function retrieve_user_subscriptions$_post_id$_email$in false ) {
        global 
$wpdb;
        
$meta_key '_stcr@_';
        
$in_values '';

        if( ! 
is_array$_post_id ) ){
            if ( ! 
$in ) {
                
$retrieve_subscriptions "SELECT * FROM $wpdb->postmeta WHERE post_id <> %d AND meta_key = %s";
            } else if ( 
$in ) {
                
$retrieve_subscriptions "SELECT * FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s";
            }
            
$result =$wpdb->get_results($wpdb->prepare$retrieve_subscriptions$_post_id$meta_key.$_email ), OBJECT);
        } else {
//            foreach( $_post_id as $key => $id ){
//                $_post_id[$key] = "'" . $id . "'";
//            }
            
$in_values implode",",$_post_id );
            if ( ! 
$in ) {
                
$retrieve_subscriptions "SELECT * FROM $wpdb->postmeta WHERE post_id NOT IN ($in_values) AND meta_key = %s";
            } else if ( 
$in ) {
                
$retrieve_subscriptions "SELECT * FROM $wpdb->postmeta WHERE post_id IN ($in_values) AND meta_key = %s";
            }
            
$result =$wpdb->get_results($wpdb->prepare$retrieve_subscriptions$meta_key.$_email ), OBJECT);
        }

        return 
$result === false || $result == || empty( $result ) ? false $result;
    }

    
/**
     * Updates the status of an existing subscription
     */
    
public function update_subscription_status$_post_id 0$_email ''$_new_status 'C' ) {
        global 
$wpdb;

        
// Filter unwanted statuses
        
if ( empty( $_new_status ) || ! in_array$_new_status, array( 'Y''R''C''-C' ) ) || empty( $_email ) ) {
            return 
0;
        }

        if ( ! empty( 
$_post_id ) ) {
            
$posts_where '';
            if ( ! 
is_array$_post_id ) ) {
                
$posts_where "post_id = " intval$_post_id );
            } else {
                foreach ( 
$_post_id as $a_post_id ) {
                    
$posts_where .= "post_id = '" intval$a_post_id ) . "' OR ";
                }

                
$posts_where substr$posts_where0, - );
            }
        } else { 
// Mass update subscriptions
            
$posts_where '1=1';
        }

        
$emails_where '';
        if ( ! 
is_array$_email ) ) {
            
$emails_where "meta_key = '_stcr@_" $this->clean_email$_email ) . "'";
        } else {
            foreach ( 
$_email as $a_email ) {
                
$emails_where .= "meta_key = '_stcr@_" $this->clean_email$a_email ) . "' OR ";
            }

            
$emails_where substr$emails_where0, - );
        }

        
$meta_length = ( strpos$_new_status'C' ) !== false ) ? 21 20;
        
$new_status  = ( $_new_status == '-C' ) ? '' $_new_status;

        return 
$wpdb->query(
            
"
            UPDATE 
$wpdb->postmeta
            SET meta_value = CONCAT(SUBSTRING(meta_value, 1, 
$meta_length), '$new_status')
            WHERE (
$posts_where) AND ($emails_where)"
        
);
    }
    
// end update_subscription_status

    /**
     * Updates the email address of an existing subscription
     */
    
public function update_subscription_email$_post_id 0$_email ''$_new_email '' ) {
        global 
$wpdb;

        
// Nothing to do if the new email hasn't been specified
        
if ( empty( $_email ) || empty( $_new_email ) || strpos$_new_email'@' ) == ) {
            return;
        }

        
$clean_values[] = "_stcr@_" $this->clean_email$_new_email );
        
$clean_values[] = "_stcr@_" $this->clean_email$_email );
        
$post_where     '';
        if ( ! empty( 
$_post_id ) ) {
            
$post_where     ' AND post_id = %d';
            
$clean_values[] = $_post_id;
        }

        
$rowsAffected $wpdb->query(
                            
$wpdb->prepare("UPDATE $wpdb->postmeta SET meta_key = %s  WHERE meta_key = %s $post_where",
                            
$clean_values )
                        );

        if ( 
$rowsAffected 0  || $rowsAffected !== false) {
            
$salt time();
            
$rowsAffected $wpdb->query(
                
$wpdb->prepare("UPDATE "$wpdb->prefix .
                               
"subscribe_reloaded_subscribers SET subscriber_email = %s,
                                salt = %d,
                                subscriber_unique_id = %s
                                 WHERE subscriber_email = %s"
,
                                
$_new_email$salt$this->generate_temp_key$salt $_new_email ),$_email )
            );
        }
        return 
false;
    }
    
// end update_subscription_email

    /**
     * Retrieves a list of emails subscribed to this post
     */
    
public function get_subscriptions$_search_field = array( 'email' ), $_operator = array( 'equals' ), $_search_value = array( '' ), $_order_by 'dt'$_order 'ASC'$_offset 0$_limit_results ) {
        global 
$wpdb;

        
// Type adjustments
        
$search_fields = ( ! is_array$_search_field ) ) ? array( $_search_field ) : $_search_field;
        
$operators     = ( ! is_array$_operator ) ) ? array( $_operator ) : $_operator;
        
$search_values = ( ! is_array$_search_value ) ) ? array( $_search_value ) : $_search_value;

        
// Find if exists a 'replies only' subscription for the parent comment
        
if ( $search_fields[0] == 'parent' ) {

            
$parent_comment_id $search_values[0];
            
$comment_post_id   $search_values[1];

            
// Get the parent comment author email so we can search for any Replies Only subscriptions
            
$parent_comment_author_email "\_stcr@\_" get_comment_author_email$parent_comment_id );

            
// Check if $parent_comment_author_email has any Replies Only (R) subscriptions for $comment_post_id

            /*
                            Heads up: this will return Replies Only subscriptions for a given post, *not* for a given comment.
                            This plugin does not track subscriptions for specific comments but rather for entire posts, so there
                            is no way to figure out if a specific parent comment has a subscription (of any type). To make the
                            Replies Only feature half-work, we check if a parent comment author has *any* Replies Only subscriptions
                            for a given post. If they do, we assume that they must want to get notified of replies to *any* of their
                            comments on *that* post.
            */

            
return $wpdb->get_results(
                
$wpdb->prepare(
                    
"
                SELECT pm.meta_id, REPLACE(pm.meta_key, '_stcr@_', '') AS email, pm.post_id, SUBSTRING(pm.meta_value, 1, 19) AS dt, SUBSTRING(pm.meta_value, 21) AS status
                FROM 
$wpdb->postmeta pm
                WHERE pm.meta_key LIKE %s
                    AND pm.meta_value LIKE '%%R'
                    AND pm.post_id = %d"
$parent_comment_author_email$comment_post_id
                
), OBJECT
            
);
        } else {
            
$where_clause '';
            foreach ( 
$search_fields as $a_idx => $a_field ) {
                
$where_clause .= ' AND';
                
$offset_status = ( $a_field == 'status' && $search_values[$a_idx] == 'C' ) ? 22 21;
                switch ( 
$a_field ) {
                    case 
'status':
                        
$where_clause .= " SUBSTRING(meta_value, $offset_status)";
                        break;
                    case 
'post_id':
                        
$where_clause .= ' post_id';
                        break;
                    default:
                        
$where_clause .= ' SUBSTRING(meta_key, 8)';
                }
                switch ( 
$operators[$a_idx] ) {
                    case 
'equals':
                        
$where_clause .= " = %s";
                        
$where_values[] = $search_values[$a_idx];
                        break;
                    case 
'does not contain':
                        
$where_clause .= " NOT LIKE %s";
                        
$where_values[] = "%{$search_values[$a_idx]}%";
                        break;
                    case 
'starts with':
                        
$where_clause .= " LIKE %s";
                        
$where_values[] = "{$search_values[$a_idx]}%";
                        break;
                    case 
'ends with':
                        
$where_clause .= " LIKE %s";
                        
$where_values[] = "%{$search_values[$a_idx]}";
                        break;
                    default: 
// contains
                        
$where_clause .= " LIKE %s";
                        
$where_values[] = "%{$search_values[$a_idx]}%";
                }
            }
            switch ( 
$_order_by ) {
                case 
'status':
                    
$order_by "status";
                    break;
                case 
'email':
                    
$order_by 'meta_key';
                    break;
                case 
'dt':
                    
$order_by 'dt';
                    break;
                default:
                    
$order_by 'post_id';
            }
            
$order = ( $_order != 'ASC' && $_order != 'DESC' ) ? 'DESC' $_order;

            
// This is the 'official' way to have an offset without a limit
            
$row_count = ( $_limit_results <= ) ? '18446744073709551610' $_limit_results;

            return 
$wpdb->get_results(
                
$wpdb->prepare(
                    
"
                SELECT meta_id, REPLACE(meta_key, '_stcr@_', '') AS email, post_id, SUBSTRING(meta_value, 1, 19) AS dt, SUBSTRING(meta_value, 21) AS status
                FROM 
$wpdb->postmeta
                WHERE meta_key LIKE '\_stcr@\_%%' 
$where_clause
                ORDER BY 
$order_by $order
                LIMIT 
$_offset,$row_count"$where_values
                
), OBJECT
            
);
        }
    }
    
// end get_subscriptions

    /**
     * Sends a message to confirm a subscription
     */
    
public function confirmation_email$_post_ID 0$_email '' ) {
        
// Retrieve the options from the database
        
$from_name    stripslashesget_option'subscribe_reloaded_from_name''admin' ) );
        
$from_email   get_option'subscribe_reloaded_from_email'get_bloginfo'admin_email' ) );
        
$subject      html_entity_decodestripslashesget_option'subscribe_reloaded_double_check_subject''Please confirm your subscribtion to [post_title]' ) ), ENT_COMPAT'UTF-8' );
        
$message      html_entity_decodestripslashesget_option'subscribe_reloaded_double_check_content''' ) ), ENT_COMPAT'UTF-8' );
        
$manager_link get_bloginfo'url' ) . get_option'subscribe_reloaded_manager_page''/comment-subscriptions/' );
        if ( 
function_exists'qtrans_convertURL' ) ) {
            
$manager_link qtrans_convertURL$manager_link );
        }

        
$clean_email     $this->clean_email$_email );
        
$subscriber_salt $this->generate_temp_key$clean_email );

        
$this->add_user_subscriber_table$clean_email );

        
$manager_link .= ( ( strpos$manager_link'?' ) !== false ) ? '&' '?' ) . "sre=" $this->get_subscriber_key$clean_email ) . "&srk=$subscriber_salt";
        
$confirm_link "$manager_link&srp=$_post_ID&sra=c";

        
$headers      "From: $from_name <$from_email>\n";
        
$content_type = ( get_option'subscribe_reloaded_enable_html_emails''no' ) == 'yes' ) ? 'text/html' 'text/plain';
        
$headers .= "Content-Type: $content_type; charset=" get_bloginfo'charset' ) . "\n";

        
$post           get_post$_post_ID );
        
$post_permalink get_permalink$_post_ID );

        
// Replace tags with their actual values
        
$subject str_replace'[post_title]'$post->post_title$subject );

        
$message str_replace'[post_permalink]'$post_permalink$message );
        
$message str_replace'[confirm_link]'$confirm_link$message );
        
$message str_replace'[manager_link]'$manager_link$message );

        
// QTranslate support
        
if ( function_exists'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
            
$subject qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$subject );
            
$message str_replace'[post_title]'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$post->post_title ), $message );
            
$message qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$message );
        } else {
            
$message str_replace'[post_title]'$post->post_title$message );
        }
        
$message apply_filters'stcr_confirmation_email_message'$message$_post_ID$clean_email );
        if ( 
$content_type == 'text/html' ) {
            if ( 
get_option'subscribe_reloaded_htmlify_message_links' ) == 'yes' ) {
                
$message $this->htmlify_message_links$message );
            }
            
$message $this->wrap_html_message$message$subject );
        }

        
wp_mail$clean_email$subject$message$headers );
    }
    
// end confirmation_email

    /**
     * Sends the notification message to a given user
     */
    
public function notify_user$_post_ID 0$_email ''$_comment_ID ) {
        
// Retrieve the options from the database
        
$from_name    html_entity_decodestripslashesget_option'subscribe_reloaded_from_name''admin' ) ), ENT_QUOTES'UTF-8' );
        
$from_email   get_option'subscribe_reloaded_from_email'get_bloginfo'admin_email' ) );
        
$subject      html_entity_decodestripslashesget_option'subscribe_reloaded_notification_subject''There is a new comment on the post [post_title]' ) ), ENT_QUOTES'UTF-8' );
        
$message      html_entity_decodestripslashesget_option'subscribe_reloaded_notification_content''' ) ), ENT_COMPAT'UTF-8' );
        
$manager_link get_bloginfo'url' ) . get_option'subscribe_reloaded_manager_page''/comment-subscriptions/' );
        if ( 
function_exists'qtrans_convertURL' ) ) {
            
$manager_link qtrans_convertURL$manager_link );
        }

        
$clean_email     $this->clean_email$_email );
        
$subscriber_salt $this->generate_temp_key$clean_email );

        
$manager_link .= ( ( strpos$manager_link'?' ) !== false ) ? '&' '?' ) . "sre=" $this->get_subscriber_key$clean_email ) . "&srk=$subscriber_salt";

        
$headers      "From: $from_name <$from_email>\n";
        
$content_type = ( get_option'subscribe_reloaded_enable_html_emails''no' ) == 'yes' ) ? 'text/html' 'text/plain';
        
$headers .= "Content-Type: $content_type; charset=" get_bloginfo'charset' ) . "\n";

        if ( 
get_option'subscribe_reloaded_admin_bcc''no' ) == 'yes' ) {
            
$headers .= "Bcc: $from_name <$from_email>\n";
        }

        
$post                    get_post$_post_ID );
        
$comment                 get_comment$_comment_ID );
        
$post_permalink          get_permalink$_post_ID );
        
$comment_permalink       get_comment_link$_comment_ID );
        
$comment_reply_permalink get_permalink$_post_ID ) . '?replytocom=' $_comment_ID '#respond';

        
$comment_content $comment->comment_content;

        
// Add HTML paragraph tags to comment
        // See wp-includes/formatting.php for details on the wpautop() function
        
if ( $content_type == 'text/html' ) {
            
$comment_content wpautop$comment->comment_content );
        }

        
// Replace tags with their actual values
        
$subject str_replace'[post_title]'$post->post_title$subject );

        
$message str_replace'[post_permalink]'$post_permalink$message );
        
$message str_replace'[comment_permalink]'$comment_permalink$message );
        
$message str_replace'[comment_reply_permalink]'$comment_reply_permalink$message );
        
$message str_replace'[comment_author]'$comment->comment_author$message );
        
$message str_replace'[comment_content]'$comment_content$message );
        
$message str_replace'[manager_link]'$manager_link$message );

        
// QTranslate support
        
if ( function_exists'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
            
$subject qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$subject );
            
$message str_replace'[post_title]'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$post->post_title ), $message );
            
$message qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage$message );
        } else {
            
$message str_replace'[post_title]'$post->post_title$message );
        }
        
$message apply_filters'stcr_notify_user_message'$message$_post_ID$_email$_comment_ID );
        if ( 
$content_type == 'text/html' ) {
            if ( 
get_option'subscribe_reloaded_htmlify_message_links' ) == 'yes' ) {
                
$message $this->htmlify_message_links$message );
            }
            
$message $this->wrap_html_message$message$subject );
        }

        
wp_mail$clean_email$subject$message$headers );
    }
    
// end notify_user

    /**
     * Finds all links in text and wraps them with an HTML anchor tag
     *
     * @param unknown $text
     *
     * @return string Text with all links wrapped in HTML anchor tags
     *
     */
    
public function htmlify_message_links$text ) {
        return 
preg_replace'!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i''<a href="$1">$1</a>'$text );
    }

    
/**
     * Generate a unique key to allow users to manage their subscriptions
     */
    
public function generate_key$_email "" ) {
        
$salt      time();
        
$dd_salt   md5$salt );
        
$uniqueKey md5$dd_salt $salt $_email );

        return 
$uniqueKey;
    }

    public function 
generate_temp_key$_email ) {
        
$uniqueKey get_option"subscribe_reloaded_unique_key" );
        
$key       md5$uniqueKey $_email );

        return 
$key;
    }
    
// end generate_key

    /**
     * Creates the HTML structure to properly handle HTML messages
     */
    
public function wrap_html_message$_message ''$_subject '' ) {
        
$_message apply_filters'stcr_wrap_html_message'$_message );

        return 
"<html><head><title>$_subject</title></head><body>$_message</body></html>";
    }
    
// end _wrap_html_message

    /**
     * Returns an email address where some possible 'offending' strings have been removed
     */
    
public function clean_email$_email ) {
        
$offending_strings = array(
            
"/to\:/i",
            
"/from\:/i",
            
"/bcc\:/i",
            
"/cc\:/i",
            
"/content\-transfer\-encoding\:/i",
            
"/content\-type\:/i",
            
"/mime\-version\:/i"
        
);

        return 
esc_attrstripslashesstrip_tagspreg_replace$offending_strings''$_email ) ) ) );
    }
    
// end clean_email

    /**
     * Adds a new entry in the admin menu, to manage this plugin's options
     */
    
public function add_config_menu$_s ) {
        global 
$current_user;

        if ( 
current_user_can'manage_options' ) ) {
            
add_options_page'Subscribe to Comments''Subscribe to Comments''manage_options'WP_PLUGIN_DIR '/subscribe-to-comments-reloaded/options/index.php' );
        }

        return 
$_s;
    }
    
// end add_config_menu

    /**
     * Adds a custom stylesheet file to the admin interface
     */
    
public function add_options_stylesheet() {
        
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
        
$stylesheet_url = ( is_ssl() ? str_replace'http://''https://'WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/style.css';
        
wp_register_style'subscribe-to-comments'$stylesheet_url );
        
wp_enqueue_style'subscribe-to-comments' );
    }

    public function 
add_post_comments_stylesheet() {
        
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
        
$stylesheet_url = ( is_ssl() ? str_replace'http://''https://'WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/post-and-comments.css';
        
wp_register_style'subscribe-to-comments'$stylesheet_url );
        
wp_enqueue_style'subscribe-to-comments' );
    }
    
// end add_stylesheet

    /**
     * Adds custom HTML code to the HEAD section of the management page
     */
    
public function add_custom_header_meta() {
        
$a html_entity_decodestripslashesget_option'subscribe_reloaded_custom_header_meta''' ) ), ENT_QUOTES'UTF-8' );
        echo 
$a;
    }
    
// end add_custom_header_meta

    /**
     * Adds a new column header to the Edit Comments panel
     */
    
public function add_column_header$_columns ) {
        
$image_url                      = ( is_ssl() ? str_replace'http://''https://'WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/images';
        
$_columns['subscribe-reloaded'] = "<img src='$image_url/subscribe-to-comments-small.png' width='17' height='12' alt='Subscriptions' />";

        return 
$_columns;
    }
    
// end add_comment_column_header

    /**
     * Adds a new column to the Edit Comments panel
     */
    
public function add_comment_column$_column_name ) {
        if ( 
'subscribe-reloaded' != $_column_name ) {
            return;
        }

        global 
$comment;
        
$subscription $this->get_subscriptions(
            array(
                
'post_id',
                
'email'
            
), array(
                
'equals',
                
'equals'
            
), array(
                
$comment->comment_post_ID,
                
$comment->comment_author_email
            
), 'dt''DESC'01
        
);
        if ( 
count$subscription ) == ) {
            
_e'No''subscribe-reloaded' );
        } else {
            echo 
'<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&amp;srf=email&amp;srt=equals&amp;srv=' urlencode$comment->comment_author_email ) . '">' $subscription[0]->status '</a>';
        }
    }
    
// end add_column

    /**
     * Adds a new column to the Posts management panel
     */
    
public function add_post_column$_column_name ) {
        if ( 
'subscribe-reloaded' != $_column_name ) {
            return;
        }

        global 
$post;
        
load_plugin_textdomain'subscribe-reloaded'falsedirnameplugin_basename__FILE__ ) ) . '/langs/' );
        echo 
'<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&amp;srf=post_id&amp;srt=equals&amp;srv=' $post->ID '">' count$this->get_subscriptions'post_id''equals'$post->ID ) ) . '</a>';
    }
    
// end add_column

    /**
     * Contextual help (link to the support forum)
     */
    
public function contextual_help$contextual_help$screen_id$screen ) {
        if ( 
$screen_id == 'subscribe-to-comments-reloaded/options/index' ) {
            
load_plugin_textdomain'subscribe-reloaded'falsedirnameplugin_basename__FILE__ ) ) . '/langs/' );
            
$contextual_help __'Need help on how to use Subscribe to Comments Reloaded? Visit the official''subscribe-reloaded' ) . ' <a href="http://wordpress.org/tags/subscribe-to-comments-reloaded?forum_id=10" target="_blank">' __'support forum''subscribe-reloaded' ) . '</a>. ';
            
$contextual_help .= __'Feeling generous?''subscribe-reloaded' ) . ' <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XF86X93FDCGYA&lc=US&item_name=Datasoft%20Engineering&item_number=DI%2dSTCR&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" target="_blank">' __'Donate a few bucks!''subscribe-reloaded' ) . '</a>';
        }

        return 
$contextual_help;
    }
    
// end contextual_help

    /**
     * Returns the URL of the management page as a shortcode
     */
    
public function subscribe_url_shortcode() {
        global 
$post;
        
$user_link get_bloginfo'url' ) . get_option'subscribe_reloaded_manager_page''' );
        if ( 
function_exists'qtrans_convertURL' ) ) {
            
$user_link qtrans_convertURL$user_link );
        }
        if ( 
strpos$user_link'?' ) !== false ) {
            return 
"$user_link&amp;srp=$post->ID&amp;sra=s";
        } else {
            return 
"$user_link?srp=$post->ID&amp;sra=s";
        }
    }
    
// end subscribe_url_shortcode


    /**
     * Retrieves the comment information from the databse
     */
    
private function _get_comment_object$_comment_ID ) {
        global 
$wpdb;

        return 
$wpdb->get_row(
            
$wpdb->prepare(
                
"
            SELECT comment_post_ID, comment_author_email, comment_approved, comment_type, comment_parent
            FROM 
$wpdb->comments
            WHERE comment_ID = %d LIMIT 1"
$_comment_ID
            
), OBJECT
        
);
    }
    
// end _get_comment_object

    /**
     * Checks if a key is valid for a given email address
     */
    
private function _is_valid_key$_key$_email ) {
        if ( 
$this->generate_temp_key$_email ) === $_key ) {
            return 
true;
        } else {
            return 
false;
        }
    }
    
// end _is_valid_key
}

// end of class declaration

// Bootstrap the whole thing
$wp_subscribe_reloaded = new wp_subscribe_reloaded();
// Set a cookie if the user just subscribed without commenting
$subscribe_to_comments_action  = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : );
$subscribe_to_comments_post_ID = ! empty( $_POST['srp'] ) ? intval$_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval$_GET['srp'] ) : );

if ( ! empty( 
$subscribe_to_comments_action ) && ! empty( $_POST['subscribe_reloaded_email'] ) &&
    ( 
$subscribe_to_comments_action == 's' ) && ( $subscribe_to_comments_post_ID )
) {
    
$subscribe_to_comments_clean_email $wp_subscribe_reloaded->clean_email$_POST['subscribe_reloaded_email'] );
    
setcookie'comment_author_email' COOKIEHASH$subscribe_to_comments_clean_emailtime() + 1209600'/' );
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--