Ok, here it is!!
1st things 1st! BACKUP your data!
If you have a test site, try it on the test site FIRST!
I have installed this on 2 of my sites and it works as advertised.
ALTER TABLE `YOURDATABASE`.`sys_profile_fields` CHANGE `Type` `Type` ENUM( 'text', 'html_area', 'area', 'pass', 'date', 'email', 'select_one', 'select_set', 'num', 'range', 'bool', 'system', 'block' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'text'
UPDATE `YOURDATABASE`.`sys_profile_fields` SET `Type` = 'email' WHERE `sys_profile_fields`.`ID` =4;
Clear your cache!
Here's the language keys.
'_Confirm email' => 'Confirm Email'
'_Email confirmation failed' => 'Email confirmation failed'
'_Confirm email descr' => 'Enter same email address here'
Now the good stuff!
all files are located in /inc/classes
In BxDolJoinProccessor.php
Around line 198
case 'pass':
$aHiddenFields[ $sItemName . '_confirm[' . $iHuman . ']' ] = $mValue;
case 'text':
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
$aHiddenFields[ $sItemName . '_confirm[' . $iHuman . ']' ] = $mValue;
in the file BxDolPFM.php
around line 47 find
'area' => 'TextArea',
'html_area' => 'HtmlTextArea',
'pass' => 'Password',
ADD THIS
###
#SteveSoft
#06-07-2012
#
'email' => 'Email',
around line 68 find
'html_area' => "text NOT NULL",
'pass' => "varchar(40) NOT NULL",
ADD THIS
###
#SteveSoft
#06-07-2012
#
'email' => "varchar(255) NOT NULL",
around line 1040 find
$aUpdate['Default'] = trim( process_pass_data( $aData['Default'] ) );
break;
case 'pass':
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
in the file BxDolProfileFields.php
around line 118 find
case 'text':
case 'area':
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
around line 259 find
'html_area' => array( 'Mandatory', 'Min', 'Max', 'Unique', 'Check' ),
'pass' => array( 'Mandatory', 'Min', 'Max', 'Check', 'PassConfirm' ),
ADD THIS
###
#SteveSoft
#06-07-2012
#
'email' => array( 'Mandatory', 'Min', 'Max', 'Check', 'EmailConfirm' ),
around line 339
case 'pass':
if( mb_strlen( $mValue ) > 0 and mb_strlen( $mValue ) < $iMin )
return false;
break;
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
if( mb_strlen( $mValue ) > 0 and mb_strlen( $mValue ) < $iMin )
return false;
break;
around line 383
find this
case 'area':
case 'pass':
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
if( mb_strlen( $mValue ) > $iMax )
return false;
break;
around line 470
find this
if( empty($mValue) ) // standard check
return false;
}
ADD THIS
###
#SteveSoft
#06-07-2012
#
elseif( $aItem['Type'] == 'email' ) {
if( $this -> iAreaID == 2 or $this -> iAreaID == 3 or $this -> iAreaID == 4 ) // if area is edit, non-mandatory
return true;
else
if( empty($mValue) ) // standard check
return false;
}
around 796 find this
}
break;
case 'pass':
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
around 1364 find this
if ($bCoupleEnabled && !in_array( $aItem['Name'], $this -> aCoupleMutual ))
$aAddInputs[] = $this->convertJoinField2Input($aItem_confirm, $aInputParams, 1);
}
ADD THIS
###
#SteveSoft
#06-07-2012
#
if ($aItem['Type'] == 'email') {
$aItem_confirm = $aItem;
$aItem_confirm['Name'] .= '_confirm';
$aItem_confirm['Caption'] = '_Confirm email';
$aItem_confirm['Desc'] = '_Confirm email descr';
$aInputs[] = $this->convertJoinField2Input($aItem_confirm, $aInputParams, 0);
}
around line 1522 find this
if ($bCoupleEnabled && !in_array( $aItem['Name'], $this -> aCoupleMutual ))
$aAddInputs[] = $this->convertEditField2Input($aItem, $aInputParams, 1);
}
ADD THIS
###
#SteveSoft
#06-07-2012
#
if ($aItem['Type'] == 'email') {
$aItem_confirm = $aItem;
$aItem_confirm['Name'] .= '_confirm';
$aItem_confirm['Caption'] = '_Confirm email';
$aItem_confirm['Desc'] = '_Confirm email descr';
$aInputs[] = $this->convertEditField2Input($aItem_confirm, $aInputParams, 0);
}
around line 1615 find this
case 'datetime':
$aInput['type'] = 'datetime';
$aInput['value'] = $aValues[$iPerson];
break;
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email':
$aInput['type'] = 'email';
break;
around line 1748 find
case 'date': $aInput['type'] = 'date'; $aInput['value'] = $aValues[$iPerson]; break;
case 'datetime': $aInput['type'] = 'datetime'; $aInput['value'] = $aValues[$iPerson]; break;
ADD THIS
###
#SteveSoft
#06-07-2012
#
case 'email': $aInput['type'] = 'email'; break;
and that's it!
you MAY need to adjust your CSS for the email and confirm email fields
If this works for you, I do have a paypal account. ;)