<?php
namespace Automattic\Gravatar\GravatarEnhanced\Woocommerce;
use Automattic\Gravatar\GravatarEnhanced\Module;
class MyAccount implements Module {
/**
* @var string
*/
const FILTER_GRAVATAR_WC_MY_ACCOUNT_MODULE_ENABLED = 'gravatar_enhanced_wc_my_account_module_enabled';
/**
* Check if the module is disabled by a filter.
*
* @return bool
*/
private function is_module_disabled() {
// Check if module is manually disabled by the filter.
if ( ! apply_filters( self::FILTER_GRAVATAR_WC_MY_ACCOUNT_MODULE_ENABLED, true ) ) {
return true; // Disabled by filter.
}
return false;
}
/**
* @return void
*/
public function init() {
// Bail if the module is disabled.
if ( $this->is_module_disabled() ) {
return;
}
add_action( 'woocommerce_before_account_navigation', [ $this, 'start_capture_page' ] );
add_action( 'woocommerce_after_account_navigation', [ $this, 'end_capture_page' ] );
}
/**
* Start capturing the My Account page.
*
* @return void
*/
public function start_capture_page() {
$this->enqueue_assets();
ob_start();
}
/**
* End capturing the My Account page and render the avatar.
*
* @return void
*/
public function end_capture_page() {
$content = ob_get_clean();
if ( false === $content ) {
return;
}
$pattern = '/(<nav\s[^>]*class="[^"]*woocommerce-MyAccount-navigation[^"]*"[^>]*>)/i';
$content = preg_replace( $pattern, '$1' . $this->display_gravatar(), $content, 1 );
echo $content;
}
/**
* @return void
*/
private function enqueue_assets() {
$asset_file = dirname( GRAVATAR_ENHANCED_PLUGIN_FILE ) . '/build/wc-my-account.asset.php';
$assets = file_exists( $asset_file ) ? require $asset_file : [ 'dependencies' => [], 'version' => time() ];
$current_user = wp_get_current_user();
$user_email = $current_user->user_email;
$current_user_locale = get_user_locale( $current_user );
// Gravatar only wants the first part of a locale, so we strip the country code.
$current_user_locale = (string) preg_replace( '/_.*$/', '', $current_user_locale );
$settings = [
'email' => $user_email,
'locale' => 'en' === $current_user_locale ? '' : $current_user_locale,
];
wp_enqueue_script(
'gravatar-enhanced-wc-my-account',
plugins_url( 'build/wc-my-account.js', GRAVATAR_ENHANCED_PLUGIN_FILE ),
$assets['dependencies'],
$assets['version'],
true
);
wp_localize_script( 'gravatar-enhanced-wc-my-account', 'geWcMyAccount', $settings );
wp_enqueue_style(
'gravatar-enhanced-wc-my-account',
plugins_url( 'build/wc-my-account.css', GRAVATAR_ENHANCED_PLUGIN_FILE ),
[],
$assets['version']
);
}
/**
* Render the avatar.
*
* @return string
*/
private function display_gravatar() {
$current_user = wp_get_current_user();
$user_email = $current_user->user_email;
$avatar = get_avatar(
$user_email,
120,
'',
'User Avatar',
[ 'class' => 'woocommerce-account-gravatar__avatar' ]
);
$edit_text = esc_html__( 'Change avatar', 'gravatar-enhanced' );
$display_name = esc_html( $current_user->display_name );
$html = <<<HTML
<div class="woocommerce-account-gravatar">
<div class="woocommerce-account-gravatar__avatar-wrapper">
$avatar
<div class="woocommerce-account-gravatar__edit-wrapper">
<a class="woocommerce-account-gravatar__edit">$edit_text</a>
</div>
</div>
<span class="woocommerce-account-gravatar__display-name">$display_name</span>
</div>
HTML;
return $html;
}
/**
* @return void
*/
public function uninstall() {}
}