Seditio Source
Root |
./othercms/b2evolution_7.2.3/inc/widgets/widgets/_user_register_standard.widget.php
<?php
/**
 * This file implements the user_register_standard_Widget class.
 *
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link https://github.com/b2evolution/b2evolution}.
 *
 * @license GNU GPL v2 - {@link http://b2evolution.net/about/gnu-gpl-license}
 *
 * @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
 *
 * @package evocore
 */
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );

load_class( 'widgets/model/_widget.class.php', 'ComponentWidget' );
load_class( '_core/model/dataobjects/_dataobjectlist2.class.php', 'DataObjectList2' );

/**
 * ComponentWidget Class
 *
 * A ComponentWidget is a displayable entity that can be placed into a Container on a web page.
 *
 * @package evocore
 */
class user_register_standard_Widget extends ComponentWidget
{
    var
$icon = 'registered';

   
/**
     * Constructor
     */
   
function __construct( $db_row = NULL )
    {
       
// Call parent constructor:
       
parent::__construct( $db_row, 'core', 'user_register_standard' );
    }


   
/**
     * Get help URL
     *
     * @return string URL
     */
   
function get_help_url()
    {
        return
get_manual_url( 'registration-form-widget' );
    }


   
/**
     * Get name of widget
     */
   
function get_name()
    {
        return
T_('Registration form');
    }


   
/**
     * Get a very short desc. Used in the widget list.
     */
   
function get_short_desc()
    {
        return
format_to_output( $this->disp_params['title'] );
    }


   
/**
     * Get short description
     */
   
function get_desc()
    {
        return
T_('Display a normal registration form.');
    }


   
/**
     * Get definitions for editable params
     *
     * @see Plugin::GetDefaultSettings()
     * @param local params like 'for_editing' => true
     */
   
function get_param_definitions( $params )
    {
       
$r = array_merge( array(
               
'title' => array(
                   
'label' => T_('Block title'),
                   
'note' => T_('Title to display in your skin.'),
                   
'size' => 40,
                   
'defaultvalue' => T_('Register'),
                ),
               
'title_disabled' => array(
                   
'label' => T_('Block title for disabled registration'),
                   
'note' => T_('Title to display in your skin.'),
                   
'size' => 40,
                   
'defaultvalue' => T_('Registration Currently Disabled'),
                ),
            ),
parent::get_param_definitions( $params ) );

        if( isset(
$r['allow_blockcache'] ) )
        {
// Set default blockcache to false and disable this setting because caching is never allowed for this widget
           
$r['allow_blockcache']['defaultvalue'] = false;
           
$r['allow_blockcache']['disabled'] = 'disabled';
           
$r['allow_blockcache']['note'] = T_('This widget cannot be cached in the block cache.');
        }

        return
$r;
    }


   
/**
     * Display the widget!
     *
     * @param array MUST contain at least the basic display params
     */
   
function display( $params )
    {
        global
$Collection, $Blog, $Settings, $Session, $Plugins, $dummy_fields;

       
// Default params:
       
$params = array_merge( array(
               
'form_class_register'       => 'evo_form__register',
               
'register_use_placeholders' => false, // Set TRUE to use placeholders instead of notes for input fields
               
'register_field_width'      => 140,
               
'register_form_params'      => NULL,
               
'register_disp_home_button' => false, // Display button to go home when registration is disabled
               
'register_disp_messages'    => false,
               
'register_buttons_before'   => '<p class="center">',
               
'register_buttons_after'    => '</p>',
            ),
$params );

       
$this->init_display( $params );

       
// Check invitation code if it exists and registration is enabled
       
$invitation_code_status = check_invitation_code();

        if( isset(
$this->BlockCache ) )
        {    
// Do NOT cache some of these links are using a redirect_to param, which makes it page dependent.
            // Note: also beware of the source param.
            // so this will be cached by the PageCache; there is no added benefit to cache it in the BlockCache
            // (which could have been shared between several pages):
           
$this->BlockCache->abort_collect();
        }

       
$master_template_code = $Settings->get( 'registration_master_template' );
       
       
$TemplateCache = & get_TemplateCache();
        if( !
$TemplateCache->get_by_code( $master_template_code, false, false ) )
        {
           
$this->display_error_message( sprintf( 'Template not found: %s', '<code>'.$this->disp_params['template'].'</code>' ) );
            return
false;
        }

       
$render_template_objects = array();
       
$Form = new Form( get_htsrv_url( 'login' ).'register.php', 'register_form', 'post' );

        if( !
is_null( $params['register_form_params'] ) )
        {    
// Use another template param from skin:
           
$Form->switch_template_parts( $params['register_form_params'] );
        }

       
$render_template_objects['Form'] = $Form;

        if(
$register_user = $Session->get('core.register_user') )
        {    
// Get an user data from predefined session (after adding of a comment):
           
$login = preg_replace( '/[^a-z0-9_\-\. ]/i', '', $register_user['name'] );
           
$login = str_replace( ' ', '_', $login );
           
$login = substr( $login, 0, 20 );
           
$email = $register_user['email'];

           
$render_template_objects['register_user_data'] = array(
                   
'login' => $login,
                   
'email' => $email
               
);

           
$Session->delete( 'core.register_user' );
        }
       
$used_tags = array();

       
// Render MASTER quick template:
        // In theory, this should not display anything.
        // Instead, this should set variables to define sub-templates (and potentially additional variables)
       
render_template_code( $master_template_code, /* BY REF */ $this->disp_params );

       
// Check if requestes sub-template exists:
       
$register_form_Template = $TemplateCache->get_by_code( $this->disp_params['reg1_template'], false, false );
        if( empty(
$register_form_Template ) )
        {    
// Display error when no or wrong template for the registration form:
           
$this->display_error_message( sprintf( 'Template not found: %s', '<code>'.$this->disp_params['reg1_template'].'</code>' ) );
            return
false;
        }

       
// Render registration template:
       
$register_form = render_template_code( $this->disp_params['reg1_template'], $this->disp_params, $render_template_objects, $used_tags );

       
// Get required fields defined by master template:
       
$required_fields = isset( $this->disp_params['reg1_required'] ) ? array_map( 'trim', explode( ',', $this->disp_params['reg1_required'] ) ) : array();

        if( ! empty(
$register_form ) )
        {
            echo
$this->disp_params['block_start'];

           
$this->disp_title( ! is_logged_in() && $invitation_code_status == 'deny' ? $this->disp_params['title_disabled'] : NULL );

            echo
$this->disp_params['block_body_start'];

           
// Check that all required fields are available in the template:
           
$missing_fields = array();
            if(
in_array( 'email', $required_fields ) && ! in_array( 'Form:email', $used_tags ) )
            {
               
$missing_fields[] = 'email';
            }
            if(
in_array( 'login', $required_fields ) && ! in_array( 'Form:login', $used_tags ) )
            {
               
$missing_fields[] = 'login';
            }
            if(
in_array( 'password', $required_fields ) && ! in_array( 'Form:password', $used_tags ) )
            {
               
$missing_fields[] = 'password';
            }
            if(
in_array( 'firstname', $required_fields ) && ! in_array( 'Form:firstname', $used_tags ) )
            {
               
$missing_fields[] = 'firstname';
            }
            if(
in_array( 'lastname', $required_fields ) && ! in_array( 'Form:lastname', $used_tags ) )
            {
               
$missing_fields[] = 'lastname';
            }
            if(
in_array( 'country', $required_fields ) && ! in_array( 'Form:country', $used_tags ) )
            {
               
$missing_fields[] = 'country';
            }
            if(
in_array( 'gender', $required_fields ) && ! in_array( 'Form:gender', $used_tags ) )
            {
               
$missing_fields[] = 'gender';
            }
            if(
in_array( 'locale', $required_fields ) && ! in_array( 'Form:locale', $used_tags ) )
            {
               
$missing_fields[] = 'locale';
            }

            if( ! empty(
$missing_fields ) )
            {
                foreach(
$missing_fields as $missing_field )
                {
                   
display_rendering_error( sprintf( T_('The template %s is missing the required field %s.'), '<code>'.$this->disp_params['reg1_template'].'</code>', '<code>'.$missing_field.'</code>' ) );
                }
            }

            if(
is_logged_in() )
            {    
// Don't allow to register if a user is already logged in:
               
echo '<p>'.T_('You are already logged in').'</p>';
            }
            elseif(
$invitation_code_status == 'deny' )
            {    
// If registration is disabled
               
echo '<p class="error red">';
                if(
$Settings->get( 'newusers_canregister' ) == 'no' || ! $Settings->get( 'system_lock' ) )
                {    
// If registration is disabled:
                   
echo T_('User registration is currently not allowed.');
                }
                else
                {    
// If system is locked:
                   
echo T_('The site is currently locked for maintenance.');
                }
                echo
'</p>';

                if(
$params['register_disp_home_button'] )
                {    
// Display button to go home:
                   
global $baseurl;
                    echo
'<p class="center"><a href="'.$baseurl.'" class="btn btn-default">'.T_('Home').'</a></p>';
                }
            }
            else
            {    
// Display a registration form:
               
if( $params['register_disp_messages'] )
                {    
// Display the form messages before form inside wrapper:
                   
messages( array(
                           
'block_start' => '<div class="action_messages">',
                           
'block_end'   => '</div>',
                        ) );
                }

               
// Save trigger page:
               
$session_registration_trigger_url = $Session->get( 'registration_trigger_url' );
                if( empty(
$session_registration_trigger_url ) && isset( $_SERVER['HTTP_REFERER'] ) )
                {    
// Trigger page still is not defined
                   
$Session->set( 'registration_trigger_url', $_SERVER['HTTP_REFERER'] );
                }

               
$source      = param( 'source', 'string', 'register form' );
               
$redirect_to = param( 'redirect_to', 'url', '' );
               
$return_to   = param( 'return_to', 'url', '' );
               
$widget      = param( 'widget', 'integer' );

               
$Form->add_crumb( 'regform' );
               
$Form->hidden( 'inskin', true );
                if( isset(
$Blog ) )
                {    
// For in-skin registration form:
                   
$Form->hidden( 'blog', $Blog->ID );
                }

               
$Form->begin_form( $params['form_class_register'] );

               
$Plugins->trigger_event( 'DisplayRegisterFormBefore', array( 'Form' => & $Form, 'inskin' => true ) );

               
$Form->hidden( 'action', 'register' );
               
$Form->hidden( 'source', $source );
               
$Form->hidden( 'redirect_to', $redirect_to );

                if( ! empty(
$widget ) )
                {    
// Widget ID may be used on this form when user cannot be quickly registered because of suspected data:
                   
$Form->hidden( 'widget', $widget );
                }

                if(
$invitation_code_status == 'input' )
                {
// Display an input field to enter invitation code manually or to change incorrect code
                   
$invitation_field_params = array( 'maxlength' => 32, 'class' => 'input_text', 'style' => 'width:138px' );
                    if(
$Settings->get( 'newusers_canregister' ) == 'invite' )
                    {
// Invitation code must be required when users can register ONLY with this code
                       
$invitation_field_params['required'] = 'required';
                    }
                   
$Form->text_input( 'invitation', get_param( 'invitation' ), 22, T_('Your invitation code'), '', $invitation_field_params );
                }
                elseif(
$invitation_code_status == 'info' )
                {
// Display info field (when invitation code is correct)
                   
$Form->info( T_('Your invitation code'), get_param( 'invitation' ) );
                   
$Form->hidden( 'invitation', get_param( 'invitation' ) );
                }

               
// ===================================================================================================================

               
echo $register_form;

               
// ===================================================================================================================

                // Plugin fields:
               
$Plugins->trigger_event( 'DisplayRegisterFormFieldset', array(
                       
'Form'             => & $Form,
                       
'inskin'           => true,
                       
'use_placeholders' => $params['register_use_placeholders']
                    ) );

               
// Display plugin captcha for register form before submit button:
               
$Plugins->display_captcha( array(
                       
'Form'              => & $Form,
                       
'form_type'         => 'register',
                       
'form_position'     => 'before_submit_button',
                       
'form_use_fieldset' => false,
                       
'use_placeholders'  => $params['register_use_placeholders'],
                    ) );

               
$Form->end_form();

               
// Display javascript password strength indicator bar:
               
display_password_indicator( array( 'field_width' => $params['register_field_width'] ) );

               
// Display javascript login validator:
               
display_login_validator();

                echo
$this->disp_params['block_body_end'];

                echo
$this->disp_params['block_end'];
            }

            return
true;
        }

       
$this->display_debug_message();
        return
false;
    }
}

?>