2021-07-25 23:28:47 +00:00
< ? php
class S2_Frontend extends S2_Core {
/**
* Load all our strings
*/
public function load_strings () {
// Translators: Link to login page
$this -> please_log_in = '<p class="s2_message">' . sprintf ( __ ( 'To manage your subscription options please <a href="%1$s">login</a>.' , 'subscribe2' ), get_option ( 'siteurl' ) . '/wp-login.php' ) . '</p>' ;
$profile = apply_filters ( 's2_profile_link' , get_option ( 'siteurl' ) . '/wp-admin/admin.php?page=s2' );
// Translators: Link to Profile page
$this -> profile = '<p class="s2_message">' . sprintf ( __ ( 'You may manage your subscription options from your <a href="%1$s">profile</a>.' , 'subscribe2' ), $profile ) . '</p>' ;
if ( true === $this -> s2_mu ) {
global $blog_id ;
$user_ID = get_current_user_id ();
if ( ! is_user_member_of_blog ( $user_ID , $blog_id ) ) {
// if we are on multisite and the user is not a member of this blog change the link
$mu_profile = apply_filters ( 's2_mu_profile_link' , get_option ( 'siteurl' ) . '/wp-admin/?s2mu_subscribe=' . $blog_id );
// Translators: Link to Profile page
$this -> profile = '<p class="s2_message">' . sprintf ( __ ( '<a href="%1$s">Subscribe</a> to email notifications when this blog posts new content.' , 'subscribe2' ), $mu_profile ) . '</p>' ;
}
}
$this -> confirmation_sent = '<p class="s2_message">' . __ ( 'A confirmation message is on its way!' , 'subscribe2' ) . '</p>' ;
$this -> already_subscribed = '<p class="s2_error">' . __ ( 'That email address is already subscribed.' , 'subscribe2' ) . '</p>' ;
$this -> not_subscribed = '<p class="s2_error">' . __ ( 'That email address is not subscribed.' , 'subscribe2' ) . '</p>' ;
$this -> not_an_email = '<p class="s2_error">' . __ ( 'Sorry, but that does not look like an email address to me.' , 'subscribe2' ) . '</p>' ;
$this -> barred_domain = '<p class="s2_error">' . __ ( 'Sorry, email addresses at that domain are currently barred due to spam, please use an alternative email address.' , 'subscribe2' ) . '</p>' ;
$this -> error = '<p class="s2_error">' . __ ( 'Sorry, there seems to be an error on the server. Please try again later.' , 'subscribe2' ) . '</p>' ;
// confirmation messages
$this -> no_such_email = '<p class="s2_error">' . __ ( 'No such email address is registered.' , 'subscribe2' ) . '</p>' ;
$this -> added = '<p class="s2_message">' . __ ( 'You have successfully subscribed!' , 'subscribe2' ) . '</p>' ;
$this -> deleted = '<p class="s2_message">' . __ ( 'You have successfully unsubscribed.' , 'subscribe2' ) . '</p>' ;
$this -> subscribe = __ ( 'subscribe' , 'subscribe2' ); //ACTION replacement in subscribing confirmation email
$this -> unsubscribe = __ ( 'unsubscribe' , 'subscribe2' ); //ACTION replacement in unsubscribing in confirmation email
if ( isset ( $_GET [ 's2_unsub' ] ) && ! empty ( $_GET [ 's2_unsub' ] ) ) {
$this -> unsubscribe ( $_GET [ 's2_unsub' ] );
}
}
/**
* Process unsubscribe
*
* @ param $email
*/
public function unsubscribe ( $email ) {
global $wpdb ;
$email = base64_decode ( $email );
if ( ! filter_var ( $email , FILTER_VALIDATE_EMAIL ) ) {
return ;
}
$count = $wpdb -> delete ( $wpdb -> subscribe2 ,
[
'email' => $email
]
);
if ( ! $count ) {
wp_safe_redirect ( home_url () );
}
}
/**
* Display form when deprecated <!-- subscribe2 --> is used
*/
public function filter ( $content = '' ) {
if ( '' === $content || ! strstr ( $content , '<!--subscribe2-->' ) ) {
return $content ;
}
return preg_replace ( '/(<p>)?(\n)*<!--subscribe2-->(\n)*(<\/p>)?/' , do_shortcode ( '[subscribe2]' ), $content );
}
/**
* Overrides the default query when handling a ( un ) subscription confirmation
* This is basically a trick : if the s2 variable is in the query string , just grab the first
* static page and override it ' s contents later with title_filter ()
*/
public function query_filter () {
// don't interfere if we've already done our thing
if ( 1 === $this -> filtered ) {
return ;
}
global $wpdb ;
// brute force Simple Facebook Connect to bypass compatiblity issues
$priority = has_filter ( 'wp_head' , 'sfc_base_meta' );
if ( false !== $priority ) {
remove_action ( 'wp_head' , 'sfc_base_meta' , $priority );
}
if ( 0 !== $this -> subscribe2_options [ 's2page' ] ) {
return array (
'page_id' => $this -> subscribe2_options [ 's2page' ],
);
} else {
$id = $wpdb -> get_var ( " SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' LIMIT 1 " );
if ( $id ) {
return array (
'page_id' => $id ,
);
} else {
return array (
'showposts' => 1 ,
);
}
}
}
/**
* Overrides the page title
*/
public function title_filter ( $title ) {
if ( in_the_loop () ) {
$code = $_GET [ 's2' ];
$action = intval ( substr ( $code , 0 , 1 ) );
if ( 1 === $action ) {
return __ ( 'Subscription Confirmation' , 'subscribe2' );
} else {
return __ ( 'Unsubscription Confirmation' , 'subscribe2' );
}
} else {
return $title ;
}
}
/**
* Confirm request from the link emailed to the user and email the admin
*/
public function confirm ( $content = '' ) {
global $wpdb ;
if ( 1 === $this -> filtered && '' !== $this -> message ) {
return $this -> message ;
} elseif ( 1 === $this -> filtered ) {
return $content ;
}
$code = $_GET [ 's2' ];
$action = substr ( $code , 0 , 1 );
$hash = substr ( $code , 1 , 32 );
$id = intval ( substr ( $code , 33 ) );
if ( $id ) {
$this -> email = $this -> sanitize_email ( $this -> get_email ( $id ) );
if ( ! $this -> email || wp_hash ( $this -> email ) !== $hash ) {
return $this -> no_such_email ;
}
} else {
return $this -> no_such_email ;
}
// get current status of email so messages are only sent once per emailed link
$current = $this -> is_public ( $this -> email );
if ( '1' === $action ) {
// make this subscription active
$this -> message = apply_filters ( 's2_subscribe_confirmed' , $this -> added );
if ( '1' !== $this -> is_public ( $this -> email ) ) {
$this -> ip = esc_html ( $this -> get_remote_ip () );
$this -> toggle ( $this -> email );
if ( 'subs' === $this -> subscribe2_options [ 'admin_email' ] || 'both' === $this -> subscribe2_options [ 'admin_email' ] ) {
$this -> admin_email ( 'subscribe' );
}
}
$this -> filtered = 1 ;
} elseif ( '0' === $action ) {
// remove this public subscriber
$this -> message = apply_filters ( 's2_unsubscribe_confirmed' , $this -> deleted );
if ( '0' !== $this -> is_public ( $this -> email ) ) {
$this -> delete ( $this -> email );
if ( 'unsubs' === $this -> subscribe2_options [ 'admin_email' ] || 'both' === $this -> subscribe2_options [ 'admin_email' ] ) {
$this -> admin_email ( 'unsubscribe' );
}
}
$this -> filtered = 1 ;
}
if ( '' !== $this -> message ) {
return $this -> message ;
}
}
/**
* Prepare and send emails to admins on new subscriptions and unsubsriptions
*/
public function admin_email ( $action ) {
if ( ! in_array ( $action , array ( 'subscribe' , 'unsubscribe' ), true ) ) {
return false ;
}
( '' === get_option ( 'blogname' ) ) ? $subject = '' : $subject = '[' . stripslashes ( html_entity_decode ( get_option ( 'blogname' ), ENT_QUOTES ) ) . '] ' ;
if ( 'subscribe' === $action ) {
$subject .= __ ( 'New Subscription' , 'subscribe2' );
$message = $this -> email . ' ' . __ ( 'subscribed to email notifications!' , 'subscribe2' );
} elseif ( 'unsubscribe' === $action ) {
$subject .= __ ( 'New Unsubscription' , 'subscribe2' );
$message = $this -> email . ' ' . __ ( 'unsubscribed from email notifications!' , 'subscribe2' );
}
$subject = html_entity_decode ( $subject , ENT_QUOTES );
$role = array (
'fields' => array (
'user_email' ,
),
'role' => 'administrator' ,
);
$wp_user_query = get_users ( $role );
foreach ( $wp_user_query as $user ) {
$recipients [] = $user -> user_email ;
}
$recipients = apply_filters ( 's2_admin_email' , $recipients , $action );
$headers = $this -> headers ();
// send individual emails so we don't reveal admin emails to each other
foreach ( $recipients as $recipient ) {
$status = wp_mail ( $recipient , $subject , $message , $headers );
}
}
/**
* Add hook for Minimeta Widget plugin
*/
public function add_minimeta () {
if ( 0 !== $this -> subscribe2_options [ 's2page' ] ) {
echo '<li><a href="' . esc_url ( get_permalink ( $this -> subscribe2_options [ 's2page' ] ) ) . '">' . esc_html__ ( '[Un]Subscribe to Posts' , 'subscribe2' ) . '</a></li>' . " \r \n " ;
}
}
/**
* Check email is not from a barred domain
*/
public function is_barred ( $email = '' ) {
if ( '' === $email ) {
return false ;
}
list ( $user , $domain ) = explode ( '@' , $email , 2 );
$domain = '@' . $domain ;
foreach ( preg_split ( '/[\s,]+/' , $this -> subscribe2_options [ 'barred' ] ) as $barred_domain ) {
if ( false !== strpos ( $barred_domain , '!' ) ) {
$url = explode ( '.' , str_replace ( '!' , '' , $barred_domain ) );
$count = count ( $url );
// make sure our exploded domain has at least 2 components e.g. yahoo.*
if ( $count < 2 ) {
continue ;
}
for ( $i = 0 ; $i < $count ; $i ++ ) {
if ( '*' === $url [ $i ] ) {
unset ( $url [ $i ] );
}
}
$new_barred_domain = '@' . strtolower ( trim ( implode ( '.' , $url ) ) );
if ( false !== strpos ( $barred_domain , '*' ) ) {
$new_barred_subdomain = '.' . strtolower ( trim ( implode ( '.' , $url ) ) );
if ( false !== stripos ( $domain , $new_barred_domain ) || false !== stripos ( $domain , $new_barred_subdomain ) ) {
return false ;
}
} else {
if ( false !== stripos ( $domain , $new_barred_domain ) ) {
return false ;
}
}
}
if ( false === strpos ( $barred_domain , '!' ) && false !== strpos ( $barred_domain , '*' ) ) {
// wildcard and explictly allowed checking
$url = explode ( '.' , str_replace ( '!' , '' , $barred_domain ) );
$count = count ( $url );
// make sure our exploded domain has at least 2 components e.g. yahoo.*
if ( $count < 2 ) {
continue ;
}
for ( $i = 0 ; $i < $count ; $i ++ ) {
if ( '*' === $url [ $i ] ) {
unset ( $url [ $i ] );
}
}
$new_barred_domain = '@' . strtolower ( trim ( implode ( '.' , $url ) ) );
$new_barred_subdomain = '.' . strtolower ( trim ( implode ( '.' , $url ) ) );
if ( false !== stripos ( $domain , $new_barred_domain ) || false !== stripos ( $domain , $new_barred_subdomain ) ) {
return true ;
}
} else {
// direct domain string comparison
$barred_domain = '@' . $barred_domain ;
if ( strtolower ( $domain ) === strtolower ( trim ( $barred_domain ) ) ) {
return true ;
}
}
}
return false ;
}
/**
* Enqueue javascript ip updater code
*/
public function js_ip_script () {
wp_register_script ( 's2_ip_updater' , S2URL . 'include/s2-ip-updater' . $this -> script_debug . '.js' , array (), '1.1' , true );
wp_enqueue_script ( 's2_ip_updater' );
}
/**
* Add ip updater library to footer
*/
public function js_ip_library_script () {
$args = array (
'format' => 'jsonp' ,
'callback' => 'getip' ,
);
wp_enqueue_script ( 's2_ip_library' , add_query_arg ( $args , 'https://api.ipify.org' ), array (), S2VERSION , true );
}
/**
* Reformat WordPress escaped link to IPify library
*/
public function tag_replace_ampersand ( $tag ) {
if ( strstr ( $tag , 'ipify' ) !== false ) {
$tag = str_replace ( '&' , '&' , $tag );
}
return $tag ;
}
/* ===== define some variables ===== */
public $profile = '' ;
2021-09-30 14:54:06 +00:00
/**
* Create and display a dropdown list of pages
*/
public function pages_dropdown ( $s2page , $name = 's2page' ) {
//
}
2021-07-25 23:28:47 +00:00
}