Opal-Estate-Pro/inc/vendors/elementor/widgets/opalestate-account-button.php

571 lines
16 KiB
PHP
Raw Normal View History

2019-09-10 06:27:33 +02:00
<?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(); ?>
2019-09-13 09:11:27 +02:00
<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>
2019-09-10 06:27:33 +02:00
<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>' : '' ) . '
2019-09-13 09:11:27 +02:00
</a>';
2019-09-10 06:27:33 +02:00
?>
<?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>
2019-10-02 03:51:24 +02:00
<?php wp_nonce_field( 'opalestate-login', 'opalestate-login-popup-nonce' ); ?>
2019-09-10 06:27:33 +02:00
<?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;
}
}