From 61f154b3396b25444c82f6694303fd90106e7940 Mon Sep 17 00:00:00 2001 From: Lester Caine Date: Mon, 18 May 2026 09:05:06 +0100 Subject: Tidy register structure post stripping the groups biased code --- hauth_register.php | 120 ++++++++++++++++++++++++++++++++ register.php | 95 +++++++++++++++++++++----- role_register.php | 181 ------------------------------------------------- templates/register.tpl | 2 +- 4 files changed, 199 insertions(+), 199 deletions(-) create mode 100755 hauth_register.php delete mode 100755 role_register.php diff --git a/hauth_register.php b/hauth_register.php new file mode 100755 index 0000000..2a41b8e --- /dev/null +++ b/hauth_register.php @@ -0,0 +1,120 @@ +verifyFeature( 'users_allow_register' ); + +BitHybridAuthManager::loadSingleton(); +global $gBitHybridAuthManager; +$gBitSmarty->assign( 'hybridProviders', $gBitHybridAuthManager->getEnabledProviders() ); + +// Everything below here is needed for registration + +use Bitweaver\Users\BaseAuth; + +if( !empty( $_REQUEST['returnto'] ) ) { + $_SESSION['returnto'] = $_REQUEST['returnto']; +} elseif( !empty( $_SERVER['HTTP_REFERER'] ) && !strpos( $_SERVER['HTTP_REFERER'], 'signin.php' ) && !strpos( $_SERVER['HTTP_REFERER'], 'hauth_register.php' ) ) { + $from = parse_url( $_SERVER['HTTP_REFERER'] ); + if( !empty( $from['path'] ) && $from['host'] == $_SERVER['SERVER_NAME'] ) { + $_SESSION['loginfrom'] = $from['path'].'?'.( !empty( $from['query'] ) ? $from['query'] : '' ); + } +} + +if( $gBitUser->isRegistered() ) { + KernelTools::bit_redirect( $gBitSystem->getDefaultPage() ); +} +if( isset( $_REQUEST["register"] ) ) { + + $pRegisterHash = $_REQUEST; + + include USERS_PKG_INCLUDE_PATH . 'register_inc.php'; + + $gBitSmarty->assign( 'reg', $pRegisterHash ); + +} else { + if( $gBitSystem->isFeatureActive( 'custom_user_fields' ) ) { + $fields= explode( ',', $gBitSystem->getConfig( 'custom_user_fields' ) ); + KernelTools::trim_array( $fields ); + $gBitSmarty->assign('customFields', $fields); + } + + for( $i=0; $i < BaseAuth::getAuthMethodCount(); $i++ ) { + $instance = BaseAuth::init( $i ); + if( $instance && $instance->canManageAuth() ) { + $auth_reg_fields = $instance->getRegistrationFields(); + foreach( array_keys( $auth_reg_fields ) as $auth_field ) { + $auth_reg_fields[$auth_field]['value'] = $auth_reg_fields[$auth_field]['default']; + } + $gBitSmarty->assign( 'auth_reg_fields', $auth_reg_fields ); + break; + } + } +} + +$languages = []; +$languages = $gBitLanguage->listLanguages(); +$gBitSmarty->assign( 'languages', $languages ); +$gBitSmarty->assign( 'gBitLanguage', $gBitLanguage ); + +// Get flags here +$flags = []; +$h = opendir( USERS_PKG_PATH.'icons/flags/' ); +while( $file = readdir( $h )) { + if( strstr( $file, ".gif" )) { + $parts = explode( '.', $file ); + $flags[] = $parts[0]; + } +} +closedir( $h ); +sort( $flags ); +$gBitSmarty->assign('flags', $flags); + + +// include preferences settings from other packages - these will be included as individual tabs +$packages = []; +foreach( $gBitSystem->mPackages as $package ) { + if( $gBitSystem->isPackageActive( $package['name'] )) { + $php_file = $package['path'].'user_register_inc.php'; + $tpl_file = $package['path'].'templates/user_register_inc.tpl'; + if( file_exists( $tpl_file )) { + if( file_exists( $php_file )) { + require $php_file; + } + $p=[]; + $p['template'] = $tpl_file; + $packages[] = $p; + } + } +} +$gBitSmarty->assign('packages',$packages ); + +if( !empty( $_REQUEST['error'] ) ) { + $gBitSmarty->assign( 'error', $_REQUEST['error'] ); + $gBitSystem->setHttpStatus( HttpStatusCodes::HTTP_UNAUTHORIZED ); +} + +$gBitSmarty->assign( 'metaKeywords', 'Login, Sign in, Registration, Register, Create new account' ); +$gBitSystem->display('bitpackage:users/register.tpl', 'Register' , [ 'display_mode' => 'display' ]); \ No newline at end of file diff --git a/register.php b/register.php index 2e7912e..d9220eb 100755 --- a/register.php +++ b/register.php @@ -1,8 +1,6 @@ verifyFeature( 'users_allow_register' ); -BitHybridAuthManager::loadSingleton(); -global $gBitHybridAuthManager; -$gBitSmarty->assign( 'hybridProviders', $gBitHybridAuthManager->getEnabledProviders() ); - // Everything below here is needed for registration -use Bitweaver\Users\BaseAuth; - if( !empty( $_REQUEST['returnto'] ) ) { $_SESSION['returnto'] = $_REQUEST['returnto']; } elseif( !empty( $_SERVER['HTTP_REFERER'] ) && !strpos( $_SERVER['HTTP_REFERER'], 'signin.php' ) && !strpos( $_SERVER['HTTP_REFERER'], 'register.php' ) ) { @@ -48,16 +46,73 @@ if( $gBitUser->isRegistered() ) { } if( isset( $_REQUEST["register"] ) ) { - $pRegisterHash = $_REQUEST; + $reg = $_REQUEST; + + // Register the new user + $newUser = new RolePermUser(); + if( $newUser->preRegisterVerify( $reg ) && $newUser->register( $reg ) ) { + $gBitUser->mUserId = $newUser->mUserId; + + // add user to user-selected role + if ( !empty( $_REQUEST['role'] ) ) { + $roleInfo = $gBitUser->getRoleInfo( $_REQUEST['role'] ); + if ( empty($roleInfo) || $roleInfo['is_public'] != 'y' ) { + $errors[] = "You can't use this role"; + $gBitSmarty->assign( 'errors', $errors ); + } else { + $userId = $newUser->getUserId(); + $gBitUser->addUserToRole( $userId, $_REQUEST['role'] ); + $gBitUser->storeUserDefaultRole( $userId, $_REQUEST['role'] ); + } + } + + // set the user to private if necessary. defaults to public + if(!empty($_REQUEST['users_information']) && $_REQUEST['users_information'] == 'private'){ + $newUser->storePreference('users_information','private'); + } - include USERS_PKG_INCLUDE_PATH . 'register_inc.php'; + // requires validation by email + if( $gBitSystem->isFeatureActive( 'users_validate_user' ) ) { + $gBitSmarty->assign('msg',KernelTools::tra('You will receive an email with information to login for the first time into this site')); + $gBitSmarty->assign('showmsg','y'); + } else { + if( !empty( $_SESSION['loginfrom'] ) ) { + unset( $_SESSION['loginfrom'] ); + } + // registration login, fake the cookie so the session gets updated properly. + if( empty($_COOKIE[$gBitUser->getSiteCookieName()] ) ) { + $_COOKIE[$gBitUser->getSiteCookieName()] = session_id(); + } + // login with email since login is not technically required in the form, as it can be auto generated during store + $afterRegDefault = $newUser->login( $reg['email'], $reg['password'], false, false ); + $url = $gBitSystem->getConfig( 'after_reg_url' )?BIT_ROOT_URI.$gBitSystem->getConfig( 'after_reg_url' ):$afterRegDefault; + // return to referring page + if( !empty( $_SESSION['returnto'] ) ) { + $url = $_SESSION['returnto']; + // forward to role post-registration page + } elseif ( !empty( $_REQUEST['role'] ) && !empty( $roleInfo['after_registration_page'] ) ) { + if ( $newUser->verifyId( $roleInfo['after_registration_page'] ) ) { + $url = BIT_ROOT_URI."index.php?content_id=".$roleInfo['after_registration_page']; + } elseif( strpos( $roleInfo['after_registration_page'], '/' ) === false ) { + $url = BitPage::getDisplayUrlFromHash( $roleInfo['after_registration_page'] ); + } else { + $url = $roleInfo['after_registration_page']; + } + } + header( 'Location: '.$url ); + exit; + } + } else { + $gBitSystem->setHttpStatus( HttpStatusCodes::HTTP_BAD_REQUEST ); + $gBitSmarty->assign( 'errors', $newUser->mErrors ); + } - $gBitSmarty->assign( 'reg', $pRegisterHash ); + $gBitSmarty->assign( 'reg', $reg ); } else { if( $gBitSystem->isFeatureActive( 'custom_user_fields' ) ) { $fields= explode( ',', $gBitSystem->getConfig( 'custom_user_fields' ) ); - KernelTools::trim_array( $fields ); + trim_array( $fields ); $gBitSmarty->assign('customFields', $fields); } @@ -92,6 +147,12 @@ closedir( $h ); sort( $flags ); $gBitSmarty->assign('flags', $flags); +$listHash = [ + 'is_public' => 'y', + 'sort_mode' => [ 'is_default_asc', 'role_desc_asc' ], +]; +$roleList = $gBitUser->getAllRoles( $listHash ); +$gBitSmarty->assign( 'roleList', $roleList ); // include preferences settings from other packages - these will be included as individual tabs $packages = []; @@ -117,4 +178,4 @@ if( !empty( $_REQUEST['error'] ) ) { } $gBitSmarty->assign( 'metaKeywords', 'Login, Sign in, Registration, Register, Create new account' ); -$gBitSystem->display('bitpackage:users/register.tpl', 'Register' , [ 'display_mode' => 'display' ]); \ No newline at end of file +$gBitSystem->display('bitpackage:users/role_register.tpl', 'Register' , [ 'display_mode' => 'display' ]); diff --git a/role_register.php b/role_register.php deleted file mode 100755 index ee0665e..0000000 --- a/role_register.php +++ /dev/null @@ -1,181 +0,0 @@ -verifyFeature( 'users_allow_register' ); - -// Everything below here is needed for registration - -if( !empty( $_REQUEST['returnto'] ) ) { - $_SESSION['returnto'] = $_REQUEST['returnto']; -} elseif( !empty( $_SERVER['HTTP_REFERER'] ) && !strpos( $_SERVER['HTTP_REFERER'], 'signin.php' ) && !strpos( $_SERVER['HTTP_REFERER'], 'role_register.php' ) ) { - $from = parse_url( $_SERVER['HTTP_REFERER'] ); - if( !empty( $from['path'] ) && $from['host'] == $_SERVER['SERVER_NAME'] ) { - $_SESSION['loginfrom'] = $from['path'].'?'.( !empty( $from['query'] ) ? $from['query'] : '' ); - } -} - -if( $gBitUser->isRegistered() ) { - KernelTools::bit_redirect( $gBitSystem->getDefaultPage() ); -} -if( isset( $_REQUEST["register"] ) ) { - - $reg = $_REQUEST; - - // Register the new user - $newUser = new RolePermUser(); - if( $newUser->preRegisterVerify( $reg ) && $newUser->register( $reg ) ) { - $gBitUser->mUserId = $newUser->mUserId; - - // add user to user-selected role - if ( !empty( $_REQUEST['role'] ) ) { - $roleInfo = $gBitUser->getRoleInfo( $_REQUEST['role'] ); - if ( empty($roleInfo) || $roleInfo['is_public'] != 'y' ) { - $errors[] = "You can't use this role"; - $gBitSmarty->assign( 'errors', $errors ); - } else { - $userId = $newUser->getUserId(); - $gBitUser->addUserToRole( $userId, $_REQUEST['role'] ); - $gBitUser->storeUserDefaultRole( $userId, $_REQUEST['role'] ); - } - } - - // set the user to private if necessary. defaults to public - if(!empty($_REQUEST['users_information']) && $_REQUEST['users_information'] == 'private'){ - $newUser->storePreference('users_information','private'); - } - - // requires validation by email - if( $gBitSystem->isFeatureActive( 'users_validate_user' ) ) { - $gBitSmarty->assign('msg',KernelTools::tra('You will receive an email with information to login for the first time into this site')); - $gBitSmarty->assign('showmsg','y'); - } else { - if( !empty( $_SESSION['loginfrom'] ) ) { - unset( $_SESSION['loginfrom'] ); - } - // registration login, fake the cookie so the session gets updated properly. - if( empty($_COOKIE[$gBitUser->getSiteCookieName()] ) ) { - $_COOKIE[$gBitUser->getSiteCookieName()] = session_id(); - } - // login with email since login is not technically required in the form, as it can be auto generated during store - $afterRegDefault = $newUser->login( $reg['email'], $reg['password'], false, false ); - $url = $gBitSystem->getConfig( 'after_reg_url' )?BIT_ROOT_URI.$gBitSystem->getConfig( 'after_reg_url' ):$afterRegDefault; - // return to referring page - if( !empty( $_SESSION['returnto'] ) ) { - $url = $_SESSION['returnto']; - // forward to role post-registration page - } elseif ( !empty( $_REQUEST['role'] ) && !empty( $roleInfo['after_registration_page'] ) ) { - if ( $newUser->verifyId( $roleInfo['after_registration_page'] ) ) { - $url = BIT_ROOT_URI."index.php?content_id=".$roleInfo['after_registration_page']; - } elseif( strpos( $roleInfo['after_registration_page'], '/' ) === false ) { - $url = BitPage::getDisplayUrlFromHash( $roleInfo['after_registration_page'] ); - } else { - $url = $roleInfo['after_registration_page']; - } - } - header( 'Location: '.$url ); - exit; - } - } else { - $gBitSystem->setHttpStatus( HttpStatusCodes::HTTP_BAD_REQUEST ); - $gBitSmarty->assign( 'errors', $newUser->mErrors ); - } - - $gBitSmarty->assign( 'reg', $reg ); - -} else { - if( $gBitSystem->isFeatureActive( 'custom_user_fields' ) ) { - $fields= explode( ',', $gBitSystem->getConfig( 'custom_user_fields' ) ); - trim_array( $fields ); - $gBitSmarty->assign('customFields', $fields); - } - - for( $i=0; $i < BaseAuth::getAuthMethodCount(); $i++ ) { - $instance = BaseAuth::init( $i ); - if( $instance && $instance->canManageAuth() ) { - $auth_reg_fields = $instance->getRegistrationFields(); - foreach( array_keys( $auth_reg_fields ) as $auth_field ) { - $auth_reg_fields[$auth_field]['value'] = $auth_reg_fields[$auth_field]['default']; - } - $gBitSmarty->assign( 'auth_reg_fields', $auth_reg_fields ); - break; - } - } -} - -$languages = []; -$languages = $gBitLanguage->listLanguages(); -$gBitSmarty->assign( 'languages', $languages ); -$gBitSmarty->assign( 'gBitLanguage', $gBitLanguage ); - -// Get flags here -$flags = []; -$h = opendir( USERS_PKG_PATH.'icons/flags/' ); -while( $file = readdir( $h )) { - if( strstr( $file, ".gif" )) { - $parts = explode( '.', $file ); - $flags[] = $parts[0]; - } -} -closedir( $h ); -sort( $flags ); -$gBitSmarty->assign('flags', $flags); - -$listHash = [ - 'is_public' => 'y', - 'sort_mode' => [ 'is_default_asc', 'role_desc_asc' ], -]; -$roleList = $gBitUser->getAllRoles( $listHash ); -$gBitSmarty->assign( 'roleList', $roleList ); - -// include preferences settings from other packages - these will be included as individual tabs -$packages = []; -foreach( $gBitSystem->mPackages as $package ) { - if( $gBitSystem->isPackageActive( $package['name'] )) { - $php_file = $package['path'].'user_register_inc.php'; - $tpl_file = $package['path'].'templates/user_register_inc.tpl'; - if( file_exists( $tpl_file )) { - if( file_exists( $php_file )) { - require $php_file; - } - $p=[]; - $p['template'] = $tpl_file; - $packages[] = $p; - } - } -} -$gBitSmarty->assign('packages',$packages ); - -if( !empty( $_REQUEST['error'] ) ) { - $gBitSmarty->assign( 'error', $_REQUEST['error'] ); - $gBitSystem->setHttpStatus( HttpStatusCodes::HTTP_UNAUTHORIZED ); -} - -$gBitSmarty->assign( 'metaKeywords', 'Login, Sign in, Registration, Register, Create new account' ); -$gBitSystem->display('bitpackage:users/role_register.tpl', 'Register' , [ 'display_mode' => 'display' ]); diff --git a/templates/register.tpl b/templates/register.tpl index 13b724c..ca2ac82 100644 --- a/templates/register.tpl +++ b/templates/register.tpl @@ -1,6 +1,6 @@ {strip} -{form class="col-md-6 col-xs-12 form-horizontal" action="`$smarty.const.USERS_PKG_URL`register.php" enctype="multipart/form-data" legend="Register as a new user" secure=$gBitSystem->isFeatureActive("site_https_login_required")} +{form class="col-md-6 col-xs-12 form-horizontal" action="`$smarty.const.USERS_PKG_URL`hauth_register.php" enctype="multipart/form-data" legend="Register as a new user" secure=$gBitSystem->isFeatureActive("site_https_login_required")} {foreach from=$reg.CUSTOM ?? [] item='custom' key='custom_name'} {/foreach} -- cgit v1.3