571 lines
16 KiB
PHP
Executable File
571 lines
16 KiB
PHP
Executable File
<?php
|
|
|
|
use Elementor\Controls_Manager;
|
|
use Elementor\Group_Control_Border;
|
|
use Elementor\Group_Control_Typography;
|
|
use Elementor\Scheme_Color;
|
|
use Elementor\Scheme_Typography;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Elementor icon box widget.
|
|
*
|
|
* Elementor widget that displays an icon, a headline and a text.
|
|
*
|
|
*/
|
|
class Opalestate_Account_Button_Elementor_Widget extends Opalestate_Elementor_Widget_Base {
|
|
|
|
/**
|
|
* Get widget name.
|
|
*
|
|
* Retrieve icon box widget name.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return string Widget name.
|
|
*/
|
|
public function get_name() {
|
|
return 'opalestate-account-button';
|
|
}
|
|
|
|
/**
|
|
* Get widget title.
|
|
*
|
|
* Retrieve icon box widget title.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return string Widget title.
|
|
*/
|
|
public function get_title() {
|
|
return esc_html__( 'Block: Account Button', 'opalestate-pro' );
|
|
}
|
|
|
|
/**
|
|
* Get widget icon.
|
|
*
|
|
* Retrieve icon box widget icon.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return string Widget icon.
|
|
*/
|
|
public function get_icon() {
|
|
return apply_filters( 'opalestate_' . $this->get_name(), 'eicon-lock-user' );
|
|
}
|
|
|
|
/**
|
|
* Get widget keywords.
|
|
*
|
|
* Retrieve the list of keywords the widget belongs to.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return array Widget keywords.
|
|
*/
|
|
public function get_keywords() {
|
|
return [ 'opalestate-pro', 'account', 'button' ];
|
|
}
|
|
|
|
private function get_available_menus() {
|
|
$menus = wp_get_nav_menus();
|
|
|
|
$options = [];
|
|
|
|
foreach ( $menus as $menu ) {
|
|
$options[ $menu->slug ] = $menu->name;
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Register icon box widget controls.
|
|
*
|
|
* Adds different input fields to allow the user to change and customize the widget settings.
|
|
*
|
|
* @access protected
|
|
*/
|
|
protected function _register_controls() {
|
|
$this->start_controls_section(
|
|
'account_content',
|
|
[
|
|
'label' => esc_html__( 'Not logged in', 'opalestate-pro' ),
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'icon',
|
|
[
|
|
'label' => esc_html__( 'Choose Icon', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::ICON,
|
|
'default' => 'fa fa-user',
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'enable_label',
|
|
[
|
|
'label' => esc_html__( 'Enable Label', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'label_text',
|
|
[
|
|
'label' => esc_html__( 'Label Text', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'default' => esc_html__( 'Account', 'opalestate-pro' ),
|
|
'condition' => [ 'enable_label' => 'yes' ],
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
|
|
|
|
$this->start_controls_section(
|
|
'account_logged_in',
|
|
[
|
|
'label' => esc_html__( 'Logged in', 'opalestate-pro' ),
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'logged_in_enable_avatar',
|
|
[
|
|
'label' => esc_html__( 'Enable Avatar', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
'default' => 'on',
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'logged_in_enable_notification',
|
|
[
|
|
'label' => esc_html__( 'Enable Notification', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'logged_in_icon',
|
|
[
|
|
'label' => esc_html__( 'Choose Icon', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::ICON,
|
|
'default' => 'fa fa-user',
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'logged_in_enable_label',
|
|
[
|
|
'label' => esc_html__( 'Enable Label', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'logged_in_label_text',
|
|
[
|
|
'label' => esc_html__( 'Label Text', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::TEXT,
|
|
'default' => esc_html__( 'Account', 'opalestate-pro' ),
|
|
'condition' => [ 'logged_in_enable_label' => 'yes' ],
|
|
]
|
|
);
|
|
|
|
$menus = $this->get_available_menus();
|
|
|
|
if ( ! empty( $menus ) ) {
|
|
$this->add_control(
|
|
'enable_custom_menu',
|
|
[
|
|
'label' => esc_html__( 'Use Custom Dashboard Menu', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SWITCHER,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'menu',
|
|
[
|
|
'label' => esc_html__( 'Menu', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SELECT,
|
|
'options' => $menus,
|
|
'default' => 'my-account',
|
|
'save_default' => true,
|
|
'separator' => 'after',
|
|
'description' => sprintf( esc_html__( 'Go to the <a href="%s" target="_blank">Menus screen</a> to manage your menus.', 'opalestate-pro' ), admin_url( 'nav-menus.php' ) ),
|
|
'condition' => [ 'enable_custom_menu' => 'yes' ],
|
|
]
|
|
);
|
|
}
|
|
|
|
$this->end_controls_section();
|
|
|
|
$this->start_controls_section(
|
|
'section_general_style_content',
|
|
[
|
|
'label' => esc_html__( 'General', 'opalestate-pro' ),
|
|
'tab' => Controls_Manager::TAB_STYLE,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'toggle_align',
|
|
[
|
|
'label' => esc_html__( 'Alignment', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'left' => [
|
|
'title' => esc_html__( 'Left', 'opalestate-pro' ),
|
|
'icon' => 'eicon-h-align-left',
|
|
],
|
|
'center' => [
|
|
'title' => esc_html__( 'Center', 'opalestate-pro' ),
|
|
'icon' => 'eicon-h-align-center',
|
|
],
|
|
'right' => [
|
|
'title' => esc_html__( 'Right', 'opalestate-pro' ),
|
|
'icon' => 'eicon-h-align-right',
|
|
],
|
|
],
|
|
'selectors' => [
|
|
'{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}}',
|
|
],
|
|
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
|
|
|
|
$this->start_controls_section(
|
|
'section_label_style_content',
|
|
[
|
|
'label' => esc_html__( 'Label', 'opalestate-pro' ),
|
|
'tab' => Controls_Manager::TAB_STYLE,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'title_color',
|
|
[
|
|
'label' => esc_html__( 'Color', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::COLOR,
|
|
'default' => '',
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account .account-label' => 'color: {{VALUE}};',
|
|
],
|
|
'scheme' => [
|
|
'type' => Scheme_Color::get_type(),
|
|
'value' => Scheme_Color::COLOR_1,
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_group_control(
|
|
Group_Control_Typography::get_type(),
|
|
[
|
|
'name' => 'title_typography',
|
|
'selector' => '{{WRAPPER}} .site-header-account .account-label',
|
|
'scheme' => Scheme_Typography::TYPOGRAPHY_1,
|
|
]
|
|
);
|
|
|
|
$this->end_controls_section();
|
|
|
|
$this->start_controls_section(
|
|
'section_icon_style_content',
|
|
[
|
|
'label' => esc_html__( 'Icon', 'opalestate-pro' ),
|
|
'tab' => Controls_Manager::TAB_STYLE,
|
|
]
|
|
);
|
|
$this->start_controls_tabs( 'tabs_icon_style' );
|
|
|
|
$this->start_controls_tab(
|
|
'tab_icon_normal',
|
|
[
|
|
'label' => esc_html__( 'Normal', 'opalestate-pro' ),
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'icon_color',
|
|
[
|
|
'label' => esc_html__( 'Icon Color', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::COLOR,
|
|
'default' => '',
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i' => 'color: {{VALUE}};',
|
|
],
|
|
'scheme' => [
|
|
'type' => Scheme_Color::get_type(),
|
|
'value' => Scheme_Color::COLOR_1,
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'background_color',
|
|
[
|
|
'label' => esc_html__( 'Background Color', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::COLOR,
|
|
'default' => '',
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i' => 'background-color: {{VALUE}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_responsive_control(
|
|
'icon_fontsize',
|
|
[
|
|
'label' => esc_html__( 'Icon Font Size', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::SLIDER,
|
|
'range' => [
|
|
'px' => [
|
|
'min' => 0,
|
|
'max' => 100,
|
|
],
|
|
],
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i' => 'font-size: {{SIZE}}{{UNIT}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_group_control(
|
|
Group_Control_Border::get_type(),
|
|
[
|
|
'name' => 'icon_border',
|
|
'placeholder' => '1px',
|
|
'default' => '1px',
|
|
'selector' => '{{WRAPPER}} .site-header-account i',
|
|
'separator' => 'before',
|
|
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'icon_border_radius',
|
|
[
|
|
'label' => esc_html__( 'Border Radius', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::DIMENSIONS,
|
|
'size_units' => [ 'px', '%' ],
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'icon_padding',
|
|
[
|
|
'label' => esc_html__( 'Padding', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::DIMENSIONS,
|
|
'size_units' => [ 'px', '%' ],
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->end_controls_tab();
|
|
|
|
$this->start_controls_tab(
|
|
'tab_icon_hover',
|
|
[
|
|
'label' => esc_html__( 'Hover', 'opalestate-pro' ),
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'icon_color_hover',
|
|
[
|
|
'label' => esc_html__( 'Icon Color', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::COLOR,
|
|
'default' => '',
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i:hover' => 'color: {{VALUE}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
'background_color_hover',
|
|
[
|
|
'label' => esc_html__( 'Background Color', 'opalestate-pro' ),
|
|
'type' => Controls_Manager::COLOR,
|
|
'default' => '',
|
|
'selectors' => [
|
|
'{{WRAPPER}} .site-header-account i:hover' => 'background-color: {{VALUE}};',
|
|
],
|
|
]
|
|
);
|
|
|
|
$this->add_group_control(
|
|
Group_Control_Border::get_type(),
|
|
[
|
|
'name' => 'icon_border_hover',
|
|
'placeholder' => '1px',
|
|
'default' => '1px',
|
|
'selector' => '{{WRAPPER}} .site-header-account i:hover',
|
|
'separator' => 'before',
|
|
|
|
]
|
|
);
|
|
|
|
$this->end_controls_tab();
|
|
|
|
$this->end_controls_tabs();
|
|
|
|
$this->end_controls_section();
|
|
}
|
|
|
|
protected function render() {
|
|
$settings = $this->get_settings();
|
|
|
|
$this->show_poup_hover_form( $settings );
|
|
}
|
|
|
|
protected function show_poup_hover_form( $settings ) {
|
|
$settings = wp_parse_args( $settings, [
|
|
'enable_label' => false,
|
|
'icon' => '',
|
|
'style' => '',
|
|
] );
|
|
|
|
$account_link = opalestate_my_account_page();
|
|
|
|
$id = rand( 2, 9 ) . rand( 0, 9 );
|
|
|
|
?>
|
|
<?php if ( ! is_user_logged_in() ) : ?>
|
|
<div class="elementor-dropdown site-header-account">
|
|
<div class="elementor-dropdown-header">
|
|
<?php
|
|
echo '<a href="' . esc_url( $account_link ) . '">
|
|
<i class="' . esc_attr( $settings['icon'] ) . '"></i>
|
|
' . ( $settings['enable_label'] && $settings['label_text'] ? '<span class="account-label">' . esc_html( $settings['label_text'] ) . '</span>' : '' ) . '
|
|
</a>';
|
|
?>
|
|
</div>
|
|
<div class="elementor-dropdown-menu" id="elementor-account-<?php echo esc_attr( $id ); ?>">
|
|
<div class="account-wrap">
|
|
<div class="account-inner dashboard">
|
|
<?php $this->render_form_login(); ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php else : ?>
|
|
<div class="elementor-dropdown site-header-account">
|
|
<div class="elementor-dropdown-header">
|
|
<div class="opalestate-user-greeting opalestate-popup hover-align-right">
|
|
<div class="popup-head">
|
|
<?php if ( $settings['logged_in_enable_avatar'] ) : ?>
|
|
<a href="#">
|
|
<?php $user_id = get_current_user_id(); ?>
|
|
<div class="opalestate-user-image">
|
|
<img src="<?php echo OpalEstate_User::get_author_picture( $user_id ); ?>" alt="<?php esc_attr_e( 'Avatar image', 'opalestate-pro' ); ?>"/>
|
|
</div>
|
|
<span class="notify active"></span>
|
|
</a>
|
|
<?php else : ?>
|
|
<?php
|
|
echo '<a href="#">
|
|
<i class="' . esc_attr( $settings['logged_in_icon'] ) . '"></i>
|
|
' . ( $settings['logged_in_enable_label'] && $settings['logged_in_label_text'] ? '<span class="account-label">' . esc_html( $settings['logged_in_label_text'] ) . '</span>' : '' ) . '
|
|
</a>';
|
|
?>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="popup-body">
|
|
<div class="account-dashboard-content">
|
|
<?php $this->render_dashboard( $settings ); ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endif;
|
|
}
|
|
|
|
protected function render_form_login() {
|
|
?>
|
|
|
|
<div class="login-form-head">
|
|
<span class="login-form-title"><?php esc_attr_e( 'Sign in', 'opalestate-pro' ) ?></span>
|
|
<span class="pull-right">
|
|
<a class="register-link" href="<?php echo esc_url( opalestate_my_account_page() ); ?>"
|
|
title="<?php esc_attr_e( 'Register', 'opalestate-pro' ); ?>"><?php esc_attr_e( 'Create an Account', 'opalestate-pro' ); ?></a>
|
|
</span>
|
|
</div>
|
|
|
|
<form class="opalestate-login-form opalestate-member-form" action="<?php echo esc_url( wp_login_url() ); ?>" method="POST">
|
|
<?php do_action( 'opalestate_member_before_login_form' ); ?>
|
|
<p>
|
|
<label><?php esc_attr_e( 'Username or email', 'opalestate-pro' ); ?> <span class="required">*</span></label>
|
|
<input name="username" type="text" required placeholder="<?php esc_attr_e( 'Username', 'opalestate-pro' ); ?>"
|
|
value="<?php echo isset( $_POST['username'] ) ? esc_attr( $_POST['username'] ) : ''; ?>">
|
|
</p>
|
|
<p>
|
|
<label><?php esc_attr_e( 'Password', 'opalestate-pro' ); ?> <span class="required">*</span></label>
|
|
<input name="password" type="password" required placeholder="<?php esc_attr_e( 'Password', 'opalestate-pro' ); ?>">
|
|
</p>
|
|
|
|
<?php do_action( 'opalestate_member_login_form' ); ?>
|
|
|
|
<p>
|
|
<input class="opalestate-input checkbox" name="rememberme" type="checkbox" value="forever"/> <?php esc_html_e( 'Remember me', 'opalestate-pro' ); ?>
|
|
</p>
|
|
|
|
<?php wp_nonce_field( 'opalestate-login', 'opalestate-login-popup-nonce' ); ?>
|
|
|
|
<?php if ( isset( $redirect ) && $redirect ) : ?>
|
|
<input type="hidden" name="redirect" value="<?php echo esc_url( $redirect ); ?>">
|
|
<?php endif; ?>
|
|
<button type="submit" name="login" data-button-action class="btn btn-primary btn-block w-100 mt-1" value="<?php esc_html_e( 'Login', 'opalestate-pro' ); ?>">
|
|
<?php esc_html_e( 'Login', 'opalestate-pro' ); ?>
|
|
</button>
|
|
|
|
<?php do_action( 'login_form' ); ?>
|
|
|
|
<?php do_action( 'opalestate_member_after_login_form' ); ?>
|
|
</form>
|
|
|
|
<div class="login-form-bottom">
|
|
<a href="<?php echo wp_lostpassword_url( get_permalink() ); ?>" class="lostpass-link"
|
|
title="<?php esc_attr_e( 'Lost your password?', 'opalestate-pro' ); ?>"><?php esc_attr_e( 'Lost your password?', 'opalestate-pro' ); ?></a>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
protected function render_dashboard( $settings ) { ?>
|
|
<?php if ( $settings['enable_custom_menu'] == 'yes' ) : ?>
|
|
<nav class="social-navigation" role="navigation" aria-label="<?php esc_attr_e( 'Dashboard', 'opalestate-pro' ); ?>">
|
|
<?php
|
|
wp_nav_menu( [
|
|
'theme_location' => $settings['menu'],
|
|
'menu_class' => 'account-links-menu',
|
|
'depth' => 1,
|
|
] );
|
|
?>
|
|
</nav><!-- .social-navigation -->
|
|
<?php else: ?>
|
|
<div class="account-dashboard">
|
|
<?php
|
|
if ( function_exists( 'opalestate_management_user_menu_tabs' ) ) {
|
|
opalestate_management_user_menu_tabs();
|
|
}
|
|
?>
|
|
</div>
|
|
<?php endif;
|
|
}
|
|
}
|