File "business-reviews.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/mojo-marketplace-wp-plugin/vendor/bluehost/endurance-wp-module-business-reviews/business-reviews.php
File size: 5.99 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* This file adds support for the business reviews module
*/
class EIG_Business_Reviews {
public $slug = 'eigbr';
public $name = 'eig-business-reviews';
public $sites_endpoint = 'https://my.bluehost.com/siteapi/sites';
public $domain;
/**
* Singleton
*
* @return EIG_Business_Reviews
*/
static function init() {
static $instance = false;
if ( ! $instance ) {
$instance = new EIG_Business_Reviews();
}
return $instance;
}
/**
* EIG_Business_Reviews constructor.
*/
public function __construct() {
include 'class-business-reviews-widget.php';
$this->domain = parse_url( get_option( 'siteurl' ), PHP_URL_HOST );
// Set up the widget
add_action( 'widgets_init', array( $this, 'widget_init' ) );
// Register and load our JS
add_action( 'wp_loaded', array( $this, 'register_assets' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'localize_scripts' ) );
// Register our ajax actions
add_action( "wp_ajax_{$this->slug}_feedback", array( $this, 'ajax_send_email' ) );
add_action( "wp_ajax_nopriv_{$this->slug}_feedback", array( $this, 'ajax_send_email' ) );
add_action( "wp_ajax_{$this->slug}_get_links", array( $this, 'ajax_get_links' ) );
add_action( "wp_ajax_nopriv_{$this->slug}_get_links", array( $this, 'ajax_get_links' ) );
}
/**
* Register required javascript and CSS files
*/
public function register_assets() {
wp_register_script( $this->name, plugin_dir_url( __FILE__ ) . '/assets/js/business-reviews.js', array( 'jquery' ), filemtime( plugin_dir_path( __FILE__ ) . 'assets/js/business-reviews.js' ), true );
wp_register_style( $this->name, plugin_dir_url( __FILE__ ) . '/assets/css/business-reviews.css', array(), filemtime( plugin_dir_path( __FILE__ ) . 'assets/css/business-reviews.css' ) );
}
/**
* Enqueue required javascript files
*/
public function enqueue_scripts() {
wp_enqueue_script( $this->name );
}
/**
* Add localized script to handle ajax nonce
*/
public function localize_scripts() {
$nonce = wp_create_nonce( "{$this->slug}_action" );
$localize = array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'actionSlug' => $this->slug,
'_ajax_nonce' => $nonce,
);
wp_localize_script( $this->name, $this->slug, $localize );
}
/**
* Initialize and register the Business Reviews widget
*/
public function widget_init() {
register_widget( 'EIG_Business_Reviews_Widget' );
}
/**
* Handle our AJAX response from the front-end
*/
public function ajax_get_links() {
if ( ! check_ajax_referer( "{$this->slug}_action", '_ajax_nonce', false ) ) {
wp_send_json_error( check_ajax_referer( "{$this->slug}_action", '_ajax_nonce', false ) );
};
wp_send_json( $this->get_links() );
}
/**
* Handle AJAX POST on the contact form
*/
public function ajax_send_email() {
if ( ! check_ajax_referer( "{$this->slug}_action", '_ajax_nonce', false ) ) {
wp_send_json_error( check_ajax_referer( "{$this->slug}_action", '_ajax_nonce', false ) );
};
// This is where we process the data and actually send the email
if ( is_email( $_POST['email'] ) ) {
$email = sanitize_email( $_POST['email'] );
} else {
wp_send_json_error( 'Invalid Email' );
}
$name = sanitize_text_field( $_POST['name'] );
$message = sanitize_textarea_field( $_POST['message'] );
$headers[] = 'From: ' . $name . '<' . $email . '>';
wp_mail( $this->get_email(), 'Website Feedback', $message, $headers );
wp_send_json( 'Thanks for your feedback!' );
}
/**
* Hits the Business Reviews API to get list of sites user has configured
*
* @return mixed Array of URLs configured for Business Reviews
*/
public function get_links() {
$links = array();
// If the current user is an editor or greater, don't use any cached value
if ( ! current_user_can( 'edit_posts' ) ) {
$review_sites = get_transient( 'eig_business_reviews' );
} else {
$review_sites = false;
}
if ( false === $review_sites ) {
$request = wp_remote_get( $this->sites_endpoint . '/' . $this->domain . '/' . mm_site_bin2hex() . '/business-reviews' );
$response = json_decode( wp_remote_retrieve_body( $request ) );
if ( $response->status && 'disabled' !== $response->status ) {
$review_sites = $response->review_sites;
// Cache results for 1 hour
set_transient( 'eig_business_reviews', $review_sites, 3600 );
}
}
if ( $review_sites ) {
foreach ( $review_sites as $site ) {
$links[] = $this->get_site_data( $site->url );
}
}
return $links;
}
/**
* Returns email address to be used for receiving feedback from Business Reviews widget
*
* @return string Email address the user has specified or the admin email if not set
*/
public function get_email() {
return get_option( 'business_reviews_email', get_option( 'admin_email' ) );
}
/**
* Parse supplied URL to determine additional data about the URL for use in review buttons
* @param string $url URL of the review site
*
* @return array Name, logo and URL of the review site for use in review button
*/
public function get_site_data( $url ) {
$supported_sites = array(
'#https?://(www)?\.facebook\.com.*#i' => array(
'name' => 'Facebook',
'logo' => plugin_dir_url( __FILE__ ) . 'assets/images/facebook.png',
),
'#https?://(www)?\.google\.com.*#i' => array(
'name' => 'Google',
'logo' => plugin_dir_url( __FILE__ ) . 'assets/images/google.png',
),
'#https?://(www)?\.yelp\.com.*#i' => array(
'name' => 'Yelp',
'logo' => plugin_dir_url( __FILE__ ) . 'assets/images/yelp.png',
),
);
foreach ( $supported_sites as $regex => $data ) {
if ( preg_match( $regex, $url ) ) {
$data['url'] = $url;
return $data;
}
}
// We didn't match a supported site, so try to parse the domain
$data = array(
'name' => str_replace( 'www.', '', parse_url( $url, PHP_URL_HOST ) ),
'logo' => '',
'url' => $url,
);
return $data;
}
}
/**
* Initialize Business Reviews
*/
EIG_Business_Reviews::init();