All right, I have two gone in an cleaned up two of the subroutines in my Profile.pl file, the one that is mentioned as the place to put step 7, and the one that seems to have the general kind of code (AFAIK) that I'm being told to replace.
Here is my sub ModifyProfileOptions:
sub ModifyProfileOptions {
&SidCheck;
&PrepareProfile;
LoadLanguage("ChatIRC"); ## Added for ChatIRC Mod
my $user = $INFO{'username'};
if (!${$uid.$user}{'password'}) { &LoadUser($user); }
$menucolors[3] = "titlebg";
$modsection = qq~- $profile_txt{'818'}~;
&ProfileMenu;
&ToChars(${$uid.$user}{'usertext'});
$yymain .= qq~
<div class="bordercolor" style="padding: 0px; padding-top: 0px; padding-bottom: 0px; width: 100%;">
<form sid'}" method="post" name="creator" enctype="multipart/form-data">
<table class="bordercolor" cellspacing="1" cellpadding="4" width="100%" align="center" border="0">
<tr class="windowbg">~;
if ($allowpics) {
opendir(DIR, "$facesdir") || fatal_error("$profile_txt{'230'} ($facesdir)!<br />$profile_txt{'681'}", 1);
@contents = readdir(DIR);
closedir(DIR);
$images = "";
foreach $line (sort @contents) {
($name, $extension) = split(/\./, $line);
$checked = "";
if ($line eq ${$uid.$user}{'userpic'}) { $checked = ' selected="selected"'; }
if (${$uid.$user}{'userpic'} =~ m~\Ahttp://~ && $line eq 'blank.gif') { $checked = ' selected="selected" '; }
if ($extension =~ /gif/i || $extension =~ /jpg/i || $extension =~ /jpeg/i || $extension =~ /png/i) {
if ($line eq 'blank.gif') {
$images = qq~ <option value="$line"$checked>$profile_txt{'422'}</option>\n$images~;
} else {
$images .= qq~ <option value="$line"$checked>$name</option>\n~;
}
}
}
if (${$uid.$user}{'userpic'} =~ m~\Ahttp://~) {
$pic = 'blank.gif';
$checked = ' checked="checked" ';
$tmp = ${$uid.$user}{'userpic'};
} else {
$pic = ${$uid.$user}{'userpic'};
$tmp = 'http://';
}
if(${$uid.$user}{'dsttimeoffset'}) { $dsttimechecked = qq~ checked="checked"~; }
$yymain .= qq~
<td width="320" align="left"><b>$profile_txt{'229'}:</b><br /><span class="small">$lang_uapav{'38'}</span></td>
<td align="left">
<script language="JavaScript1.2" type="text/javascript">
function showimage()
{
if (!document.images) return;
document.images.icons.src="$facesurl/"+document.creator.userpic.options[document.creator.userpic.selectedIndex].value;
}
</script>
<select name="userpic" size="6" onchange="showimage()">
$images </select>
<img src="$facesurl/$pic" name="icons" border="0" hspace="15" alt="" />
</td>
</tr>~;
if ($en_useravatars == 1) {
unless (!$memgrupuav) {
$memgrupuavok = 0;
foreach my $element (split(/\,/, $memgrupuav)) {
chomp $element;
if ($element eq ${$uid.$user}{'position'} || $element eq $memberunfo{$user}) { $memgrupuavok = 1; last; }
foreach my $memberaddgroups (split(/\, /, ${$uid.$user}{'addgroups'})) {
chomp $memberaddgroups;
if ($element eq $memberaddgroups) { $memgrupuavok = 1; last; }
}
if ($memgrupuavok == 1) { last; }
}
} else {
$memgrupuavok = 1;
}
}
&UsersAvatarsHTML($useraccount{$user}, ${$uid.$user}{'userpic'});
}
$yymain .= qq~<tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'228'}: </b></td>
<td align="left"><input type="text" name="usertext" size="50" value="${$uid.$user}{'usertext'}" maxlength="50" /></td>
</tr><tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'85'}:</b><br /><span class="small">$profile_txt{'606'}</span></td>
<td align="left"><textarea name="signature" rows="4" cols="50">$signature</textarea><br />
<span class="small">$profile_txt{'664'} <input value="$MaxSigLen" size="3" name="msgCL" disabled="disabled" /></span><br /><br />
<script type="text/javascript" language="JavaScript">
<!--
var supportsKeys = false
function tick() {
calcCharLeft(document.forms[0])
if (!supportsKeys) timerID = setTimeout("tick()",$MaxSigLen)
}
function calcCharLeft(sig) {
clipped = false
maxLength = $MaxSigLen
if (document.creator.signature.value.length > maxLength) {
document.creator.signature.value = document.creator.signature.value.substring(0,maxLength)
charleft = 0
clipped = true
} else {
charleft = maxLength - document.creator.signature.value.length
}
document.creator.msgCL.value = charleft
return clipped
}
tick();
//-->
</script>
</td>
<!-- ChatIRC Mod Begin -->
</tr><tr class="windowbg">
<td width="320" align="left"><b>$ChatIRC{'irc_nick'}:</b><br />
<span class="small">$ChatIRC{'irc_nick1'}</span></td>
<td align="left"><input type="text" name="irc_nick" size="40" value="${$uid.$user}{'irc_nick'}" /></td>
</tr><tr class="windowbg">
<td width="320" align="left"><b>$ChatIRC{'irc_pass'}:</b><br />
<span class="small">$ChatIRC{'irc_pass1'}</span></td>
<td align="left"><input type="text" name="irc_pass" size="40" value="${$uid.$user}{'irc_pass'}" /></td>
<!-- ChatIRC Mod End -->
</tr><tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'486'}:</b><br />
<span class="small">$profile_txt{'479'}</span></td>
<td width="50" align="left">
<select name="usertimeselect" size="1">
<option value="1"$tsl1>$profile_txt{'480'}</option>
<option value="5"$tsl5>$profile_txt{'484'}</option>
<option value="4"$tsl4>$profile_txt{'483'}</option>
<option value="2"$tsl2>$profile_txt{'481'}</option>
<option value="3"$tsl3>$profile_txt{'482'}</option>
<option value="6"$tsl6>$profile_txt{'485'}</option>
<option value="7"$tsl7>$profile_txt{'480a'}</option>
</select>
</td>
</tr><tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'486a'}:</b><br />
<span class="small">$profile_txt{'479a'}</span></td>
<td align="left"><input type="text" name="timeformat" size="40" value="${$uid.$user}{'timeformat'}" /></td>
</tr><tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'371'}:</b><br /><span class="small">$profile_txt{'519'}</span></td>
<td align="left"><span class="small"><select name="usertimeoffset">
<option value="">$time_zone_txt{'1'}</option>
<option value="12"$pdel{'240'}>$time_zone_txt{'2'}</option>
<option value="11"$pdel{'230'}>$time_zone_txt{'3'}</option>
<option value="10"$pdel{'220'}>$time_zone_txt{'4'}</option>
<option value="9.5"$pdel{'215'}>$time_zone_txt{'5'}</option>
<option value="9"$pdel{'210'}>$time_zone_txt{'6'}</option>
<option value="8"$pdel{'200'}>$time_zone_txt{'7'}</option>
<option value="6.5"$pdel{'185'}>$time_zone_txt{'9'}</option>
<option value="6"$pdel{'180'}>$time_zone_txt{'10'}</option>
<option value="5.5"$pdel{'175'}>$time_zone_txt{'11'}</option>
<option value="5"$pdel{'170'}>$time_zone_txt{'12'}</option>
<option value="4"$pdel{'160'}>$time_zone_txt{'13'}</option>
<option value="3.5"$pdel{'155'}>$time_zone_txt{'14'}</option>
<option value="3"$pdel{'150'}>$time_zone_txt{'15'}</option>
<option value="2"$pdel{'140'}>$time_zone_txt{'16'}</option>
<option value="1"$pdel{'130'}>$time_zone_txt{'17'}</option>
<option value="0"$pdel{'120'}>$time_zone_txt{'18'}</option>
<option value="-1"$pdel{'110'}>$time_zone_txt{'19'}</option>
<option value="-2"$pdel{'100'}>$time_zone_txt{'20'}</option>
<option value="-3"$pdel{'90'}>$time_zone_txt{'21'}</option>
<option value="-3.5"$pdel{'85'}>$time_zone_txt{'22'}</option>
<option value="-4"$pdel{'80'}>$time_zone_txt{'23'}</option>
<option value="-5"$pdel{'70'}>$time_zone_txt{'24'}</option>
<option value="-6"$pdel{'60'}>$time_zone_txt{'25'}</option>
<option value="-7"$pdel{'50'}>$time_zone_txt{'26'}</option>
<option value="-8"$pdel{'40'}>$time_zone_txt{'27'}</option>
<option value="-9"$pdel{'30'}>$time_zone_txt{'28'}</option>
<option value="-10"$pdel{'20'}>$time_zone_txt{'29'}</option>
<option value="-11"$pdel{'10'}>$time_zone_txt{'30'}</option>
</select><br />$profile_txt{'741'}: <i>$proftime</i></span></td>
</tr><tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'519a'}</b></td>
<td align="left"><input type="checkbox" name="dsttimeoffset"$dsttimechecked /></td>
</tr>
~;
&CheckNewTemplates;
unless ($templatesloaded == 1) { require "$vardir/template.cfg"; }
while (($curtemplate, $value) = each(%templateset)) {
$selected = "";
if ($curtemplate eq ${$uid.$user}{'template'}) { $selected = qq~ selected="selected"~; $akttemplate = $curtemplate; }
$drawndirs .= qq~<option value="$curtemplate"$selected>$curtemplate</option>\n~;
}
$yymain .= qq~<tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'814'}</b></td>
<td align="left"><select name="usertemplate">$drawndirs</select></td>
</tr>~;
opendir(dir, $langdir);
my @lfilesanddirs = readdir(dir);
close(dir);
foreach $fld (@lfilesanddirs) {
if (-d "$langdir/$fld" && $fld =~ m^\A[0-9a-zA-Z_\#\%\-\:\+\?\$\&\~\,\@/]+\Z^ && -e "$langdir/$fld/Main.lng") {
if (${$uid.$user}{'language'} eq $fld) { $drawnldirs .= qq~<option value="$fld" selected="selected">$fld</option>~; }
else { $drawnldirs .= qq~<option value="$fld">$fld</option>~; }
}
}
### Reverse Posts Order mod ###
LoadLanguage("Reverse_Post_Order");
if (${$uid.$username}{'reverse_posts'} eq "on") {$reverse_posts = 'checked';}
$yymain .= qq~
<tr class="windowbg">
<td width="320" align="left"><b>$rpo_txt{'1'}:</b><br />
<span class="small">$rpo_txt{'2'}</span></td>
<td align="left"><input type="checkbox" name="reverse_posts" $reverse_posts /></td>
</tr>~;
### Reverse Posts Order end ###
### Return To mod ###
LoadLanguage("Return_To");
my ($rts, $rt, $return_to_select, $return_to);
$rts = ${$uid.$user}{'return_to'};
for ($rt = 1; $rt <= 3; $rt++) {
$return_to_select .= $rts == $rt ? qq~<option value="$rt" selected>$return_to_txt{$rt}</option>~ : qq~<option value="$rt">$return_to_txt{$rt}</option>~;
}
$yymain .= qq~
<tr class="windowbg">
<td width="320" align="left"><b>$return_to_txt{'99'}:</b><br />
<span class="small">$return_to_txt{'97'}</span></td>
<td align="left"><select name="return_to">$return_to_select</select></td>
</tr>~;
### Return To mod end ###
$yymain .= qq~<tr class="windowbg">
<td width="320" align="left"><b>$profile_txt{'817'}</b></td>
<td align="left"><select name="userlanguage">$drawnldirs</select></td>
</tr>~;
if($location_posts) {
my $loctxtcheck = "";
my $locflagcheck = "";
($loctxt, $locflag) = split (/\|/, ${$uid.$user}{'viewlocation'});
if($loctxt) {$loctxtcheck = qq~ checked="checked"~;}
if($locflag) {$locflagcheck = qq~ checked="checked"~;}
$yymain .= qq~
<tr class="windowbg">
<td width="320" align="left"><b>$maptxt{'51'}:</b></td>
<td align="left"> $maptxt{'52'} <input type="checkbox" name="loctxt" style="margin: 0px;"$loctxtcheck /> $maptxt{'53'} <input type="checkbox" name="locflag" style="margin: 0px;"$locflagcheck /></td>
</tr>
~;
}
require "$sourcedir/ExtendedProfiles.pl";
$yymain .= ext_editprofile($user,"options") . qq~
<tr class="catbg">
<td height="30" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" /></td>
</tr>
</table>
</form>
</div>
~;
$yytitle = qq~$maptxt{'37'} $user - $profile_txt{'818'}~;
&template;
exit;
}
And here is my Sub ModifyProfileOptions2
sub ModifyProfileOptions2 {
&SidCheck;
my @onoff = qw/dsttimeoffset/;
my $fi;
map { $fi = lc $_; ${$_} = $FORM{$fi} eq 'on' ? 1 : 0; } @onoff;
my (%member, $key, $value, $newpassemail, @memberlist, $a, @check_settings, @reserve, $matchword, $matchcase, $matchuser, $matchname, $namecheck, $reserved, $reservecheck, @dirdata, $filename, @entries, $entry, $umail, @members, $tempname);
$FORM{'signature'} =~ s~\&\&~\&\;\&\;~g;
$FORM{'signature'} =~ s~\n~\&\&~g;
while (($key, $value) = each(%FORM)) {
$value =~ s~\A\s+~~;
$value =~ s~\s+\Z~~;
$value =~ s~[\n\r]~~g;
$member{$key} = $value;
}
my $user = $INFO{'username'};
$member{'username'} = $user;
if (!${$uid.$user}{'password'}) { &LoadUser($user); }
# make sure this person has access to this profile
if ($user ne $username && !$iamadmin && (!$iamgmod || !$allow_gmod_profile)) { &fatal_error($profile_txt{'80'}); }
if (!$iamadmin) {
$member{'settings6'} = ${$uid.$user}{'postcount'};
$member{'settings7'} = ${$uid.$user}{'position'};
$member{'addgroup'} = ${$uid.$user}{'addgroups'};
}
if ($member{'username'} =~ /\//) { &fatal_error($profile_txt{'224'}); }
if ($member{'username'} =~ /\\/) { &fatal_error($profile_txt{'225'}); }
$INFO{'username'} = $member{'username'};
&FromChars($member{'usertext'});
$convertstr = $member{'usertext'};
$convertcut = 51;
&CountChars;
$member{'usertext'} = $convertstr;
if ($member{'userpicpersonalcheck'} && ($member{'userpicpersonal'} =~ m/\.gif\Z/i || $member{'userpicpersonal'} =~ m/\.jpg\Z/i || $member{'userpicpersonal'} =~ m/\.jpeg\Z/i || $member{'userpicpersonal'} =~ m/\.png\Z/i)) {
$member{'userpic'} = $member{'userpicpersonal'};
}
if ($member{'userpicpersonalcheck'} && ($FORM{'file'} ne "") || $member{'userpicpersonaldel'}) {
&UsersAvatarsUP($useraccount{$user});
if ($okatt) {
&UsersAvatarsLOG($member{'username'},$valueupic2,1);
$member{'userpic'} = $valueupic;
}
if ($okdelatt) {
&UsersAvatarsLOG($member{'username'},0,0);
$member{'userpic'} = "";
$checked = "";
}
&clear_temp;
}
if (!$member{'userpicpersonalcheck'}) {
&UsersAvatarsDEL($member{'username'});
&UsersAvatarsLOG($member{'username'},0,0);
&clear_temp;
}
if ($member{'userpic'} eq "") { $member{'userpic'} = "blank.gif"; }
&fatal_error("$profile_txt{'592'}") if ($member{'userpic'} !~ m^\A[0-9a-zA-Z_\.\#\%\-\:\+\?\$\&\~\.\,\@/]+\Z^);
if (!$allowpics) { $member{'userpic'} = "blank.gif"; }
if ($member{'loctxt'}) { $loctext = 1; } else { $loctext = 0; }
if ($member{'locflag'}) { $locflag = 1; } else { $locflag = 0; }
if ($member{'moda'} eq $profile_txt{'88'}) {
&FromChars($member{'signature'});
$convertstr = $member{'signature'};
$convertcut = $MaxSigLen;
&CountChars;
$member{'signature'} = $convertstr;
$member{'signature'} =~ s/</</g;
$member{'signature'} =~ s/>/>/g;
# store the name temorarily so we can restore any _'s later
$tempname = $member{'name'};
$member{'name'} =~ s/\_/ /g;
if ($member{'usertemplate'} !~ m^\A[0-9a-zA-Z_\(\)\´\ \.\#\%\-\:\+\?\$\&\~\.\,\@/]+\Z^ && $member{'usertemplate'} ne "") { &fatal_error($profile_txt{'815'}); }
if ($member{'usertemplate'} eq "") { $member{'usertemplate'} = "$template"; }
if ($member{'userlanguage'} !~ m^\A[0-9a-zA-Z_\.\#\%\-\:\+\?\$\&\~\.\,\@/]+\Z^ && $member{'userlanguage'} ne "") { &fatal_error($profile_txt{'815'}); }
if (!$member{'userlanguage'}) { $member{'userlanguage'} = "$language"; }
# update notifications if users language is changed
if (${$uid.$user}{'language'} ne "$member{'userlanguage'}") {
&getMailFiles;
require "$sourcedir/Notify.pl";
&updateLanguage($user, $member{'userlanguage'});
}
&ToHTML($member{'usertext'});
if (length $member{'signature'} > 1000) { $member{'signature'} = substr($member{'signature'}, 0, 1000); }
&ToHTML($member{'signature'});
$member{'usertimeoffset'} =~ tr/,/./;
$member{'usertimeoffset'} =~ s/[^\d*|\.|\-|w*]//g;
if (($member{'usertimeoffset'} < -23.5) || ($member{'usertimeoffset'} > 23.5)) { &fatal_error($profile_txt{'487'}); }
# let's restore the name now
&ToHTML($tempname);
$member{'name'} = $tempname;
# Time to print the changes to the username.vars file
${$uid.$user}{'usertext'} = "$member{'usertext'}";
${$uid.$user}{'userpic'} = "$member{'userpic'}";
${$uid.$user}{'signature'} = "$member{'signature'}";
${$uid.$user}{'timeoffset'} = "$member{'usertimeoffset'}";
${$uid.$user}{'dsttimeoffset'} = "$dsttimeoffset";
${$uid.$user}{'timeselect'} = "$member{'usertimeselect'}";
${$uid.$user}{'template'} = "$member{'usertemplate'}";
${$uid.$user}{'language'} = "$member{'userlanguage'}";
${$uid.$user}{'irc_nick'} = "$member{'irc_nick'}"; ## Added for ChatIRC Mod
${$uid.$user}{'irc_pass'} = "$member{'irc_pass'}"; ## Added for ChatIRC Mod
${$uid.$user}{'timeformat'} = "$member{'timeformat'}";
${$uid.$user}{'reverse_posts'} = "$member{'reverse_posts'}"; ### Reverse Post Order mod ###
${$uid.$user}{'viewlocation'} = "$loctext|$locflag";
require "$sourcedir/ExtendedProfiles.pl";
my $error = ext_validate_submition($username,$user);
if ($error ne "") { &fatal_error($error); } else { &ext_saveprofile($user); }
${$uid.$user}{'return_to'} = "$member{'return_to'}"; ### Return To mod ###
&UserAccount($user, "update");
$yySetLocation = qq~$scripturl?action=profileIM;username=$INFO{'username'};sid=$INFO{'sid'}~;
&redirectexit;
} else {
&fatal_error("$polltxt{'13'}");
}
exit;
}
As far as I can tell, the ModifyProfileOptions2 subroutine seems to be more similar to what step 7 is asking for ... but can anybody suggest where in one of these two subroutines would probably be a good place for this step?