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 >
< ? php wp_nonce_field ( 'opalestate-login' , 'opalestate-login-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 ;
}
}