Untitled diff

Created Diff never expires
8 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
738 lines
10 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
740 lines
<?php
<?php
/**
/**
* <pre>
* <pre>
* Invision Power Services
* Invision Power Services
* IP.Board vVERSION_NUMBER
* IP.Board v3.4.7
* Static Member Class for IP.Board 3
* Static Member Class for IP.Board 3
*
*
* Last Updated: $Date: 2013-11-18 12:13:54 -0700 (Mon, 18 Nov 2013) $
* Last Updated: $Date: 2014-10-15 11:09:37 -0400 (Wed, 15 Oct 2014) $
* </pre>
* </pre>
*
*
* @author $Author: rashbrook $
* @author $Author: mark $
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
*
* @package IP.Board
* @package IP.Board
* @link http://www.invisionpower.com
*
* @since 12th March 2002
* @since 12th March 2002
* @version $Revision: 12414 $
* @version $Revision: 12546 $
*
*
* @author Matt
* @author Matt
*/
*/
/**
/**
* Some constants
* Some constants
*/
*/
define( 'IPS_MEMBER_PHOTO_NO_CACHE', true );
define( 'IPS_MEMBER_PHOTO_NO_CACHE', true );
/**
/**
* IPSMember
* IPSMember
*
*
* This deals with member data and some member functions
* This deals with member data and some member functions
*/
*/
class IPSMember
class IPSMember
{
{
/**
/**
* Custom fields class
* Custom fields class
*
*
* @var object
* @var object
*/
*/
static protected $custom_fields_class;
static protected $custom_fields_class;
/**
/**
* Member cache
* Member cache
*
*
* @var array
* @var array
*/
*/
static protected $memberCache = array();
static protected $memberCache = array();
/**
/**
* Ignore cache
* Ignore cache
*
*
* @var boolean
* @var boolean
*/
*/
static protected $ignoreCache = FALSE;
static protected $ignoreCache = FALSE;
/**
/**
* Debug data
* Debug data
*
*
* @var array
* @var array
*/
*/
static public $debugData = array();
static public $debugData = array();
/**
/**
* memberFunctions object reference
* memberFunctions object reference
*
*
* @var object
* @var object
*/
*/
static protected $_memberFunctions;
static protected $_memberFunctions;
/**
/**
* Parsed signatures to save resources
* Parsed signatures to save resources
*
*
* @var array
* @var array
*/
*/
static protected $_parsedSignatures = array();
static protected $_parsedSignatures = array();
/**
/**
* Parsed custom fields to save resources
* Parsed custom fields to save resources
*
*
* @var array
* @var array
*/
*/
static protected $_parsedCustomFields = array();
static protected $_parsedCustomFields = array();
/**
/**
* Parsed custom fields to save resources
* Parsed custom fields to save resources
*
*
* @var array
* @var array
*/
*/
static protected $_parsedCustomGroups = array();
static protected $_parsedCustomGroups = array();
/**
/**
* Ban filters cache
* Ban filters cache
*
*
* @var array
* @var array
*/
*/
static public $_banFiltersCache = NULL;
static public $_banFiltersCache = NULL;
/**
/**
* Signature parser object
* Signature parser object
* @var unknown_type
* @var unknown_type
*/
*/
static protected $_sigParser = null;
static protected $_sigParser = null;
/**
/**
* Remove Member during merge.
* Remove Member during merge.
* @bool
* @bool
* @brief See ticket 874824 - When merging on an IPS Connect linked slave IPB, the login handler attempts to remove the second account on the master. In this instance, we shouldn't do that.
* @brief See ticket 874824 - When merging on an IPS Connect linked slave IPB, the login handler attempts to remove the second account on the master. In this instance, we shouldn't do that.
*
*
*/
*/
static public $_isMerging = false;
static public $_isMerging = false;
/**
/**
* Member data array
* Member data array
*
*
* @var array
* @var array
*/
*/
static public $data = array( 'member_id' => 0,
static public $data = array( 'member_id' => 0,
'name' => "",
'name' => "",
'members_display_name' => "",
'members_display_name' => "",
'member_group_id' => 0,
'member_group_id' => 0,
'member_forum_markers' => array() );
'member_forum_markers' => array() );
/**
/**
* Remapped table array used in load and save
* Remapped table array used in load and save
*
*
* @var array
* @var array
*/
*/
static protected $remap = array( 'core' => 'members',
static protected $remap = array( 'core' => 'members',
'extendedProfile' => 'profile_portal',
'extendedProfile' => 'profile_portal',
'customFields' => 'pfields_content',
'customFields' => 'pfields_content',
'itemMarkingStorage' => 'core_item_markers_storage' );
'itemMarkingStorage' => 'core_item_markers_storage' );
/**
/**
* Create profile link
* Create profile link
*
*
* @param string User's display name
* @param string User's display name
* @param integer User's DB ID
* @param integer User's DB ID
* @param string SEO display name
* @param string SEO display name
* @param string Classname
* @param string Classname
* @param string Title
* @param string Title
* @param int Active/inactive (member_banned, bw_is_spammer)
* @param int Active/inactive (member_banned, bw_is_spammer)
* @return string Link title
* @return string Link title
* @since 2.0
* @since 2.0
*/
*/
static public function makeProfileLink( $name, $id=0, $_seoName="", $className='', $title='', $inactive=0 )
static public function makeProfileLink( $name, $id=0, $_seoName="", $className='', $title='', $inactive=0 )
{
{
/* Cache so we don't have to rebuild on each call */
/* Cache so we don't have to rebuild on each call */
static $cache = array();
static $cache = array();
/* Did we just send in an array of data? */
/* Did we just send in an array of data? */
if ( is_array( $name ) && ! empty( $name['member_id'] ) )
if ( is_array( $name ) && ! empty( $name['member_id'] ) )
{
{
$_name = $name;
$_name = $name;
$name = $_name['members_display_name'];
$name = $_name['members_display_name'];
$id = $_name['member_id'];
$id = $_name['member_id'];
$_seoName = $_name['members_seo_name'];
$_seoName = $_name['members_seo_name'];
$className = $_name['_className'];
$className = $_name['_className'];
$title = $_name['_title'];
$title = $_name['_title'];
$inactive = $inactive ? $inactive : self::isInactive($_name);
$inactive = $inactive ? $inactive : self::isInactive($_name);
}
}
$_key = md5($id.$name.$_seoName.$className.$title.$inactive);
$_key = md5($id.$name.$_seoName.$className.$title.$inactive);
if ( isset($cache[ $_key ]) )
if ( isset($cache[ $_key ]) )
{
{
return $cache[ $_key ];
return $cache[ $_key ];
}
}
if ( $id > 0 && ipsRegistry::member()->getProperty('g_mem_info') )
if ( $id > 0 && ipsRegistry::member()->getProperty('g_mem_info') )
{
{
$_seoName = ( $_seoName ) ? $_seoName : IPSText::makeSeoTitle( $name );
$_seoName = ( $_seoName ) ? $_seoName : IPSText::makeSeoTitle( $name );
$cache[ $_key ] = ipsRegistry::getClass('output')->getTemplate('global')->userHoverCard( array( 'member_id' => $id, 'members_display_name' => $name, 'members_seo_name' => $_seoName, '_hoverClass' => $className, '_hoverTitle' => $title, 'inactive' => $inactive ) );
$cache[ $_key ] = ipsRegistry::getClass('output')->getTemplate('global')->userHoverCard( array( 'member_id' => $id, 'members_display_name' => $name, 'members_seo_name' => $_seoName, '_hoverClass' => $className, '_hoverTitle' => $title, 'inactive' => $inactive ) );
}
}
else
else
{
{
if( $className )
if( $className )
{
{
$cache[ $_key ] = "<span class='{$className}'>" . $name . "</span>";
$cache[ $_key ] = "<span class='{$className}'>" . $name . "</span>";
}
}
else
else
{
{
$cache[ $_key ] = $name;
$cache[ $_key ] = $name;
}
}
}
}
return $cache[ $_key ];
return $cache[ $_key ];
}
}
/**
/**
* Unpack group bitwise options
* Unpack group bitwise options
*
*
* @param array
* @param array
* @param bool Do not warn on overwrite
* @param bool Do not warn on overwrite
* @return array
* @return array
*/
*/
static public function unpackGroup( $group, $silence=false, $forceReload=false )
static public function unpackGroup( $group, $silence=false, $forceReload=false )
{
{
/* Cache to prevent having to thaw each call, which could be hundreds on a given page */
/* Cache to prevent having to thaw each call, which could be hundreds on a given page */
static $cache = array();
static $cache = array();
if( !$forceReload and $cache[ $group['g_id'] ] )
if( !$forceReload and $cache[ $group['g_id'] ] )
{
{
return array_merge( $group, $cache[ $group['g_id'] ] );
return array_merge( $group, $cache[ $group['g_id'] ] );
}
}
/* Unpack photo limits */
/* Unpack photo limits */
list( $p_max, $p_width, $p_height ) = explode( ":", $group['g_photo_max_vars'] );
list( $p_max, $p_width, $p_height ) = explode( ":", $group['g_photo_max_vars'] );
if ( ! isset( $group['photoMaxKb'] ) OR ! isset( $group['photoMaxWidth'] ) OR ! isset( $group['photoMaxHeight'] ) )
if ( ! isset( $group['photoMaxKb'] ) OR ! isset( $group['photoMaxWidth'] ) OR ! isset( $group['photoMaxHeight'] ) )
{
{
$cache[ $group['g_id'] ]['photoMaxKb'] = intval( $p_max );
$cache[ $group['g_id'] ]['photoMaxKb'] = intval( $p_max );
$cache[ $group['g_id'] ]['photoMaxWidth'] = intval( $p_width );
$cache[ $group['g_id'] ]['photoMaxWidth'] = intval( $p_width );
$cache[ $group['g_id'] ]['photoMaxHeight'] = intval( $p_height );
$cache[ $group['g_id'] ]['photoMaxHeight'] = intval( $p_height );
}
}
/* Unpack bitwise fields */
/* Unpack bitwise fields */
$_tmp = IPSBWOptions::thaw( $group['g_bitoptions'], 'groups', 'global' );
$_tmp = IPSBWOptions::thaw( $group['g_bitoptions'], 'groups', 'global' );
if ( count( $_tmp ) )
if ( count( $_tmp ) )
{
{
foreach( $_tmp as $k => $v )
foreach( $_tmp as $k => $v )
{
{
/* Trigger notice if we have DB field */
/* Trigger notice if we have DB field */
if ( $silence === false AND isset( $group[ $k ] ) )
if ( $silence === false AND isset( $group[ $k ] ) )
{
{
trigger_error( "Thawing bitwise options for GROUPS: Bitwise field '$k' has overwritten DB field '$k'", E_USER_WARNING );
trigger_error( "Thawing bitwise options for GROUPS: Bitwise field '$k' has overwritten DB field '$k'", E_USER_WARNING );
}
}
$cache[ $group['g_id'] ][ $k ] = $v;
$cache[ $group['g_id'] ][ $k ] = $v;
}
}
}
}
return array_merge( $group, $cache[ $group['g_id'] ] );
return array_merge( $group, $cache[ $group['g_id'] ] );
}
}
/**
/**
* Create a random 15 character password
* Create a random 15 character password
*
*
* @return string Password
* @return string Password
* @since 2.0
* @since 2.0
*/
*/
public static function makePassword()
public static function makePassword()
{
{
$pass = "";
$pass = "";
// Want it random you say, eh?
// Want it random you say, eh?
// (enter evil laugh)
// (enter evil laugh)
$unique_id = uniqid( mt_rand(), TRUE );
$unique_id = uniqid( mt_rand(), TRUE );
$prefix = IPSMember::generatePasswordSalt();
$prefix = IPSMember::generatePasswordSalt();
$unique_id .= md5( $prefix );
$unique_id .= md5( $prefix );
usleep( mt_rand(15000,1000000) );
usleep( mt_rand(15000,1000000) );
// Hmm, wonder how long we slept for
// Hmm, wonder how long we slept for
$new_uniqueid = uniqid( mt_rand(), TRUE );
$new_uniqueid = uniqid( mt_rand(), TRUE );
$final_rand = md5( $unique_id . $new_uniqueid );
$final_rand = md5( $unique_id . $new_uniqueid );
for ($i = 0; $i < 15; $i++)
for ($i = 0; $i < 15; $i++)
{
{
$pass .= $final_rand{ mt_rand(0, 31) };
$pass .= $final_rand{ mt_rand(0, 31) };
}
}
return $pass;
return $pass;
}
}
/**
/**
* Checks to see if the logged in user can recieve mobile notifications
* Checks to see if the logged in user can recieve mobile notifications
*
*
* @param array $memberData Optional, logged in user will be used if this is not passed in
* @param array $memberData Optional, logged in user will be used if this is not passed in
* @return BOOL
* @return BOOL
*/
*/
static public function canReceiveMobileNotifications( $memberData=array() )
static public function canReceiveMobileNotifications( $memberData=array() )
{
{
/* Mobile notifications are currently deprecated http://community.invisionpower.com/resources/bugs.html/_/ip-board/remove-push-notification-references-r40643 */
/* Mobile notifications are currently deprecated http://community.---.com/resources/bugs.html/_/ip-board/remove-push-notification-references-r40643 */
return false;
return false;
/* INIT */
/* INIT */
$memberData = ( is_array( $memberData ) && count( $memberData ) ) ? $memberData : ipsRegistry::member()->fetchMemberData();
$memberData = ( is_array( $memberData ) && count( $memberData ) ) ? $memberData : ipsRegistry::member()->fetchMemberData();
/* Check to see if notifications are enabled */
/* Check to see if notifications are enabled */
if( ! ipsRegistry::$settings['iphone_notifications_enabled'] )
if( ! ipsRegistry::$settings['iphone_notifications_enabled'] )
{
{
return false;
return false;
}
}
/* Check to see if the user has permission to get notifications */
/* Check to see if the user has permission to get notifications */
if( ipsRegistry::$settings['iphone_notifications_groups'] )
if( ipsRegistry::$settings['iphone_notifications_groups'] )
{
{
if( IPSMember::isInGroup( $memberData, explode( ',', ipsRegistry::$settings['iphone_notifications_groups'] ) ) )
if( IPSMember::isInGroup( $memberData, explode( ',', ipsRegistry::$settings['iphone_notifications_groups'] ) ) )
{
{
return true;
return true;
}
}
else
else
{
{
return false;
return false;
}
}
}
}
return true;
return true;
}
}
/**
/**
* Format name based on group suffix/prefix
* Format name based on group suffix/prefix
*
*
* @param string User's display name
* @param string User's display name
* @param integer User's group ID
* @param integer User's group ID
* @param string Optional prefix override (uses group setting if not provided)
* @param string Optional prefix override (uses group setting if not provided)
* @param string Optional suffix override (uses group setting if not provided)
* @param string Optional suffix override (uses group setting if not provided)
* @return string Formatted name
* @return string Formatted name
* @since 2.2
* @since 2.2
*/
*/
public static function makeNameFormatted($name='', $group_id="", $prefix="", $suffix="")
public static function makeNameFormatted($name='', $group_id="", $prefix="", $suffix="")
{
{
if ( ipsRegistry::$settings['ipb_disable_group_psformat'] )
if ( ipsRegistry::$settings['ipb_disable_group_psformat'] )
{
{
return $name;
return $name;
}
}
if ( ! $group_id )
if ( ! $group_id )
{
{
$group_id = 0;
$group_id = 0;
}
}
$groupCache = ipsRegistry::cache()->getCache('group_cache');
$groupCache = ipsRegistry::cache()->getCache('group_cache');
if ( ! $prefix )
if ( ! $prefix )
{
{
if( $groupCache[ $group_id ]['prefix'] )
if( $groupCache[ $group_id ]['prefix'] )
{
{
$prefix = $groupCache[ $group_id ]['prefix'];
$prefix = $groupCache[ $group_id ]['prefix'];
}
}
}
}
if( ! $suffix )
if( ! $suffix )
{
{
if( $groupCache[ $group_id ]['suffix'] )
if( $groupCache[ $group_id ]['suffix'] )
{
{
$suffix = $groupCache[ $group_id ]['suffix'];
$suffix = $groupCache[ $group_id ]['suffix'];
}
}
}
}
if ( ! $name )
if ( ! $name )
{
{
if( $groupCache[ $group_id ]['g_title'] )
if( $groupCache[ $group_id ]['g_title'] )
{
{
$name = $groupCache[ $group_id ]['g_title'];
$name = $groupCache[ $group_id ]['g_title'];
}
}
}
}
return $prefix.$name.$suffix;
return $prefix.$name.$suffix;
}
}
/**
/**
* Create new member
* Create new member
* Very basic functionality at this point.
* Very basic functionality at this point.
*
*
* @param array Fields to save in the following format: array( 'members' => array( 'email' => 'test@test.com',
* @param array Fields to save in the following format: array( 'members' => array( 'email' => 'test@test.com',
* 'joined' => time() ),
* 'joined' => time() ),
* 'extendedProfile' => array( 'signature' => 'My signature' ) );
* 'extendedProfile' => array( 'signature' => 'My signature' ) );
* Tables: members, pfields_content, profile_portal.
* Tables: members, pfields_content, profile_portal.
* You can also use the aliases: 'core [members]', 'extendedProfile [profile_portal]', and 'customFields [pfields_content]'
* You can also use the aliases: 'core [members]', 'extendedProfile [profile_portal]', and 'customFields [pfields_content]'
* @param bool Flag to attempt to auto create a name if the desired is taken
* @param bool Flag to attempt to auto create a name if the desired is taken
* @param bool Bypass custom field saving (if using the sso session integration this is required as member object isn't ready yet)
* @param bool Bypass custom field saving (if using the sso session integration this is required as member object isn't ready yet)
* @param bool Whether or not to recache the stats so as to update the board's last member data
* @param bool Whether or not to recache the stats so as to update the board's last member data
* @return array Final member Data including member_id
* @return array Final member Data including member_id
*
*
* EXCEPTION CODES
* EXCEPTION CODES
* CUSTOM_FIELDS_EMPTY - Custom fields were not populated
* CUSTOM_FIELDS_EMPTY - Custom fields were not populated
* CUSTOM_FIELDS_INVALID - Custom fields were invalid
* CUSTOM_FIELDS_INVALID - Custom fields were invalid
* CUSTOM_FIELDS_TOOBIG - Custom fields too big
* CUSTOM_FIELDS_TOOBIG - Custom fields too big
*/
*/
static public function create( $tables=array(), $autoCreateName=FALSE, $bypassCfields=FALSE, $doStatsRecache=TRUE )
static public function create( $tables=array(), $autoCreateName=FALSE, $bypassCfields=FALSE, $doStatsRecache=TRUE )
{
{
//-----------------------------------------
//-----------------------------------------
// INIT
// INIT
//-----------------------------------------
//-----------------------------------------
$finalTables = array();
$finalTables = array();
$password = '';
$password = '';
$plainPassword = '';
$plainPassword = '';
$bitWiseFields = ipsRegistry::fetchBitWiseOptions( 'global' );
$bitWiseFields = ipsRegistry::fetchBitWiseOptions( 'global' );
$md_5_password = '';
$md_5_password = '';
//-----------------------------------------
//-----------------------------------------
// Remap tables if required
// Remap tables if required
//-----------------------------------------
//-----------------------------------------
foreach( $tables as $table => $data )
foreach( $tables as $table => $data )
{
{
$_name = ( isset( self::$remap[ $table ] ) ) ? self::$remap[ $table ] : $table;
$_name = ( isset( self::$remap[ $table ] ) ) ? self::$remap[ $table ] : $table;
if ( $_name == 'members' )
if ( $_name == 'members' )
{
{
/* Magic password field */
/* Magic password field */
if ( ! empty( $data['md5_hash_password'] ) )
if ( ! empty( $data['md5_hash_password'] ) )
{
{
$md_5_password = trim( $data['md5_hash_password'] );
$md_5_password = trim( $data['md5_hash_password'] );
$plainPassword = null;
$plainPassword = null;
unset( $data['md5_hash_password'] );
unset( $data['md5_hash_password'] );
}
}
else
else
{
{
$password = ( isset( $data['password'] ) ) ? trim( $data['password'] ) : self::makePassword();
$password = ( isset( $data['password'] ) ) ? trim( $data['password'] ) : self::makePassword();
$plainPassword = $password;
$plainPassword = $password;
$md_5_password = md5( $password );
$md_5_password = md5( $password );
unset( $data['password'] );
unset( $data['password'] );
}
}
}
}
$finalTables[ $_name ] = $data;
$finalTables[ $_name ] = $data;
}
}
//-----------------------------------------
//-----------------------------------------
// Custom profile field stuff
// Custom profile field stuff
//-----------------------------------------
//-----------------------------------------
if( !$bypassCfields )
if( !$bypassCfields )
{
{
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php', 'customProfileFields' );
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php', 'customProfileFields' );
$fields = new $classToLoad();
$fields = new $classToLoad();
if ( is_array( $finalTables['pfields_content'] ) AND count( $finalTables['pfields_content'] ) )
if ( is_array( $finalTables['pfields_content'] ) AND count( $finalTables['pfields_content'] ) )
{
{
$fields->member_data = $finalTables['pfields_content'];
$fields->member_data = $finalTables['pfields_content'];
}
}
$fields->initData( 'edit' );
$fields->initData( 'edit' );
$fields->parseToSave( $finalTables['pfields_content'], 'register' );
$fields->parseToSave( $finalTables['pfields_content'], 'register' );
/* Check */
/* Check */
/*if( count( $fields->error_fields['empty'] ) )
/*if( count( $fields->error_fields['empty'] ) )
{
{
throw new Exception( 'CUSTOM_FIELDS_EMPTY' );
throw new Exception( 'CUSTOM_FIELDS_EMPTY' );
}
}
if( count( $fields->error_fields['invalid'] ) )
if( count( $fields->error_fields['invalid'] ) )
{
{
throw new Exception( 'CUSTOM_FIELDS_INVALID' );
throw new Exception( 'CUSTOM_FIELDS_INVALID' );
}
}
if( count( $fields->error_fields['toobig'] ) )
if( count( $fields->error_fields['toobig'] ) )
{
{
throw new Exception( 'CUSTOM_FIELDS_TOOBIG' );
throw new Exception( 'CUSTOM_FIELDS_TOOBIG' );
}*/
}*/
}
}
//-----------------------------------------
//-----------------------------------------
// Make sure the account doesn't exist
// Make sure the account doesn't exist
//-----------------------------------------
//-----------------------------------------
if( $finalTables['members']['email'] )
if( $finalTables['members']['email'] )
{
{
if ( IPSText::mbstrlen( $finalTables['members']['email'] ) > 150 OR strstr( $finalTables['members']['email'], ' ' ) )
if ( IPSText::mbstrlen( $finalTables['members']['email'] ) > 150 OR strstr( $finalTables['members']['email'], ' ' ) )
{
{
/* Allow it to be auto created */
/* Allow it to be auto created */
$finalTables['members']['email'] = false;
$finalTables['members']['email'] = false;
}
}
else
else
{
{
$existing = IPSMember::load( $finalTables['members']['email'], 'all' );
$existing = IPSMember::load( $finalTables['members']['email'], 'all' );
if( $existing['member_id'] )
if( $existing['member_id'] )
{
{
$existing['full'] = true;
$existing['full'] = true;
$existing['timenow'] = time();
$existing['timenow'] = time();
return $existing;
return $existing;
}
}
}
}
}
}
//-----------------------------------------
//-----------------------------------------
// Fix up usernames and display names
// Fix up usernames and display names
//-----------------------------------------
//-----------------------------------------
/* Ensure we have a display name */
/* Ensure we have a display name */
if( $autoCreateName AND $finalTables['members']['members_display_name'] !== FALSE )
if( $autoCreateName AND $finalTables['members']['members_display_name'] !== FALSE )
{
{
$finalTables['members']['members_display_name'] = ( $finalTables['members']['members_display_name'] ) ? $finalTables['members']['members_display_name'] : $finalTables['members']['name'];
$finalTables['members']['members_display_name'] = ( $finalTables['members']['members_display_name'] ) ? $finalTables['members']['members_display_name'] : $finalTables['members']['name'];
}
}
//-----------------------------------------
//-----------------------------------------
// Remove some basic HTML tags
// Remove some basic HTML tags
//-----------------------------------------
//-----------------------------------------
if( $finalTables['members']['members_display_name'] )
if( $finalTables['members']['members_display_name'] )
{
{
if ( IPSText::mbstrlen( $finalTables['members']['members_display_name'] ) > 255 )
if ( IPSText::mbstrlen( $finalTables['members']['members_display_name'] ) > 255 )
{
{
$finalTables['members']['members_display_name'] = false;
$finalTables['members']['members_display_name'] = false;
}
}
$finalTables['members']['members_display_name'] = str_replace( array( '<', '>', '"' ), '', $finalTables['members']['members_display_name'] );
$finalTables['members']['members_display_name'] = str_replace( array( '<', '>', '"' ), '', $finalTables['members']['members_display_name'] );
}
}
if( $finalTables['members']['name'] )
if( $finalTables['members']['name'] )
{
{
if ( IPSText::mbstrlen( $finalTables['members']['name'] ) > 255 )
if ( IPSText::mbstrlen( $finalTables['members']['name'] ) > 255 )
{
{
$finalTables['members']['name'] = false;
$finalTables['members']['name'] = false;
}
}
$finalTables['members']['name'] = str_replace( array( '<', '>', '"' ), '', $finalTables['members']['name'] );
$finalTables['members']['name'] = str_replace( array( '<', '>', '"' ), '', $finalTables['members']['name'] );
}
}
//-----------------------------------------
//-----------------------------------------
// Make sure the names are unique
// Make sure the names are unique
//-----------------------------------------
//-----------------------------------------
/* Can specify display name of FALSE to force no entry to force partial member */
/* Can specify display name of FALSE to force no entry to force partial member */
if( $finalTables['members']['members_display_name'] !== FALSE )
if( $finalTables['members']['members_display_name'] !== FALSE )
{
{
try
try
{
{
if( IPSMember::getFunction()->checkNameExists( $finalTables['members']['members_display_name'], array(), 'members_display_name', true ) === true )
if( IPSMember::getFunction()->checkNameExists( $finalTables['members']['members_display_name'], array(), 'members_display_name', true ) === true )
{
{
if ( $autoCreateName === TRUE )
if ( $autoCreateName === TRUE )
{
{
/* Now, make sure we have a unique display name */
/* Now, make sure we have a unique display name */
$max = ipsRegistry::DB()->buildAndFetch( array( 'select' => 'MAX(member_id) as max',
$max = ipsRegistry::DB()->buildAndFetch( array( 'select' => 'MAX(member_id) as max',
'from' => 'members',
'from' => 'members',
'where' => "members_l_display_name LIKE '" . ipsRegistry::DB()->addSlashes( strtolower( $finalTables['members']['members_display_name'] ) ) . "%'" ) );
'where' => "members_l_display_name LIKE '" . ipsRegistry::DB()->addSlashes( strtolower( $finalTables['members']['members_display_name'] ) ) . "%'" ) );
if ( $max['max'] )
if ( $max['max'] )
{
{
$_num = $max['max'] + 1;
$_num = $max['max'] + 1;
$finalTables['members']['members_display_name'] = $finalTables['members']['members_display_name'] . '_' . $_num;
$finalTables['members']['members_display_name'] = $finalTables['members']['members_display_name'] . '_' . $_num;
}
}
}
}
else
else
{
{
$finalTables['members']['members_display_name'] = '';
$finalTables['members']['members_display_name'] = '';
}
}
}
}
}
}
catch( Exception $e )
catch( Exception $e )
{}
{}
}
}
if( $finalTables['members']['name'] )
if( $finalTables['members']['name'] )
{
{
try
try
{
{
if( IPSMember::getFunction()->checkNameExists( $finalTables['members']['name'], array(), 'name', true ) === true )
if( IPSMember::getFunction()->checkNameExists( $finalTables['members']['name'], array(), 'name', true ) === true )
{
{
if ( $autoCreateName === TRUE )
if ( $autoCreateName === TRUE )
{
{
/* Now, make sure we have a unique username */
/* Now, make sure we have a unique username */
$max = ipsRegistry::DB()->buildAndFetch( array( 'select' => 'MAX(member_id) as max',
$max = ipsRegistry::DB()->buildAndFetch( array( 'select' => 'MAX(member_id) as max',
'from' => 'members',
'from' => 'members',
'where' => "members_l_username LIKE '" . ipsRegistry::DB()->addSlashes( strtolower( $finalTables['members']['name'] ) ) . "%'" ) );
'where' => "members_l_username LIKE '" . ipsRegistry::DB()->addSlashes( strtolower( $finalTables['members']['name'] ) ) . "%'" ) );
if ( $max['max'] )
if ( $max['max'] )
{
{
$_num = $max['max'] + 1;
$_num = $max['max'] + 1;
$finalTables['members']['name'] = $finalTables['members']['name'] . '_' . $_num;
$finalTables['members']['name'] = $finalTables['members']['name'] . '_' . $_num;
}
}
}
}
else
else
{
{
$finalTables['members']['name'] = '';
$finalTables['members']['name'] = '';
}
}
}
}
}
}
catch( Exception $e )
catch( Exception $e )
{}
{}
}
}
//-----------------------------------------
//-----------------------------------------
// Clean up characters
// Clean up characters
//-----------------------------------------
//-----------------------------------------
if( $finalTables['members']['name'] )
if( $finalTables['members']['name'] )
{
{
$userName = IPSMember::getFunction()->cleanAndCheckName( $finalTables['members']['name'], array(), 'name' );
$userName = IPSMember::getFunction()->cleanAndCheckName( $finalTables['members']['name'], array(), 'name' );
if( $userName['errors'] )
if( $userName['errors'] )
{
{
$finalTables['members']['name'] = $finalTables['members']['email'];
$finalTables['members']['name'] = $finalTables['members']['email'];
}
}
else
else
{
{
$finalTables['members']['name'] = $userName['username'];
$finalTables['members']['name'] = $userName['username'];
}
}
}
}
if( $finalTables['members']['members_display_name'] )
if( $finalTables['members']['members_display_name'] )
{
{
$displayName = IPSMember::getFunction()->cleanAndCheckName( $finalTables['members']['members_display_name'] );
$displayName = IPSMember::getFunction()->cleanAndCheckName( $finalTables['members']['members_display_name'] );
if( $displayName['errors'] )
if( $displayName['errors'] )
{
{
$finalTables['members']['members_display_name'] = '';
$finalTables['members']['members_display_name'] = '';
}
}
else
else
{
{
$finalTables['members']['members_display_name'] = $displayName['members_display_name'];
$finalTables['members']['members_display_name'] = $displayName['members_display_name'];
}
}
}
}
//-----------------------------------------
//-----------------------------------------
// Populate member table(s)
// Populate member table(s)
//-----------------------------------------
//-----------------------------------------
$finalTables['members']['members_l_username'] = isset($finalTables['members']['name']) ? strtolower($finalTables['members']['name']) : '';
$finalTables['members']['members_l_username'] = isset($finalTables['members']['name']) ? strtolower($finalTables['members']['name']) : '';
$finalTables['members']['joined'] = $finalTables['members']['joined'] ? $finalTables['members']['joined'] : time();
$finalTables['members']['joined'] = $finalTables['members']['joined'] ? $finalTables['members']['joined'] : time();
$finalTables['members']['email'] = $finalTables['members']['email'] ? $finalTables['members']['email'] : $finalTables['members']['name'] . '@' . $finalTables['members']['joined'];
$finalTables['members']['email'] = $finalTables['members']['email'] ? $finalTables['members']['email'] : $finalTables['members']['name'] . '@' . $finalTables['members']['joined'];
$finalTables['members']['member_group_id'] = $finalTables['members']['member_group_id'] ? $finalTables['members']['member_group_id'] : ipsRegistry::$settings['member_group'];
$finalTables['members']['member_group_id'] = $finalTables['members']['member_group_id'] ? $finalTables['members']['member_group_id'] : ipsRegistry::$settings['member_group'];
$finalTables['members']['ip_address'] = $finalTables['members']['ip_address'] ? $finalTables['members']['ip_address'] : ipsRegistry::member()->ip_address;
$finalTables['members']['ip_address'] = $finalTables['members']['ip_address'] ? $finalTables['members']['ip_address'] : ipsRegistry::member()->ip_address;
$finalTables['members']['members_created_remote'] = intval( $finalTables['members']['members_created_remote'] );
$finalTables['members']['members_created_remote'] = intval( $finalTables['members']['members_created_remote'] );
$finalTables['members']['member_login_key'] = IPSMember::generateAutoLoginKey();
$finalTables['members']['member_login_key'] = IPSMember::generateAutoLoginKey();
$finalTables['members']['member_login_key_expire'] = ( ipsRegistry::$settings['login_key_expire'] ) ? ( time() + ( intval( ipsRegistry::$settings['login_key_expire'] ) * 86400 ) ) : 0;
$finalTables['members']['member_login_key_expire'] = ( ipsRegistry::$settings['login_key_expire'] ) ? ( time() + ( intval( ipsRegistry::$settings['login_key_expire'] ) * 86400 ) ) : 0;
$finalTables['members']['view_sigs'] = 1;
$finalTables['members']['view_sigs'] = 1;
$finalTables['members']['bday_day'] = intval( $finalTables['members']['bday_day'] );
$finalTables['members']['bday_day'] = intval( $finalTables['members']['bday_day'] );
$finalTables['members']['bday_month'] = intval( $finalTables['members']['bday_month'] );
$finalTables['members']['bday_month'] = intval( $finalTables['members']['bday_month'] );
$finalTables['members']['bday_year'] = intval( $finalTables['members']['bday_year'] );
$finalTables['members']['bday_year'] = intval( $finalTables['members']['bday_year'] );
$finalTables['members']['restrict_post'] = intval( $finalTables['members']['restrict_post'] );
$finalTables['members']['restrict_post'] = intval( $finalTables['members']['restrict_post'] );
$finalTables['members']['auto_track'] = $finalTables['members']['auto_track'] ? $finalTables['members']['auto_track'] : ipsRegistry::$settings['auto_track_method'];
$finalTables['members']['auto_track'] = $finalTables['members']['auto_track'] ? $finalTables['members']['auto_track'] : ipsRegistry::$settings['auto_track_method'];
$finalTables['members']['msg_count_total'] = 0;
$finalTables['members']['msg_count_total'] = 0;
$finalTables['members']['msg_count_new'] = 0;
$finalTables['members']['msg_count_new'] = 0;
$finalTables['members']['msg_show_notification'] = 1;
$finalTables['members']['msg_show_notification'] = 1;
$finalTables['members']['coppa_user'] = 0;
$finalTables['members']['coppa_user'] = 0;
$finalTables['members']['auto_track'] = substr( $finalTables['members']['auto_track'], 0, 50 );
$finalTables['members']['auto_track'] = substr( $finalTables['members']['auto_track'], 0, 50 );
$finalTables['members']['last_visit'] = $finalTables['members']['last_visit'] ? $finalTables['members']['last_visit'] : time();
$finalTables['members']['last_visit'] = $finalTables['members']['last_visit'] ? $finalTables['members']['last_visit'] : time();
$finalTables['members']['last_activity'] = $finalTables['members']['last_activity'] ? $finalTables['members']['last_activity'] : time();
$finalTables['members']['last_activity'] = $finalTables['members']['last_activity'] ? $finalTables['members']['last_activity'] : time();
$finalTables['members']['language'] = $finalTables['members']['language'] ? $finalTables['members']['language'] : IPSLib::getDefaultLanguage();
$finalTables['members']['language'] = $finalTables['members']['language'] ? $finalTables['members']['language'] : IPSLib::getDefaultLanguage();
$finalTables['members']['member_uploader'] = ipsRegistry::$settings['uploadFormType'] ? 'flash' : 'default';
$finalTables['members']['member_uploader'] = ipsRegistry::$settings['uploadFormType'] ? 'flash' : 'default';
$finalTables['members']['members_pass_salt'] = IPSMember::generatePasswordSalt(5);
$finalTables['members']['members_pass_salt'] = IPSMember::generatePasswordSalt(5);
$finalTables['members']['members_pass_hash'] = IPSMember::generateCompiledPasshash( $finalTables['members']['members_pass_salt'], $md_5_password );
$finalTables['members']['members_pass_hash'] = IPSMember::generateCompiledPasshash( $finalTables['members']['members_pass_salt'], $md_5_password );
$finalTables['members']['members_display_name'] = isset($finalTables['members']['members_display_name']) ? $finalTables['members']['members_display_name'] : '';
$finalTables['members']['members_display_name'] = isset($finalTables['members']['members_display_name']) ? $finalTables['members']['members_display_name'] : '';
$finalTables['members']['members_l_display_name'] = isset($finalTables['members']['members_display_name']) ? strtolower($finalTables['members']['members_display_name']) : '';
$finalTables['members']['members_l_display_name'] = isset($finalTables['members']['members_display_name']) ? strtolower($finalTables['members']['members_display_name']) : '';
$finalTables['members']['fb_uid'] = isset($finalTables['members']['fb_uid']) ? $finalTables['members']['fb_uid'] : 0;
$finalTables['members']['fb_uid'] = isset($finalTables['members']['fb_uid']) ? $finalTables['members']['fb_uid'] : 0;
$finalTables['members']['fb_emailhash'] = isset($finalTables['members']['fb_emailhash']) ? strtolower($finalTables['members']['fb_emailhash']) : '';
$finalTables['members']['fb_emailhash'] = isset($finalTables['members']['fb_emailhash']) ? strtolower($finalTables['members']['fb_emailhash']) : '';
$finalTables['members']['members_seo_name'] = IPSText::makeSeoTitle( $finalTables['members']['members_display_name'] );
$finalTables['members']['members_seo_name'] = IPSText::makeSeoTitle( $finalTables['members']['members_display_name'] );
$finalTables['members']['bw_is_spammer'] = intval( $finalTables['members']['bw_is_spammer'] );
$finalTables['members']['bw_is_spammer'] = intval( $finalTables['members']['bw_is_spammer'] );
//-----------------------------------------
//-----------------------------------------
// Insert: MEMBERS
// Insert: MEMBERS
//-----------------------------------------
//-----------------------------------------
ipsRegistry::DB()->setDataType( array( 'name', 'members_l_username', 'members_display_name', 'members_l_display_name', 'members_seo_name', 'email' ), 'string' );
ipsRegistry::DB()->setDataType( array( 'name', 'members_l_username', 'members_display_name', 'members_l_display_name', 'members_seo_name', 'email' ), 'string' );
/* Bitwise options */
/* Bitwise options */
if ( is_array( $bitWiseFields['members'] ) )
if ( is_array( $bitWiseFields['members'] ) )
{
{
$_freeze = array();
$_freeze = array();
foreach( $bitWiseFields['members'] as $field )
foreach( $bitWiseFields['members'] as $field )
{
{
if ( isset( $finalTables['members'][ $field ] ) )
if ( isset( $finalTables['members'][ $field ] ) )
{
{
/* Add to freezeable array */
/* Add to freezeable array */
$_freeze[ $field ] = $finalTables['members'][ $field ];
$_freeze[ $field ] = $finalTables['members'][ $field ];
/* Remove it from the fields to save to DB */
/* Remove it from the fields to save to DB */
unset( $finalTables['members'][ $field ] );
unset( $finalTables['members'][ $field ] );
}
}
}
}
if ( count( $_freeze ) )
if ( count( $_freeze ) )
{
{
$finalTables['members']['members_bitoptions'] = IPSBWOptions::freeze( $_freeze, 'members', 'global' );
$finalTables['members']['members_bitoptions'] = IPSBWOptions::freeze( $_freeze, 'members', 'global' );
}
}
}
}
ipsRegistry::DB()->insert( 'members', $finalTables['members'] );
ipsRegistry::DB()->insert( 'members', $finalTables['members'] );
//-----------------------------------------
//-----------------------------------------
// Get the member id
// Get the member id
//-----------------------------------------
//-----------------------------------------
$finalTables['members']['member_id'] = ipsRegistry::DB()->getInsertId();
$finalTables['members']['member_id'] = ipsRegistry::DB()->getInsertId();
//-----------------------------------------
//-----------------------------------------
// Insert: PROFILE PORTAL
// Insert: PROFILE PORTAL
//-----------------------------------------
//-----------------------------------------
$finalTables['profile_portal']['pp_member_id'] = $finalTables['members']['member_id'];
$finalTables['profile_portal']['pp_member_id'] = $finalTables['members']['member_id'];
$finalTables['profile_portal']['pp_setting_count_friends'] = 1;
$finalTables['profile_portal']['pp_setting_count_friends'] = 1;
$finalTables['profile_portal']['pp_setting_count_comments'] = 1;
$finalTables['profile_portal']['pp_setting_count_comments'] = 1;
$finalTables['profile_portal']['pp_setting_count_visitors'] = 1;
$finalTables['profile_portal']['pp_setting_count_visitors'] = 1;
$finalTables['profile_portal']['pp_customization'] = serialize( array() );
$finalTables['profile_portal']['pp_customization'] = serialize( array() );
foreach( array( 'pp_last_visitors', 'pp_about_me', 'signature', 'fb_photo', 'fb_photo_thumb', 'pconversation_filters' ) as $f )
foreach( array( 'pp_last_visitors', 'pp_about_me', 'signature', 'fb_photo', 'fb_photo_thumb', 'pconversation_filters' ) as $f )
{
{
$finalTables['profile_portal'][ $f ] = ( $finalTables['profile_portal'][ $f ] ) ? $finalTables['profile_portal'][ $f ] : '';
$finalTables['profile_portal'][ $f ] = ( $finalTables['profile_portal'][ $f ] ) ? $finalTables['profile_portal'][ $f ] : '';
}
}
ipsRegistry::DB()->insert( 'profile_portal', $finalTables['profile_portal'] );
ipsRegistry::DB()->insert( 'profile_portal', $finalTables['profile_portal'] );
//-----------------------------------------
//-----------------------------------------
// Insert into the custom profile fields DB
// Insert into the custom profile fields DB
//-----------------------------------------
//-----------------------------------------
if( !$bypassCfields )
if( !$bypassCfields )
{
{
/* Check the website url field */
/* Check the website url field */
$website_field = $fields->getFieldIDByKey( 'website' );
$website_field = $fields->getFieldIDByKey( 'website' );
if( $website_field && $fields->out_fields[ 'field_' . $website_field ] )
if( $website_field && $fields->out_fields[ 'field_' . $website_field ] )
{
{
if( stristr( $fields->out_fields[ 'field_' . $website_field ], 'http://' ) === FALSE && stristr( $fields->out_fields[ 'field_' . $website_field ], 'https://' ) === FALSE )
if( stristr( $fields->out_fields[ 'field_' . $website_field ], 'http://' ) === FALSE && stristr( $fields->out_fields[ 'field_' . $website_field ], 'https://' ) === FALSE )
{
{
$fields->out_fields[ 'field_' . $website_field ] = 'http://' . $fields->out_fields[ 'field_' . $website_field ];
$fields->out_fields[ 'field_' . $website_field ] = 'http://' . $fields->out_fields[ 'field_' . $website_field ];
}
}
}
}
$fields->out_fields['member_id'] = $finalTables['members']['member_id'];
$fields->out_fields['member_id'] = $finalTables['members']['member_id'];
ipsRegistry::DB()->delete( 'pfields_content', 'member_id=' . $finalTables['members']['member_id'] );
ipsRegistry::DB()->delete( 'pfields_content', 'member_id=' . $finalTables['members']['member_id'] );
ipsRegistry::DB()->insert( 'pfields_content', $fields->out_fields );
ipsRegistry::DB()->insert( 'pfields_content', $fields->out_fields );
}
}
else
else
{
{
ipsRegistry::DB()->delete( 'pfields_content', 'member_id=' . $finalTables['members']['member_id'] );
ipsRegistry::DB()->delete( 'pfields_content', 'member_id=' . $finalTables['members']['member_id'] );
ipsRegistry::DB()->insert( 'pfields_content', array( 'member_id' => $finalTables['members']['member_id'] ) );
ipsRegistry::DB()->insert( 'pfields_content', array( 'member_id' => $finalTables['members']['member_id'] ) );
}
}
//-----------------------------------------
//-----------------------------------------
// Insert into partial ID table
// Insert into partial ID table
//-----------------------------------------
//-----------------------------------------
$full_account = false;
$full_account = false;
if( $finalTables['members']['members_display_name'] AND $finalTables['members']['name'] AND $finalTables['members']['email'] AND $finalTables['members']['email'] != $finalTables['members']['name'] . '@' . $finalTables['members']['joined'] )
if( $finalTables['members']['members_display_name'] AND $finalTables['members']['name'] AND $finalTables['members']['email'] AND $finalTables['members']['email'] != $finalTables['members']['name'] . '@' . $finalTables['members']['joined'] )
{
{
$full_account = true;
$full_account = true;
}
}
if ( ! $full_account )
if ( ! $full_account )
{
{
ipsRegistry::DB()->insert( 'members_partial', array( 'partial_mem
ipsRegistry::DB()->insert( 'members_partial', array( 'partial_member_id' => $finalTables['members']['member_id'],
'partial_date' => $finalTables['members']['joined'],