Untitled diff

Created Diff never expires
<?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'],