| ############################################################################### |
| ############################################################################### |
| # Profile.pl # |
| # Profile.pm # |
| |
| # $Date: 01.05.16 $ # |
| ############################################################################### |
| ############################################################################### |
| # YaBB: Yet another Bulletin Board # |
| # YaBB: Yet another Bulletin Board # |
| # Open-Source Community Software for Webmasters # |
| # Open-Source Community Software for Webmasters # |
| # Version: YaBB 2.5.2 # |
| # Version: YaBB 2.6.12 # |
| # Packaged: October 21, 2012 # |
| # Packaged: January 5, 2016 # |
| # Distributed by: http://www.yabbforum.com # |
| # Distributed by: http://www.yabbforum.com # |
| # =========================================================================== # |
| # =========================================================================== # |
| # Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved. # |
| # Copyright (c) 2000-2016 YaBB (www.yabbforum.com) - All Rights Reserved. # |
| # Software by: The YaBB Development Team # |
| # Software by: The YaBB Development Team # |
| # with assistance from the YaBB community. # |
| # with assistance from the YaBB community. # |
| ############################################################################### |
| ############################################################################### |
| |
| # use strict; |
| |
| # use warnings; |
| |
| no warnings qw(uninitialized once redefine); |
| |
| use English qw(-no_match_vars); |
| |
| use CGI::Carp qw(fatalsToBrowser); |
| |
| our $VERSION = '2.6.12'; |
| |
| |
| |
| $profilepmver = 'YaBB 2.6.12 $Revision: 1710 $'; |
| |
| if ( $action eq 'detailedversion' ) { return 1; } |
| |
| |
| |
| LoadLanguage('Profile'); |
| |
| LoadLanguage('Register'); |
| |
| require Sources::AddModerators; |
| |
| get_micon(); |
| |
| get_template('MyProfile'); |
| |
| get_gmod(); |
| |
| |
| $profileplver = 'YaBB 2.5.2 $Revision: 1.2 $'; |
| $pm_lev = PMlev(); |
| if ($action eq 'detailedversion') { return 1; } |
| |
| |
| |
| &LoadLanguage('Profile'); |
| |
| |
| |
| if ($iamgmod && -e "$vardir/gmodsettings.txt") { require "$vardir/gmodsettings.txt"; } |
| |
| |
| |
| # make sure this person has access to this profile |
| # make sure this person has access to this profile |
| sub PrepareProfile { |
| sub PrepareProfile { |
| if ($iamguest) { &fatal_error('no_access'); } |
| if ($iamguest) { fatal_error('no_access'); } |
| |
| |
| # If someone registers with a '+' in their name It causes problems. |
| # If someone registers with a '+' in their name It causes problems. |
| # Get's turned into a <space> in the query string Change it back here. |
| # Get's turned into a <space> in the query string Change it back here. |
| # Users who register with spaces get them replaced with _ |
| # Users who register with spaces get them replaced with _ |
| # So no problem there. |
| # So no problem there. |
| $INFO{'username'} =~ tr/ /+/; |
| $INFO{'username'} =~ tr/ /+/; |
| |
| |
| $user = $INFO{'username'}; |
| $user = $INFO{'username'}; |
| if ($do_scramble_id) { &decloak($user); } |
| if ($do_scramble_id) { decloak($user); } |
| if ($user =~ m~/~) { &fatal_error('no_user_slash'); } |
| if ( $user =~ m{/}sm ) { fatal_error('no_user_slash'); } |
| if ($user =~ m~\\~) { &fatal_error('no_user_backslash'); } |
| if ( $user =~ m{\\}sm ) { fatal_error('no_user_backslash'); } |
| |
| |
| unless (&LoadUser($user)) { &fatal_error('no_profile_exists'); } |
| if ( !LoadUser($user) ) { fatal_error('no_profile_exists'); } |
| |
| |
| if (($user ne $username && !$iamadmin && (!$iamgmod || !$allow_gmod_profile)) || |
| if ( |
| ($user eq 'admin' && $username ne 'admin') || |
| ( |
| ($iamgmod && ${$uid.$user}{'position'} eq 'Administrator')) { &fatal_error('not_allowed_profile_change'); } |
| $user ne $username |
| |
| && !$iamadmin |
| |
| && ( !$iamgmod || !$allow_gmod_profile ) |
| |
| ) |
| |
| || ( $user eq 'admin' && $username ne 'admin' ) |
| |
| || ( $iamgmod && ${ $uid . $user }{'position'} eq 'Administrator' ) |
| |
| ) |
| |
| { |
| |
| fatal_error('not_allowed_profile_change'); |
| |
| } |
| |
| |
| @menucolors = qw(catbg catbg catbg catbg catbg catbg); |
| @menucolors = qw(catbg catbg catbg catbg catbg catbg); |
| |
| return; |
| } |
| } |
| |
| |
| # Check that profile-editing session is still valid |
| # Check that profile-editing session is still valid |
| sub SidCheck { |
| sub SidCheck { |
| my $cur_sid = &decloak($INFO{'sid'}); |
| my @x = @_; |
| my $sid_check = substr($date, 5, 5); |
| my $cur_sid = decloak( $INFO{'sid'} ); |
| if ($sid_check <= 600 && $cur_sid >= 99400) { $sid_check += 100000; } |
| my $sid_check = substr $date, 5, 5; |
| |
| if ( $sid_check <= 600 && $cur_sid >= 99_400 ) { $sid_check += 100_000; } |
| $sid_expires = $cur_sid + 600 - $sid_check; |
| |
| |
| $sid_expires = $cur_sid + 600 - $sid_check; |
| &ProfileCheck($_[0]) if $sid_expires < 0 || $cur_sid > $sid_check; |
| |
| |
| if ( $sid_expires < 0 || $cur_sid > $sid_check ) { ProfileCheck( $x[0] ); } |
| |
| if ( $sid_expires < 60 ) { |
| |
| $expsectxt = |
| |
| ( $sid_expires == 1 ) |
| |
| ? $profile_txt{'sid_expires_3'} |
| |
| : $profile_txt{'sid_expires_2'}; |
| |
| $expiretxt = qq~$profile_txt{'sid_expires_1'} $sid_expires $expsectxt~; |
| |
| } |
| |
| else { |
| |
| $expiremin = int( $sid_expires / 60 ); |
| |
| $expiresec = $sid_expires % 60; |
| |
| $expmintxt = |
| |
| ( $expiremin == 1 ) |
| |
| ? $profile_txt{'sid_expires_4'} |
| |
| : $profile_txt{'sid_expires_5'}; |
| |
| $expsectxt = |
| |
| ( $expiresec == 1 ) |
| |
| ? $profile_txt{'sid_expires_3'} |
| |
| : $profile_txt{'sid_expires_2'}; |
| |
| $expiretxt = |
| |
| qq~$profile_txt{'sid_expires_1'} $expiremin $expmintxt $expiresec $expsectxt~; |
| |
| } |
| |
| return; |
| } |
| } |
| |
| |
| sub ProfileCheck { |
| sub ProfileCheck { |
| &PrepareProfile; |
| my @x = @_; |
| |
| PrepareProfile(); |
| |
| |
| my $sid_descript = $mycenter_profile_txt{siddescript}; |
| my $sid_descript = $mycenter_profile_txt{'siddescript'}; |
| if ($_[0]) { |
| if ( $x[0] ) { |
| $sid_descript = $mycenter_profile_txt{timeoutdescript}; |
| $sid_descript = $mycenter_profile_txt{'timeoutdescript'}; |
| $redirsid = $_[0]; |
| $redirsid = $x[0]; |
| $yyjavascript .= qq~\nalert("$profile_txt{'897'}");~ if $redirsid =~ s/2$//; |
| if ( $redirsid =~ s/2$//xsm ) { |
| } else { |
| $yyjavascript .= qq~\nalert("$profile_txt{'897'}");~; |
| $redirsid = $INFO{'page'} || 'profile'; |
| } |
| } |
| } |
| |
| else { |
| $yymain .= qq~ |
| $redirsid = $INFO{'page'} || 'profile'; |
| <div class="bordercolor" style="width: 500px; margin-bottom: 8px; margin-left: auto; margin-right: auto;"> |
| } |
| <table cellpadding="4" cellspacing="1" border="0" width="100%" align="center"> |
| |
| <tr><td class="titlebg" colspan="2"><b>$profile_txt{'901'}</b></td></tr> |
| |
| <tr> |
| |
| <td class="windowbg2" align="center"> |
| |
| <label for="passwrd"><span class="small"><br />$sid_descript<br /><br /></span></label> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td class="windowbg2" align="center" valign="middle"> |
| |
| <form action="$scripturl?action=profileCheck2;username=$useraccount{$user}" method="post" name="confirmform"> |
| |
| <input type="hidden" name="redir" value="$redirsid" /> |
| |
| <div style="padding-top: 4px;"> |
| |
| <div><input type="password" name="passwrd" id="passwrd" size="15" style="width: 150px;" onkeypress="capsLock(event,'cappasswrd')" /></div> |
| |
| <div style="color: red; font-weight: bold; display: none" id="cappasswrd">$profile_txt{'capslock'}</div> |
| |
| <div style="color: red; font-weight: bold; display: none" id="cappasswrd_char">$profile_txt{'wrong_char'}: <span id="cappasswrd_character"> </span></div> |
| |
| </div> |
| |
| <div style="padding-top: 8px;"> |
| |
| <input type="submit" value="$profile_txt{'900'}" class="button" /> |
| |
| </div> |
| |
| </form> |
| |
| </td> |
| |
| </tr> |
| |
| </table> |
| |
| </div> |
| |
| <script type="text/javascript" language="JavaScript"> |
| |
| <!-- |
| |
| document.confirmform.passwrd.focus(); |
| |
| // --> |
| |
| </script> |
| |
| ~; |
| |
| |
| |
| $yynavigation = qq~› $profile_txt{'900'}~; |
| $yymain .= $myprofile_a; |
| $yytitle = $profile_txt{'900'}; |
| $yymain =~ s/{yabb sid_descript}/$sid_descript/sm; |
| &template; |
| $yymain =~ |
| |
| s/{yabb prof_act}/$scripturl?action=profileCheck2;username=$useraccount{$user}/sm; |
| |
| $yymain =~ s/{yabb redirsid}/$redirsid/sm; |
| |
| |
| |
| $yynavigation = qq~› $profile_txt{'900'}~; |
| |
| $yytitle = $profile_txt{'900'}; |
| |
| template(); |
| |
| return; |
| } |
| } |
| |
| |
| sub ProfileCheck2 { |
| sub ProfileCheck2 { |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| |
| my $password = encode_password( $FORM{'passwrd'} || $INFO{'passwrd'} ); |
| |
| if ( $user eq $username && $password ne ${ $uid . $username }{'password'} ) |
| |
| { |
| |
| fatal_error('current_password_wrong'); |
| |
| } |
| |
| if ( ( $iamadmin || ( $iamgmod && $allow_gmod_profile ) ) |
| |
| && $password ne ${ $uid . $username }{'password'} ) |
| |
| { |
| |
| fatal_error('no_admin_password'); |
| |
| } |
| |
| |
| my $password = &encode_password($FORM{'passwrd'} || $INFO{'passwrd'}); |
| # Update the sessionID too |
| if ($user eq $username && $password ne ${$uid.$username}{'password'}) { |
| ${ $uid . $username }{'session'} = encode_password($user_ip); |
| &fatal_error('current_password_wrong'); |
| UserAccount( $username, 'update' ); |
| } |
| |
| if (($iamadmin || ($iamgmod && $allow_gmod_profile)) && $password ne ${$uid.$username}{'password'}) { |
| # update only this cookie since we don't know when the others will expire |
| &fatal_error('no_admin_password'); |
| $yySetCookies3 = write_cookie( |
| } |
| -name => "$cookiesession_name", |
| # Update the sessionID too |
| -value => "${$uid.$username}{'session'}", |
| ${$uid.$username}{'session'} = &encode_password($user_ip); |
| -path => q{/}, |
| &UserAccount($username, "update"); |
| -expires => 'Sunday, 17-Jan-2038 00:00:00 GMT' |
| |
| ); |
| # update only this cookie since we don't know when the others will expire |
| |
| $yySetCookies3 = &write_cookie( |
| # Get a semi-secure SID - only for profile changes |
| -name => "$cookiesession_name", |
| # cloak the sid -> no point giving anyone the means. |
| -value => "${$uid.$username}{'session'}", |
| $yySetLocation = |
| -path => "/", |
| "$scripturl?action=" |
| -expires => "Sunday, 17-Jan-2038 00:00:00 GMT"); |
| . ( $FORM{'redir'} || $INFO{'redir'} || 'profile' ) |
| |
| . ";username=$useraccount{$user};sid=" |
| # Get a semi-secure SID - only for profile changes |
| . cloak( reverse substr $date, 5, 5 ) |
| # cloak the sid -> no point giving anyone the means. |
| . ( $INFO{'newpassword'} ? ';newpassword=1' : q{} ); |
| $yySetLocation = "$scripturl?action=" . ($FORM{'redir'} || $INFO{'redir'} || 'profile') . ";username=$useraccount{$user};sid=" . &cloak(reverse(substr($date, 5, 5))) . ($INFO{'newpassword'} ? ";newpassword=1" : ""); |
| redirectexit(); |
| &redirectexit; |
| return; |
| } |
| } |
| |
| |
| sub ProfileMenu { |
| sub ProfileMenu { |
| return if $view; |
| return if $view; |
| |
| |
| $yymain .= qq~ |
| if ($buddyListEnabled) { |
| <table cellspacing="1" cellpadding="4" width="100%" border="0" class="bordercolor"> |
| $bdlist = $myprofie_bdlist; |
| <tr> |
| $bdlist =~ s/{yabb menucolor3}/$menucolors[3]/sm; |
| <td class="$menucolors[0]" valign="bottom" align="center" width="16%"><span class="small"><b><a href="$scripturl?action=profile;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_txt{79}</a></b></span></td> |
| $bdlist =~ s/{yabb bduser}/$useraccount{$user}/sm; |
| <td class="$menucolors[1]" valign="bottom" align="center" width="16%"><span class="small"><b><a href="$scripturl?action=profileContacts;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_txt{819}</a></b></span></td> |
| } |
| <td class="$menucolors[2]" valign="bottom" align="center" width="16%"><span class="small"><b><a href="$scripturl?action=profileOptions;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_txt{818}</a></b></span></td>~; |
| |
| |
| if ( $pm_lev == 1 ) { |
| if ($buddyListEnabled){ |
| $pmlevel = $myprofile_pmlevel; |
| $yymain .= qq~ |
| $pmlevel =~ s/{yabb menucolor4}/$menucolors[4]/sm; |
| <td class="$menucolors[3]" valign="bottom" align="center" width="16%"><span class="small"><b><a href="$scripturl?action=profileBuddy;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_buddy_list{'buddylist'}</a></b></span></td>~; |
| $pmlevel =~ s/{yabb pmuser}/$useraccount{$user}/sm; |
| } |
| } |
| |
| if ( |
| if ($PM_level == 1 || ($PM_level == 2 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && ($iamadmin || $iamgmod))) { |
| $iamadmin |
| $yymain .= qq~ |
| || ( $iamgmod |
| <td class="$menucolors[4]" valign="bottom" align="center" width="16%"><span class="small"><b><a href="$scripturl?action=profileIM;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_imtxt{56} $profile_txt{323}</a></b></span></td>~; |
| && $allow_gmod_profile |
| } |
| && $gmod_access2{'profileAdmin'} eq 'on' ) |
| |
| ) |
| if ($iamadmin || ($iamgmod && $allow_gmod_profile && $gmod_access2{'profileAdmin'} eq 'on')) { |
| { |
| $yymain .= qq~ |
| $showadmin = $myprofile_showadmin; |
| <td class="$menucolors[5]" valign="bottom" width="16%" align="center"><span class="small"><b><a href="$scripturl?action=profileAdmin;username=$useraccount{$user};sid=$INFO{'sid'}">$profile_txt{820}</a></b></span></td>~; |
| $showadmin =~ s/{yabb menucolor5}/$menucolors[5]/sm; |
| } |
| $showadmin =~ s/{yabb aduser}/$useraccount{$user}/sm; |
| $yymain .= qq~ |
| } |
| </tr> |
| $yymain .= $myprofile_menu; |
| </table> |
| $yymain =~ s/{yabb menu_user}/$useraccount{$user}/gsm; |
| <br /> |
| $yymain =~ s/{yabb sid}/$INFO{'sid'}/gsm; |
| ~; |
| $yymain =~ s/{yabb menucolor0}/$menucolors[0]/sm; |
| |
| $yymain =~ s/{yabb menucolor1}/$menucolors[1]/sm; |
| |
| $yymain =~ s/{yabb menucolor2}/$menucolors[2]/sm; |
| |
| $yymain =~ s/{yabb bdlist}/$bdlist/sm; |
| |
| $yymain =~ s/{yabb pmlevel}/$pmlevel/sm; |
| |
| $yymain =~ s/{yabb showadmin}/$showadmin/sm; |
| |
| return $yymain; |
| } |
| } |
| |
| |
| sub ModifyProfile { |
| sub ModifyProfile { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| $menucolors[0] = "titlebg"; |
| $menucolors[0] = 'selected-bg'; |
| &ProfileMenu; |
| ProfileMenu(); |
| |
| |
| if ($iamadmin) { |
| if ($iamadmin) { |
| $confdel_text = qq~$profile_txt{'775'} $profile_txt{'777'} $user $profile_txt{'778'}~; |
| $confdel_text = |
| if ($user eq $username) { |
| qq~$profile_txt{'775'} $profile_txt{'777'} $user $profile_txt{'778'}~; |
| $passtext = $profile_txt{'821'}; |
| if ( $user eq $username ) { |
| } else { |
| $passtext = $profile_txt{'821'}; |
| $passtext = qq~$profile_txt{'2'} $profile_txt{'36'}~; |
| } |
| } |
| else { |
| } else { |
| $passtext = qq~$profile_txt{'2'} $profile_txt{'36'}~; |
| $confdel_text = qq~$profile_txt{'775'} $profile_txt{'776'} $profile_txt{'778'}~; |
| } |
| $passtext = $profile_txt{'821'}; |
| } |
| } |
| else { |
| |
| $confdel_text = |
| $passtext .= qq~<br /><span class="small" style="font-weight: normal;">$profile_txt{'895'}</span>~; |
| qq~$profile_txt{'775'} $profile_txt{'776'} $profile_txt{'778'}~; |
| |
| $passtext = $profile_txt{'821'}; |
| my $scriptAction = qq~profile2~; |
| } |
| if ($view) { |
| |
| $scriptAction = qq~myprofile2~; |
| $passtext .= qq~<br /><span class="small norm">$profile_txt{'895'}</span>~; |
| $yytitle = $profile_txt{'editmyprofile'}; |
| |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user)~; |
| my $scriptAction = q~profile2~; |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| if ($view) { |
| } else { |
| $scriptAction = q~myprofile2~; |
| $yytitle = $profile_txt{'79'}; |
| $yytitle = $profile_txt{'editmyprofile'}; |
| $profiletitle = qq~$profile_txt{'79'} ($user)~; |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user)~; |
| $yynavigation = qq~› $profiletitle~; |
| $yynavigation = |
| } |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| if (${$uid.$user}{'gender'} eq 'Male') { $GenderMale = ' selected="selected" '; } |
| else { |
| if (${$uid.$user}{'gender'} eq 'Female') { $GenderFemale = ' selected="selected" '; } |
| $yytitle = $profile_txt{'79'}; |
| |
| $profiletitle = qq~$profile_txt{'79'} ($user)~; |
| my $timeorder; |
| $yynavigation = qq~› $profiletitle~; |
| if(${$uid.$user}{'timeselect'}) { |
| } |
| if (${$uid.$user}{'timeselect'} == 6) { $timeorder = 1; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 3) { $timeorder = 1; } |
| if ( ${ $uid . $user }{'gender'} eq 'Male' ) { |
| elsif (${$uid.$user}{'timeselect'} == 2) { $timeorder = 1; } |
| $GenderMale = ' selected="selected" '; |
| } |
| } |
| else { |
| if ( ${ $uid . $user }{'gender'} eq 'Female' ) { |
| if ($timeselected == 6) { $timeorder = 1; } |
| $GenderFemale = ' selected="selected" '; |
| elsif ($timeselected == 3) { $timeorder = 1; } |
| } |
| elsif ($timeselected == 2) { $timeorder = 1; } |
| CalcAge( $user, 'parse' ); |
| } |
| |
| |
| my ( $editAgeTxt, $editAgeCount, $disableBdayFields, $editGenderTxt, |
| &CalcAge($user, "parse"); |
| $editGenderCount, $disableGenderField, $genderField, $bdayFields ); |
| $dayormonthm = qq~<label for="bday1">$profile_txt{'564'}</label><input type="text" name="bday1" id="bday1" size="2" maxlength="2" value="$umonth" /> ~; |
| $editGenderLimit ||= 0; |
| $dayormonthd = qq~<label for="bday2">$profile_txt{'565'}</label><input type="text" name="bday2" id="bday2" size="2" maxlength="2" value="$uday" /> ~; |
| if ( $editGenderLimit > 0 |
| if ($timeorder) { $dayormonth = $dayormonthd . $dayormonthm; } |
| && !$iamadmin |
| else { $dayormonth = $dayormonthm . $dayormonthd; } |
| && ( !$iamgmod || !$allow_gmod_profile ) ) |
| $dayormonth =~ s/for="bday\d"/for="birthday"/o; |
| { |
| $dayormonth =~ s/id="bday\d"/id="birthday"/o; |
| if ( $editGenderLimit == 1 && ${ $uid . $user }{'gender'} eq q{} ) { |
| |
| $editGenderTxt = qq~$profile_txt{'gender_edit_1'}~; |
| &LoadLanguage('Register'); |
| } |
| $showProfile .= qq~ |
| elsif ( ${ $uid . $user }{'disablegender'} >= $editGenderLimit ) { |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator"> |
| $editGenderTxt = qq~$profile_txt{'gender_edit_3'}~; |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| $disableGenderField = q~ disabled="disabled"~; |
| <tr> |
| $genderField = qq~ |
| <td class="catbg" colspan="2"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b><br /><span class="small">$profile_txt{'698'}</span>~ . ($INFO{'newpassword'} ? $profile_txt{'80'} : "") . qq~</td> |
| <input type="hidden" name="gender" value="${ $uid . $user }{'gender'}" />~; |
| </tr> |
| } |
| <tr class="windowbg"> |
| elsif (${ $uid . $user }{'disablegender'} eq q{} |
| <td width="220" align="left"><label for="passwrd1"><b>$profile_txt{81}: </b><br /> |
| && ${ $uid . $user }{'gender'} eq q{} ) |
| <span class="small">$profile_txt{'896'}</span></label> |
| { |
| </td> |
| if ( $editGenderCount == 1 ) { |
| <td align="left"> |
| $editGenderTxt = |
| <div style="float:left;"><input autocomplete="off" type="password" maxlength="30" name="passwrd1" id="passwrd1" size="20" onkeyup="runPassword(this.value);" onkeypress="capsLock(event,'cappasswrd1')" /> </div> |
| qq~ $profile_txt{'gender_edit_2'} $editGenderLimit $profile_txt{'dob_edit_5'}~; |
| <div style="float:left; width: 150px; height: 20px;"> |
| } |
| <div id="password-strength-meter" style="background: transparent url($imagesdir/empty_bar.gif) repeat-x center left; height: 4px"></div> |
| else { |
| <div class="pstrength-bar" id="passwrd1_bar" style="border: 1px solid #FFFFFF; height: 4px"></div> |
| $editGenderTxt = |
| <div class="pstrength-info" id="passwrd1_text"> </div> |
| qq~ $profile_txt{'gender_edit_2'} $editGenderLimit $profile_txt{'dob_edit_6'}~; |
| </div> |
| } |
| <div style="clear:left; color: red; font-weight: bold; display: none" id="cappasswrd1">$profile_txt{'capslock'}</div> |
| } |
| <div style="clear:left; color: red; font-weight: bold; display: none" id="cappasswrd1_char">$profile_txt{'wrong_char'}: <span id="cappasswrd1_character"> </span></div> |
| elsif ( ${ $uid . $user }{'disablegender'} < $editGenderLimit ) { |
| </td> |
| $editGenderCount = |
| </tr> |
| $editGenderLimit - ${ $uid . $user }{'disablegender'}; |
| <tr class="windowbg"> |
| if ( $editGenderCount == 1 ) { |
| <td width="220" align="left"><label for="passwrd2"><b>$profile_txt{82}: </b><br /> |
| $editGenderTxt = |
| <span class="small">$profile_txt{'896'}</span></label> |
| qq~ $profile_txt{'gender_edit_2'} $editGenderCount $profile_txt{'dob_edit_3'}~; |
| </td> |
| } |
| <td align="left"> |
| else { |
| <input type="password" maxlength="30" name="passwrd2" id="passwrd2" size="20" onkeypress="capsLock(event,'cappasswrd2')" /> |
| $editGenderTxt = |
| <div style="color: red; font-weight: bold; display: none" id="cappasswrd2">$profile_txt{'capslock'}</div> |
| qq~ $profile_txt{'gender_edit_2'} $editGenderCount $profile_txt{'dob_edit_4'}~; |
| <div style="color: red; font-weight: bold; display: none" id="cappasswrd2_char">$profile_txt{'wrong_char'}: <span id="cappasswrd2_character"> </span></div> |
| } |
| </td> |
| } |
| </tr> |
| $editGenderTxt = qq~<br /><span class="small">$editGenderTxt</span>~; |
| <tr class="windowbg"> |
| } |
| <td width="220" align="left"><label for="name"><b>$profile_txt{68}: </b><br />~; |
| |
| if ($name_cannot_be_userid) { |
| $editAgeLimit ||= 0; |
| $showProfile .= qq~ |
| if ( $editAgeLimit > 0 && !$iamadmin && ( !$iamgmod || !$allow_gmod_profile ) ) |
| <span class="small">$profile_txt{'8'}</span></label>~; |
| { |
| } |
| if ( $editAgeLimit == 1 && ${ $uid . $user }{'disableage'} eq q{} ) { |
| $showProfile .= qq~ |
| $editAgeTxt = qq~$profile_txt{'dob_edit_1'}~; |
| </td> |
| } |
| <td align="left"><input type="text" maxlength="30" onchange="checkAvail('$scripturl',this.value,'display')" name="name" id="name" size="30" value="${$uid.$user}{'realname'}" /><div id="displayavailability"></div></td> |
| elsif ( ${ $uid . $user }{'disableage'} >= $editAgeLimit && ${ $uid . $user }{'bday'} ne q{}) { |
| </tr> |
| $editAgeTxt = qq~$profile_txt{'dob_edit_7'}~; |
| <tr class="windowbg"> |
| $disableBdayFields = q~ disabled="disabled"~; |
| <td width="220" align="left"><label for="gender"><b>$profile_txt{231}: </b></label></td> |
| $bdayFields = qq~ |
| <td align="left"><select name="gender" id="gender" size="1"><option value=""></option><option value="Male"$GenderMale>$profile_txt{'238'}</option><option value="Female"$GenderFemale>$profile_txt{'239'}</option></select></td> |
| <input type="hidden" name="bday1" value="$umonth" /> |
| </tr> |
| <input type="hidden" name="bday2" value="$uday" /> |
| <tr class="windowbg"> |
| <input type="hidden" name="bday3" value="$uyear" />~; |
| <td width="220" align="left"><label for="birthday"><b>$profile_txt{'563'}: </b></label></td> |
| } |
| <td align="left"><span class="small">$dayormonth<label for="bday3">$profile_txt{'566'}</label><input type="text" name="bday3" id="bday3" size="4" maxlength="4" value="$uyear" /></span></td> |
| elsif (${ $uid . $user }{'disableage'} eq q{} |
| </tr> |
| && ${ $uid . $user }{'bday'} eq q{} ) |
| <tr class="windowbg"> |
| { |
| <td width="220" align="left"><label for="location"><b>$profile_txt{'227'}: </b></label></td> |
| if ( $editAgeCount == 1 ) { |
| <td align="left"><input type="text" maxlength="30" name="location" id="location" size="30" value="${$uid.$user}{'location'}" /></td> |
| $editAgeTxt .= |
| </tr>~; |
| qq~ $profile_txt{'dob_edit_2'} $editAgeLimit $profile_txt{'dob_edit_5'}~; |
| |
| } |
| if ($extendedprofiles) { |
| else { |
| require "$sourcedir/ExtendedProfiles.pl"; |
| $editAgeTxt .= |
| $showProfile .= &ext_editprofile($user, "edit"); |
| qq~ $profile_txt{'dob_edit_2'} $editAgeLimit $profile_txt{'dob_edit_6'}~; |
| } |
| } |
| |
| } |
| if ($sessions == 1 && $sessionvalid == 1 && ($iamadmin || $iamgmod || $iammod) && $username eq $user) { |
| elsif ( ${ $uid . $user }{'disableage'} < $editAgeLimit ) { |
| &LoadLanguage('Sessions'); |
| $editAgeCount = $editAgeLimit - ${ $uid . $user }{'disableage'}; |
| require "$sourcedir/Decoder.pl"; |
| if ( $editAgeCount == 1 ) { |
| my $decanswer = &descramble(${$uid.$user}{'sesanswer'}, $user); |
| $editAgeTxt .= |
| $questsel = qq~<select name="sesquest" id="sesquest" size="1">\n~; |
| qq~ $profile_txt{'dob_edit_2'} $editAgeCount $profile_txt{'dob_edit_3'}~; |
| while (($key, $val) = each %sesquest_txt) { |
| } |
| if (${$uid.$user}{'sesquest'} eq $key && ${$uid.$user}{'sesquest'} ne "") { |
| else { |
| $sessel = qq~ selected="selected"~; |
| $editAgeTxt .= |
| } elsif ($key eq "password" && ${$uid.$user}{'sesquest'} eq "") { |
| qq~ $profile_txt{'dob_edit_2'} $editAgeCount $profile_txt{'dob_edit_4'}~; |
| $sessel = qq~ selected="selected"~; |
| } |
| } else { |
| } |
| $sessel = ""; |
| $editAgeTxt = qq~<br /><span class="small">$editAgeTxt</span>~; |
| } |
| } |
| $questsel .= qq~<option value="$key"$sessel>$val</option>\n~; |
| |
| } |
| my $timeorder; |
| $questsel .= qq~</select>\n~; |
| my @selist = ( 2, 3, 6, 8 ); |
| $showProfile .= qq~ |
| if ( ${ $uid . $user }{'timeselect'} ) { |
| <tr> |
| for my $i (@selist) { |
| <td class="catbg" colspan="2"><img src="$imagesdir/session.gif" alt="" border="0" /> <label for="sesquest"><b>$img_txt{'34a'}</b><br /><span class="small">$session_txt{'9'}<br />$session_txt{'9a'}</span></label></td> |
| if ( ${ $uid . $user }{'timeselect'} == $i ) { $timeorder = 1; } |
| </tr> |
| } |
| <tr class="windowbg"> |
| } |
| <td width="220" align="left">$questsel</td> |
| else { |
| <td align="left"><input type="text" maxlength="30" name="sesanswer" size="20" value="$decanswer" /></td> |
| for my $i (@selist) { |
| </tr>~; |
| if ( $timeselected == $i ) { $timeorder = 1; } |
| } |
| } |
| $showProfile .= qq~ |
| } |
| <tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" />~; |
| $selectyear = q{}; |
| if ($self_del_user == 1) { |
| $seluyear = |
| if ( ( $iamadmin && ( $username ne $user ) ) || ( $username ne 'admin' ) ) { |
| qq~$profile_txt{'566'}<select name="bday3"$disableBdayFields><option value="">--</option>\n~; |
| $showProfile .= |
| for my $e ( 1905 .. ( $year - 3 ) ) { |
| |
| $seluyear .= |
| |
| qq~<option value="$e" ${isselected($uyear == $e)}>$e</option>\n~; |
| |
| } |
| |
| $seluyear .= q~</select> ~; |
| |
| |
| |
| $selectmnth = q{}; |
| |
| $dayormonthm = |
| |
| qq~<label for="bday1">$profile_txt{'564'}</label><select name="bday1" id="bday1"$disableBdayFields><option value="">--</option>\n~; |
| |
| for my $bb ( 1 .. 12 ) { |
| |
| if ( $bb < 10 ) { $c = "0$bb"; } |
| |
| else { $c = $bb; } |
| |
| $dayormonthm .= |
| |
| qq~<option value="$c" ${isselected($umonth == $bb)}>$c</option>\n~; |
| |
| } |
| |
| $dayormonthm .= q~</select> ~; |
| |
| |
| |
| $selectday = q{}; |
| |
| $dayormonthd = |
| |
| qq~<label for="bday2">$profile_txt{'565'}</label><select name="bday2" id="bday2"$disableBdayFields><option value="">--</option>\n~; |
| |
| for my $aa ( 1 .. 31 ) { |
| |
| if ( $aa < 10 ) { $d = "0$aa"; } |
| |
| else { $d = $aa; } |
| |
| $dayormonthd .= |
| |
| qq~<option value="$d" ${isselected($uday == $aa)}>$d</option>\n~; |
| |
| } |
| |
| $dayormonthd .= q~</select> ~; |
| |
| |
| |
| if ($timeorder) { $dayormonth = $dayormonthd . $dayormonthm; } |
| |
| else { $dayormonth = $dayormonthm . $dayormonthd; } |
| |
| $dayormonth =~ s/for="bday\d"/for="birthday"/oxsm; |
| |
| $dayormonth =~ s/id="bday\d"/id="birthday"/oxsm; |
| |
| |
| |
| $my_newpass = ( $INFO{'newpassword'} ? $profile_txt{'80'} : q{} ); |
| |
| $my_passchk = password_check(); |
| |
| $my_name_not = q{}; |
| |
| if ($name_cannot_be_userid) { |
| |
| $my_name_not = qq~ |
| |
| <span class="small">$profile_txt{'8'}</span></label>~; |
| |
| } |
| |
| if ( $showage == 1 ) { |
| |
| my $checked = q{}; |
| |
| if ( ${ $uid . $user }{'hideage'} ) { $checked = ' checked="checked"'; } |
| |
| $my_showageshow = $myprofile_showage; |
| |
| $my_showageshow =~ s/{yabb agechecked}/$checked/sm; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require Sources::ExtendedProfiles; |
| |
| my $show_ext_prof = ext_editprofile( $user, 'edit' ); |
| |
| $my_show_ext_prof = $show_ext_prof; |
| |
| } |
| |
| |
| |
| if ( $birthday_on_reg > 1 ) { |
| |
| $myrequirebd = qq~ <span class="small">$profile_txt{'563b'}</span>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" accept-charset="$yymycharset"> |
| |
| $myprofile_edit~; |
| |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| |
| $showProfile =~ s/{yabb my_newpass}/$my_newpass/sm; |
| |
| $showProfile =~ s/{yabb my_passchk}/$my_passchk/sm; |
| |
| $showProfile =~ s/{yabb my_name_not}/$my_name_not/sm; |
| |
| $showProfile =~ s/{yabb user}/${$uid.$user}{'realname'}/gsm; |
| |
| $showProfile =~ s/{yabb editGenderTxt}/$editGenderTxt/sm; |
| |
| $showProfile =~ s/{yabb disableGenderField}/$disableGenderField/sm; |
| |
| $showProfile =~ s/{yabb GenderMale}/$GenderMale/sm; |
| |
| $showProfile =~ s/{yabb GenderFemale}/$GenderFemale/sm; |
| |
| $showProfile =~ s/{yabb genderField}/$genderField/sm; |
| |
| $showProfile =~ s/{yabb editAgeTxt}/$editAgeTxt/sm; |
| |
| $showProfile =~ s/{yabb require_bd}/$myrequirebd/sm; |
| |
| $showProfile =~ s/{yabb bdaysel}/$dayormonth$seluyear$bdayFields/sm; |
| |
| $showProfile =~ s/{yabb showageshow}/$my_showageshow/sm; |
| |
| $showProfile =~ s/{yabb user_location}/${$uid.$user}{'location'}/sm; |
| |
| $showProfile =~ s/{yabb my_show_ext_prof}/$my_show_ext_prof/sm; |
| |
| ## Mod Hook showProfile1 ## |
| |
| |
| |
| if ( $sessions == 1 |
| |
| && $sessionvalid == 1 |
| |
| && ($staff) |
| |
| && $username eq $user ) |
| |
| { |
| |
| LoadLanguage('Sessions'); |
| |
| my $decanswer = ${ $uid . $user }{'sesanswer'}; |
| |
| $questsel = qq~<select name="sesquest" id="sesquest" size="1">\n~; |
| |
| while ( ( $key, $val ) = each %sesquest_txt ) { |
| |
| if ( ${ $uid . $user }{'sesquest'} eq $key |
| |
| && ${ $uid . $user }{'sesquest'} ne q{} ) |
| |
| { |
| |
| $sessel = q~ selected="selected"~; |
| |
| } |
| |
| elsif ( $key eq 'password' && ${ $uid . $user }{'sesquest'} eq q{} ) |
| |
| { |
| |
| $sessel = q~ selected="selected"~; |
| |
| } |
| |
| else { |
| |
| $sessel = q{}; |
| |
| } |
| |
| $questsel .= qq~<option value="$key"$sessel>$val</option>\n~; |
| |
| } |
| |
| $questsel .= qq~</select>\n~; |
| |
| $showProfile .= $myprofile_session; |
| |
| $showProfile =~ s/{yabb questsel}/$questsel/sm; |
| |
| $showProfile =~ s/{yabb decanswer}/$decanswer/sm; |
| |
| $showProfile =~ s/{yabb sesstext9}/$session_txt{'9'}/sm; |
| |
| $showProfile =~ s/{yabb sesstext9a}/$session_txt{'9a'}/sm; |
| |
| } |
| |
| if ( $self_del_user == 1 ) { |
| |
| if ( ( $iamadmin && ( $username ne $user ) ) |
| |
| || ( $username ne 'admin' ) ) |
| |
| { |
| |
| $show_confdel = |
| qq~ <input type="submit" name="moda" value="$profile_txt{'89'}" onclick="return confirm('$confdel_text')" class="button" />~; |
| qq~ <input type="submit" name="moda" value="$profile_txt{'89'}" onclick="return confirm('$confdel_text')" class="button" />~; |
| } |
| } |
| } |
| } |
| else { |
| else { |
| if ( $iamadmin && $username ne $user ) { |
| if ( $iamadmin && $username ne $user ) { |
| $showProfile .= |
| $show_confdel = |
| qq~ <input type="submit" name="moda" value="$profile_txt{'89'}" onclick="return confirm('$confdel_text')" class="button" />~; |
| qq~ <input type="submit" name="moda" value="$profile_txt{'89'}" onclick="return confirm('$confdel_text')" class="button" />~; |
| } |
| } |
| } |
| } |
| $showProfile .= qq~<br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span> |
| $showProfile .= $myprofile_bottom; |
| </td> |
| $showProfile =~ s/{yabb show_confdel}/$show_confdel/sm; |
| </tr> |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| </table> |
| |
| </form> |
| if ( !$view ) { |
| |
| $yymain .= $showProfile; |
| <script language="JavaScript1.2" type="text/javascript"> |
| template(); |
| <!-- |
| } |
| // Password_strength_meter start |
| return; |
| var verdects = new Array("$pwstrengthmeter_txt{'1'}","$pwstrengthmeter_txt{'2'}","$pwstrengthmeter_txt{'3'}","$pwstrengthmeter_txt{'4'}","$pwstrengthmeter_txt{'5'}","$pwstrengthmeter_txt{'6'}","$pwstrengthmeter_txt{'7'}","$pwstrengthmeter_txt{'8'}"); |
| |
| var colors = new Array("#8F8F8F","#BF0000","#FF0000","#00A0FF","#33EE00","#339900"); |
| |
| var scores = new Array($pwstrengthmeter_scores); |
| |
| var common = new Array($pwstrengthmeter_common); |
| |
| var minchar = $pwstrengthmeter_minchar; |
| |
| |
| |
| function runPassword(D) { |
| |
| var nPerc = checkPassword(D); |
| |
| if (nPerc > -199 && nPerc < 0) { |
| |
| strColor = colors[0]; |
| |
| strText = verdects[1]; |
| |
| strWidth = "5%"; |
| |
| } else if (nPerc == -200) { |
| |
| strColor = colors[1]; |
| |
| strText = verdects[0]; |
| |
| strWidth = "0%"; |
| |
| } else if (scores[0] == -1 && scores[1] == -1 && scores[2] == -1 && scores[3] == -1) { |
| |
| strColor = colors[4]; |
| |
| strText = verdects[7]; |
| |
| strWidth = "100%"; |
| |
| } else if (nPerc <= scores[0]) { |
| |
| strColor = colors[1]; |
| |
| strText = verdects[2]; |
| |
| strWidth = "10%"; |
| |
| } else if (nPerc > scores[0] && nPerc <= scores[1]) { |
| |
| strColor = colors[2]; |
| |
| strText = verdects[3]; |
| |
| strWidth = "25%"; |
| |
| } else if (nPerc > scores[1] && nPerc <= scores[2]) { |
| |
| strColor = colors[3]; |
| |
| strText = verdects[4]; |
| |
| strWidth = "50%"; |
| |
| } else if (nPerc > scores[2] && nPerc <= scores[3]) { |
| |
| strColor = colors[4]; |
| |
| strText = verdects[5]; |
| |
| strWidth = "75%"; |
| |
| } else { |
| |
| strColor = colors[5]; |
| |
| strText = verdects[6]; |
| |
| strWidth = "100%"; |
| |
| } |
| |
| document.getElementById("passwrd1_bar").style.width = strWidth; |
| |
| document.getElementById("passwrd1_bar").style.backgroundColor = strColor; |
| |
| document.getElementById("passwrd1_text").style.color = strColor; |
| |
| document.getElementById("passwrd1_text").childNodes[0].nodeValue = strText; |
| |
| } |
| |
| |
| |
| function checkPassword(C) { |
| |
| if (C.length == 0 || C.length < minchar) return -100; |
| |
| |
| |
| for (var D = 0; D < common.length; D++) { |
| |
| if (C.toLowerCase() == common[D]) return -200; |
| |
| } |
| |
| |
| |
| var F = 0; |
| |
| if (C.length >= minchar && C.length <= (minchar+2)) { |
| |
| F = (F + 6) |
| |
| } else if (C.length >= (minchar + 3) && C.length <= (minchar + 4)) { |
| |
| F = (F + 12) |
| |
| } else if (C.length >= (minchar + 5)) { |
| |
| F = (F + 18) |
| |
| } |
| |
| |
| |
| if (C.match(/[a-z]/)) { |
| |
| F = (F + 1) |
| |
| } |
| |
| if (C.match(/[A-Z]/)) { |
| |
| F = (F + 5) |
| |
| } |
| |
| if (C.match(/d+/)) { |
| |
| F = (F + 5) |
| |
| } |
| |
| if (C.match(/(.*[0-9].*[0-9].*[0-9])/)) { |
| |
| F = (F + 7) |
| |
| } |
| |
| if (C.match(/.[!,\@,#,\$,\%,^,&,*,?,_,\~]/)) { |
| |
| F = (F + 5) |
| |
| } |
| |
| if (C.match(/(.*[!,\@,#,\$,\%,^,&,*,?,_,\~].*[!,\@,#,\$,\%,^,&,*,?,_,\~])/)) { |
| |
| F = (F + 7) |
| |
| } |
| |
| if (C.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)){ |
| |
| F = (F + 2) |
| |
| } |
| |
| if (C.match(/([a-zA-Z])/) && C.match(/([0-9])/)) { |
| |
| F = (F + 3) |
| |
| } |
| |
| if (C.match(/([a-zA-Z0-9].*[!,\@,#,\$,\%,^,&,*,?,_,\~])|([!,\@,#,\$,\%,^,&,*,?,_,\~].*[a-zA-Z0-9])/)) { |
| |
| F = (F + 3) |
| |
| } |
| |
| return F; |
| |
| } |
| |
| // Password_strength_meter end |
| |
| // --> |
| |
| </script> |
| |
| ~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| } |
| |
| |
| sub ModifyProfileContacts { |
| sub ModifyProfileContacts { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| |
| $menucolors[1] = 'selected-bg'; |
| |
| ProfileMenu(); |
| |
| |
| |
| my $scriptAction = q~profileContacts2~; |
| |
| if ($view) { |
| |
| $scriptAction = q~myprofileContacts2~; |
| |
| $yytitle = |
| |
| qq~$profile_txt{'editmyprofile'} › $profile_txt{'819'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'819'}~; |
| |
| $yynavigation = |
| |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| |
| else { |
| |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'819'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'79'} ($user) › $profile_txt{'819'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| |
| |
| ${ $uid . $user }{'aim'} =~ tr/+/ /; |
| |
| ${ $uid . $user }{'yim'} =~ tr/+/ /; |
| |
| if ($allow_hide_email) { |
| |
| my $checked = q{}; |
| |
| if ( ${ $uid . $user }{'hidemail'} ) { |
| |
| $checked = ' checked="checked"'; |
| |
| } |
| |
| $my_hidemail = $myprofile_hidemail; |
| |
| $my_hidemail =~ s/{yabb checked}/$checked/sm; |
| |
| } |
| |
| |
| |
| if ( !$minlinkweb ) { $minlinkweb = 0; } |
| |
| if ( ${ $uid . $user }{'postcount'} >= $minlinkweb |
| |
| || ${ $uid . $user }{'position'} eq 'Administrator' |
| |
| || ${ $uid . $user }{'position'} eq 'Global Moderator' ) |
| |
| { |
| |
| $my_minlinkweb = $myprofile_minlinkweb; |
| |
| $my_minlinkweb =~ s/{yabb my_webtitle}/${$uid.$user}{'webtitle'}/sm; |
| |
| $my_minlinkweb =~ s/{yabb my_weburl}/${$uid.$user}{'weburl'}/sm; |
| |
| } |
| |
| if ( |
| |
| $pm_lev == 1 |
| |
| && ( |
| |
| $enable_MCaway > 2 |
| |
| || ( |
| |
| $enable_MCaway |
| |
| && ( ${ $uid . $user }{'position'} eq 'Administrator' |
| |
| || ${ $uid . $user }{'position'} eq 'Global Moderator' |
| |
| || ${ $uid . $user }{'position'} eq 'Mid Moderator' |
| |
| || is_moderator($user) ) |
| |
| ) |
| |
| ) |
| |
| ) |
| |
| { |
| |
| my $offChecked = q~ selected="selected"~; |
| |
| my $awayChecked = q{}; |
| |
| |
| |
| if ( ${ $uid . $user }{'offlinestatus'} eq 'away' ) { |
| |
| $offChecked = q{}; |
| |
| $awayChecked = q~ selected="selected"~; |
| |
| } |
| |
| |
| |
| my $awayreply = ${ $uid . $user }{'awayreply'}; |
| |
| $awayreply =~ s/<br \/>/\n/gsm; |
| |
| $my_away = $myprofile_away; |
| |
| $my_away .= |
| |
| qq~ <textarea name="awayreply" id="awayreply" rows="4" cols="50">$awayreply</textarea><br />~; |
| |
| $my_away .= $myprofile_away_b; |
| |
| $my_away =~ s/{yabb offChecked}/$offChecked/sm; |
| |
| $my_away =~ s/{yabb awayChecked}/$awayChecked/sm; |
| |
| $my_away =~ s/{yabb MaxAwayLen}/$MaxAwayLen/gsm; |
| |
| } |
| |
| if ( |
| |
| ( |
| |
| ${ $uid . $user }{'position'} eq 'Administrator' |
| |
| || ${ $uid . $user }{'position'} eq 'Global Moderator' |
| |
| ) |
| |
| && $enable_MCstatusStealth |
| |
| ) |
| |
| { |
| |
| my $stealthChecked = q{}; |
| |
| if ( ${ $uid . $user }{'stealth'} ) { |
| |
| $stealthChecked = ' checked="checked"'; |
| |
| } |
| |
| $my_stealth = $myprofile_stealth; |
| |
| $my_stealth =~ s/{yabb stealthChecked}/$stealthChecked/sm; |
| |
| } |
| |
| |
| $menucolors[1] = "titlebg"; |
| if ($extendedprofiles) { |
| &ProfileMenu; |
| require Sources::ExtendedProfiles; |
| |
| $my_extended .= ext_editprofile( $user, 'contact' ); |
| |
| } |
| |
| |
| my $scriptAction = qq~profileContacts2~; |
| $showProfile .= qq~ |
| if ($view) { |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" accept-charset="$yymycharset"> |
| $scriptAction = qq~myprofileContacts2~; |
| $myprofile_contact |
| $yytitle = qq~$profile_txt{'editmyprofile'} › $profile_txt{'819'}~; |
| ~; |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'819'}~; |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| $showProfile =~ s/{yabb user_email}/${$uid.$user}{'email'}/sm; |
| } else { |
| $showProfile =~ s/{yabb my_hidemail}/$my_hidemail/sm; |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'819'}~; |
| $showProfile =~ s/{yabb my_icq}/${$uid.$user}{'icq'}/sm; |
| $profiletitle = qq~$profile_txt{'79'} ($user) › $profile_txt{'819'}~; |
| $showProfile =~ s/{yabb my_aim}/${$uid.$user}{'aim'}/sm; |
| $yynavigation = qq~› $profiletitle~; |
| $showProfile =~ s/{yabb my_yim}/${$uid.$user}{'yim'}/sm; |
| } |
| $showProfile =~ s/{yabb my_gtalk}/${$uid.$user}{'gtalk'}/sm; |
| |
| $showProfile =~ s/{yabb my_skype}/${$uid.$user}{'skype'}/sm; |
| ${$uid.$user}{'aim'} =~ tr/+/ /; |
| $showProfile =~ s/{yabb my_myspace}/${$uid.$user}{'myspace'}/sm; |
| ${$uid.$user}{'yim'} =~ tr/+/ /; |
| $showProfile =~ s/{yabb my_facebook}/${$uid.$user}{'facebook'}/sm; |
| |
| $showProfile =~ s/{yabb my_twitter}/${$uid.$user}{'twitter'}/sm; |
| $showProfile .= qq~ |
| $showProfile =~ s/{yabb my_youtube}/${$uid.$user}{'youtube'}/sm; |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator"> |
| $showProfile =~ s/{yabb my_minlinkweb}/$my_minlinkweb/sm; |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| $showProfile =~ s/{yabb my_away}/$my_away/sm; |
| <tr> |
| $showProfile =~ s/{yabb my_stealth}/$my_stealth/sm; |
| <td colspan="2" class="catbg"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b></td> |
| $showProfile =~ s/{yabb my_extended}/$my_extended/sm; |
| </tr> |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="email"><b>$profile_txt{'69'}: </b><br /><span class="small">$profile_txt{'679'} </span></label></td> |
| if ( !$view ) { |
| <td align="left"><input type="text" maxlength="100" onchange="checkAvail('$scripturl',this.value,'email')" name="email" id="email" size="40" value="${$uid.$user}{'email'}" /><div id="emailavailability"></div></td> |
| $yymain .= $showProfile; |
| </tr>~; |
| template(); |
| if ($allow_hide_email) { |
| } |
| my $checked = ''; |
| return; |
| if (${$uid.$user}{'hidemail'}) { $checked = ' checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="hideemail"><b>$profile_txt{'721'}</b></label></td> |
| |
| <td align="left"><input type="checkbox" name="hideemail" id="hideemail" value="1"$checked /></td> |
| |
| </tr>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="icq"><b>$profile_txt{'513'}: </b><br /><span class="small">$profile_txt{'600'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="10" name="icq" id="icq" size="40" value="${$uid.$user}{'icq'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="aim"><b>$profile_txt{'603'}: </b><br /><span class="small">$profile_txt{'601'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="30" name="aim" id="aim" size="40" value="${$uid.$user}{'aim'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="yim"><b>$profile_txt{'604'}: </b><br /><span class="small">$profile_txt{'602'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="30" name="yim" id="yim" size="40" value="${$uid.$user}{'yim'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="msn"><b>$profile_txt{'823'}: </b><br /><span class="small">$profile_txt{'824'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="50" name="msn" id="msn" size="40" value="${$uid.$user}{'msn'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="gtalk"><b>$profile_txt{'825'}: </b><br /><span class="small">$profile_txt{'826'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="50" name="gtalk" id="gtalk" size="40" value="${$uid.$user}{'gtalk'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="skype"><b>$profile_txt{'827'}: </b><br /><span class="small">$profile_txt{'828'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="50" name="skype" id="skype" size="40" value="${$uid.$user}{'skype'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320"><label for="myspace"><b>$profile_txt{'570'}:</b><br /><span class="small">$profile_txt{'571'}</span></label></td> |
| |
| <td align="left"><label for="myspace"><span class="small">$profile_txt{'572'}</span></label><br /><input type="text" maxlength="50" name="myspace" id="myspace" size="40" value="${$uid.$user}{'myspace'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320"><label for="facebook"><b>$profile_txt{'573'}:</b><br /><span class="small">$profile_txt{'574'}</span></label></td> |
| |
| <td align="left"><label for="facebook"><span class="small">$profile_txt{'575'}</span></label><br /><input type="text" maxlength="50" name="facebook" id="facebook" size="40" value="${$uid.$user}{'facebook'}" /></td> |
| |
| </tr>~; |
| |
| if (!$minlinkweb) { $minlinkweb = 0; } |
| |
| if (${$uid.$user}{'postcount'} >= $minlinkweb || ${$uid.$user}{'position'} eq 'Administrator' || ${$uid.$user}{'position'} eq 'Global Moderator') { |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="webtitle"><b>$profile_txt{'83'}: </b><br /><span class="small">$profile_txt{'598'}</span></label></td> |
| |
| <td align="left"><input type="text" maxlength="30" name="webtitle" id="webtitle" size="40" value="${$uid.$user}{'webtitle'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="weburl"><b>$profile_txt{'84'}: </b><br /><span class="small">$profile_txt{'599'}</span></label></td> |
| |
| <td align="left"><input type="text" name="weburl" id="weburl" size="40" value="${$uid.$user}{'weburl'}" /></td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if (($PM_level == 1 || ($PM_level == 2 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && ($iamadmin || $iamgmod))) && ($enable_MCaway > 2 || ($enable_MCaway && (${$uid.$user}{'position'} eq 'Administrator' || ${$uid.$user}{'position'} eq 'Global Moderator' || &is_moderator($user))))) { |
| |
| my $offChecked = qq~ selected="selected"~; |
| |
| my $awayChecked = ''; |
| |
| |
| |
| if (${$uid.$user}{'offlinestatus'} eq 'away') { |
| |
| $offChecked = ''; |
| |
| $awayChecked = qq~ selected="selected"~; |
| |
| } |
| |
| |
| |
| my $awayreply = ${$uid.$user}{'awayreply'}; |
| |
| $awayreply =~ s~<br />~\n~g; |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="offlinestatus"><b>$profile_txt{'showstatus'}: </b><br /><span class="small">$profile_txt{'statusexplain'}<br />$profile_txt{'awaydescription'}</span></label></td> |
| |
| <td align="left"> |
| |
| <select name="offlinestatus" id="offlinestatus"> |
| |
| <option value="offline"$offChecked>$maintxt{'61'}</option> |
| |
| <option value="away"$awayChecked>$maintxt{'away'}</option> |
| |
| </select><br /><br /> |
| |
| <label for="awaysubj"><span class="small">$profile_txt{'asubj'}</span></label><br /> |
| |
| <input type="text" name="awaysubj" id="awaysubj" size="50" maxlength="50" value="${$uid.$user}{'awaysubj'}" /><br /><br /> |
| |
| <label for="awayreply"><span class="small">$profile_txt{'amess'}</span></label><br /> |
| |
| <textarea name="awayreply" id="awayreply" rows="4" cols="50">$awayreply</textarea><br /> |
| |
| |
| |
| <span class="small">$profile_txt{'664a'} <input value="$MaxAwayLen" size="3" name="msgCL" class="windowbg" style="border: 0px; width: 40px; padding: 1px; font-size: 11px;" readonly="readonly" /></span><br /> |
| |
| <script type="text/javascript" language="JavaScript"> |
| |
| <!-- |
| |
| var supportsKeys = false; |
| |
| function tick() { |
| |
| calcCharLeft(document.forms[0]); |
| |
| if (!supportsKeys) { timerID = setTimeout("tick()",200); } |
| |
| } |
| |
| function calcCharLeft(sig) { |
| |
| clipped = false; |
| |
| maxLength = $MaxAwayLen; |
| |
| if (document.creator.awayreply.value.length > maxLength) { |
| |
| document.creator.awayreply.value = document.creator.awayreply.value.substring(0,maxLength); |
| |
| charleft = 0; |
| |
| clipped = true; |
| |
| } else { |
| |
| charleft = maxLength - document.creator.awayreply.value.length; |
| |
| } |
| |
| document.creator.msgCL.value = charleft; |
| |
| return clipped; |
| |
| } |
| |
| tick(); |
| |
| // --> |
| |
| </script> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if ((${$uid.$user}{'position'} eq 'Administrator' || ${$uid.$user}{'position'} eq 'Global Moderator') && $enable_MCstatusStealth) { |
| |
| my $stealthChecked = ''; |
| |
| if (${$uid.$user}{'stealth'}) { $stealthChecked = ' checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="stealth"><b>$profile_txt{'stealth'}: </b><br /><span class="small">$profile_txt{'stealthexplain'}</span></label></td> |
| |
| <td align="left"><input type="checkbox" name="stealth" id="stealth" value="1"$stealthChecked /></td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| $showProfile .= &ext_editprofile($user,"contact"); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" /><br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form>~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| } |
| |
| |
| sub ModifyProfileOptions { |
| sub ModifyProfileOptions { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| |
| $menucolors[2] = 'selected-bg'; |
| |
| ProfileMenu(); |
| |
| |
| |
| my $scriptAction = q~profileOptions2~; |
| |
| if ($view) { |
| |
| $scriptAction = q~myprofileOptions2~; |
| |
| $yytitle = |
| |
| qq~$profile_txt{'editmyprofile'} › $profile_txt{'818'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'818'}~; |
| |
| $yynavigation = |
| |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| |
| else { |
| |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'818'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'79'} ($user) › $profile_txt{'818'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| |
| |
| if ( $allowpics && $upload_useravatar && $upload_avatargroup ) { |
| |
| $upload_useravatar = 0; |
| |
| foreach my $av_gr ( split /, /sm, $upload_avatargroup ) { |
| |
| if ( $av_gr eq ${ $uid . $user }{'position'} ) { |
| |
| $upload_useravatar = 1; |
| |
| last; |
| |
| } |
| |
| foreach ( split /,/xsm, ${ $uid . $user }{'addgroups'} ) { |
| |
| if ( $av_gr eq $_ ) { $upload_useravatar = 1; last; } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| $my_allow_avatars = ( |
| |
| ( $allowpics && $upload_useravatar ) |
| |
| ? q~ enctype="multipart/form-data"~ |
| |
| : q{} |
| |
| ); |
| |
| |
| |
| if ($allowpics) { |
| |
| opendir( DIR, $facesdir ) |
| |
| or fatal_error( 'cannot_open_dir', |
| |
| "($facesdir)!<br />$profile_txt{'681'}", 1 ); |
| |
| @contents = readdir DIR; |
| |
| closedir DIR; |
| |
| $images = q{}; |
| |
| foreach my $line ( sort @contents ) { |
| |
| ( $name, $extension ) = split /\./xsm, $line; |
| |
| $checked = q{}; |
| |
| if ( $line eq ${ $uid . $user }{'userpic'} ) { |
| |
| $checked = ' selected="selected"'; |
| |
| } |
| |
| if ( ${ $uid . $user }{'userpic'} =~ m{\Ahttps?://}sm |
| |
| && $line eq $my_blank_avatar ) |
| |
| { |
| |
| $checked = ' selected="selected" '; |
| |
| } |
| |
| if ( $extension =~ /gif/ism |
| |
| || $extension =~ /jpg/ism |
| |
| || $extension =~ /jpeg/ism |
| |
| || $extension =~ /png/ism ) |
| |
| { |
| |
| if ( $line eq $my_blank_avatar ) { |
| |
| $images = |
| |
| qq~ <option value="$line"$checked>$profile_txt{'422'}</option>\n$images~; |
| |
| } |
| |
| else { |
| |
| $images .= |
| |
| qq~ <option value="$line"$checked>$name</option>\n~; |
| |
| } |
| |
| } |
| |
| } |
| |
| my ( $pic, $s, $alt ); |
| |
| my $tmp = $facesurl; |
| |
| if ( $tmp =~ /^(http(s?):\/\/)/xsm ) { |
| |
| ( $tmp, $s ) = ( $1, $2 ); |
| |
| } |
| |
| if ( ${ $uid . $user }{'userpic'} =~ m{\Ahttps?://}sm ) { |
| |
| $pic = ${ $uid . $user }{'userpic'}; |
| |
| $checked = ' checked="checked" '; |
| |
| $tmp = ${ $uid . $user }{'userpic'}; |
| |
| if ($upload_useravatar) { $alt = $profile_txt{'473'}; } |
| |
| } |
| |
| else { |
| |
| $pic = "$facesurl/${$uid.$user}{'userpic'}"; |
| |
| } |
| |
| |
| |
| $avatar_limit ||= 0; |
| |
| $my_up_avatar_a = ( |
| |
| $upload_useravatar |
| |
| ? qq~<br /> |
| |
| $profile_txt{'476'} $avatar_limit KB~ |
| |
| : q{} |
| |
| ); |
| |
| $my_up_avatar_b = ( |
| |
| $upload_useravatar |
| |
| ? q~<br /> |
| |
| <br /> |
| |
| <input type="file" name="file_avatar" size="50" />~ |
| |
| : q{} |
| |
| ); |
| |
| |
| |
| $my_show_avatar = $myprofile_show_avatar_a; |
| |
| $my_show_avatar =~ s/{yabb my_up_avatar_a}/$my_up_avatar_a/sm; |
| |
| $my_show_avatar =~ s/{yabb my_up_avatar_b}/$my_up_avatar_b/sm; |
| |
| $my_show_avatar =~ s/{yabb av_pic}/$pic/sm; |
| |
| $my_show_avatar =~ s/{yabb av_alt}/$alt/sm; |
| |
| $my_show_avatar =~ s/{yabb av_s}/$s/gsm; |
| |
| $my_show_avatar =~ s/{yabb av_tmp}/$tmp/sm; |
| |
| $my_show_avatar =~ s/{yabb images}/$images/sm; |
| |
| $my_show_avatar =~ s/{yabb checked}/$checked/sm; |
| |
| } |
| |
| |
| |
| $signature = ${ $uid . $user }{'signature'}; |
| |
| $signature =~ s/<br.*?>/\n/gsm; |
| |
| |
| |
| if ( $addmemgroup_enabled > 1 && %NoPost ) { |
| |
| my ( $addmemgroup, $selsize ) = |
| |
| DrawGroups( ${ $uid . $user }{'addgroups'}, |
| |
| ${ $uid . $user }{'position'}, 0 ); |
| |
| |
| |
| if ( $addmemgroup ) { |
| |
| $my_addmemgroup = $myprofile_addmemgroup; |
| |
| $my_addmemgroup =~ s/{yabb selsize}/$selsize/sm; |
| |
| $my_addmemgroup =~ s/{yabb addmemgroup}/$addmemgroup/sm; |
| |
| } |
| |
| } |
| |
| |
| |
| if ( $NewNotificationAlert |
| |
| || $enable_notifications == 1 |
| |
| || $enable_notifications == 3 ) |
| |
| { |
| |
| if ($NewNotificationAlert) { |
| |
| $my_notify_a = q~ |
| |
| <input type="checkbox" value="1" name="onlinealert" id="onlinealert"~ |
| |
| . ( |
| |
| ${ $uid . $user }{'onlinealert'} ? ' checked="checked"' : q{} ) |
| |
| . qq~ /> <label for="onlinealert">$profile_txt{'onlinealertexplain'}</label>~; |
| |
| } |
| |
| if ( $enable_notifications == 1 || $enable_notifications == 3 ) { |
| |
| if ($NewNotificationAlert) { |
| |
| $my_notify_b = q~<br /> |
| |
| <br />~; |
| |
| } |
| |
| |
| |
| $my_notify_b .= qq~ |
| |
| <label for="notify_N">$profile_txt{'326'}</label>? <select name="notify_N" id="notify_N"> |
| |
| <option value="0"~ |
| |
| . ( |
| |
| ( |
| |
| !${ $uid . $user }{'notify_me'} |
| |
| || ${ $uid . $user }{'notify_me'} == 2 |
| |
| ) ? ' selected="selected"' : q{} |
| |
| ) |
| |
| . qq~>$profile_txt{'164'}</option> |
| |
| <option value="1"~ |
| |
| . ( |
| |
| ( |
| |
| ${ $uid . $user }{'notify_me'} == 1 |
| |
| || ${ $uid . $user }{'notify_me'} == 3 |
| |
| ) ? ' selected="selected"' : q{} |
| |
| ) |
| |
| . qq~>$profile_txt{'163'}</option> |
| |
| </select>~; |
| |
| } |
| |
| $my_notify = $myprofile_notify; |
| |
| $my_notify =~ s/{yabb my_notify_a}/$my_notify_a/sm; |
| |
| $my_notify =~ s/{yabb my_notify_b}/$my_notify_b/sm; |
| |
| } |
| |
| |
| |
| if ($ttsureverse) { |
| |
| if ( !exists( ${ $uid . $user }{'reversetopic'} ) ) { |
| |
| ${ $uid . $user }{'reversetopic'} = $ttsreverse; |
| |
| } |
| |
| $my_reversi = |
| |
| ${ $uid . $user }{'reversetopic'} ? q~ checked="checked"~ : q{}; |
| |
| $my_reverse = $myprofile_reverse; |
| |
| $my_reverse =~ s/{yabb my_reversi}/$my_reversi/sm; |
| |
| } |
| |
| |
| |
| my $rts = ${ $uid . $user }{'return_to'}; |
| |
| for my $rt ( 1 .. 3 ) { |
| |
| $return_to_select .= |
| |
| $rts == $rt |
| |
| ? qq~<option value="$rt" selected="selected">$return_to_txt{$rt}</option>~ |
| |
| : qq~<option value="$rt">$return_to_txt{$rt}</option>~; |
| |
| } |
| |
| my $return_to = $myprofile_return_to; |
| |
| $return_to =~ s/{yabb return_to_select}/$return_to_select/sm; |
| |
| |
| |
| my $tmptcnt = 0; |
| |
| foreach my $curtemplate ( |
| |
| sort { $templateset{$a} cmp $templateset{$b} } |
| |
| keys %templateset |
| |
| ) |
| |
| { |
| |
| $drawndirs .= |
| |
| qq~<option value="$curtemplate"${isselected($curtemplate eq ${ $uid . $user }{'template'})}>$curtemplate</option>\n~; |
| |
| $tmptcnt++; |
| |
| } |
| |
| |
| |
| my $my_template = q{}; |
| |
| if ( $tmptcnt > 1 ) { |
| |
| $my_template = $myprofile_template; |
| |
| $my_template =~ s/{yabb drawndirs}/$drawndirs/sm; |
| |
| } |
| |
| |
| |
| opendir DIR, $langdir; |
| |
| my @lfilesanddirs = readdir DIR; |
| |
| closedir DIR; |
| |
| my $lngcnt = 0; |
| |
| foreach my $fld ( sort { lc($a) cmp lc $b } @lfilesanddirs ) { |
| |
| if ( -e "$langdir/$fld/Main.lng" ) { |
| |
| my $displang = $fld; |
| |
| $displang =~ s/(.+?)\_(.+?)$/$1 ($2)/gism; |
| |
| $drawnldirs .= |
| |
| qq~<option value="$fld" ${isselected(${ $uid . $user }{'language'} eq $fld)}>$displang</option>~; |
| |
| $lngcnt++; |
| |
| } |
| |
| } |
| |
| |
| |
| my $my_show_lang = q{}; |
| |
| if ( $lngcnt > 1 ) { |
| |
| $my_show_lang = $myprofile_show_lang; |
| |
| $my_show_lang =~ s/{yabb drawnldirs}/$drawnldirs/sm; |
| |
| } |
| |
| |
| |
| if ( $user_hide_avatars && $showuserpic && $allowpics ) |
| |
| { # checkbox to hide avatars in threads |
| |
| $my_show_avatar_opts = $myprofile_show_avatars; |
| |
| $my_hide_avatar = |
| |
| ${ $uid . $user }{'hide_avatars'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ s/{yabb user_showavatar}/$my_hide_avatar/sm; |
| |
| } |
| |
| else { $my_show_avatar_opts = q{}; } |
| |
| |
| |
| if ( $user_hide_user_text && $showusertext ) |
| |
| { # checkbox to hide user-text in threads |
| |
| $my_show_avatar_opts .= $myprofile_hide_user_text; |
| |
| $my_hide_user_text = |
| |
| ${ $uid . $user }{'hide_user_text'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ s/{yabb hide_user_text}/$my_hide_user_text/sm; |
| |
| } |
| |
| |
| |
| if ($user_hide_img) { # checkbox to hide images in threads |
| |
| $my_show_avatar_opts .= $myprofile_hide_img; |
| |
| $my_hide_img = |
| |
| ${ $uid . $user }{'hide_img'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ s/{yabb hide_img}/$my_hide_img/sm; |
| |
| } |
| |
| |
| |
| $allowattach ||= 0; |
| |
| if ( $user_hide_attach_img && $allowattach > 0 ) |
| |
| { # checkbox to hide attached images in threads |
| |
| $my_show_avatar_opts .= $myprofile_hide_attach_img; |
| |
| $my_hide_attach_img = |
| |
| ${ $uid . $user }{'hide_attach_img'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ s/{yabb hide_attach_img}/$my_hide_attach_img/sm; |
| |
| } |
| |
| |
| $menucolors[2] = "titlebg"; |
| if ($user_hide_signat) { # checkbox to hide signatures in threads |
| &ProfileMenu; |
| $my_show_avatar_opts .= $myprofile_hide_signat; |
| |
| $my_hide_signat = |
| |
| ${ $uid . $user }{'hide_signat'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ s/{yabb hide_signat}/$my_hide_signat/sm; |
| |
| } |
| |
| |
| |
| if ( $user_hide_smilies_row && !$removenormalsmilies ) |
| |
| { # checkbox to hide the row of smilies below the the post-message-inputbox |
| |
| $my_show_avatar_opts .= $myprofile_hide_smilies_row; |
| |
| $my_hide_smilies_row = |
| |
| ${ $uid . $user }{'hide_smilies_row'} ? ' checked="checked"' : q{}; |
| |
| $my_show_avatar_opts =~ |
| |
| s/{yabb hide_smilies_row}/$my_hide_smilies_row/sm; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require Sources::ExtendedProfiles; |
| |
| $my_extprofile = ext_editprofile( $user, 'options' ); |
| |
| } |
| |
| |
| |
| my $cnnn = 0; |
| |
| for my $i ( 1 .. 5 ) { |
| |
| if ( ${ $uid . $user }{'numberformat'} == $i ) { |
| |
| $unfsl[$i] = ' selected="selected" '; |
| |
| $cnnn++; |
| |
| } |
| |
| else { $unfsl[$i] = q{}; } |
| |
| } |
| |
| for my $i ( 1 .. 5 ) { |
| |
| if ( $forumnumberformat == $i && $cnnn == 0 ) { |
| |
| $unfsl[$i] = ' selected="selected" '; |
| |
| } |
| |
| } |
| |
| |
| |
| my $cntm = 0; |
| |
| for my $j ( 1 .. 8 ) { |
| |
| if ( ${ $uid . $user }{'timeselect'} == $j ) { |
| |
| $tsl[$j] = ' selected="selected" '; |
| |
| $cntm++; |
| |
| } |
| |
| else { $tsl[$j] = q{}; } |
| |
| } |
| |
| for my $j ( 1 .. 8 ) { |
| |
| if ( $timeselected == $j && $cntm == 0 ) { |
| |
| $tsl[$j] = ' selected="selected" '; |
| |
| } |
| |
| } |
| |
| |
| |
| $my_num_option = qq~<option value="1"$unfsl[1]>10987.65</option> |
| |
| <option value="2"$unfsl[2]>10987,65</option> |
| |
| <option value="3"$unfsl[3]>10,987.65</option> |
| |
| <option value="4"$unfsl[4]>10.987,65</option> |
| |
| <option value="5"$unfsl[5]>10 987,65</option>~; |
| |
| |
| |
| $my_time_option = qq~<option value="1"$tsl[1]>$profile_txt{'480'}</option> |
| |
| <option value="5"$tsl[5]>$profile_txt{'484'}</option> |
| |
| <option value="4"$tsl[4]>$profile_txt{'483'}</option> |
| |
| <option value="8"$tsl[8]>$profile_txt{'483a'}</option> |
| |
| <option value="2"$tsl[2]>$profile_txt{'481'}</option> |
| |
| <option value="3"$tsl[3]>$profile_txt{'482'}</option> |
| |
| <option value="6"$tsl[6]>$profile_txt{'485'}</option>~; |
| |
| $my_timeformat = timeformat( $date, 1 ); |
| |
| |
| |
| if ($enabletz) { |
| |
| eval { |
| |
| require DateTime; |
| |
| require DateTime::TimeZone; |
| |
| }; |
| |
| my $user_tz_select = q{}; |
| |
| $default_tz ||= 'UTC'; |
| |
| if ( !$EVAL_ERROR ) { |
| |
| require DateTime; |
| |
| require DateTime::TimeZone; |
| |
| LoadLanguage('Countries'); |
| |
| $mytz = ${ $uid . $user }{'user_tz'} || $default_tz; |
| |
| my @mycntry = sort { $countrytime_txt{$a} cmp $countrytime_txt{$b} } keys %countrytime_txt; |
| |
| my $myselect = q{}; |
| |
| if ( $mytz eq 'UTC' ) { |
| |
| $myselect = ' selected="selected"'; |
| |
| } |
| |
| $user_tz_select = q~<br /><select name="user_tz" id="user_tz">~; |
| |
| $user_tz_select .= qq~<option value="UTC"$myselect>UTC</option>~; |
| |
| for my $i (@mycntry) { |
| |
| { |
| |
| if ( $i eq $mytz ) { |
| |
| $myselect = ' selected="selected"'; |
| |
| } |
| |
| else { $myselect = q{}; } |
| |
| $user_tz_select .= |
| |
| qq~<option value="$i"$myselect>$countrytime_txt{$i}</option>~; |
| |
| } |
| |
| } |
| |
| $user_tz_select .= q~</select>~; |
| |
| } |
| |
| else { |
| |
| $mytz = ${ $uid . $user }{'user_tz'} || $default_tz; |
| |
| $localopt = q{}; |
| |
| if ( $mytz eq 'local' ) { |
| |
| $myselectb = ' selected="selected"'; |
| |
| } |
| |
| elsif ( $mytz eq 'UTC' ) { |
| |
| $myselecta = ' selected="selected"'; |
| |
| } |
| |
| if ( $default_tz eq 'local' ) { |
| |
| $localopt = |
| |
| qq~\n<option value="local"$myselectb>$profile_txt{'372a'}</option>~; |
| |
| } |
| |
| $user_tz_select = q~<br /><select name="user_tz" id="user_tz">~; |
| |
| $user_tz_select .= qq~<option value="UTC"$myselecta>UTC</option>~; |
| |
| $user_tz_select .= $localopt; |
| |
| $user_tz_select .= q~</select>~; |
| |
| } |
| |
| $my_tz = $my_tz_select; |
| |
| $my_tz =~ s/{yabb my_user_tz}/$user_tz_select/sm; |
| |
| |
| |
| } |
| |
| else { $my_tz = q{}; } |
| |
| |
| my $scriptAction = qq~profileOptions2~; |
| $my_dynamic = |
| if ($view) { |
| ${ $uid . $user }{'dynamic_clock'} ? ' checked="checked"' : q{}; |
| $scriptAction = qq~myprofileOptions2~; |
| |
| $yytitle = qq~$profile_txt{'editmyprofile'} › $profile_txt{'818'}~; |
| $my_time = $myprofile_time; |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'818'}~; |
| $my_time =~ s/{yabb my_num_option}/$my_num_option/sm; |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| $my_time =~ s/{yabb my_time_option}/$my_time_option/sm; |
| } else { |
| $my_time =~ s/{yabb timeformat}/${$uid.$user}{'timeformat'}/sm; |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'818'}~; |
| $my_time =~ s/{yabb my_timeformat}/$my_timeformat/sm; |
| $profiletitle = qq~$profile_txt{'79'} ($user) › $profile_txt{'818'}~; |
| $my_time =~ s/{yabb my_tz_select}/$my_tz/sm; |
| $yynavigation = qq~› $profiletitle~; |
| $my_time =~ s/{yabb my_dynamic}/$my_dynamic/sm; |
| } |
| |
| |
| $showProfile .= qq~ |
| if ($allowpics && $upload_useravatar && $upload_avatargroup) { |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator"$my_allow_avatars>~; |
| $upload_useravatar = 0; |
| $showProfile .= $myprofile_options; |
| foreach my $av_gr (split(/, /, $upload_avatargroup)) { |
| $showProfile .= |
| if ($av_gr eq ${$uid.$user}{'position'}) { $upload_useravatar = 1; last; } |
| qq~ <textarea name="signature" id="signature" rows="4" cols="30" class="width_100">$signature</textarea><br />~; |
| foreach (split(/,/, ${$uid.$user}{'addgroups'})) { |
| $showProfile .= $myprofile_options_b; |
| if ($av_gr eq $_) { $upload_useravatar = 1; last; } |
| |
| } |
| $showProfile =~ s/{yabb usertext}/${$uid.$user}{'usertext'}/sm; |
| } |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| } |
| $showProfile =~ s/{yabb my_show_avatar}/$my_show_avatar/sm; |
| |
| $showProfile =~ s/{yabb MaxSigLen}/$MaxSigLen/gsm; |
| $showProfile .= qq~ |
| $showProfile =~ s/{yabb my_addmemgroup}/$my_addmemgroup/sm; |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator"~ . (($allowpics && $upload_useravatar) ? qq~ enctype="multipart/form-data"~ : "") . qq~> |
| $showProfile =~ s/{yabb my_time}/$my_time/sm; |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| $showProfile =~ s/{yabb my_notify}/$my_notify/sm; |
| <tr> |
| $showProfile =~ s/{yabb my_reverse}/$my_reverse/sm; |
| <td colspan="2" class="catbg"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b></td> |
| $showProfile =~ s/{yabb my_return_to}/$return_to/sm; |
| </tr> |
| $showProfile =~ s/{yabb my_template}/$my_template/sm; |
| <tr class="windowbg">~; |
| $showProfile =~ s/{yabb my_show_lang}/$my_show_lang/sm; |
| |
| $showProfile =~ s/{yabb my_show_avatar_opts}/$my_show_avatar_opts/sm; |
| if ($allowpics) { |
| $showProfile =~ s/{yabb my_extprofile}/$my_extprofile/sm; |
| opendir(DIR, "$facesdir") || fatal_error("cannot_open_dir","($facesdir)!<br />$profile_txt{'681'}", 1); |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| @contents = readdir(DIR); |
| |
| closedir(DIR); |
| ## Mod Hook showProfile_options ## |
| $images = ''; |
| |
| foreach $line (sort @contents) { |
| if ( !$view ) { |
| ($name, $extension) = split(/\./, $line); |
| $yymain .= $showProfile; |
| $checked = ''; |
| template(); |
| if ($line eq ${$uid.$user}{'userpic'}) { $checked = ' selected="selected"'; } |
| } |
| if (${$uid.$user}{'userpic'} =~ m~\Ahttps?://~ && $line eq 'blank.gif') { $checked = ' selected="selected" '; } |
| return; |
| 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~; |
| |
| } |
| |
| } |
| |
| } |
| |
| my ($pic,$tmp,$s,$alt); |
| |
| $tmp = $facesurl; |
| |
| $tmp =~ /^(http(s?):\/\/)/; |
| |
| ($tmp,$s) = ($1,$2); |
| |
| if (${$uid.$user}{'userpic'} =~ m~\Ahttps?://~) { |
| |
| $pic = ${$uid.$user}{'userpic'}; |
| |
| $checked = ' checked="checked" '; |
| |
| $tmp = ${$uid.$user}{'userpic'}; |
| |
| $alt = $profile_txt{'473'} if $upload_useravatar; |
| |
| } else { |
| |
| $pic = "$facesurl/${$uid.$user}{'userpic'}"; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <td align="left"><label for="userpic"><b>$profile_txt{'229'}:</b></label><br /><span class="small"><label for="userpic">$profile_txt{'474'}</label><label for="userpicpersonalcheck">$profile_txt{'475'}</label>~ . ($upload_useravatar ? qq~<br /> |
| |
| $profile_txt{'476'} $avatar_limit KB~ : "") . qq~<br /> |
| |
| $profile_txt{'477'}</span></td> |
| |
| <td align="left"> |
| |
| <script language="JavaScript1.2" type="text/javascript"> |
| |
| <!-- |
| |
| function showimage(x) { |
| |
| if (!document.images) return; |
| |
| var source; |
| |
| if (x == 1 && document.getElementsByName('userpicpersonalcheck')[0].checked == true) { |
| |
| UserPicUrl = document.getElementsByName('userpicpersonal')[0].value; |
| |
| document.getElementsByName('userpicpersonal')[0].value = 'http$s://'; |
| |
| document.getElementsByName('userpicpersonalcheck')[0].checked = false; |
| |
| } |
| |
| if (x == 1) { |
| |
| source = "$facesurl/"+document.creator.userpic.options[document.creator.userpic.selectedIndex].value; |
| |
| } else { |
| |
| document.creator.userpic.options[0].selected = true; |
| |
| source = document.getElementsByName('userpicpersonal')[0].value; |
| |
| if (!source || source == 'http$s://') source = "$facesurl/blank.gif"; |
| |
| } |
| |
| document.images.icons.style.display = 'none'; |
| |
| document.images.icons.width = ''; |
| |
| document.images.icons.height = ''; |
| |
| document.images.icons.src = source; |
| |
| resize_time = 2; |
| |
| img_resize_names = new Array ('avatar_img_resize_1'); |
| |
| resize_images(); |
| |
| } |
| |
| // --> |
| |
| </script> |
| |
| <select name="userpic" id="userpic" size="6" onchange="showimage(1);"> |
| |
| $images |
| |
| </select> <img src="$pic" id="icons" name="avatar_img_resize" alt="$alt" border="0" hspace="15" style="display:none" /><br /> |
| |
| <br /> |
| |
| <input type="checkbox" name="userpicpersonalcheck" id="userpicpersonalcheck" $checked onclick="if(this.checked==false){UserPicUrl=document.getElementsByName('userpicpersonal')[0].value;document.getElementsByName('userpicpersonal')[0].value='http$s://';}else{document.getElementsByName('userpicpersonal')[0].value=UserPicUrl;}showimage(2);" /> <input type="text" name="userpicpersonal" size="40" value="$tmp" onkeyup="document.getElementsByName('userpicpersonalcheck')[0].checked=true;showimage(2);" />~ . ($upload_useravatar ? qq~<br /> |
| |
| <br /> |
| |
| <input type="file" name="file_avatar" size="50" />~ : "") . qq~ |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| $signature = ${$uid.$user}{'signature'}; |
| |
| $signature =~ s/<br.*?>/\n/g; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="usertext"><b>$profile_txt{'228'}: </b></label></td> |
| |
| <td align="left"><input type="text" name="usertext" id="usertext" size="40" value="${$uid.$user}{'usertext'}" maxlength="50" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="signature"><b>$profile_txt{'85'}:</b><br /><span class="small">$profile_txt{'606'}</span></label></td> |
| |
| <td align="left"><textarea name="signature" id="signature" rows="4" cols="30" style="width: 100%">$signature</textarea><br /> |
| |
| <span class="small">$profile_txt{'664'} <input value="$MaxSigLen" size="3" name="msgCL" class="windowbg" style="border: 0px; width: 40px; padding: 1px; font-size: 11px;" readonly="readonly" /></span><br /><br /> |
| |
| <script type="text/javascript" language="JavaScript"> |
| |
| <!-- |
| |
| var supportsKeys = false; |
| |
| function tick() { |
| |
| calcCharLeft(document.forms[0]); |
| |
| if (!supportsKeys) { timerID = setTimeout("tick()", 1500); } |
| |
| } |
| |
| |
| |
| 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> |
| |
| </tr>~; |
| |
| |
| |
| if ($addmemgroup_enabled > 1 && %NoPost) { |
| |
| my ($addmemgroup, $selsize) = &DrawGroups(${$uid.$user}{'addgroups'}, ${$uid.$user}{'position'}, 0); |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="joinmemgroup"><b>$profile_txt{'910'}:</b><br /><span class="small">$profile_txt{'910a'}</span></label></td> |
| |
| <td align="left"> |
| |
| <select name="joinmemgroup" id="joinmemgroup" size="$selsize" multiple="multiple"> |
| |
| $addmemgroup |
| |
| </select> |
| |
| </td> |
| |
| </tr>~ if $addmemgroup; |
| |
| } |
| |
| |
| |
| if (${$uid.$user}{'numberformat'} == 1) { $unfsl1 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'numberformat'} == 2) { $unfsl2 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'numberformat'} == 3) { $unfsl3 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'numberformat'} == 4) { $unfsl4 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'numberformat'} == 5) { $unfsl5 = ' selected="selected" '; } |
| |
| elsif ($forumnumberformat == 1) { $unfsl1 = ' selected="selected" '; } |
| |
| elsif ($forumnumberformat == 2) { $unfsl2 = ' selected="selected" '; } |
| |
| elsif ($forumnumberformat == 3) { $unfsl3 = ' selected="selected" '; } |
| |
| elsif ($forumnumberformat == 4) { $unfsl4 = ' selected="selected" '; } |
| |
| elsif ($forumnumberformat == 5) { $unfsl5 = ' selected="selected" '; } |
| |
| if (${$uid.$user}{'timeselect'} == 7) { $tsl7 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 6) { $tsl6 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 5) { $tsl5 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 4) { $tsl4 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 3) { $tsl3 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 2) { $tsl2 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 1) { $tsl1 = ' selected="selected" '; } |
| |
| elsif (${$uid.$user}{'timeselect'} == 8) { $tsl8 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 8) { $tsl8 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 7) { $tsl7 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 6) { $tsl6 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 5) { $tsl5 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 4) { $tsl4 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 3) { $tsl3 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 2) { $tsl2 = ' selected="selected" '; } |
| |
| elsif ($timeselected == 1) { $tsl1 = ' selected="selected" '; } |
| |
| |
| |
| my @usertimeoffset = split(/\./, ${$uid.$user}{'timeoffset'}); |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="usernumberformat"><b>$profile_txt{'usernumbformat'}:</b></label></td> |
| |
| <td align="left"> |
| |
| <select name="usernumberformat" id="usernumberformat" size="1"> |
| |
| <option value="1"$unfsl1>10987.65</option> |
| |
| <option value="2"$unfsl2>10987,65</option> |
| |
| <option value="3"$unfsl3>10,987.65</option> |
| |
| <option value="4"$unfsl4>10.987,65</option> |
| |
| <option value="5"$unfsl5>10 987,65</option> |
| |
| </select> |
| |
| </td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="usertimeselect"><b>$profile_txt{'486'}:</b><br /> |
| |
| <span class="small">$profile_txt{'479'}</span></label></td> |
| |
| <td align="left"> |
| |
| <select name="usertimeselect" id="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="8"$tsl8>$profile_txt{'483a'}</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 align="left"><label for="timeformat"><b>$profile_txt{'486a'}:</b></label></td> |
| |
| <td align="left"><input type="text" name="timeformat" id="timeformat" size="40" value="${$uid.$user}{'timeformat'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="usertimesign"><b>$profile_txt{'371'}:</b><br /><span class="small">$profile_txt{'372'}</span></label></td> |
| |
| <td align="left"><span class="small">$profile_txt{'373'}:<br /><b>~ . &timeformat($date,1) . qq~</b><br /><br /></span><select name="usertimesign" id="usertimesign"><option value="">+</option><option value="-"~ . ($usertimeoffset[0] < 0 ? ' selected="selected"' : '') . qq~>-</option></select> |
| |
| <select name="usertimehour" id="usertimehour">~; |
| |
| for (my $i = 0; 24 > $i; $i++) { |
| |
| $i = sprintf("%02d", $i); |
| |
| $showProfile .= qq~\n <option value="$i"~ . (($usertimeoffset[0] == $i || $usertimeoffset[0] == -$i) ? ' selected="selected"' : '') . qq~>$i</option>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| </select> : <select name="usertimemin">~; |
| |
| for (my $i = 0; 60 > $i; $i++) { |
| |
| my $j = $i / 60; |
| |
| $j = (split(/\./, $j))[1] || 0; |
| |
| $showProfile .= qq~\n <option value="$j"~ . ($usertimeoffset[1] eq $j ? ' selected="selected"' : '') . qq~>~ . sprintf("%02d", $i) . qq~</option>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| </select> |
| |
| </td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="dsttimeoffset"><b>$profile_txt{'519'}</b></label></td> |
| |
| <td align="left"><input type="checkbox" name="dsttimeoffset" id="dsttimeoffset" value="1"~ . (${$uid.$user}{'dsttimeoffset'} ? ' checked="checked"' : '') . qq~ /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="dynamic_clock"><b>$profile_txt{'520'}</b><br /><span class="small">$profile_txt{'521'}</span></label></td> |
| |
| <td align="left"><input type="checkbox" name="dynamic_clock" id="dynamic_clock" value="1"~ . (${$uid.$user}{'dynamic_clock'} ? ' checked="checked"' : '') . qq~ /></td> |
| |
| </tr>~; |
| |
| |
| |
| # This is only for update, when comming from YaBB lower or equal version 2.2.3 |
| |
| # I think it can be deleted around version 2.4.0 without causing mayor issues (deti). |
| |
| if ($enable_notifications eq '') { $enable_notifications = $enable_notification ? 3 : 0; } |
| |
| # End update workaround |
| |
| if ($NewNotificationAlert || $enable_notifications == 1 || $enable_notifications == 3) { |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left" valign="top"><label for="onlinealert"><b>$profile_txt{'onlinealert'}:</b></label></td> |
| |
| <td align="left">~; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <input type="checkbox" value="1" name="onlinealert" id="onlinealert"~ . (${$uid.$user}{'onlinealert'} ? ' checked="checked"' : '') . qq~ /> <label for="onlinealert">$profile_txt{'onlinealertexplain'}</label>~ if $NewNotificationAlert; |
| |
| |
| |
| if ($enable_notifications == 1 || $enable_notifications == 3) { |
| |
| $showProfile .= qq~<br /> |
| |
| <br />~ if $NewNotificationAlert; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <label for="notify_N">$profile_txt{'326'}</label>? <select name="notify_N" id="notify_N"> |
| |
| <option value="0"~ . ((!${$uid.$user}{'notify_me'} || ${$uid.$user}{'notify_me'} == 2) ? '' : ' selected="selected"') . qq~>$profile_txt{'164'}</option> |
| |
| <option value="1"~ . ((${$uid.$user}{'notify_me'} == 1 || ${$uid.$user}{'notify_me'} == 3) ? ' selected="selected"' : '') . qq~>$profile_txt{'163'}</option> |
| |
| </select>~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if ($ttsureverse) { |
| |
| ${$uid.$user}{'reversetopic'} = $ttsreverse unless exists(${$uid.$user}{'reversetopic'}); |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="reversetopic"><b>$profile_txt{'810'}</b><br /><span class="small">$profile_txt{'811'}</span></label></td> |
| |
| <td align="left" valign="top"><input type="checkbox" name="reversetopic" id="reversetopic"~ . (${$uid.$user}{'reversetopic'} ? qq~ checked="checked"~ : '') . qq~ /></td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| foreach my $curtemplate (sort{ $templateset{$a} cmp $templateset{$b} } keys %templateset) { |
| |
| $selected = ''; |
| |
| if ($curtemplate eq ${$uid.$user}{'template'}) { $selected = qq~ selected="selected"~; $akttemplate = $curtemplate; } |
| |
| $drawndirs .= qq~<option value="$curtemplate"$selected>$curtemplate</option>\n~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="usertemplate"><b>$profile_txt{'814'}</b><br /><span class="small">$profile_txt{'815'}</span></label></td> |
| |
| <td align="left"><select name="usertemplate" id="usertemplate">$drawndirs</select></td> |
| |
| </tr>~; |
| |
| |
| |
| opendir(DIR, $langdir); |
| |
| my @lfilesanddirs = readdir(DIR); |
| |
| close(DIR); |
| |
| foreach my $fld (sort {lc($a) cmp lc($b)} @lfilesanddirs) { |
| |
| if (-e "$langdir/$fld/Main.lng") { |
| |
| my $displang = $fld; |
| |
| $displang =~ s~(.+?)\_(.+?)$~$1 ($2)~gi; |
| |
| if (${$uid.$user}{'language'} eq $fld) { $drawnldirs .= qq~<option value="$fld" selected="selected">$displang</option>~; } |
| |
| else { $drawnldirs .= qq~<option value="$fld">$displang</option>~; } |
| |
| } |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left"><label for="userlanguage"><b>$profile_txt{'817'}</b><br /><span class="small">$profile_txt{'815'}</span></label></td> |
| |
| <td align="left"><select name="userlanguage" id="userlanguage">$drawnldirs</select></td> |
| |
| </tr>~; |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| $showProfile .= &ext_editprofile($user,"options"); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" /><br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form>~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| } |
| |
| |
| sub ModifyProfileBuddy { |
| sub ModifyProfileBuddy { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| |
| $menucolors[3] = 'selected-bg'; |
| |
| ProfileMenu(); |
| |
| |
| |
| my $scriptAction = q~profileBuddy2~; |
| |
| if ($view) { |
| |
| $scriptAction = q~myprofileBuddy2~; |
| |
| $yytitle = |
| |
| qq~$profile_txt{'editmyprofile'} › $profile_buddy_list{'buddylist'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'editmyprofile'} ($user) › $profile_buddy_list{'buddylist'}~; |
| |
| $yynavigation = |
| |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| |
| else { |
| |
| $yytitle = |
| |
| qq~$profile_txt{'79'} › $profile_buddy_list{'buddylist'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'79'} ($user) › $profile_buddy_list{'buddylist'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| |
| |
| if ( !$yyjavascript ) { $yyjavascript = q{}; } |
| |
| $yyjavascript .= qq~ |
| |
| function imWin() { |
| |
| window.open('$scripturl?action=imlist;sort=mlletter;toid=buddylist','Blist','status=no,height=345,width=464,menubar=no,toolbar=no,top=50,left=50,scrollbars=no'); |
| |
| } |
| |
| // removes a user from the list |
| |
| function removeUser(oElement) { |
| |
| var oList = oElement.options; |
| |
| var indexToRemove = oList.selectedIndex; |
| |
| if (oList.length > 1 || (oList.length == 1 && oList[0].value != '0')) { |
| |
| //alert('element [' + oElement.options[indexToRemove].value + ']'); |
| |
| if (confirm("$profile_buddy_list{'removealert'}")) { |
| |
| oElement.remove(indexToRemove); |
| |
| } |
| |
| } |
| |
| } |
| |
| function selectblNames() { |
| |
| var oList = document.getElementById('buddylist'); |
| |
| for (var i = 0; i < oList.options.length; i++) { |
| |
| oList.options[i].selected = true; |
| |
| } |
| |
| } |
| |
| ~; |
| |
| |
| $menucolors[3] = "titlebg"; |
| my $buildBuddyList = q{}; |
| &ProfileMenu; |
| if ( ${ $uid . $user }{'buddylist'} ) { |
| |
| my @buddies = split /\|/xsm, ${ $uid . $user }{'buddylist'}; |
| |
| chomp @buddies; |
| |
| foreach my $buddy (@buddies) { |
| |
| LoadUser($buddy); |
| |
| if ( ${ $uid . $buddy }{'realname'} ) { |
| |
| $buildBuddyList .= |
| |
| qq~<option value="$buddy">${$uid.$buddy}{'realname'}</option>~; |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| my $scriptAction = qq~profileBuddy2~; |
| $showProfile .= qq~ |
| if ($view) { |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" onsubmit="javascript: selectblNames();">~; |
| $scriptAction = qq~myprofileBuddy2~; |
| $showProfile .= $myprofile_buddy; |
| $yytitle = qq~$profile_txt{'editmyprofile'} › $profile_buddy_list{'buddylist'}~; |
| |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user) › $profile_buddy_list{'buddylist'}~; |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| $showProfile =~ s/{yabb buildBuddyList}/$buildBuddyList/sm; |
| } else { |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| $yytitle = qq~$profile_txt{'79'} › $profile_buddy_list{'buddylist'}~; |
| |
| $profiletitle = qq~$profile_txt{'79'} ($user) › $profile_buddy_list{'buddylist'}~; |
| if ( !$view ) { |
| $yynavigation = qq~› $profiletitle~; |
| $yymain .= $showProfile; |
| } |
| template(); |
| |
| } |
| if (!$yyjavascript) { $yyjavascript = ''; } |
| return; |
| $yyjavascript .= qq~ |
| |
| function imWin() { |
| |
| window.open('$scripturl?action=imlist;sort=mlletter;toid=buddylist','Blist','status=no,height=345,width=464,menubar=no,toolbar=no,top=50,left=50,scrollbars=no'); |
| |
| } |
| |
| // removes a user from the list |
| |
| function removeUser(oElement) { |
| |
| var oList = oElement.options; |
| |
| var indexToRemove = oList.selectedIndex; |
| |
| if (oList.length > 1 || (oList.length == 1 && oList[0].value != '0')) { |
| |
| //alert('element [' + oElement.options[indexToRemove].value + ']'); |
| |
| if (confirm("$profile_buddy_list{'removealert'}")) { |
| |
| oElement.remove(indexToRemove); |
| |
| } |
| |
| } |
| |
| } |
| |
| function selectblNames() { |
| |
| var oList = document.getElementById('buddylist'); |
| |
| for (var i = 0; i < oList.options.length; i++) { |
| |
| oList.options[i].selected = true; |
| |
| } |
| |
| } |
| |
| ~; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" onsubmit="javascript: selectblNames();"> |
| |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| |
| <tr> |
| |
| <td colspan="2" class="catbg"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b></td> |
| |
| </tr>~; |
| |
| |
| |
| my $buildBuddyList = ''; |
| |
| if(${$uid.$user}{'buddylist'}) { |
| |
| my @buddies = split(/\|/, ${$uid.$user}{'buddylist'}); |
| |
| chomp @buddies; |
| |
| foreach my $buddy (@buddies) { |
| |
| &LoadUser($buddy); |
| |
| $buildBuddyList .= qq~<option value="$buddy">${$uid.$buddy}{'realname'}</option>~ if ${$uid.$buddy}{'realname'}; |
| |
| } |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><b>$profile_buddy_list{'buddylist'}</b><br /><span class="small">$profile_buddy_list{'explain'}</span></td> |
| |
| <td align="left"><select name="buddylist" id="buddylist" multiple="multiple" size="3" style="width: 250px; height: 150px;" ondblclick="removeUser(this);">$buildBuddyList</select> |
| |
| <br /><span class="small"><a href="javascript: void(0);" onclick="imWin();">$profile_buddy_list{'add'}</a></span> |
| |
| </td> |
| |
| </tr> |
| |
| ~; |
| |
| |
| |
| $showProfile .= qq~<tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" /><br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form>~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| } |
| |
| |
| sub ModifyProfileIM { |
| sub ModifyProfileIM { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| |
| $menucolors[4] = 'selected-bg'; |
| |
| ProfileMenu(); |
| |
| |
| |
| $yyjavascript .= qq~ |
| |
| function imWin() { |
| |
| window.open('$scripturl?action=imlist;sort=mlletter;toid=ignore','Ilist','status=no,height=345,width=464,menubar=no,toolbar=no,top=50,left=50,scrollbars=no'); |
| |
| } |
| |
| // removes a user from the list |
| |
| function removeUser(oElement) { |
| |
| var oList = oElement.options; |
| |
| var indexToRemove = oList.selectedIndex; |
| |
| if (oList.length > 1 || (oList.length == 1 && oList[0].value != '0')) { |
| |
| //alert('element [' + oElement.options[indexToRemove].value + ']'); |
| |
| if (confirm("$profile_buddy_list{'removealert'}")) { |
| |
| oElement.remove(indexToRemove); |
| |
| } |
| |
| } |
| |
| } |
| |
| function selectINames() { |
| |
| var oList = document.getElementById('ignore'); |
| |
| for (var i = 0; i < oList.options.length; i++) { |
| |
| oList.options[i].selected = true; |
| |
| } |
| |
| } |
| |
| ~; |
| |
| |
| |
| my $scriptAction = q~profileIM2~; |
| |
| if ($view) { |
| |
| $scriptAction = q~myprofileIM2~; |
| |
| $yytitle = |
| |
| qq~$profile_txt{'editmyprofile'} › $profile_imtxt{'38'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{'editmyprofile'} ($user) › $profile_imtxt{'38'}~; |
| |
| $yynavigation = |
| |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| |
| else { |
| |
| $yytitle = qq~$profile_txt{79} › $profile_imtxt{'38'}~; |
| |
| $profiletitle = |
| |
| qq~$profile_txt{79} ($user) › $profile_imtxt{'38'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| my $ignoreallChecked = q{}; |
| |
| if ( ${ $uid . $user }{'im_ignorelist'} eq q{*} ) { |
| |
| $ignoreallChecked = ' checked="checked"'; |
| |
| } |
| |
| if ( ${ $uid . $user }{'im_ignorelist'} |
| |
| && ${ $uid . $user }{'im_ignorelist'} ne q{*} ) |
| |
| { |
| |
| my @ignoreList = split /\|/xsm, ${ $uid . $user }{'im_ignorelist'}; |
| |
| chomp @ignoreList; |
| |
| foreach my $ignoreName (@ignoreList) { |
| |
| LoadUser($ignoreName); |
| |
| my $ignoreUser; |
| |
| if ( ${ $uid . $ignoreName }{'realname'} ) { |
| |
| $ignoreUser = ${ $uid . $ignoreName }{'realname'}; |
| |
| } |
| |
| else { $ignoreUser = $ignoreName; } |
| |
| $ignoreName = cloak($ignoreName); |
| |
| $my_ignore .= |
| |
| qq~\n <option value="$ignoreName">$ignoreUser</option>~; |
| |
| } |
| |
| } |
| |
| |
| |
| if ( $enable_notifications > 1 ) { |
| |
| $my_PM_notifyme = |
| |
| ${ $uid . $user }{'notify_me'} < 2 ? ' selected="selected"' : q{}; |
| |
| $my_PM_notifyme_2 = |
| |
| ${ $uid . $user }{'notify_me'} > 1 ? ' selected="selected"' : q{}; |
| |
| |
| |
| $my_PMnotify = $myprofile_PMnotify; |
| |
| $my_PMnotify =~ s/{yabb my_PM_notifyme}/$my_PM_notifyme/sm; |
| |
| $my_PMnotify =~ s/{yabb my_PM_notifyme_2}/$my_PM_notifyme_2/sm; |
| |
| } |
| |
| |
| $menucolors[4] = "titlebg"; |
| if ( ${ $uid . $user }{'im_popup'} ) { |
| &ProfileMenu; |
| $enable_userimpopup = ' checked="checked"'; |
| |
| } |
| |
| if ( ${ $uid . $user }{'im_imspop'} ) { |
| |
| $popup_userim = 'checked="checked"'; |
| |
| } |
| |
| my $pmviewMessChecked; |
| |
| if ( ${ $uid . $user }{'pmviewMess'} ) { |
| |
| $pmviewMessChecked = ' checked="checked"'; |
| |
| } |
| |
| if ($extendedprofiles) { |
| |
| require Sources::ExtendedProfiles; |
| |
| $my_extprofile .= ext_editprofile( $user, 'im' ); |
| |
| } |
| |
| |
| $yyjavascript .= qq~ |
| $showProfile .= qq~ |
| function imWin() { |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" onsubmit="javascript:selectINames();" >~; |
| window.open('$scripturl?action=imlist;sort=mlletter;toid=ignore','Ilist','status=no,height=345,width=464,menubar=no,toolbar=no,top=50,left=50,scrollbars=no'); |
| $showProfile .= $myprofile_PMpref; |
| } |
| |
| // removes a user from the list |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| function removeUser(oElement) { |
| $showProfile =~ s/{yabb my_ignore}/$my_ignore/sm; |
| var oList = oElement.options; |
| $showProfile =~ s/{yabb enable_userimpopup}/$enable_userimpopup/sm; |
| var indexToRemove = oList.selectedIndex; |
| $showProfile =~ s/{yabb popup_userim}/$popup_userim/sm; |
| if (oList.length > 1 || (oList.length == 1 && oList[0].value != '0')) { |
| $showProfile =~ s/{yabb pmviewMessChecked}/$pmviewMessChecked/sm; |
| //alert('element [' + oElement.options[indexToRemove].value + ']'); |
| $showProfile =~ s/{yabb my_extprofile}/$my_extprofile/sm; |
| if (confirm("$profile_buddy_list{'removealert'}")) { |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| oElement.remove(indexToRemove); |
| $showProfile =~ s/{yabb my_PMnotify}/$my_PMnotify/sm; |
| } |
| |
| } |
| if ( !$view ) { |
| } |
| $yymain .= $showProfile; |
| function selectINames() { |
| template(); |
| var oList = document.getElementById('ignore'); |
| } |
| for (var i = 0; i < oList.options.length; i++) { |
| return; |
| oList.options[i].selected = true; |
| |
| } |
| |
| } |
| |
| ~; |
| |
| |
| |
| my $scriptAction = qq~profileIM2~; |
| |
| if ($view) { |
| |
| $scriptAction = qq~myprofileIM2~; |
| |
| $yytitle = qq~$profile_txt{'editmyprofile'} › $profile_imtxt{'38'}~; |
| |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user) › $profile_imtxt{'38'}~; |
| |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } else { |
| |
| $yytitle = qq~$profile_txt{79} › $profile_imtxt{'38'}~; |
| |
| $profiletitle = qq~$profile_txt{79} ($user) › $profile_imtxt{'38'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$INFO{'username'}};sid=$INFO{'sid'}" method="post" name="creator" onsubmit="javascript:selectINames();" > |
| |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| |
| <tr> |
| |
| <td colspan="2" class="catbg" align="left"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" valign="top" align="left"><b>$profile_txt{'325'}:</b><br /><span class="small">$profile_txt{'ignoreexplain'}</span></td> |
| |
| <td align="left"> |
| |
| <select name="ignore" id="ignore" size="4" multiple="multiple" style="width:250px;" ondblclick="removeUser(this);" >~; |
| |
| |
| |
| my $ignoreallChecked = ""; |
| |
| if (${$uid.$user}{'im_ignorelist'} eq "*") { $ignoreallChecked = ' checked="checked"'; } |
| |
| if (${$uid.$user}{'im_ignorelist'} && ${$uid.$user}{'im_ignorelist'} ne "*") { |
| |
| my @ignoreList = split('\|', ${$uid.$user}{'im_ignorelist'}); |
| |
| chomp @ignoreList; |
| |
| foreach my $ignoreName (@ignoreList) { |
| |
| &LoadUser($ignoreName); |
| |
| my $ignoreUser; |
| |
| if(${$uid.$ignoreName}{'realname'}) {$ignoreUser = ${$uid.$ignoreName}{'realname'};} |
| |
| else {$ignoreUser = $ignoreName;} |
| |
| $ignoreName = &cloak($ignoreName); |
| |
| $showProfile .= qq~\n <option value="$ignoreName">$ignoreUser</option>~; |
| |
| } |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| </select> |
| |
| <br /> |
| |
| <input type="checkbox" name="ignoreall" id="ignoreall" $ignoreallChecked /> <label for="ignoreall">$profile_txt{'ignoreall'}</label><br /> |
| |
| <span class="small"><a href="javascript:void(0);" onclick="imWin();">$profile_txt{'ignorelistadd'}</a></span> |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| # This is only for update, when comming from YaBB lower or equal version 2.2.3 |
| |
| # I think it can be deleted around version 2.4.0 without causing mayor issues (deti). |
| |
| if ($enable_notifications eq '') { $enable_notifications = $enable_notification ? 3 : 0; } |
| |
| # End update workaround |
| |
| |
| |
| if ($enable_notifications > 1) { |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td align="left" valign="top"><label for="notify_PM"><b>$profile_txt{'327'}:</b></label></td> |
| |
| <td align="left"> |
| |
| <select name="notify_PM" id="notify_PM"> |
| |
| <option value="0"~ . (${$uid.$user}{'notify_me'} < 2 ? '' : ' selected="selected"') . qq~>$profile_txt{'164'}</option> |
| |
| <option value="1"~ . (${$uid.$user}{'notify_me'} > 1 ? ' selected="selected"' : '') . qq~>$profile_txt{'163'}</option> |
| |
| </select> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if (${$uid.$user}{'im_popup'}) { $enable_userimpopup = ' checked="checked"'; } |
| |
| if (${$uid.$user}{'im_imspop'}) { $popup_userim = 'checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="userpopup"><b>$profile_imtxt{'05'}</b></label></td> |
| |
| <td align="left"><input type="checkbox" name="userpopup" id="userpopup" value="1"$enable_userimpopup /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="popupims"><b>$profile_imtxt{'53'}</b></label></td> |
| |
| <td align="left"><input type="checkbox" name="popupims" id="popupims" value="1"$popup_userim /></td> |
| |
| </tr>~; |
| |
| if($enable_PMcontrols || $enable_PMprev) { |
| |
| my $pmmessprevChecked; |
| |
| if (${$uid.$user}{'pmmessprev'}) { $pmmessprevChecked = ' checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="pmmessprev"><b>$profile_txt{'enabprev'}: </b><br /><span class="small">$profile_txt{'prevexplain'}</span></label></td> |
| |
| <td align="left"><input type="checkbox" name="pmmessprev" id="pmmessprev" value="1"$pmmessprevChecked /></td> |
| |
| </tr>~; |
| |
| } |
| |
| if($enable_PMcontrols || $enable_PMviewMess) { |
| |
| my $pmviewMessChecked; |
| |
| if (${$uid.$user}{'pmviewMess'}) { $pmviewMessChecked = ' checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="pmviewMess"><b>$profile_txt{'viewmess'}: </b><br /><span class="small">$profile_txt{'viewmessexplain'}</span></label></td> |
| |
| <td align="left"><input type="checkbox" name="pmviewMess" id="pmviewMess" value="1"$pmviewMessChecked /></td> |
| |
| </tr>~; |
| |
| } |
| |
| if ($enable_PMcontrols || $enable_PMActprev) { |
| |
| my $pmactprevChecked; |
| |
| if (${$uid.$user}{'pmactprev'}) { $pmactprevChecked = ' checked="checked"'; } |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="pmactprev"><b>$profile_txt{'actprev'}: </b><br /><span class="small">$profile_txt{'actprevexplain'}</span></label></td> |
| |
| <td align="left"><input type="checkbox" name="pmactprev" id="pmactprev" value="1"$pmactprevChecked /></td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| $showProfile .= &ext_editprofile($user,"im"); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" /><br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form>~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| } |
| |
| |
| sub ModifyProfileAdmin { |
| sub ModifyProfileAdmin { |
| &is_admin_or_gmod; |
| is_admin_or_gmod(); |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| $menucolors[5] = 'selected-bg'; |
| |
| ProfileMenu(); |
| |
| |
| |
| my @grps = sort keys %Group; |
| |
| my @memstat = (); |
| |
| $mygrp = 0; |
| |
| for ( @grps ) { |
| |
| if ( ${ $uid . $user }{'position'} eq $_ ) { |
| |
| @memstat = split /\|/xsm, $Group{$_}; |
| |
| $tt = $memstat[0]; |
| |
| $mygrp = 1; |
| |
| } |
| |
| } |
| |
| if ( $mygrp != 1) { |
| |
| if ( ${ $uid . $user }{'position'} ) { |
| |
| $ttgrp = ${ $uid . $user }{'position'}; |
| |
| ( $tt, undef ) = split /\|/xsm, $NoPost{$ttgrp}, 2; |
| |
| } |
| |
| else { $tt = ${ $uid . $user }{'position'}; } |
| |
| } |
| |
| |
| &SidCheck($action); |
| $regreason = ${ $uid . $user }{'regreason'}; |
| &PrepareProfile; |
| $regreason =~ s/<br \/>/\n/gsm; |
| |
| |
| $menucolors[5] = "titlebg"; |
| my ( $tta, $selsize ); |
| &ProfileMenu; |
| if (%NoPost) { |
| |
| ( $tta, $selsize ) = |
| |
| DrawGroups( ${ $uid . $user }{'addgroups'}, q{}, 1 ); |
| |
| } |
| |
| |
| ($MemStatAdmin, $MemStarNumAdmin, $MemStarPicAdmin, $MemTypeColAdmin) = split(/\|/, $Group{"Administrator"}); |
| $userlastlogin = timeformat( ${ $uid . $user }{'lastonline'} ); |
| ($MemStatGMod, $MemStarNumGMod, $MemStarPicGMod, $MemTypeColGMod) = split(/\|/, $Group{"Global Moderator"}); |
| $userlastpost = timeformat( ${ $uid . $user }{'lastpost'} ); |
| ($MemStatMod, $MemStarNumMod, $MemStarPicMod, $MemTypeColMod) = split(/\|/, $Group{"Moderator"}); |
| $userlastim = timeformat( ${ $uid . $user }{'lastim'} ); |
| |
| if ( $userlastlogin eq q{} ) { $userlastlogin = $profile_txt{'470'}; } |
| if (${$uid.$user}{'position'} eq 'Administrator') { $tt = $MemStatAdmin; } |
| if ( $userlastpost eq q{} ) { $userlastpost = $profile_txt{'470'}; } |
| elsif (${$uid.$user}{'position'} eq 'Global Moderator') { $tt = $MemStatGMod; } |
| if ( $userlastim eq q{} ) { $userlastim = $profile_txt{'470'}; } |
| elsif (${$uid.$user}{'position'}) { $ttgrp = ${$uid.$user}{'position'}; ($tt, undef) = split(/\|/, $NoPost{$ttgrp}, 2); } |
| |
| else { $tt = ${$uid.$user}{'position'}; } |
| my $scriptAction = q~profileAdmin2~; |
| |
| if ($view) { |
| $regreason = ${$uid.$user}{'regreason'}; |
| $scriptAction = q~myprofileAdmin2~; |
| $regreason =~ s~<br \/>~\n~g; |
| $yytitle = |
| |
| qq~$profile_txt{'editmyprofile'} › $profile_txt{'820'}~; |
| my ($tta, $selsize); |
| $profiletitle = |
| if (%NoPost) { |
| qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'820'}~; |
| ($tta, $selsize) = &DrawGroups(${$uid.$user}{'addgroups'}, '', 1); |
| $yynavigation = |
| } |
| qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| |
| } |
| $userlastlogin = &timeformat(${$uid.$user}{'lastonline'}); |
| else { |
| $userlastpost = &timeformat(${$uid.$user}{'lastpost'}); |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'820'}~; |
| $userlastim = &timeformat(${$uid.$user}{'lastim'}); |
| $profiletitle = |
| if ($userlastlogin eq '') { $userlastlogin = $profile_txt{'470'}; } |
| qq~$profile_txt{'79'} ($user) › $profile_txt{'820'}~; |
| if ($userlastpost eq '') { $userlastpost = $profile_txt{'470'}; } |
| $yynavigation = qq~› $profiletitle~; |
| if ($userlastim eq '') { $userlastim = $profile_txt{'470'}; } |
| } |
| |
| if ( $iamadmin ) { |
| my $scriptAction = qq~profileAdmin2~; |
| for ( @grps ) { |
| if ($view) { |
| @memstat = split /\|/xsm, $Group{$_}; |
| $scriptAction = qq~myprofileAdmin2~; |
| if ( $_ ne 'Moderator' ) { |
| $yytitle = qq~$profile_txt{'editmyprofile'} › $profile_txt{'820'}~; |
| $my_group .= |
| $profiletitle = qq~$profile_txt{'editmyprofile'} ($user) › $profile_txt{'820'}~; |
| qq~\n <option value="$_">$memstat[0]</option>~; |
| $yynavigation = qq~› <a href="$scripturl?action=mycenter" class="nav">$img_txt{'mycenter'}</a> › $profiletitle~; |
| } |
| } else { |
| } |
| $yytitle = qq~$profile_txt{'79'} › $profile_txt{'820'}~; |
| } |
| $profiletitle = qq~$profile_txt{'79'} ($user) › $profile_txt{'820'}~; |
| |
| $yynavigation = qq~› $profiletitle~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$user};sid=$INFO{'sid'}" method="post" name="creator"> |
| |
| <table cellspacing="1" cellpadding="4" width="100%" align="center" class="bordercolor" border="0"> |
| |
| <tr> |
| |
| <td colspan="2" class="catbg"><img src="$imagesdir/profile.gif" alt="" border="0" /> <b>$profiletitle</b><input type="hidden" name="username" value="$INFO{'username'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="settings6"><b>$profile_txt{'21'}: </b></label></td> |
| |
| <td align="left"><input type="text" name="settings6" id="settings6" size="4" value="${$uid.$user}{'postcount'}" /></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="settings7"><b>$profile_txt{'87'}: </b><br /><span class="small">$profile_txt{'87c'}</span></label></td> |
| |
| <td align="left"> |
| |
| <select name="settings7" id="settings7"> |
| |
| <option value="${$uid.$user}{'position'}">$tt</option> |
| |
| <option value="${$uid.$user}{'position'}">---------------</option> |
| |
| <option value=""></option>~; |
| |
| |
| |
| unless ($iamgmod) { |
| |
| ($title, $stars, $starpic, $color) = split(/\|/, $Group{"Administrator"}); |
| |
| $showProfile .= qq~\n <option value="Administrator">$title</option>~; |
| |
| ($title, $stars, $starpic, $color) = split(/\|/, $Group{"Global Moderator"}); |
| |
| $showProfile .= qq~\n <option value="Global Moderator">$title</option>~; |
| |
| } |
| |
| |
| |
| my $z = 0; |
| |
| foreach (@nopostorder) { |
| |
| ($title, $stars, $starpic, $color, undef) = split(/\|/, $NoPost{$_}, 5); |
| |
| $showProfile .= qq~<option value="$_">$title</option>~; |
| |
| $z++; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| </select> |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| if ($tta ne "") { |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left" valign="top"><label for="addgroup"><b>$profile_txt{'87a'}: </b><br /><span class="small">$profile_txt{'87b'}</span></label></td> |
| |
| <td align="left"> |
| |
| <select name="addgroup" id="addgroup" size="$selsize" multiple="multiple"> |
| |
| $tta |
| |
| </select> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| ($dr_secund, $dr_minute, $dr_hour, $dr_day, $dr_month, $dr_year, undef, undef, undef) = localtime(${$uid.$user}{'regtime'} ? ${$uid.$user}{'regtime'} : $forumstart); |
| |
| $dr_month++; |
| |
| |
| |
| if ($dr_month > 12) { $dr_month = 12; } ## month cannot be above 12! |
| |
| if ($dr_month < 1) { $dr_month = 1; } ## neither can it be less than 1 |
| |
| if ($dr_day > 31) { $dr_day = 31; } ## day of month over 31 |
| |
| if ($dr_day < 1) { $dr_day = 1; } |
| |
| if (length($dr_year) > 2) { $dr_year = substr($dr_year , length($dr_year) - 2, 2); } |
| |
| if ($dr_year < 90 && $dr_year > 50) { $dr_year = 90; } ## a year over 50 is taken to be 1990 |
| |
| if ($dr_year > 20 && $dr_year < 51) { $dr_year = 20; } ## a year 50 or lower is taken to be 2020 |
| |
| if ($dr_hour > 23) { $dr_hour = 23; } |
| |
| if ($dr_minute > 59) { $dr_minute = 59; } |
| |
| if ($dr_secund > 59) { $dr_secund = 59; } |
| |
| |
| |
| $sel_day = qq~ |
| |
| <select name="dr_day">\n~; |
| |
| for($i = 1; $i <= 31; $i++) { |
| |
| $day_val = sprintf("%02d", $i); |
| |
| if($dr_day == $i) { |
| |
| $sel_day .= qq~ <option value="$day_val" selected="selected">$i</option>\n~; |
| |
| } else { |
| |
| $sel_day .= qq~ <option value="$day_val">$i</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_day .= qq~ </select>\n~; |
| |
| |
| |
| $sel_month = qq~ |
| |
| <select name="dr_month">\n~; |
| |
| for($i = 0; $i < 12; $i++) { |
| |
| $z = $i+1; |
| |
| $month_val = sprintf("%02d", $z); |
| |
| if ($dr_month == $z) { |
| |
| $sel_month .= qq~ <option value="$month_val" selected="selected">$months[$i]</option>\n~; |
| |
| } else { |
| |
| $sel_month .= qq~ <option value="$month_val">$months[$i]</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_month .= qq~ </select>\n~; |
| |
| |
| |
| $sel_year = qq~ |
| |
| <select name="dr_year">\n~; |
| |
| for (my $i = 1990; $i <= $year; $i++) { |
| |
| my $year_val = substr($i,2,2); |
| |
| if ($dr_year == $year_val) { |
| |
| $sel_year .= qq~ <option value="$year_val" selected="selected">$i</option>\n~; |
| |
| } else { |
| |
| $sel_year .= qq~ <option value="$year_val">$i</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_year .= qq~ </select>~; |
| |
| |
| |
| $time_sel = ${$uid.$username}{'timeselect'}; |
| |
| if($time_sel == 1 || $time_sel == 4 || $time_sel == 5) { $all_date = qq~$sel_month $sel_day $sel_year~; } |
| |
| else { $all_date = qq~$sel_day $sel_month $sel_year~; } |
| |
| $all_date =~ s/<select name/<select id="dr_day_month" name/o; |
| |
| |
| |
| $sel_hour = qq~\n |
| |
| <select name="dr_hour">\n~; |
| |
| for($i = 0; $i <= 23; $i++) { |
| |
| my $hour_val = sprintf("%02d", $i); |
| |
| if($dr_hour == $i) { |
| |
| $sel_hour .= qq~ <option value="$hour_val" selected="selected">$hour_val</option>\n~; |
| |
| } else { |
| |
| $sel_hour .= qq~ <option value="$hour_val">$hour_val</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_hour .= qq~ </select>\n~; |
| |
| |
| |
| $sel_minute = qq~ |
| |
| <select name="dr_minute">\n~; |
| |
| for($i = 0; $i <= 59; $i++) { |
| |
| $minute_val = sprintf("%02d", $i); |
| |
| if($dr_minute == $i) { |
| |
| $sel_minute .= qq~ <option value="$minute_val" selected="selected">$minute_val</option>\n~; |
| |
| } else { |
| |
| $sel_minute .= qq~ <option value="$minute_val">$minute_val</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_minute .= qq~ </select>~; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="dr_day_month"><b>$profile_txt{'233'}:</b></label></td> |
| |
| <td align="left" valign="middle"> |
| |
| $all_date $maintxt{'107'} $sel_hour $sel_minute <small>(server <b>localtime</b>)</small> |
| |
| <input type="hidden" value="$dr_secund" name="dr_secund" /> |
| |
| </td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><label for="regreason"><b>$profile_txt{'234'}:</b></label></td> |
| |
| <td align="left" valign="middle"><textarea rows="4" cols="50" name="regreason" id="regreason">$regreason</textarea></td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><b>$profile_amv_txt{'9'}: </b></td> |
| |
| <td align="left">$userlastlogin</td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><b>$profile_amv_txt{'10'}: </b></td> |
| |
| <td align="left">$userlastpost</td> |
| |
| </tr> |
| |
| <tr class="windowbg"> |
| |
| <td width="320" align="left"><b>$profile_amv_txt{'11'}: </b><br /><br /></td> |
| |
| <td align="left">$userlastim<br /><br /></td> |
| |
| </tr>~; |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| $showProfile .= &ext_editprofile($user,"admin"); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr class="catbg"> |
| |
| <td height="50" valign="middle" align="center" colspan="2"><input type="submit" name="moda" value="$profile_txt{'88'}" class="button" /><br /><span class="small">$profile_txt{'sid_expires_1'} $sid_expires $profile_txt{'sid_expires_2'}</span></td> |
| |
| </tr> |
| |
| </table> |
| |
| </form>~; |
| |
| |
| |
| if (!$view) { |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| |
| |
| |
| sub ModifyProfile2 { |
| my $z = 0; |
| &SidCheck($action); |
| for (@nopostorder) { |
| &PrepareProfile; |
| @memstat = split /\|/xsm, |
| |
| $NoPost{$_}, 5; |
| |
| $my_group .= qq~<option value="$_">$memstat[0]</option>~; |
| |
| $z++; |
| |
| } |
| |
| |
| my (%member, $key, $value); |
| if ( $tta ne q{} ) { |
| while (($key, $value) = each(%FORM)) { |
| $my_tta = $myprofile_tta; |
| $value =~ s~\A\s+~~; |
| $my_tta =~ s/{yabb selsize}/$selsize/sm; |
| $value =~ s~\s+\Z~~; |
| $my_tta =~ s/{yabb tta}/$tta/sm; |
| $value =~ s~[\n\r]~~g; |
| } |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ($member{'moda'} eq $profile_txt{'88'}) { |
| |
| if ($sessions == 1 && $sessionvalid == 1 && ($iamadmin || $iamgmod) && $username eq $user) { |
| |
| if ($member{'sesquest'} eq "password") { $member{'sesanswer'} = ''; } |
| |
| elsif ($member{'sesanswer'} eq '') { &fatal_error('no_secret_answer'); } |
| |
| } |
| |
| |
| |
| if ($member{'passwrd1'} || $member{'passwrd2'}) { |
| |
| &fatal_error("password_mismatch","$member{'username'}") if ($member{'passwrd1'} ne $member{'passwrd2'}); |
| |
| &fatal_error("no_password","$member{'username'}") if ($member{'passwrd1'} eq ''); |
| |
| &fatal_error("invalid_character","$profile_txt{'36'} $profile_txt{'241'}") if ($member{'passwrd1'} =~ /[^\s\w!\@#\$\%\^&\*\(\)\+\|`~\-=\\:;'",\.\/\?\[\]\{\}]/); |
| |
| &fatal_error("password_is_userid") if ($member{'username'} eq $member{'passwrd1'}); |
| |
| } |
| |
| |
| |
| if ($member{'bday1'} ne "" || $member{'bday2'} ne "" || $member{'bday3'} ne "") { |
| |
| &fatal_error("invalid_birthdate","($member{'bday1'}/$member{'bday2'}/$member{'bday3'})") if ($member{'bday1'} !~ /^[0-9]+$/ || $member{'bday2'} !~ /^[0-9]+$/ || $member{'bday3'} !~ /^[0-9]+$/ || length($member{'bday3'}) < 4); |
| |
| &fatal_error("invalid_birthdate","($member{'bday1'}/$member{'bday2'}/$member{'bday3'})") if ($member{'bday1'} < 1 || $member{'bday1'} > 12 || $member{'bday2'} < 1 || $member{'bday2'} > 31 || $member{'bday3'} < 1901 || $member{'bday3'} > $year - 5); |
| |
| } |
| |
| $member{'bday1'} =~ s/[^0-9]//g; |
| |
| $member{'bday2'} =~ s/[^0-9]//g; |
| |
| $member{'bday3'} =~ s/[^0-9]//g; |
| |
| if ($member{'bday1'}) { $member{'bday'} = "$member{'bday1'}/$member{'bday2'}/$member{'bday3'}"; } |
| |
| else { $member{'bday'} = ''; } |
| |
| |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| my $error = &ext_validate_submition($username,$user); |
| |
| if ($error ne "") { &fatal_error("extended_profiles_validation",$error); } |
| |
| &ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| |
| |
| if (${$uid.$user}{'realname'} ne $member{'name'}) { |
| |
| $member{'name'} =~ s~\t+~\ ~g; |
| |
| if ($member{'name'} eq '') { &fatal_error("no_name"); } |
| |
| if ($name_cannot_be_userid && lc $member{'name'} eq lc $member{'username'}) { &fatal_error('name_is_userid'); } |
| |
| |
| |
| &LoadCensorList; |
| |
| if (&Censor($member{'name'}) ne $member{'name'}) { &fatal_error("name_censored", &CheckCensor("$member{'name'}")); } |
| |
| |
| |
| if (${$uid.$user}{'password'} eq &encode_password($member{'name'})) { &fatal_error("password_is_userid"); } |
| |
| |
| |
| &FromChars($member{'name'}); |
| |
| $convertstr = $member{'name'}; |
| |
| $convertcut = 30; |
| |
| &CountChars; |
| |
| $member{'name'} = $convertstr; |
| |
| &fatal_error("name_too_long") if $cliped; |
| |
| &fatal_error("invalid_character","$profile_txt{'68'} $profile_txt{'241re'}") if $member{'name'} =~ /[^ \w\x80-\xFF\[\]\(\)#\%\+,\-\|\.:=\?\@\^]/; |
| |
| |
| |
| &ToHTML($member{'name'}); |
| |
| if ($user ne "admin") { |
| |
| # Check to see if name is reserved |
| |
| fopen(FILE, "$vardir/reservecfg.txt") || &fatal_error("cannot_open","$vardir/reservecfg.txt", 1); |
| |
| my @reservecfg = <FILE>; |
| |
| fclose(FILE); |
| |
| chomp(@reservecfg); |
| |
| my $matchword = $reservecfg[0] eq 'checked'; |
| |
| my $matchcase = $reservecfg[1] eq 'checked'; |
| |
| my $matchname = $reservecfg[3] eq 'checked'; |
| |
| my $namecheck = $matchcase eq 'checked' ? $member{'name'} : lc $member{'name'}; |
| |
| |
| |
| fopen(FILE, "$vardir/reserve.txt") || &fatal_error("cannot_open","$vardir/reserve.txt", 1); |
| |
| my @reserve = <FILE>; |
| |
| fclose(FILE); |
| |
| foreach my $reserved (@reserve) { |
| |
| chomp $reserved; |
| |
| my $reservecheck = $matchcase ? $reserved : lc $reserved; |
| |
| if ($matchname) { |
| |
| if ($matchword) { |
| |
| if ($namecheck eq $reservecheck) { &fatal_error('id_reserved',"$reserved"); } |
| |
| } else { |
| |
| if ($namecheck =~ $reservecheck) { &fatal_error('id_reserved',"$reserved"); } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| if ((lc &MemberIndex("check_exist", $member{'name'}) eq lc $member{'name'}) && (lc $member{'name'} ne lc ${$uid.$user}{'realname'}) && (lc $member{'name'} ne lc $member{'username'})) { &fatal_error('name_taken',"($member{'name'})"); } |
| |
| |
| |
| # rewrite attachments.txt with new username |
| |
| fopen(ATM, "+<$vardir/attachments.txt", 1) || &fatal_error("cannot_open","$vardir/attachments.txt"); |
| |
| seek ATM, 0, 0; |
| |
| my @attachments = <ATM>; |
| |
| truncate ATM, 0; |
| |
| seek ATM, 0, 0; |
| |
| for (my $i = 0; $i < @attachments; $i++) { |
| |
| $attachments[$i] =~ s/^(\d+\|\d+\|.*?)\|(.*?)\|/ ($2 eq ${$uid.$user}{'realname'} ? "$1|$member{'name'}|" : "$1|$2|") /e; |
| |
| } |
| |
| print ATM @attachments; |
| |
| fclose(ATM); |
| |
| |
| |
| #Since we havenot encountered a fatal error, time to rewrite our memberlist. |
| |
| &ManageMemberinfo("update", $user, $member{'name'}); |
| |
| } |
| |
| |
| |
| &ToHTML($member{'gender'}); |
| |
| &FromChars($member{'location'}); |
| |
| &ToHTML($member{'location'}); |
| |
| &ToChars($member{'location'}); |
| |
| &ToHTML($member{'bday'}); |
| |
| &FromChars($member{'sesquest'}); |
| |
| &ToHTML($member{'sesquest'}); |
| |
| &ToChars($member{'sesquest'}); |
| |
| |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| if ($member{'passwrd1'}) { ${$uid.$user}{'password'} = &encode_password($member{'passwrd1'}); } |
| |
| ${$uid.$user}{'realname'} = $member{'name'}; |
| |
| ${$uid.$user}{'gender'} = $member{'gender'}; |
| |
| ${$uid.$user}{'location'} = $member{'location'}; |
| |
| ${$uid.$user}{'bday'} = $member{'bday'}; |
| |
| ${$uid.$user}{'sesquest'} = $member{'sesquest'}; |
| |
| |
| |
| require "$sourcedir/Decoder.pl"; |
| |
| ${$uid.$user}{'sesanswer'} = &scramble($member{'sesanswer'}, $user); |
| |
| ${$uid.$username}{'session'} = &encode_password($user_ip); |
| |
| |
| |
| &UserAccount($user, "update"); |
| |
| |
| |
| &UpdateCookie("write", $user, ${$uid.$user}{'password'}, ${$uid.$user}{'session'}, "/", "") if $member{'passwrd1'} && $username eq $user; |
| |
| |
| |
| my $scriptAction = $view ? 'myprofileContacts' : 'profileContacts'; |
| |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| |
| |
| } elsif ($member{'moda'} eq $profile_txt{'89'}) { |
| |
| &fatal_error("cannot_kill_admin") if ($member{'username'} eq 'admin'); |
| |
| |
| |
| # For security, remove username from mod position |
| |
| &KillModerator($member{'username'}); |
| |
| |
| |
| $noteuser = $iamadmin ? $member{'username'} : $user; |
| |
| |
| |
| unlink("$memberdir/$noteuser.dat"); |
| |
| unlink("$memberdir/$noteuser.vars"); |
| |
| unlink("$memberdir/$noteuser.ims"); |
| |
| unlink("$memberdir/$noteuser.msg"); |
| |
| unlink("$memberdir/$noteuser.log"); |
| |
| unlink("$memberdir/$noteuser.rlog"); |
| |
| unlink("$memberdir/$noteuser.outbox"); |
| |
| unlink("$memberdir/$noteuser.imstore"); |
| |
| unlink("$memberdir/$noteuser.imdraft"); |
| |
| unlink("$facesdir/UserAvatars/$1") if ${$uid.$user}{'userpic'} && ${$uid.$user}{'userpic'} =~ /$facesurl\/UserAvatars\/(.+)/; |
| |
| |
| |
| &MemberIndex("remove", $noteuser); |
| |
| |
| |
| if (!$iamadmin) { |
| |
| &UpdateCookie("delete"); |
| |
| $username = 'Guest'; |
| |
| $iamguest = 1; |
| |
| $iamadmin = ''; |
| |
| $iamgmod = ''; |
| |
| $password = ''; |
| |
| $yyim = ''; |
| |
| $ENV{'HTTP_COOKIE'} = ''; |
| |
| $yyuname = ''; |
| |
| } |
| |
| $yySetLocation = $scripturl; |
| |
| |
| |
| } else { |
| |
| &fatal_error('not_allowed'); |
| |
| } |
| |
| |
| |
| &redirectexit; |
| ( |
| } |
| $dr_secund, $dr_minute, $dr_hour, $dr_day, $dr_month, |
| |
| $dr_year, undef, undef, undef |
| |
| ) |
| |
| = gmtime( |
| |
| ${ $uid . $user }{'regtime'} |
| |
| ? ${ $uid . $user }{'regtime'} |
| |
| : $forumstart |
| |
| ); |
| |
| $dr_month++; |
| |
| |
| |
| if ( $dr_month > 12 ) { $dr_month = 12; } ## month cannot be above 12! |
| |
| if ( $dr_month < 1 ) { $dr_month = 1; } ## neither can it be less than 1 |
| |
| if ( $dr_day > 31 ) { $dr_day = 31; } ## day of month over 31 |
| |
| if ( $dr_day < 1 ) { $dr_day = 1; } |
| |
| if ( length($dr_year) > 2 ) { |
| |
| $dr_year = substr $dr_year, length($dr_year) - 2, 2; |
| |
| } |
| |
| if ( $dr_year < 90 && $dr_year > 50 ) { |
| |
| $dr_year = 90; |
| |
| } ## a year over 50 is taken to be 1990 |
| |
| if ( $dr_year > 20 && $dr_year < 51 ) { |
| |
| $dr_year = 20; |
| |
| } ## a year 50 or lower is taken to be 2020 |
| |
| if ( $dr_hour > 23 ) { $dr_hour = 23; } |
| |
| if ( $dr_minute > 59 ) { $dr_minute = 59; } |
| |
| if ( $dr_secund > 59 ) { $dr_secund = 59; } |
| |
| |
| |
| $sel_day = qq~ |
| |
| <select name="dr_day">\n~; |
| |
| for my $i ( 1 .. 31 ) { |
| |
| $day_val = sprintf '%02d', $i; |
| |
| if ( $dr_day == $i ) { |
| |
| $sel_day .= |
| |
| qq~ <option value="$day_val" selected="selected">$i</option>\n~; |
| |
| } |
| |
| else { |
| |
| $sel_day .= |
| |
| qq~ <option value="$day_val">$i</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_day .= qq~ </select>\n~; |
| |
| |
| sub ModifyProfileContacts2 { |
| $sel_month = qq~ |
| &SidCheck($action); |
| <select name="dr_month">\n~; |
| &PrepareProfile; |
| for my $i ( 0 .. 11 ) { |
| |
| $z = $i + 1; |
| |
| $month_val = sprintf '%02d', $z; |
| |
| if ( $dr_month == $z ) { |
| |
| $sel_month .= |
| |
| qq~ <option value="$month_val" selected="selected">$months[$i]</option>\n~; |
| |
| } |
| |
| else { |
| |
| $sel_month .= |
| |
| qq~ <option value="$month_val">$months[$i]</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_month .= qq~ </select>\n~; |
| |
| |
| my (%member, $key, $value, $newpassemail, $tempname, $stealth); |
| $sel_year = qq~ |
| while (($key, $value) = each(%FORM)) { |
| <select name="dr_year">\n~; |
| $value =~ s~\A\s+~~; |
| for my $i ( 1990 .. $year ) { |
| $value =~ s~\s+\Z~~; |
| my $year_val = substr $i, 2, 2; |
| $value =~ s~\r~~g; |
| if ( $dr_year == $year_val ) { |
| $value =~ s~\n~~g if $key ne 'awayreply'; |
| $sel_year .= |
| $member{$key} = $value; |
| qq~ <option value="$year_val" selected="selected">$i</option>\n~; |
| } |
| } |
| $member{'username'} = $user; |
| else { |
| |
| $sel_year .= |
| &fatal_error("not_allowed") if $member{'moda'} ne $profile_txt{'88'}; |
| qq~ <option value="$year_val">$i</option>\n~; |
| |
| } |
| if ($emailnewpass && lc $member{'email'} ne lc ${$uid.$user}{'email'} && !$iamadmin) { |
| } |
| srand(); |
| $sel_year .= q~ </select>~; |
| $member{'passwrd1'} = int(rand(100)); |
| |
| $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/; |
| |
| $_ = int(rand(77)); |
| |
| $_ =~ tr/0123456789/q8dv7w4jm3/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int(rand(89)); |
| |
| $_ =~ tr/0123456789/y6uivpkcxw/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int(rand(188)); |
| |
| $_ =~ tr/0123456789/poiuytrewq/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int(rand(65)); |
| |
| $_ =~ tr/0123456789/lkjhgfdaut/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| ${$uid.$user}{'password'} = &encode_password($member{'passwrd1'}); |
| |
| $newpassemail = 1; |
| |
| } |
| |
| |
| |
| &fatal_error("no_email") if $member{'email'} eq ''; |
| |
| &fatal_error("invalid_character","$profile_txt{'69'} $profile_txt{'241e'}") if $member{'email'} !~ /^[\w\-\.\+]+\@[\w\-\.\+]+\.\w{2,4}$/; |
| |
| &fatal_error("invalid_email") if ($member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) || ($member{'email'} !~ /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?$/); |
| |
| &LoadCensorList; |
| |
| if (&Censor($member{'email'}) ne $member{'email'}) { &fatal_error("censor2", &CheckCensor("$member{'email'}")); } |
| |
| |
| |
| $member{'icq'} =~ s/[^0-9]//g; |
| |
| $member{'aim'} =~ s/ /\+/g; |
| |
| $member{'yim'} =~ s/ /\+/g; |
| |
| $member{'msn'} =~ s/ /\+/g; |
| |
| |
| |
| &ToHTML($member{'email'}); |
| |
| &ToHTML($member{'icq'}); |
| |
| &ToHTML($member{'aim'}); |
| |
| &ToHTML($member{'yim'}); |
| |
| &ToHTML($member{'msn'}); |
| |
| &ToHTML($member{'gtalk'}); |
| |
| &ToHTML($member{'skype'}); |
| |
| &ToHTML($member{'myspace'}); |
| |
| &ToHTML($member{'facebook'}); |
| |
| &ToHTML($member{'weburl'}); |
| |
| &FromChars($member{'webtitle'}); |
| |
| &ToHTML($member{'webtitle'}); |
| |
| &ToChars($member{'webtitle'}); |
| |
| &ToHTML($member{'offlinestatus'}); |
| |
| &FromChars($member{'awaysubj'}); |
| |
| &ToHTML($member{'awaysubj'}); |
| |
| &ToChars($member{'awaysubj'}); |
| |
| |
| |
| &FromChars($member{'awayreply'}); |
| |
| &ToHTML($member{'awayreply'}); |
| |
| $member{'awayreply'} =~ s~\n~<br />~g; |
| |
| $convertstr = $member{'awayreply'}; |
| |
| $convertcut = $MaxAwayLen; |
| |
| &CountChars; |
| |
| $member{'awayreply'} = $convertstr; |
| |
| &ToChars($member{'awayreply'}); |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| my $error = &ext_validate_submition($username,$user); |
| |
| if ($error ne "") { &fatal_error("extended_profiles_validation",$error); } |
| |
| &ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| # Check to see if email is already taken |
| |
| if (lc ${$uid.$user}{'email'} ne lc $member{'email'}) { |
| |
| $testemail = lc $member{'email'}; |
| |
| my $is_existing = &MemberIndex("check_exist", "$testemail"); |
| |
| if (lc $is_existing eq $testemail) { &fatal_error("email_taken","($member{'email'})"); } |
| |
| |
| |
| # Since we haven't encountered a fatal error, time to rewrite our memberlist a little. |
| |
| &ManageMemberinfo("update", $user, '', $member{'email'}); |
| |
| } |
| |
| ## if enabled but not set, default offline status to 'offline' |
| |
| if ($enable_MCaway && $member{'offlinestatus'} eq '') { $member{'offlinestatus'} = 'offline'; } |
| |
| |
| |
| # if user is switching 'away' to 'off/on', clean out the away-sent list |
| |
| if ($FORM{'offlinestatus'} eq 'offline') { ${$uid.$user}{'awayreplysent'} = ''; } |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| ${$uid.$user}{'email'} = $member{'email'}; |
| |
| ${$uid.$user}{'hidemail'} = $member{'hideemail'} ? 1 : 0; |
| |
| ${$uid.$user}{'icq'} = $member{'icq'}; |
| |
| ${$uid.$user}{'aim'} = $member{'aim'}; |
| |
| ${$uid.$user}{'yim'} = $member{'yim'}; |
| |
| ${$uid.$user}{'msn'} = $member{'msn'}; |
| |
| ${$uid.$user}{'gtalk'} = $member{'gtalk'}; |
| |
| ${$uid.$user}{'skype'} = $member{'skype'}; |
| |
| ${$uid.$user}{'myspace'} = $member{'myspace'}; |
| |
| ${$uid.$user}{'facebook'} = $member{'facebook'}; |
| |
| ${$uid.$user}{'webtitle'} = $member{'webtitle'}; |
| |
| ${$uid.$user}{'weburl'} = (($member{'weburl'} && $member{'weburl'} !~ m~\Ahttps?://~) ? "http://" : "") . $member{'weburl'}; |
| |
| ${$uid.$user}{'offlinestatus'} = $member{'offlinestatus'}; |
| |
| ${$uid.$user}{'awaysubj'} = $member{'awaysubj'}; |
| |
| ${$uid.$user}{'awayreply'} = $member{'awayreply'}; |
| |
| ${$uid.$user}{'stealth'} = (${$uid.$user}{'position'} eq 'Administrator' || ${$uid.$user}{'position'} eq 'Global Moderator') ? $member{'stealth'} : ""; |
| |
| |
| |
| &UserAccount($user, "update"); |
| |
| |
| |
| if ($emailnewpass && $newpassemail == 1) { |
| |
| &RemoveUserOnline($user); # Remove user from online log |
| |
| |
| |
| if ($username eq $user) { |
| |
| &UpdateCookie("delete"); |
| |
| $username = 'Guest'; |
| |
| $iamguest = 1; |
| |
| $iamadmin = ''; |
| |
| $iamgmod = ''; |
| |
| $password = ''; |
| |
| $yyim = ''; |
| |
| $ENV{'HTTP_COOKIE'} = ''; |
| |
| $yyuname = ''; |
| |
| } |
| |
| &FormatUserName($member{'username'}); |
| |
| require "$sourcedir/Mailer.pl"; |
| |
| my $scriptAction = $view ? 'myprofile' : 'profile'; |
| |
| &sendmail($member{'email'}, qq~$profile_txt{'700'} $mbname~, "$profile_txt{'733'} $member{'passwrd1'} $profile_txt{'734'} $member{'username'}.\n\n$profile_txt{'701'} $scripturl?action=$scriptAction;username=$useraccount{$member{'username'}}\n\n$profile_txt{'130'}"); |
| |
| require "$sourcedir/LogInOut.pl"; |
| |
| $sharedLogin_title = "$profile_txt{'34'}: $user"; |
| |
| $sharedLogin_text = $profile_txt{'638'}; |
| |
| $shared_login = &sharedLogin; |
| |
| $yymain .= $shared_login; |
| |
| $yytitle = $profile_txt{'245'}; |
| |
| &template; |
| |
| } |
| |
| |
| |
| my $scriptAction = $view ? 'myprofileOptions' : 'profileOptions'; |
| |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| &redirectexit; |
| |
| } |
| |
| |
| |
| sub ModifyProfileOptions2 { |
| $time_sel = ${ $uid . $username }{'timeselect'}; |
| &SidCheck($action); |
| if ( $time_sel == 1 || $time_sel == 4 || $time_sel == 5 ) { |
| &PrepareProfile; |
| $all_date = qq~$sel_month $sel_day $sel_year~; |
| |
| } |
| |
| else { $all_date = qq~$sel_day $sel_month $sel_year~; } |
| |
| $all_date =~ s/<select name/<select id="dr_day_month" name/osm; |
| |
| |
| my (%member, $key, $value, $tempname); |
| $sel_hour = qq~ |
| while (($key, $value) = each(%FORM)) { |
| <select name="dr_hour">\n~; |
| $value =~ s~\A\s+~~; |
| for my $i ( 0 .. 23 ) { |
| $value =~ s~\s+\Z~~; |
| my $hour_val = sprintf '%02d', $i; |
| $value =~ s~\r~~g; |
| if ( $dr_hour == $i ) { |
| $value =~ s~\n~~g if $key ne 'signature'; |
| $sel_hour .= |
| $member{$key} = $value; |
| qq~ <option value="$hour_val" selected="selected">$hour_val</option>\n~; |
| } |
| } |
| $member{'username'} = $user; |
| else { |
| |
| $sel_hour .= |
| &fatal_error("not_allowed") if $member{'moda'} ne $profile_txt{'88'}; |
| qq~ <option value="$hour_val">$hour_val</option>\n~; |
| |
| } |
| if (!$minlinksig){ $minlinksig = 0 ;} |
| } |
| if (${$uid.$user}{'postcount'} < $minlinksig && !$iamadmin && !$iamgmod) { |
| $sel_hour .= qq~ </select>\n~; |
| if ($member{'signature'} =~ m~http:\/\/~ || $member{'signature'} =~ m~https:\/\/~ || $member{'signature'} =~ m~ftp:\/\/~ || $member{'signature'} =~ m~www.~ || $member{'signature'} =~ m~ftp.~ =~ m~\[url~ || $member{'signature'} =~ m~\[link~ || $member{'signature'} =~ m~\[img~ || $member{'signature'} =~ m~\[ftp~) { |
| |
| &fatal_error("no_siglinks_allowed"); |
| |
| } |
| |
| } |
| |
| &FromChars($member{'usertext'}); |
| |
| $convertstr = $member{'usertext'}; |
| |
| $convertcut = 51; |
| |
| &CountChars; |
| |
| $member{'usertext'} = $convertstr; |
| |
| &ToHTML($member{'usertext'}); |
| |
| &ToChars($member{'usertext'}); |
| |
| |
| |
| if ($allowpics) { |
| |
| opendir(DIR, "$facesdir") || fatal_error("cannot_open_dir","($facesdir)!<br \/>$profile_txt{'681'}", 1); |
| |
| closedir(DIR); |
| |
| } |
| |
| |
| |
| if ($allowpics && $upload_useravatar && $upload_avatargroup) { |
| |
| $upload_useravatar = 0; |
| |
| foreach my $av_gr (split(/, /, $upload_avatargroup)) { |
| |
| if ($av_gr eq ${$uid.$user}{'position'}) { $upload_useravatar = 1; last; } |
| |
| foreach (split(/,/, ${$uid.$user}{'addgroups'})) { |
| |
| if ($av_gr eq $_) { $upload_useravatar = 1; last; } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| my $file = $CGI_query->upload("file_avatar") if $CGI_query; |
| |
| if ($allowpics && $upload_useravatar && $file) { |
| |
| if ($file !~ /\.(gif|png|jpe?g)$/i) { |
| |
| &LoadLanguage('FA'); |
| |
| &fatal_error('file_not_uploaded',"$file $fatxt{'20'} gif png jpeg jpg"); |
| |
| } |
| |
| my $ext = $1; |
| |
| my $fixfile = ${$uid.$user}{'realname'}; |
| |
| if ($fixfile =~ /[^0-9A-Za-z\+\-\.:_]/) { # replace all inappropriate characters |
| |
| # Transliteration |
| |
| my @ISO_8859_1 = qw(A B V G D E JO ZH Z I J K L M N O P R S T U F H C CH SH SHH _ Y _ JE JU JA a b v g d e jo zh z i j k l m n o p r s t u f h c ch sh shh _ y _ je ju ja); |
| |
| my $x = 0; |
| |
| foreach (qw(À Á Â Ã Ä Å ¨ Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å ¸ æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ)) { |
| |
| $fixfile =~ s/$_/$ISO_8859_1[$x]/ig; |
| |
| $x++; |
| |
| } |
| |
| # END Transliteration. Thanks to "Velocity" for this contribution. |
| |
| $fixfile =~ s/[^0-9A-Za-z\+\-\.:_]/_/g; |
| |
| } |
| |
| $fixfile .= ".$ext"; |
| |
| |
| |
| require "$sourcedir/SpamCheck.pl"; |
| |
| my $spamdetected = &spamcheck("$fixfile"); |
| |
| if (!$iamadmin && !$iamgmod && !$iammod){ |
| |
| if ($spamdetected == 1) { |
| |
| ${$uid.$username}{'spamcount'}++; |
| |
| ${$uid.$username}{'spamtime'} = $date; |
| |
| &UserAccount($username,"update"); |
| |
| $spam_hits_left_count = $post_speed_count - ${$uid.$username}{'spamcount'}; |
| |
| &fatal_error("tsc_alert"); |
| |
| } |
| |
| } |
| |
| |
| |
| my ($size,$buffer,$filesize,$file_buffer); |
| |
| while ($size = read($file, $buffer, 512)) { $filesize += $size; $file_buffer .= $buffer; } |
| |
| if ($avatar_limit && $filesize > (1024 * $avatar_limit)) { |
| |
| &LoadLanguage('FA'); |
| |
| &fatal_error('file_not_uploaded',"$fatxt{'21'} $file (" . int($filesize / 1024) . " KB) $fatxt{'21b'} " . $avatar_limit); |
| |
| } |
| |
| if ($avatar_dirlimit) { |
| |
| my $dirsize = &dirsize("$facesdir/UserAvatars"); |
| |
| if ($filesize > ((1024 * $avatar_dirlimit) - $dirsize)) { |
| |
| &LoadLanguage('FA'); |
| |
| &fatal_error('file_not_uploaded',"$fatxt{'22'} $file (" . (int($filesize / 1024) - $avatar_dirlimit + int($dirsize / 1024)) . " KB) $fatxt{'22b'}"); |
| |
| } |
| |
| } |
| |
| |
| |
| unlink("$facesdir/UserAvatars/$1") if ${$uid.$user}{'userpic'} =~ /$facesurl\/UserAvatars\/(.+)/; |
| |
| $fixfile = &check_existence("$facesdir/UserAvatars", $fixfile); |
| |
| |
| |
| # create a new file on the server using the formatted ( new instance ) filename |
| |
| if (fopen(NEWFILE, ">$facesdir/UserAvatars/$fixfile")) { |
| |
| binmode NEWFILE; # needed for operating systems (OS) Windows, ignored by Linux |
| |
| print NEWFILE $file_buffer; # write new file on HD |
| |
| fclose(NEWFILE); |
| |
| |
| |
| } else { # return the server's error message if the new file could not be created |
| |
| &fatal_error("file_not_open","$facesdir/UserAvatars"); |
| |
| } |
| |
| |
| |
| # check if file has actually been uploaded, by checking the file has a size |
| |
| unless (-s "$facesdir/UserAvatars/$fixfile") { |
| |
| &fatal_error("file_not_uploaded",$fixfile); |
| |
| } |
| |
| |
| |
| my $illegal; |
| |
| if ($fixfile =~ /gif$/i) { |
| |
| my $header; |
| |
| fopen(ATTFILE, "$facesdir/UserAvatars/$fixfile"); |
| |
| read(ATTFILE, $header, 10); |
| |
| my $giftest; |
| |
| ($giftest, undef, undef, undef, undef, undef) = unpack("a3a3C4", $header); |
| |
| fclose(ATTFILE); |
| |
| if ($giftest ne "GIF") { $illegal = $giftest; } |
| |
| } |
| |
| fopen(ATTFILE, "$facesdir/UserAvatars/$fixfile"); |
| |
| while ( read(ATTFILE, $buffer, 1024) ) { |
| |
| if ($buffer =~ /<(html|script|body)/ig) { $illegal = $1; last; } |
| |
| } |
| |
| fclose(ATTFILE); |
| |
| if ($illegal) { # delete the file as it contains illegal code |
| |
| unlink("$facesdir/UserAvatars/$fixfile"); |
| |
| &ToHTML($illegal); |
| |
| &fatal_error("file_not_uploaded","$fixfile <= illegal code ($illegal) inside image file!"); |
| |
| } |
| |
| |
| |
| $member{'userpic'} = "$facesurl/UserAvatars/$fixfile"; |
| |
| |
| |
| } elsif ($member{'userpicpersonalcheck'} && ($member{'userpicpersonal'} =~ /\.gif\Z/i || $member{'userpicpersonal'} =~ /\.jpe?g\Z/i || $member{'userpicpersonal'} =~ /\.png\Z/i)) { |
| |
| $member{'userpic'} = $member{'userpicpersonal'}; |
| |
| } |
| |
| if ($member{'userpic'} eq "" || !$allowpics) { $member{'userpic'} = "blank.gif"; } |
| |
| &fatal_error("invalid_character","$profile_txt{'592'}") if $member{'userpic'} !~ m^\A[0-9a-zA-Z_\.\#\%\-\:\+\?\$\&\~\.\,\@/]+\Z^; |
| |
| unlink("$facesdir/UserAvatars/$1") if $member{'userpic'} ne ${$uid.$user}{'userpic'} && ${$uid.$user}{'userpic'} =~ /$facesurl\/UserAvatars\/(.+)/; |
| |
| |
| |
| if ($member{'usertemplate'} ne '' && !$templateset{$member{'usertemplate'}}) { &fatal_error('invalid_template'); } |
| |
| if ($member{'usertemplate'} eq '') { $member{'usertemplate'} = $template; } |
| |
| if ($member{'userlanguage'} ne '' && !-e "$langdir/$member{'userlanguage'}/Main.lng") { &fatal_error('invalid_language'); } |
| |
| if ($member{'userlanguage'} eq '') { $member{'userlanguage'} = $language; } |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| my $error = &ext_validate_submition($username,$user); |
| |
| if ($error ne "") { &fatal_error("extended_profiles_validation",$error); } |
| |
| &ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| if ($member{'usertimesign'} !~ /^-?$/ || $member{'usertimehour'} !~ /^\d+$/ || $member{'usertimemin'} !~ /^\d+$/) { &fatal_error("invalid_time_offset","$member{'usertimesign'}$member{'usertimehour'}.$member{'usertimemin'}"); } |
| |
| |
| |
| # update notifications if users language is changed |
| |
| if (${$uid.$user}{'language'} ne "$member{'userlanguage'}") { |
| |
| require "$sourcedir/Notify.pl"; |
| |
| &updateLanguage($user, $member{'userlanguage'}); |
| |
| } |
| |
| |
| |
| if ($addmemgroup_enabled > 1) { |
| |
| my %groups; |
| |
| map { $groups{$_} = 2; } split(/,/, ${$uid.$user}{'addgroups'}); |
| |
| map { $groups{$_} = 1; } split(/, /, $member{'joinmemgroup'}); |
| |
| my @nopostmember; |
| |
| foreach (keys %NoPost) { |
| |
| next if ${$uid.$user}{'position'} eq $_; |
| |
| if ($groups{$_} == 1 && (split /\|/, $NoPost{$_})[10]) { push(@nopostmember, $_); } |
| |
| elsif ($groups{$_} == 2 && !(split /\|/, $NoPost{$_})[10]) { push(@nopostmember, $_); } |
| |
| } |
| |
| $member{'joinmemgroup'} = join(',', @nopostmember); |
| |
| if ($member{'joinmemgroup'} eq '') { $member{'joinmemgroup'} = "###blank###"; } |
| |
| if ($member{'joinmemgroup'} ne ${$uid.$user}{'addgroups'}) { |
| |
| &ManageMemberinfo("update", $user, '', '', '', '', $member{'joinmemgroup'}); |
| |
| } |
| |
| if ($member{'joinmemgroup'} eq "###blank###") { $member{'joinmemgroup'} = ''; } |
| |
| ${$uid.$user}{'addgroups'} = $member{'joinmemgroup'}; |
| |
| } |
| |
| |
| |
| &FromChars($member{'signature'}); |
| |
| &ToHTML($member{'signature'}); |
| |
| $member{'signature'} =~ s~\n~<br />~g; |
| |
| $convertstr = $member{'signature'}; |
| |
| $convertcut = $MaxSigLen; |
| |
| &CountChars; |
| |
| $member{'signature'} = $convertstr; |
| |
| &ToChars($member{'signature'}); |
| |
| |
| |
| &ToHTML($member{'userpic'}); |
| |
| &ToHTML($member{'usertemplate'}); |
| |
| &ToHTML($member{'userlanguage'}); |
| |
| &ToHTML($member{'timeformat'}); |
| |
| |
| |
| # 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{'usertimesign'}$member{'usertimehour'}.$member{'usertimemin'}"; |
| |
| ${$uid.$user}{'onlinealert'} = $member{'onlinealert'} ? 1 : 0; |
| |
| ${$uid.$user}{'notify_me'} = $member{'notify_N'} ? ((!${$uid.$user}{'notify_me'} || ${$uid.$user}{'notify_me'} == 1) ? 1 : 3) : ((${$uid.$user}{'notify_me'} == 2 || ${$uid.$user}{'notify_me'} == 3) ? 2 : 0); |
| |
| ${$uid.$user}{'reversetopic'} = $member{'reversetopic'} ? 1 : 0; |
| |
| ${$uid.$user}{'dsttimeoffset'} = $member{'dsttimeoffset'} ? 1 : 0; |
| |
| ${$uid.$user}{'dynamic_clock'} = $member{'dynamic_clock'} ? 1 : 0; |
| |
| ${$uid.$user}{'timeselect'} = int($member{'usertimeselect'}); |
| |
| ${$uid.$user}{'template'} = $member{'usertemplate'}; |
| |
| ${$uid.$user}{'language'} = $member{'userlanguage'}; |
| |
| ${$uid.$user}{'timeformat'} = $member{'timeformat'}; |
| |
| ${$uid.$user}{'numberformat'} = int($member{'usernumberformat'}); |
| |
| |
| |
| &UserAccount($user, "update"); |
| |
| |
| |
| my $scriptAction; |
| |
| if ($iamadmin || ($iamgmod && $allow_gmod_profile && $gmod_access2{'profileAdmin'} eq 'on')) { |
| |
| $scriptAction = qq~profileAdmin~; |
| |
| } else { |
| |
| $scriptAction = qq~viewprofile~; |
| |
| } |
| |
| if ($PM_level == 1 || ($PM_level == 2 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && ($iamadmin || $iamgmod))) { |
| |
| $scriptAction = qq~profileIM~; |
| |
| } |
| |
| if ($buddyListEnabled) { |
| |
| $scriptAction = qq~profileBuddy~; |
| |
| } |
| |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| &redirectexit; |
| |
| } |
| |
| |
| |
| sub ModifyProfileBuddy2 { |
| $sel_minute = qq~ |
| &SidCheck($action); |
| <select name="dr_minute">\n~; |
| &PrepareProfile; |
| for my $i ( 0 .. 59 ) { |
| |
| $minute_val = sprintf '%02d', $i; |
| |
| if ( $dr_minute == $i ) { |
| |
| $sel_minute .= |
| |
| qq~ <option value="$minute_val" selected="selected">$minute_val</option>\n~; |
| |
| } |
| |
| else { |
| |
| $sel_minute .= |
| |
| qq~ <option value="$minute_val">$minute_val</option>\n~; |
| |
| } |
| |
| } |
| |
| $sel_minute .= q~ </select>~; |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require Sources::ExtendedProfiles; |
| |
| $my_extprofile .= ext_editprofile( $user, 'admin' ); |
| |
| } |
| |
| |
| my (%member, $key, $value, $tempname); |
| $myprofile_userinfo = |
| while (($key, $value) = each(%FORM)) { |
| qq~<input type="hidden" name="username" value="$INFO{'username'}" />~; |
| $value =~ s~\A\s+~~; |
| $showProfile .= qq~ |
| $value =~ s~\s+\Z~~; |
| <form action="$scripturl?action=$scriptAction;username=$useraccount{$user};sid=$INFO{'sid'}" method="post" name="creator">~; |
| $value =~ s~[\n\r]~~g; |
| $showProfile .= $myprofile_admin_a; |
| $member{$key} = $value; |
| AddModerators(); |
| } |
| $showProfile .= $myprofile_admin_b; |
| $member{'username'} = $user; |
| $showProfile .= |
| |
| qq~<textarea rows="4" cols="50" name="regreason" id="regreason">$regreason</textarea>~; |
| &fatal_error("not_allowed") if $member{'moda'} ne $profile_txt{'88'}; |
| $showProfile .= $myprofile_admin_bb; |
| |
| |
| if ($member{'buddylist'}) { |
| $showProfile =~ s/{yabb profiletitle}/$profiletitle/sm; |
| my @buddies = split(/\,/, $member{'buddylist'}); |
| $showProfile =~ s/{yabb myprofile_userinfo}/$myprofile_userinfo/sm; |
| chomp(@buddies); |
| $showProfile =~ s/{yabb postcount}/${$uid.$user}{'postcount'}/sm; |
| $member{'buddylist'} = ''; |
| $showProfile =~ s/{yabb position}/${$uid.$user}{'position'}/gsm; |
| foreach my $cloakedBuddy (@buddies) { |
| $showProfile =~ s/{yabb tt}/$tt/sm; |
| $cloakedBuddy =~ s/^ //; |
| $showProfile =~ s/{yabb my_tta}/$my_tta/sm; |
| $cloakedBuddy = &decloak($cloakedBuddy); |
| $showProfile =~ s/{yabb my_group}/$my_group/sm; |
| &ToHTML($cloakedBuddy); |
| $showProfile =~ s/{yabb all_date}/$all_date/sm; |
| $member{'buddylist'} = qq~$member{'buddylist'}\|$cloakedBuddy~; |
| $showProfile =~ s/{yabb sel_hour}/$sel_hour/sm; |
| } |
| $showProfile =~ s/{yabb sel_minute}/$sel_minute/sm; |
| $member{'buddylist'} =~ s/^\|//; |
| $showProfile =~ s/{yabb dr_secund}/$dr_secund/sm; |
| } |
| $showProfile =~ s/{yabb regreason}/$regreason/sm; |
| ${$uid.$user}{'buddylist'} = $member{'buddylist'}; |
| $showProfile =~ s/{yabb userlastlogin}/$userlastlogin/sm; |
| &UserAccount($user, "update"); |
| $showProfile =~ s/{yabb userlastpost}/$userlastpost/sm; |
| |
| $showProfile =~ s/{yabb userlastim}/$userlastim/sm; |
| my $scriptAction; |
| $showProfile =~ s/{yabb my_extprofile}/$my_extprofile/sm; |
| if ($iamadmin || ($iamgmod && $allow_gmod_profile && $gmod_access2{'profileAdmin'} eq 'on')) { |
| $showProfile =~ s/{yabb sid_expires}/$expiretxt/sm; |
| $scriptAction = qq~profileAdmin~; |
| |
| } else { |
| ## Mod Hook showProfile_admin ## |
| $scriptAction = qq~viewprofile~; |
| |
| } |
| if ( !$view ) { |
| if ($PM_level == 1 || ($PM_level == 2 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && ($iamadmin || $iamgmod))) { |
| $yymain .= $showProfile; |
| $scriptAction = qq~profileIM~; |
| template(); |
| } |
| } |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| return; |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| &redirectexit; |
| |
| } |
| } |
| |
| |
| sub ModifyProfileIM2 { |
| sub ModifyProfile2 { |
| &SidCheck($action); |
| SidCheck($action); |
| &PrepareProfile; |
| PrepareProfile(); |
| |
| |
| my (%member, $key, $value, $ignorelist); |
| my ( %member, $key, $value ); |
| while (($key, $value) = each(%FORM)) { |
| while ( ( $key, $value ) = each %FORM ) { |
| $value =~ s~\A\s+~~; |
| $value =~ s/\A\s+//sm; |
| $value =~ s~\s+\Z~~; |
| $value =~ s/\s+\Z//sm; |
| $value =~ s~[\n\r]~~g if $key ne 'ignore'; |
| $value =~ s/[\n\r]//gxsm; |
| $member{$key} = $value; |
| $member{$key} = $value; |
| } |
| } |
| $member{'username'} = $user; |
| $member{'username'} = $user; |
| |
| |
| &fatal_error("not_allowed") if $member{'moda'} ne $profile_txt{'88'}; |
| |
| |
| |
| if (!$member{'ignoreall'}) { |
| |
| my @ignoreList = split(/\,/, $member{'ignore'}); |
| |
| chomp (@ignoreList); |
| |
| foreach my $cloakedIgnore (@ignoreList) { |
| |
| $cloakedIgnore =~s/\A //; |
| |
| $cloakedIgnore =~s/ \Z//; |
| |
| $cloakedIgnore = &decloak($cloakedIgnore); |
| |
| &ToHTML ($cloakedIgnore); |
| |
| $ignorelist .= qq~\|$cloakedIgnore~; |
| |
| } |
| |
| $ignorelist =~ s~\A\|~~; |
| |
| } else { |
| |
| $ignorelist = '*'; |
| |
| } |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| ${$uid.$user}{'im_ignorelist'} = $ignorelist; |
| |
| ${$uid.$user}{'notify_me'} = $member{'notify_PM'} ? ((!${$uid.$user}{'notify_me'} || ${$uid.$user}{'notify_me'} == 2) ? 2 : 3) : ((${$uid.$user}{'notify_me'} == 1 || ${$uid.$user}{'notify_me'} == 3) ? 1 : 0); |
| |
| ${$uid.$user}{'im_popup'} = $member{'userpopup'} ? 1 : 0; |
| |
| ${$uid.$user}{'im_imspop'} = $member{'popupims'} ? 1 : 0; |
| |
| ${$uid.$user}{'pmactprev'} = $member{'pmactprev'} ? 1 : 0; |
| |
| ${$uid.$user}{'pmmessprev'} = $member{'pmmessprev'} ? 1 : 0; |
| |
| ${$uid.$user}{'pmviewMess'} = $member{'pmviewMess'} ? 1 : 0; |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| my $error = &ext_validate_submition($username,$user); |
| |
| if ($error ne "") { &fatal_error("extended_profiles_validation",$error); } |
| |
| &ext_saveprofile($user); |
| |
| } |
| |
| &UserAccount($user, "update"); |
| |
| |
| |
| my $scriptAction = qq~viewprofile~; |
| |
| if ($iamadmin || ($iamgmod && $allow_gmod_profile && $gmod_access2{'profileAdmin'} eq 'on')) { |
| |
| $scriptAction = qq~profileAdmin~; |
| |
| } |
| |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| &redirectexit; |
| |
| } |
| |
| |
| |
| sub ModifyProfileAdmin2 { |
| if ( $member{'moda'} eq $profile_txt{'88'} ) { |
| &is_admin_or_gmod; |
| if ( $sessions == 1 |
| |
| && $sessionvalid == 1 |
| |
| && ( $iamadmin || $iamgmod ) |
| |
| && $username eq $user ) |
| |
| { |
| |
| if ( $member{'sesquest'} eq 'password' ) { |
| |
| $member{'sesanswer'} = q{}; |
| |
| } |
| |
| elsif ( $member{'sesanswer'} eq q{} ) { |
| |
| fatal_error('no_secret_answer'); |
| |
| } |
| |
| } |
| |
| |
| &SidCheck($action); |
| if ( $member{'passwrd1'} || $member{'passwrd2'} ) { |
| &PrepareProfile; |
| if ( $member{'passwrd1'} ne $member{'passwrd2'} ) { |
| |
| fatal_error( 'password_mismatch', "$member{'username'}" ); |
| |
| } |
| |
| if ( $member{'passwrd1'} eq q{} ) { |
| |
| fatal_error( 'no_password', "$member{'username'}" ); |
| |
| } |
| |
| if ( $member{'passwrd1'} =~ |
| |
| /[^\s\w!\@#\$\%\^&\*\(\)\+\|`~\-=\\:;'",\.\/\?\[\]\{\}]/xsm ) |
| |
| { |
| |
| fatal_error( 'invalid_character', |
| |
| "$profile_txt{'36'} $profile_txt{'241'}" ); |
| |
| } |
| |
| if ( $member{'username'} eq $member{'passwrd1'} ) { |
| |
| fatal_error('password_is_userid'); |
| |
| } |
| |
| } |
| |
| |
| my (%member, $key, $value); |
| if ( ${ $uid . $user }{'gender'} |
| while (($key, $value) = each(%FORM)) { |
| && $editGenderLimit |
| $value =~ s~\A\s+~~; |
| && ${ $uid . $user }{'disablegender'} >= $editGenderLimit |
| $value =~ s~\s+\Z~~; |
| && !$iamadmin |
| $value =~ s~[\n\r]~~g if $key ne 'regreason'; |
| && ( !$iamgmod || !$allow_gmod_profile ) ) |
| $member{$key} = $value; |
| { |
| } |
| if ( $member{'gender'} ne ${ $uid . $user }{'gender'} ) { |
| $member{'username'} = $user; |
| fatal_error('not_allowed_gender_edit'); |
| |
| } |
| &fatal_error("cannot_kill_admin") if $member{'moda'} ne $profile_txt{'88'}; |
| } |
| |
| |
| if (!$iamadmin && ($member{'settings7'} eq "Administrator" || $member{'settings7'} eq "Global Moderator")) { |
| |
| $member{'settings7'} = ${$uid.$user}{'position'}; |
| |
| } |
| |
| |
| |
| if ($member{'settings6'} eq '') { $member{'settings6'} = 0; } |
| |
| if ($member{'settings6'} !~ /\A[0-9]+\Z/) { &fatal_error('invalid_postcount'); } |
| |
| &fatal_error('cannot_regroup_admin') if $member{'username'} eq 'admin' && $member{'settings7'} ne 'Administrator'; |
| |
| |
| |
| $dr_month = $member{'dr_month'}; |
| |
| $dr_day = $member{'dr_day'}; |
| |
| $dr_year = $member{'dr_year'}; |
| |
| $dr_hour = $member{'dr_hour'}; |
| |
| $dr_minute = $member{'dr_minute'}; |
| |
| $dr_secund = $member{'dr_secund'}; |
| |
| |
| |
| if ($dr_month == 4 || $dr_month == 6 || $dr_month == 9 || $dr_month == 11) { |
| |
| $max_days = 30; |
| |
| } elsif ($dr_month == 2 && $dr_year % 4 == 0) { |
| |
| $max_days = 29; |
| |
| } elsif ($dr_month == 2 && $dr_year % 4 != 0) { |
| |
| $max_days = 28; |
| |
| } else { |
| |
| $max_days = 31; |
| |
| } |
| |
| if ($dr_day > $max_days) { $dr_day = $max_days; } |
| |
| |
| |
| $member{'dr'} = qq~$dr_month/$dr_day/$dr_year $maintxt{'107'} $dr_hour:$dr_minute:$dr_secund~; |
| |
| |
| |
| if ($member{'settings6'} != ${$uid.$user}{'postcount'} || $member{'settings7'} ne ${$uid.$user}{'position'}) { |
| |
| if ($member{'settings7'}) { |
| |
| $grp_after = qq~$member{'settings7'}~; |
| |
| } else { |
| |
| foreach $postamount (sort { $b <=> $a } keys %Post) { |
| |
| if ($member{'settings6'} >= $postamount) { |
| |
| ($title, undef) = split(/\|/, $Post{$postamount}, 2); |
| |
| $grp_after = $title; |
| |
| last; |
| |
| } |
| |
| } |
| |
| } |
| |
| &ManageMemberinfo("update", $user, '', '', $grp_after, $member{'settings6'}); |
| |
| } |
| |
| |
| |
| my %groups; |
| |
| map { $groups{$_} = 1; } split(/, /, $member{'addgroup'}); |
| |
| my @nopostmember; |
| |
| foreach (keys %NoPost) { |
| |
| next if $member{'settings7'} eq $_; |
| |
| push(@nopostmember, $_) if $groups{$_}; |
| |
| } |
| |
| $member{'addgroup'} = join(',', @nopostmember); |
| |
| if ($member{'addgroup'} eq '') { $member{'addgroup'} = "###blank###"; } |
| |
| if ($member{'addgroup'} ne ${$uid.$user}{'addgroups'}) { |
| |
| &ManageMemberinfo("update", $user, '', '', '', '', $member{'addgroup'}); |
| |
| } |
| |
| if ($member{'addgroup'} eq "###blank###") { $member{'addgroup'} = ''; } |
| |
| ${$uid.$user}{'addgroups'} = $member{'addgroup'}; |
| |
| |
| |
| if ($member{'dr'} ne ${$uid.$user}{'regdate'}) { |
| |
| $newreg = &stringtotime($member{'dr'}); |
| |
| $newreg = sprintf("%010d", $newreg); |
| |
| &ManageMemberlist("update", $user, $newreg); |
| |
| ${$uid.$user}{'regtime'} = $newreg; |
| |
| } |
| |
| |
| |
| if (!$iamadmin) { $member{'dr'} = ${$uid.$user}{'regdate'}; } |
| |
| &FromChars($member{'regreason'}); |
| |
| &ToHTML($member{'regreason'}); |
| |
| &ToChars($member{'regreason'}); |
| |
| $member{'regreason'} =~ s~[\n\r]{1,2}~<br />~g; |
| |
| ${$uid.$user}{'regreason'} = $member{'regreason'}; |
| |
| ${$uid.$user}{'postcount'} = $member{'settings6'}; |
| |
| ${$uid.$user}{'position'} = $member{'settings7'}; |
| |
| ${$uid.$user}{'regdate'} = $member{'dr'}; |
| |
| ${$uid.$user}{'stealth'} = "" if ${$uid.$user}{'position'} ne 'Administrator' && ${$uid.$user}{'position'} ne 'Global Moderator'; |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| my $error = &ext_validate_submition($username,$user); |
| |
| if ($error ne "") { &fatal_error("extended_profiles_validation",$error); } |
| |
| &ext_saveprofile($user); |
| |
| } |
| |
| &UserAccount($user, "update"); |
| |
| |
| |
| my $scriptAction = $view ? 'myviewprofile' : 'viewprofile'; |
| |
| $yySetLocation = qq~$scripturl?action=$scriptAction;username=$useraccount{$user}~; |
| |
| &redirectexit; |
| |
| } |
| |
| |
| |
| sub ViewProfile { |
| if ( ${ $uid . $user }{'bday'} |
| if ($iamguest) { &fatal_error('members_only'); } |
| && $editAgeLimit |
| |
| && ${ $uid . $user }{'disableage'} >= $editAgeLimit |
| |
| && !$iamadmin |
| |
| && ( !$iamgmod || !$allow_gmod_profile ) ) |
| |
| { |
| |
| ( $user_birth_month, $user_birth_day, $user_birth_year ) = |
| |
| split /\//xsm, ${ $uid . $user }{'bday'}; |
| |
| if ( $member{'bday1'} != $user_birth_month |
| |
| || $member{'bday2'} != $user_birth_day |
| |
| || $member{'bday3'} != $user_birth_year ) |
| |
| { |
| |
| fatal_error('not_allowed_birthdate_change'); |
| |
| } |
| |
| } |
| |
| |
| # If someone registers with a '+' in their name It causes problems. |
| if ( ( $birthday_on_reg > 1 && !$iamadmin && ( !$iamgmod || !$allow_gmod_profile ) ) && ( $member{'bday1'} eq q{} || $member{'bday2'} eq q{} || $member{'bday3'} eq q{} ) ) |
| # Get's turned into a <space> in the query string Change it back here. |
| { |
| # Users who register with spaces get them replaced with _ |
| fatal_error( 'invalid_birthdate', "($member{'bday1'}/$member{'bday2'}/$member{'bday3'})" ); |
| # So no problem there. |
| } |
| $INFO{'username'} =~ tr/ /+/; |
| elsif ( $member{'bday1'} ne q{} || $member{'bday2'} ne q{} || $member{'bday3'} ne q{} ) { |
| |
| if ( $member{'bday1'} !~ /^[0-9]+$/xsm || $member{'bday2'} !~ /^[0-9]+$/xsm || $member{'bday3'} !~ /^[0-9]+$/xsm || length( $member{'bday3'} ) < 4 ) { |
| $user = $INFO{'username'}; |
| fatal_error( 'invalid_birthdate', |
| if ($do_scramble_id) { &decloak($user); } |
| "($member{'bday1'}/$member{'bday2'}/$member{'bday3'})" ); |
| if ($user =~ m~/~) { &fatal_error('no_user_slash'); } |
| } |
| if ($user =~ m~\\~) { &fatal_error('no_user_backslash'); } |
| elsif ( $member{'bday1'} < 1 |
| |
| || $member{'bday1'} > 12 |
| unless (&LoadUser($user)) { &fatal_error('no_profile_exists'); } |
| || $member{'bday2'} < 1 |
| &LoadMiniUser($user) if $user eq $username; |
| || $member{'bday2'} > 31 |
| |
| || $member{'bday3'} < 1901 |
| my ($memberinfo, $modify, $email, $gender, $avstyle, $pic); |
| || $member{'bday3'} > $year - 5 ) |
| my ($pic_row, $buddybutton, $row_addgrp, $row_gender, $row_age, $row_location, $row_icq, $row_aim, $row_yim, $row_msn, $row_gtalk, $row_skype, $row_myspace, $row_facebook, $row_email, $row_website, $row_signature, $showusertext); |
| { |
| |
| fatal_error( 'invalid_birthdate', |
| # Convert forum start date to string, if there is no date set, |
| "($member{'bday1'}/$member{'bday2'}/$member{'bday3'})" ); |
| # Defaults to 1st Jan, 2005 |
| } |
| $forumstart = $forumstart ? &stringtotime($forumstart) : "1104537600"; |
| } |
| |
| $member{'bday1'} =~ s/[^0-9]//gxsm; |
| $memsettingsd[9] = ${$uid.$user}{'aim'}; |
| $member{'bday2'} =~ s/[^0-9]//gxsm; |
| $memsettingsd[9] =~ tr/+/ /; |
| $member{'bday3'} =~ s/[^0-9]//gxsm; |
| $memsettingsd[10] = ${$uid.$user}{'yim'}; |
| if ( $member{'bday1'} ) { |
| $memsettingsd[10] =~ tr/+/ /; |
| $member{'bday'} = |
| |
| "$member{'bday1'}/$member{'bday2'}/$member{'bday3'}"; |
| if (${$uid.$user}{'regtime'}) { |
| } |
| $dr = &timeformat(${$uid.$user}{'regtime'}); |
| else { $member{'bday'} = q{}; } |
| } else { |
| |
| $dr = $profile_txt{'470'}; |
| |
| } |
| |
| |
| |
| &CalcAge($user, "calc"); # How old is he/she? |
| |
| &CalcAge($user, "isbday"); # is it the bday? |
| |
| if ($isbday) { $isbday = qq~<img src="$imagesdir/bdaycake.gif" width="40" />~; } |
| |
| |
| |
| ## only show the 'modify' button if not using 'my center' or admin/gmod viewing |
| |
| $modify = (!$view && ($user ne "admin" || $username eq "admin") && ($iamadmin || ($iamgmod && $allow_gmod_profile && ${$uid.$user}{'position'} ne "Administrator"))) ? qq~<a href="$scripturl?action=profileCheck;username=$useraccount{$user}">$img{'modify'}</a>~ : " "; |
| |
| |
| |
| if ($allowpics) { |
| |
| if (${$uid.$user}{'userpic'} eq "blank.gif") { |
| |
| $pic = qq~<img src="$imagesdir/nn.gif" name="avatar_img_resize" alt="" border="0" style="display:none" />~; |
| |
| } elsif (${$uid.$user}{'userpic'} =~ /^https?:\/\//) { |
| |
| $pic = qq~<img src="${$uid.$user}{'userpic'}" name="avatar_img_resize" alt="" border="0" style="display:none" />~; |
| |
| } else { |
| |
| $pic = qq~<img src="$facesurl/${$uid.$user}{'userpic'}" name="avatar_img_resize" alt="" border="0" style="display:none" />~; |
| |
| } |
| |
| $pic_row = qq~<div style="float: left; width: 20%; text-align: center; padding: 5px 5px 5px 0px;"> |
| |
| $pic |
| |
| </div>~; |
| |
| } |
| |
| |
| |
| if ($buddyListEnabled && $user ne $username) { |
| |
| &loadMyBuddy; |
| |
| $buddybutton = "<br />" . ($mybuddie{$user} ? qq~<img src="$imagesdir/buddylist.gif" border="0" align="middle" alt="$display_txt{'isbuddy'}" /> $display_txt{'isbuddy'}~ : qq~<a href="$scripturl?action=addbuddy;name=$useraccount{$user}">$img{'addbuddy'}</a>~); |
| |
| } |
| |
| |
| |
| # Hide empty profile fields from display |
| |
| if ($addmembergroup{$user}) { |
| |
| $showaddgr = $addmembergroup{$user}; |
| |
| $showaddgr =~ s/<br \/>/\, /g; |
| |
| $showaddgr =~ s/\A, //; |
| |
| $showaddgr =~ s/, \Z//; |
| |
| $row_addgrp .= qq~<br /><span class="small">$showaddgr</span>~; |
| |
| } |
| |
| if (${$uid.$user}{'gender'}) { |
| |
| if (${$uid.$user}{'gender'} eq 'Male') { $gender = $profile_txt{'238'}; } |
| |
| elsif (${$uid.$user}{'gender'} eq 'Female') { $gender = $profile_txt{'239'}; } |
| |
| $row_gender = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'231'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| $gender |
| |
| </div>~; |
| |
| } |
| |
| if ($age) { |
| |
| $row_age = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'420'}:</b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| $age $isbday |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'location'}) { |
| |
| $row_location = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'227'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| ${$uid.$user}{'location'} |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'icq'} && ${$uid.$user}{'icq'} !~ m/\D/) { |
| |
| $row_icq .= qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'513'}:</b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <a href="http://web.icq.com/${$uid.$user}{'icq'}" title="${$uid.$user}{'icq'}" target="_blank"> |
| |
| <img src="http://web.icq.com/whitepages/online?icq=${$uid.$user}{'icq'}&img=5" alt="${$uid.$user}{'icq'}" border="0" style="vertical-align: middle;" /> ${$uid.$user}{'icq'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'aim'}) { |
| |
| $row_aim = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'603'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <a href="aim:goim?screenname=${$uid.$user}{'aim'}&message=Hi,+are+you+there?"> |
| |
| <img src="$imagesdir/aim.gif" alt="${$uid.$user}{'aim'}" border="0" style="vertical-align: middle;" /> $memsettingsd[9]</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'yim'}) { |
| |
| $row_yim = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'604'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="http://opi.yahoo.com/online?u=${$uid.$user}{'yim'}&m=g&t=0" border="0" alt="${$uid.$user}{'yim'}" style="vertical-align: middle;" /> |
| |
| <a href="http://edit.yahoo.com/config/send_webmesg?.target=${$uid.$user}{'yim'}" target="_blank"> $memsettingsd[10]</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'msn'}) { |
| |
| $row_msn = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'823'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="$imagesdir/msn.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <a href="#" onclick="window.open('$scripturl?action=setmsn;msnname=$user','','height=80,width=340,menubar=no,toolbar=no,scrollbars=no'); return false">$profile_txt{'823'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'gtalk'}) { |
| |
| $row_gtalk = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'825'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="$imagesdir/gtalk2.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <a href="#" onclick="window.open('$scripturl?action=setgtalk;gtalkname=$user','','height=80,width=340,menubar=no,toolbar=no,scrollbars=no'); return false">$profile_txt{'825'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'skype'}) { |
| |
| $row_skype = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'827'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="$imagesdir/skype.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <a href="javascript:void(window.open('callto://${$uid.$user}{'skype'}','skype','height=80,width=340,menubar=no,toolbar=no,scrollbars=no'))">$profile_txt{'827'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'myspace'}) { |
| |
| $row_myspace = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'570'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="$imagesdir/myspace.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <a href="http://www.myspace.com/${$uid.$user}{'myspace'}" target="_blank">$profile_txt{'570'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'facebook'}) { |
| |
| $row_facebook = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'573'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <img src="$imagesdir/facebook.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <a href="http://www.facebook.com/~ . (${$uid.$user}{'facebook'} !~ /\D/ ? "profile.php?id=" : "") . qq~${$uid.$user}{'facebook'}" target="_blank"> ${$uid.$user}{'facebook'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (!${$uid.$user}{'hidemail'} || $iamadmin || !$allow_hide_email || $view) { |
| |
| my $rowEmail = ''; |
| |
| if ($view) { |
| |
| if (!${$uid.$user}{'hidemail'}) { |
| |
| $rowEmail = $profile_txt{'showingemail'}; |
| |
| } else { |
| |
| my ($admtitle, undef) = split(/\|/, $Group{'Administrator'}, 2); |
| |
| $rowEmail = qq~$profile_txt{'notshowingemail'} $admtitle$profile_txt{'notshowingemailend'}~; |
| |
| } |
| |
| } else { |
| |
| $rowEmail = &enc_eMail("$profile_txt{'889'} ${$uid.$user}{'realname'}",${$uid.$user}{'email'},'',''); |
| |
| } |
| |
| |
| |
| $row_email = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'69'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| $rowEmail |
| |
| </div>~; |
| |
| } |
| |
| if (!$minlinkweb) { $minlinkweb = 0; } |
| |
| if (${$uid.$user}{'weburl'} && ${$uid.$user}{'webtitle'} && (${$uid.$user}{'postcount'} >= $minlinkweb || ${$uid.$user}{'position'} eq 'Administrator' || ${$uid.$user}{'position'} eq 'Global Moderator')) { |
| |
| $row_website = qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'96'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <a href="${$uid.$user}{'weburl'}" target="_blank">${$uid.$user}{'webtitle'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if (${$uid.$user}{'signature'}) { |
| |
| # do some ubbc on the signature to display in the view profile area |
| |
| $message = ${$uid.$user}{'signature'}; |
| |
| $displayname = ${$uid.$user}{'realname'}; |
| |
| |
| |
| if ($enable_ubbc) { |
| |
| if (!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } |
| |
| &DoUBBC(1); |
| |
| } |
| |
| |
| |
| &ToChars($message); |
| |
| |
| |
| # Censor the signature. |
| |
| &LoadCensorList; |
| |
| $message = &Censor($message); |
| |
| |
| |
| $row_signature = qq~ |
| |
| <tr> |
| |
| <td class="catbg" align="left"> |
| |
| <img src="$imagesdir/profile.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <span class="text1"><b>$profile_txt{'85'}</b></span> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td align="left" class="windowbg2"> |
| |
| <div style="float: left; width: 100%; padding-top: 8px; padding-bottom: 8px; overflow: auto;"> |
| |
| $message |
| |
| </div> |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| if ($img_greybox) { |
| |
| $yyinlinestyle .= qq~<link href="$yyhtml_root/greybox/gb_styles.css" rel="stylesheet" type="text/css" />\n~; |
| |
| $yyjavascript .= qq~ |
| |
| var GB_ROOT_DIR = "$yyhtml_root/greybox/"; |
| |
| // --> |
| |
| </script> |
| |
| <script type="text/javascript" src="$yyhtml_root/AJS.js"></script> |
| |
| <script type="text/javascript" src="$yyhtml_root/AJS_fx.js"></script> |
| |
| <script type="text/javascript" src="$yyhtml_root/greybox/gb_scripts.js"></script> |
| |
| <script type="text/javascript"> |
| |
| <!--~; |
| |
| } |
| |
| } |
| |
| |
| |
| # End empty field checking |
| |
| |
| |
| # Just maths below... |
| |
| $post_count = ${$uid.$user}{'postcount'}; |
| |
| if (!$post_count) { $post_count = 0 } |
| |
| |
| |
| $string_regdate = &stringtotime(${$uid.$user}{'regdate'}); |
| |
| $string_curdate = $date; |
| |
| |
| |
| #if ($string_regdate < $forumstart) { $string_regdate = $forumstart } |
| |
| if ($string_curdate < $forumstart) { $string_curdate = $forumstart } |
| |
| |
| |
| $member_for_days = int(($string_curdate - $string_regdate) / 86400); |
| |
| |
| |
| if ($member_for_days < 1) { $tmpmember_for_days = 1; } |
| |
| else { $tmpmember_for_days = $member_for_days; } |
| |
| $post_per_day = sprintf("%.2f", ($post_count / $tmpmember_for_days)); |
| |
| $member_for_days = &NumberFormat($member_for_days); |
| |
| $post_per_day = &NumberFormat($post_per_day); |
| |
| $post_count = &NumberFormat($post_count); |
| |
| |
| |
| # End statistics. |
| |
| if (${$uid.$user}{'usertext'}) { |
| |
| # Censor the usertext and wrap it |
| |
| &LoadCensorList; |
| |
| $showusertext = &WrapChars(&Censor(${$uid.$user}{'usertext'}),20); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <table border="0" cellpadding="8" cellspacing="1" class="bordercolor" align="center" width="100%">~; |
| |
| if (!$view) { |
| |
| $yynavigation = qq~› $profile_txt{'92'}~; |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="titlebg" width="100%" align="left"> |
| |
| <div class="text1" style="float: left; width: 100%;">~; |
| |
| if ($iamadmin || $iamgmod) { |
| |
| $showProfile .= qq~ |
| |
| <img src="$imagesdir/profile.gif" alt="" border="0" style="vertical-align: middle;" /> <b>$profile_txt{'35'}: $INFO{'username'}</b>~; |
| |
| } else { |
| |
| $showProfile .= qq~ |
| |
| <img src="$imagesdir/profile.gif" alt="" border="0" style="vertical-align: middle;" /> <b>$profile_txt{'68'}: ${$uid.$INFO{'username'}}{'realname'}</b>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| </div> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="windowbg" valign="middle"> |
| |
| $pic_row |
| |
| <div style="float: left; width: 60%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <span style="font-size: 18px;">${$uid.$user}{'realname'}</span><br /> |
| |
| $col_title{$user} |
| |
| $row_addgrp<br /> |
| |
| $memberstar{$user} |
| |
| ~ . &userOnLineStatus($user) . qq~<br /> |
| |
| <span class="small">$showusertext</span> |
| |
| <span class="small">$buddybutton</span> |
| |
| </div> |
| |
| <div style="float: right; width: 19%; text-align: right;"> |
| |
| $modify |
| |
| </div> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td class="windowbg2" align="left" valign="top"> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'21'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$post_count<br />$post_per_day</b> $profile_txt{'893'} |
| |
| </div> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'233'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| $dr<br /><b>$member_for_days</b> $profile_txt{'894'} |
| |
| </div> |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| if ($row_gender || $row_age || $row_location) { |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="windowbg2" align="left" valign="top"> |
| |
| $row_gender |
| |
| $row_age |
| |
| $row_location |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { |
| |
| require "$sourcedir/ExtendedProfiles.pl"; |
| |
| $showProfile .= &ext_viewprofile($user); |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="catbg" align="left"> |
| |
| <img src="$imagesdir/profile.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <span class="text1"><b>$profile_txt{'819'}</b></span> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td class="windowbg2" align="left">~; |
| |
| |
| |
| &CheckUserPM_Level($user); |
| |
| if (!$view && $user ne $username && ($PM_level == 1 || ($PM_level == 2 && $UserPM_Level{$user} > 1 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && $UserPM_Level{$user} == 3 && ($iamadmin || $iamgmod)))) { |
| |
| $showProfile .= qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <b>$profile_txt{'144'}: </b> |
| |
| </div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;"> |
| |
| <a href="$scripturl?action=imsend;to=$useraccount{$user}">$profile_txt{'688'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| $row_email |
| |
| $row_website |
| |
| $row_aim |
| |
| $row_msn |
| |
| $row_skype |
| |
| $row_yim |
| |
| $row_gtalk |
| |
| $row_myspace |
| |
| $row_facebook |
| |
| $row_icq |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| $userlastlogin = &timeformat(${$uid.$user}{'lastonline'}); |
| |
| $userlastpost = &timeformat(${$uid.$user}{'lastpost'}); |
| |
| $userlastim = &timeformat(${$uid.$user}{'lastim'}); |
| |
| if ($userlastlogin eq "") { $userlastlogin = "$profile_txt{'470'}"; } |
| |
| if ($userlastpost eq "") { $userlastpost = "$profile_txt{'470'}"; } |
| |
| if ($userlastim eq "") { $userlastim = "$profile_txt{'470'}"; } |
| |
| my ($lastonline, $lastpost, $lastPM); |
| |
| ## MF-B code fix for lpd |
| |
| if (${$uid.$user}{'postcount'} > 0) { |
| |
| $userlastpost = &usersrecentposts(1); |
| |
| } |
| |
| #### |
| |
| if (!$view) { |
| |
| $lastonline = qq~$profile_amv_txt{'9'}~; |
| |
| $lastpost = qq~$profile_amv_txt{'10'}~; |
| |
| $lastPM = qq~$profile_amv_txt{'11'}~; |
| |
| |
| |
| } else { |
| |
| $lastonline = qq~$profile_amv_txt{'mylastonline'}~; |
| |
| $lastpost = qq~$profile_amv_txt{'mylastpost'}~; |
| |
| $lastPM = qq~$profile_amv_txt{'mylastpm'}~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| $row_signature |
| |
| <tr> |
| |
| <td class="catbg" align="left"> |
| |
| <img src="$imagesdir/profile.gif" alt="" border="0" style="vertical-align: middle;" /> |
| |
| <span class="text1"><b>$profile_txt{'459'}</b></span> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td class="windowbg2" align="left"> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$lastonline: </b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">$userlastlogin</div> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$lastpost:</b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">$userlastpost</div>\n~; |
| |
| |
| |
| if ($PM_level == 1 || ($PM_level == 2 && ($iamadmin || $iamgmod || $iammod)) || ($PM_level == 3 && ($iamadmin || $iamgmod))) { |
| |
| $showProfile .= qq~ |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$lastPM: </b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">$userlastim</div>~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| </td> |
| |
| </tr>~; |
| |
| |
| |
| if (($iamadmin || $iamgmod && $gmod_access2{'ipban3'}) && !$view && $user ne $username && ${$uid.$user}{'position'} ne 'Administrator') { |
| |
| $is_banned = &check_banlist("${$uid.$user}{'email'}","","$user"); |
| |
| $ban_user_email = ${$uid.$user}{'email'}; |
| |
| $ban_user_email =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; |
| |
| if ($is_banned =~/E/) { $ban_email_link = qq~<a href="$adminurl?action=ipban3;ban_email=$ban_user_email;username=$useraccount{$user};unban=1"><span class="small">[$profile_txt{'904'}]</span></a>~; } |
| |
| else { $ban_email_link = qq~<a href="$adminurl?action=ipban3;ban_email=$ban_user_email;username=$useraccount{$user}"><span class="small">[$profile_txt{'907'}]</span></a>~; } |
| |
| |
| |
| $ban_user_name = $useraccount{$user}; |
| |
| $ban_user_name =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; |
| |
| if ($is_banned =~/U/) { $ban_user_link = qq~<a href="$adminurl?action=ipban3;ban_memname=$ban_user_name;username=$useraccount{$user};unban=1"><span class="small">[$profile_txt{'903'}]</span></a>~; } |
| |
| else { $ban_user_link = qq~<a href="$adminurl?action=ipban3;ban_memname=$ban_user_name;username=$useraccount{$user}"><span class="small">[$profile_txt{'906'}]</span></a>~; } |
| |
| |
| |
| # Shows the banning stuff for IP's |
| |
| if (${$uid.$user}{'lastips'}) { |
| |
| ($ip_one, $ip_two, $ip_three) = split (/\|/, ${$uid.$user}{'lastips'}); |
| |
| |
| |
| if (&check_banlist("","$ip_one","")) { $banlink_one = qq~<a href="$adminurl?action=ipban3;ban=$ip_one;username=$useraccount{$user};unban=1"><span class="small">[$profile_txt{'905'}]</span></a>~; } |
| |
| else { $banlink_one = qq~<a href="$adminurl?action=ipban3;ban=$ip_one;username=$useraccount{$user}"><span class="small">[$profile_txt{'908'}]</span></a>~; } |
| |
| |
| |
| if (&check_banlist("","$ip_two","")) { $banlink_two = qq~<a href="$adminurl?action=ipban3;ban=$ip_two;username=$useraccount{$user};unban=1"><span class="small">[$profile_txt{'905'}]</span></a>~; } |
| |
| else { $banlink_two = qq~<a href="$adminurl?action=ipban3;ban=$ip_two;username=$useraccount{$user}"><span class="small">[$profile_txt{'908'}]</span></a>~; } |
| |
| |
| |
| if (&check_banlist("","$ip_three","")) { $banlink_three = qq~<a href="$adminurl?action=ipban3;ban=$ip_three;username=$useraccount{$user};unban=1"><span class="small">[$profile_txt{'905'}]</span></a>~; } |
| |
| else { $banlink_three = qq~<a href="$adminurl?action=ipban3;ban=$ip_three;username=$useraccount{$user}"><span class="small">[$profile_txt{'908'}]</span></a>~; } |
| |
| |
| |
| if ($ip_one) { $ip_ban_options = qq~$ip_one<br />$banlink_one <br />~; } |
| |
| if ($ip_two) { $ip_ban_options .= qq~$ip_two<br />$banlink_two <br />~; } |
| |
| if ($ip_three) { $ip_ban_options .= qq~$ip_three<br />$banlink_three <br />~; } |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="windowbg2" align="left"> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$profile_txt{'902'}:</b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">$user<br />$ban_user_link</div> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$profile_txt{'69'}:</b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">${$uid.$user}{'email'}<br />$ban_email_link</div> |
| |
| <div style="float: left; clear: left; width: 30%; padding-top: 5px; padding-bottom: 5px;"><b>$profile_txt{'909'}:</b></div> |
| |
| <div style="float: left; width: 70%; padding-top: 5px; padding-bottom: 5px;">$ip_ban_options</div> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| if (${$uid.$user}{'postcount'} > 0 && $maxrecentdisplay > 0 && !$view) { |
| |
| $showProfile .= qq~ |
| |
| <tr> |
| |
| <td class="windowbg2" align="left"> |
| |
| <form action="$scripturl?action=usersrecentposts;username=$useraccount{$user}" method="post"> |
| |
| $profile_txt{'460'} <select name="viewscount" size="1">~; |
| |
| |
| |
| my ($x,$y) = (int($maxrecentdisplay/5),0); |
| |
| if ($x) { |
| |
| for (my $i = 1; $i <= 5; $i++) { |
| |
| $y = $i * $x; |
| |
| $showProfile .= qq~ |
| |
| <option value="$y">$y</option>~; |
| |
| } |
| |
| } |
| |
| $showProfile .= qq~ |
| |
| <option value="$maxrecentdisplay">$maxrecentdisplay</option>~ if $maxrecentdisplay > $y; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| </select> $profile_txt{'461'} ${$uid.$user}{'realname'}. |
| |
| <input type="submit" value="$profile_txt{'462'}" class="button" /> |
| |
| </form> |
| |
| </td> |
| |
| </tr>~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| if ( ${ $uid . $user }{'bday'} ne "$member{'bday'}" ) { |
| </table> |
| $Update_EventCal = 1; |
| ~; |
| } |
| |
| |
| $yytitle = "$profile_txt{'92'} ${$uid.$user}{'realname'}"; |
| if ( |
| if (!$view) { |
| $editGenderLimit |
| $yymain .= $showProfile; |
| && ( ${ $uid . $user }{'gender'} ne $member{'gender'} |
| &template; |
| || ${ $uid . $user }{'gender'} eq q{} ) |
| } |
| ) |
| } |
| { |
| |
| if ( ${ $uid . $user }{'disablegender'} eq q{} ) { |
| |
| ${ $uid . $user }{'disablegender'} = 1; |
| |
| } |
| |
| else { ${ $uid . $user }{'disablegender'}++; } |
| |
| } |
| |
| if ( |
| |
| $editAgeLimit |
| |
| && ( ${ $uid . $user }{'bday'} ne $member{'bday'} |
| |
| || ${ $uid . $user }{'bday'} eq q{} ) |
| |
| ) |
| |
| { |
| |
| if ( ${ $uid . $user }{'disableage'} eq q{} ) { |
| |
| ${ $uid . $user }{'disableage'} = 1; |
| |
| } |
| |
| else { ${ $uid . $user }{'disableage'}++; } |
| |
| } |
| |
| |
| sub usersrecentposts { |
| # EventCal Begin |
| if ($iamguest) { &fatal_error("members_only"); } |
| if ( ${ $uid . $user }{'bday'} ne "$member{'bday'}" |
| if ($INFO{'username'} =~ /\//) { &fatal_error("no_user_slash"); } |
| || ${ $uid . $user }{'hideage'} ne "$member{'hideage'}" ) |
| if ($INFO{'username'} =~ /\\/) { &fatal_error("no_user_backslash"); } |
| { |
| if (!-e ("$memberdir/$INFO{'username'}.vars")) { &fatal_error("no_profile_exists"); } |
| $Update_EventCal = 1; |
| &spam_protection if $action =~ /^(?:my)?usersrecentposts$/; |
| } |
| |
| |
| my $curuser = $INFO{'username'}; |
| |
| &LoadUser($curuser); |
| |
| |
| |
| my $display = $FORM{'viewscount'} ? $FORM{'viewscount'} : $_[0]; |
| |
| if (!$display) { $display = 5; } |
| |
| elsif ($display =~ /\D/) { &fatal_error("only_numbers_allowed"); } |
| |
| if ($display > $maxrecentdisplay) { $display = $maxrecentdisplay; } |
| |
| |
| |
| my (%data, $numfound, %threadfound, %boardtxt, %recentthreadfound, $recentfound, $save_recent, $boardperms, $curcat, %boardcat, %catinfos, %catboards, $openmemgr, @membergroups, $tmpa, %openmemgr, $curboard, @threads, @boardinfo, $i, $c, @messages, $tnum, $tsub, $tname, $temail, $tdate, $treplies, $tusername, $ticon, $tstate, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $mns, $counter, $board, $notify, $catid); |
| |
| |
| |
| &Recent_Load($curuser); |
| |
| my @recent = sort { ${$recent{$b}}[1] <=> ${$recent{$a}}[1] } grep { ${$recent{$_}}[1] > 0 } keys %recent; |
| |
| my $recentcount = keys %recent; |
| |
| my @data; |
| |
| $#data = $display - 1; |
| |
| @data = map(0, @data); |
| |
| |
| |
| if (!$mloaded) { require "$boardsdir/forum.master"; } |
| |
| foreach $catid (@categoryorder) { |
| |
| foreach (split(/\,/, $cat{$catid})) { |
| |
| $boardcat{$_} = $catid; |
| |
| @{$catinfos{$_}} = split(/\|/, $catinfo{$catid}, 3); |
| |
| } |
| |
| } |
| |
| |
| |
| recentcheck: foreach $thread (@recent) { |
| |
| &MessageTotals("load",$thread); |
| |
| if (${$thread}{'board'} eq '') { |
| |
| $save_recent = 1; |
| |
| delete $recent{$thread}; |
| |
| $recentcount--; |
| |
| next recentcheck; |
| |
| } |
| |
| $curboard = ${$thread}{'board'}; |
| |
| |
| |
| if (!$boardtxt{$curboard}) { |
| |
| ($boardname{$curboard}, $boardperms, undef) = split(/\|/, $board{$curboard}); |
| |
| |
| |
| if (!$iamadmin && (!&CatAccess(${$catinfos{$curboard}}[1]) || &AccessCheck($curboard,'',$boardperms) ne "granted")) { $recentcount--; next recentcheck; } |
| |
| |
| |
| fopen(FILE, "$boardsdir/$curboard.txt"); |
| |
| @{$boardtxt{$curboard}} = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| if (!@{$boardtxt{$curboard}}) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$thread}; |
| |
| $recentcount--; |
| |
| next recentcheck; |
| |
| } |
| |
| } elsif ($numfound) { |
| |
| $recentfound += $recentthreadfound{$thread} if exists $recentthreadfound{$thread}; |
| |
| last if $recentfound >= $display && $data[$#data] > ${$recent{$thread}}[1]; |
| |
| next; |
| |
| } |
| |
| |
| |
| for ($i = 0; $i < @{$boardtxt{$curboard}}; $i++) { |
| |
| ($tnum, $tsub, $tname, $temail, $tdate, $treplies, $tusername, $ticon, $tstate) = split(/\|/, ${$boardtxt{$curboard}}[$i]); |
| |
| |
| |
| if (($display == 1 && $thread == $tnum) || ($display > 1 && exists $recent{$tnum})) { |
| |
| if ($tstate =~ /h/ && !$iamadmin && !$iamgmod) { |
| |
| $recentcount--; |
| |
| } else { |
| |
| fopen(FILE, "$datadir/$tnum.txt"); |
| |
| @messages = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| my $usercheck = 0; |
| |
| |
| |
| for ($c = $#messages; $c >= 0 ; $c--) { |
| |
| ($msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns) = split(/\|/, $messages[$c]); |
| |
| |
| |
| if ($curuser eq $musername) { |
| |
| my @i = (@data, $mdate); |
| |
| @data = sort { $b <=> $a } @i; |
| |
| if (pop(@data) < $mdate) { |
| |
| chomp $mns; |
| |
| $data{$mdate} = [$curboard, $tnum, $c, $tname, $msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns, $tstate]; |
| |
| if (!$usercheck) { |
| |
| $numfound++; |
| |
| $threadfound{$tnum} = 1; |
| |
| } |
| |
| if (exists $recent{$tnum}) { |
| |
| $recentthreadfound{$tnum}++; |
| |
| $recentfound++ if $thread == $tnum; |
| |
| } |
| |
| if (${$recent{$tnum}}[1] < $mdate) { |
| |
| $save_recent = 1; |
| |
| ${$recent{$tnum}}[1] = $mdate; |
| |
| } |
| |
| } |
| |
| $usercheck = 1; |
| |
| } |
| |
| } |
| |
| if (!$usercheck) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$tnum}; |
| |
| $recentcount--; |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| if ($recentfound < $display && $numfound < $recentcount) { |
| |
| categorycheck: foreach $catid (@categoryorder) { |
| |
| if (!&CatAccess((split(/\|/, $catinfo{$catid}, 3))[1])) { next categorycheck; } |
| |
| |
| |
| boardcheck: foreach $curboard (split(/\,/, $cat{$catid})) { |
| |
| if (!$boardtxt{$curboard}) { |
| |
| ($boardname{$curboard}, $boardperms, undef) = split(/\|/, $board{$curboard}); |
| |
| |
| |
| if (!$iamadmin && &AccessCheck($curboard,'',$boardperms) ne "granted") { next boardcheck; } |
| |
| |
| |
| fopen(FILE, "$boardsdir/$curboard.txt") || next boardcheck; |
| |
| @{$boardtxt{$curboard}} = <FILE>; |
| |
| fclose(FILE); |
| |
| } |
| |
| |
| |
| for ($i = 0; $i < @{$boardtxt{$curboard}}; $i++) { |
| |
| ($tnum, $tsub, $tname, $temail, $tdate, $treplies, $tusername, $ticon, $tstate) = split(/\|/, ${$boardtxt{$curboard}}[$i]); |
| |
| |
| |
| if (exists($recent{$tnum}) && !exists $threadfound{$tnum}) { |
| |
| unless ($tstate =~ /h/ && !$iamadmin && !$iamgmod) { |
| |
| fopen(FILE, "$datadir/$tnum.txt"); |
| |
| @messages = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| my $usercheck = 0; |
| |
| |
| |
| for ($c = $#messages; $c >= 0 ; $c--) { |
| |
| ($msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns) = split(/\|/, $messages[$c]); |
| |
| |
| |
| if ($curuser eq $musername) { |
| |
| my @i = @data; |
| |
| push(@i, $mdate); |
| |
| @data = sort { $b <=> $a } @i; |
| |
| if (pop(@data) != $mdate) { |
| |
| chomp $mns; |
| |
| $data{$mdate} = [$curboard, $tnum, $c, $tname, $msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns, $tstate]; |
| |
| if (${$recent{$tnum}}[1] < $mdate) { |
| |
| $save_recent = 1; |
| |
| ${$recent{$tnum}}[1] = $mdate; |
| |
| } |
| |
| } |
| |
| $usercheck = 1; |
| |
| } |
| |
| } |
| |
| |
| |
| if (!$usercheck) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$tnum}; |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| undef %boardtxt; |
| |
| |
| |
| &Recent_Save($curuser) if $save_recent; |
| |
| |
| |
| if ($display == 1) { |
| |
| return if !$data[0]; |
| |
| ($board, $tnum, $c, $tname, $msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns, $tstate) = @{$data{$data[0]}}; |
| |
| &ToChars($msub); |
| |
| ($msub, undef) = &Split_Splice_Move($msub,0); |
| |
| return (&timeformat($mdate) . qq~<br />$profile_txt{'view'} › <a href="$scripturl?num=$tnum/$c#$c">$msub</a>~); |
| |
| } |
| |
| |
| |
| &LoadCensorList; |
| |
| |
| |
| for ($i = 0; $i < @data; $i++) { |
| |
| next if !$data[$i]; |
| |
| |
| |
| ($board, $tnum, $c, $tname, $msub, $mname, $memail, $mdate, $musername, $micon, $mattach, $mip, $message, $mns, $tstate) = @{$data{$data[$i]}}; |
| |
| ($msub, undef) = &Split_Splice_Move($msub,0); |
| |
| &wrap; |
| |
| $displayname = $mname; |
| |
| ($message, undef) = &Split_Splice_Move($message,$tnum); |
| |
| if ($enable_ubbc) { |
| |
| $ns = $mns; |
| |
| if (!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } |
| |
| &DoUBBC; |
| |
| } |
| |
| &wrap2; |
| |
| &ToChars($msub); |
| |
| &ToChars($message); |
| |
| $msub = &Censor($msub); |
| |
| $message = &Censor($message); |
| |
| &ToChars(${$catinfos{$board}}[0]); |
| |
| &ToChars($boardname{$board}); |
| |
| |
| |
| $mdate = &timeformat($mdate); |
| |
| |
| |
| $counter++; |
| |
| |
| |
| $showProfile .= qq~ |
| |
| <table border="0" width="100%" cellspacing="1" class="bordercolor" style="table-layout: fixed;"> |
| |
| <tr> |
| |
| <td align="center" width="5%" class="titlebg">$counter</td> |
| |
| <td align="left" width="95%" class="titlebg"> <a href="$scripturl?catselect=$boardcat{$board}"><u>${$catinfos{$board}}[0]</u></a> / <a href="$scripturl?board=$board"><u>$boardname{$board}</u></a> / <a href="$scripturl?num=$tnum/$c#$c"><u>$msub</u></a><br /> |
| |
| <span class="small">$profile_txt{'30'}: $mdate</span> </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td colspan="2"> |
| |
| <table border="0" width="100%" class="catbg"> |
| |
| <tr> |
| |
| <td align="left">$maintxt{'109'} $tname | $maintxt{'197'} ${$uid.$curuser}{'realname'}</td> |
| |
| <td align="right"> ~; |
| |
| |
| |
| if ($tstate != 1) { |
| |
| if (${$uid.$username}{'thread_notifications'} =~ /\b$tnum\b/) { |
| |
| $notify = qq~$menusep<a href="$scripturl?action=notify3;num=$tnum/$c;oldnotify=1">$img{'del_notify'}</a>~; |
| |
| } else { |
| |
| $notify = qq~$menusep<a href="$scripturl?action=notify2;num=$tnum/$c;oldnotify=1">$img{'add_notify'}</a>~; |
| |
| } |
| |
| $showProfile .= qq~<a href="$scripturl?board=$board;action=post;num=$tnum/$c#$c;title=PostReply">$img{'reply'}</a>$menusep<a href="$scripturl?board=$board;action=post;num=$tnum;quote=$c;title=PostReply">$img{'recentquote'}</a>$notify ~; |
| |
| } |
| |
| |
| |
| $showProfile .= qq~ |
| |
| </td> |
| |
| </tr> |
| |
| </table> |
| |
| </td> |
| |
| </tr> |
| |
| <tr> |
| |
| <td align="left" height="80" colspan="2" class="windowbg2" valign="top"><div style="float: left; width: 99%; overflow: auto;">$message</div></td> |
| |
| </tr> |
| |
| </table><br />~; |
| |
| } |
| |
| |
| |
| if (!$counter) { |
| |
| $showProfile .= qq~<span class="text1"><b>$profile_txt{'755'}</b></span>~; |
| |
| } elsif (!$view) { |
| |
| $showProfile .= qq~<p align=left><a href="$scripturl?action=viewprofile;username=$useraccount{$curuser}"><b>$profile_txt{'92'} ${$uid.$curuser}{'realname'}</b></a></p>~; |
| |
| } |
| |
| |
| |
| if ($img_greybox) { |
| |
| $yyinlinestyle .= qq~<link href="$yyhtml_root/greybox/gb_styles.css" rel="stylesheet" type="text/css" />\n~; |
| |
| $yyjavascript .= qq~ |
| |
| var GB_ROOT_DIR = "$yyhtml_root/greybox/"; |
| |
| // --> |
| |
| </script> |
| |
| <script type="text/javascript" src="$yyhtml_root/AJS.js"></script> |
| |
| <script type="text/javascript" src="$yyhtml_root/AJS_fx.js"></script> |
| |
| <script type="text/javascript" src="$yyhtml_root/greybox/gb_scripts.js"></script> |
| |
| <script type="text/javascript"> |
| |
| <!--~; |
| |
| } |
| |
| |
| |
| $yytitle = "$profile_txt{'458'} ${$uid.$curuser}{'realname'}"; |
| |
| if (!$view) { |
| |
| $yynavigation = qq~› $maintxt{'213'}~; |
| |
| $yymain .= $showProfile; |
| |
| &template; |
| |
| } |
| |
| } |
| |
| |
| |
| sub DrawGroups { |
| # EventCal End |
| my ($availgroups,$position,$show_additional) = @_; |
| |
| my (%groups, $groupsel, $name, $additional); |
| if ($extendedprofiles) { # run this before you start to save something! |
| map { $groups{$_} = 1; } split(/,/, $availgroups); |
| require Sources::ExtendedProfiles; |
| |
| my $error = ext_validate_submition( $username, $user ); |
| |
| if ( $error ne q{} ) { |
| |
| fatal_error( 'extended_profiles_validation', $error ); |
| |
| } |
| |
| ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| if ( ${ $uid . $user }{'realname'} ne $member{'name'} ) { |
| |
| $member{'name'} =~ s/\t+/\ /gsm; |
| |
| } |
| |
| if ( $member{'name'} eq q{} ) { fatal_error('no_name'); } |
| |
| if ( $name_cannot_be_userid |
| |
| && lc $member{'name'} eq lc $member{'username'} ) |
| |
| { |
| |
| fatal_error('name_is_userid'); |
| |
| } |
| |
| |
| |
| LoadCensorList(); |
| |
| if ( Censor( $member{'name'} ) ne $member{'name'} ) { |
| |
| fatal_error( 'name_censored', CheckCensor("$member{'name'}") ); |
| |
| } |
| |
| |
| |
| if ( ${ $uid . $user }{'password'} eq |
| |
| encode_password( $member{'name'} ) ) |
| |
| { |
| |
| fatal_error('password_is_userid'); |
| |
| } |
| |
| |
| foreach my $key (@nopostorder) { |
| FromChars( $member{'name'} ); |
| ($name, undef, undef, undef, undef, undef, undef, undef, undef, undef, $additional) = split(/\|/, $NoPost{$key}); |
| $convertstr = $member{'name'}; |
| next if (!$show_additional && !$additional) || $position eq $key; |
| $convertcut = 30; |
| |
| CountChars(); |
| |
| $member{'name'} = $convertstr; |
| |
| if ($cliped) { fatal_error('name_too_long'); } |
| |
| if ( |
| |
| $member{'name'} =~ /[^ \w\x80-\xFF\[\]\(\)#\%\+,\-\|\.:=\?\@\^]/sm ) |
| |
| { |
| |
| fatal_error( 'invalid_character', |
| |
| "$profile_txt{'68'} $profile_txt{'241re'}" ); |
| |
| } |
| |
| |
| |
| ToHTML( $member{'name'} ); |
| |
| if ( $user ne 'admin' ) { |
| |
| |
| |
| # Check to see if name is reserved |
| |
| fopen( FILE, "$vardir/reservecfg.txt" ) |
| |
| or fatal_error( 'cannot_open', "$vardir/reservecfg.txt", 1 ); |
| |
| my @reservecfg = <FILE>; |
| |
| fclose(FILE); |
| |
| chomp @reservecfg; |
| |
| my $matchword = $reservecfg[0] eq 'checked'; |
| |
| my $matchcase = $reservecfg[1] eq 'checked'; |
| |
| my $matchname = $reservecfg[3] eq 'checked'; |
| |
| my $namecheck = |
| |
| $matchcase eq 'checked' |
| |
| ? $member{'name'} |
| |
| : lc $member{'name'}; |
| |
| |
| |
| fopen( FILE, "$vardir/reserve.txt" ) |
| |
| or fatal_error( 'cannot_open', "$vardir/reserve.txt", 1 ); |
| |
| my @reserve = <FILE>; |
| |
| fclose(FILE); |
| |
| foreach my $reserved (@reserve) { |
| |
| chomp $reserved; |
| |
| my $reservecheck = $matchcase ? $reserved : lc $reserved; |
| |
| if ($matchname) { |
| |
| if ($matchword) { |
| |
| if ( $namecheck eq $reservecheck ) { |
| |
| fatal_error( 'id_reserved', "$reserved" ); |
| |
| } |
| |
| } |
| |
| else { |
| |
| if ( $namecheck =~ $reservecheck ) { |
| |
| fatal_error( 'id_reserved', "$reserved" ); |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| if ( |
| |
| ( |
| |
| lc MemberIndex( 'check_exist', $member{'name'}, 1 ) eq |
| |
| lc $member{'name'} |
| |
| ) |
| |
| && ( lc $member{'name'} ne lc ${ $uid . $user }{'realname'} ) |
| |
| && ( lc $member{'name'} ne lc $member{'username'} ) |
| |
| ) |
| |
| { |
| |
| ToChars($member{'name'}); |
| |
| fatal_error( 'name_taken', "($member{'name'})" ); |
| |
| } |
| |
| |
| |
| # rewrite attachments.txt with new username |
| |
| fopen( ATM, "<$vardir/attachments.txt", 1 ) |
| |
| or fatal_error( 'cannot_open', "$vardir/attachments.txt" ); |
| |
| my @attachments = <ATM>; |
| |
| fclose(ATM); |
| |
| |
| |
| for my $i ( 0 .. $#attachments ) { |
| |
| $attachments[$i] =~ |
| |
| s/^(\d+\|\d+\|.*?)\|(.*?)\|/ ($2 eq ${$uid.$user}{'realname'} ? "$1|$member{'name'}|" : "$1|$2|") /esm; |
| |
| } |
| |
| fopen( ATM, ">$vardir/attachments.txt", 1 ) |
| |
| or fatal_error( 'cannot_open', "$vardir/attachments.txt" ); |
| |
| print {ATM} @attachments or croak "$croak{'print'} ATM"; |
| |
| fclose(ATM); |
| |
| |
| |
| #Since we have not encountered a fatal error, time to rewrite our memberlist. |
| |
| ManageMemberinfo( 'update', $user, $member{'name'} ); |
| |
| |
| |
| ToHTML( $member{'gender'} ); |
| |
| FromChars( $member{'location'} ); |
| |
| ToHTML( $member{'location'} ); |
| |
| ToChars( $member{'location'} ); |
| |
| ToHTML( $member{'bday'} ); |
| |
| FromChars( $member{'sesquest'} ); |
| |
| ToHTML( $member{'sesquest'} ); |
| |
| ToChars( $member{'sesquest'} ); |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| if ( $member{'passwrd1'} ) { |
| |
| ${ $uid . $user }{'password'} = |
| |
| encode_password( $member{'passwrd1'} ); |
| |
| } |
| |
| ${ $uid . $user }{'realname'} = $member{'name'}; |
| |
| ${ $uid . $user }{'gender'} = $member{'gender'}; |
| |
| ${ $uid . $user }{'location'} = $member{'location'}; |
| |
| ${ $uid . $user }{'bday'} = $member{'bday'}; |
| |
| ${ $uid . $user }{'hideage'} = $member{'hideage'}; |
| |
| ${ $uid . $user }{'sesquest'} = $member{'sesquest'}; |
| |
| |
| |
| ${ $uid . $user }{'sesanswer'} = $member{'sesanswer'}; |
| |
| |
| |
| # EventCal Begin |
| |
| if ( $Update_EventCal == 1 ) { |
| |
| fopen( FILE, "$vardir/eventcalbday.db" ); |
| |
| my @birthmembers = <FILE>; |
| |
| fclose(FILE); |
| |
| fopen( FILE, ">$vardir/eventcalbday.db" ); |
| |
| my $cn = 0; |
| |
| foreach my $x (@birthmembers) { |
| |
| chomp $x; |
| |
| my ( $user_year, $user_month, $user_day, $user_xy, $user_hide ) |
| |
| = split /\|/xsm, $x; |
| |
| if ( $user_xy eq $user ) { |
| |
| my ( $user_montha, $user_daya, $user_yeara ) = |
| |
| split /\//xsm, $member{'bday'}; |
| |
| if ( $user_montha < 10 && length($user_montha) == 1 ) { |
| |
| $user_montha = "0$user_montha"; |
| |
| } |
| |
| if ( $user_daya < 10 && length($user_daya) == 1 ) { |
| |
| $user_daya = "0$user_daya"; |
| |
| } |
| |
| if ( $member{'hideage'} ) { $nuser_hide = 1; } |
| |
| else { $nuser_hide = q{}; } |
| |
| print {FILE} |
| |
| qq~$user_yeara|$user_montha|$user_daya|$user_xy|$nuser_hide\n~ |
| |
| or croak "$croak{'print'} birthday"; |
| |
| $cn++; |
| |
| } |
| |
| else { |
| |
| print {FILE} qq~$x\n~ or croak "$croak{'print'} birthday"; |
| |
| } |
| |
| } |
| |
| fclose(FILE); |
| |
| if ( $cn == 0 ) { |
| |
| fopen( FILE, ">>$vardir/eventcalbday.db" ); |
| |
| ( $user_montha, $user_daya, $user_yeara ) = split /\//xsm, |
| |
| $member{'bday'}; |
| |
| if ( $user_montha < 10 && length($user_montha) == 1 ) { |
| |
| $user_montha = "0$user_montha"; |
| |
| } |
| |
| if ( $user_daya < 10 && length($user_daya) == 1 ) { |
| |
| $user_daya = "0$user_daya"; |
| |
| } |
| |
| if ( $member{'hideage'} ) { $nuser_hide = 1; } |
| |
| else { $user_hide = q{}; } |
| |
| print {FILE} |
| |
| qq~$user_yeara|$user_montha|$user_daya|$user|$nuser_hide\n~ |
| |
| or croak "$croak{'print'} birthday"; |
| |
| fclose(FILE); |
| |
| } |
| |
| } |
| |
| |
| |
| # EventCal End |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| if ( $member{'passwrd1'} && $username eq $user ) { |
| |
| UpdateCookie( |
| |
| 'write', $user, |
| |
| ${ $uid . $user }{'password'}, |
| |
| ${ $uid . $user }{'session'}, |
| |
| q{/}, q{} |
| |
| ); |
| |
| } |
| |
| |
| |
| my $scriptAction = $view ? 'myprofileContacts' : 'profileContacts'; |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| |
| |
| } |
| |
| elsif ( $member{'moda'} eq $profile_txt{'89'} ) { |
| |
| if ( $member{'username'} eq 'admin' ) { |
| |
| fatal_error('cannot_kill_admin'); |
| |
| } |
| |
| |
| |
| # For security, remove username from mod position |
| |
| KillModerator( $member{'username'} ); |
| |
| |
| |
| $noteuser = $iamadmin ? $member{'username'} : $user; |
| |
| |
| |
| unlink "$memberdir/$noteuser.dat"; |
| |
| unlink "$memberdir/$noteuser.vars"; |
| |
| unlink "$memberdir/$noteuser.ims"; |
| |
| unlink "$memberdir/$noteuser.msg"; |
| |
| unlink "$memberdir/$noteuser.log"; |
| |
| unlink "$memberdir/$noteuser.rlog"; |
| |
| unlink "$memberdir/$noteuser.outbox"; |
| |
| unlink "$memberdir/$noteuser.imstore"; |
| |
| unlink "$memberdir/$noteuser.imdraft"; |
| |
| |
| |
| if ( ${ $uid . $user }{'userpic'} |
| |
| && ${ $uid . $user }{'userpic'} =~ |
| |
| /$facesurl\/UserAvatars\/(.+)/xsm ) |
| |
| { |
| |
| unlink "$facesdir/UserAvatars/$1"; |
| |
| } |
| |
| |
| |
| fopen( PMATTACH, "<$vardir/pm.attachments" ) |
| |
| or fatal_error( 'cannot_open', "$vardir/pm.attachments", 1 ); |
| |
| @pmattach = <PMATTACH>; |
| |
| fclose(PMATTACH); |
| |
| |
| |
| foreach my $pm_attach (@pmattach) { |
| |
| ( undef, undef, undef, $attach_file, undef, $attach_user ) = |
| |
| split /\|/xsm, $pm_attach; |
| |
| chomp $attach_user; |
| |
| if ( $noteuser eq $attach_user ) { |
| |
| unlink "$pmuploaddir/$attach_file"; |
| |
| } |
| |
| } |
| |
| |
| |
| MemberIndex( 'remove', $noteuser ); |
| |
| |
| |
| # EventCalbday Begin |
| |
| fopen( FILE, "$vardir/eventcalbday.db" ); |
| |
| my @birthmembers = <FILE>; |
| |
| fclose(FILE); |
| |
| fopen( FILE, ">$vardir/eventcalbday.db" ); |
| |
| foreach my $x (@birthmembers) { |
| |
| chomp $x; |
| |
| my ( undef, undef, undef, $user_xy, undef ) = |
| |
| split /\|/xsm, $x; |
| |
| if ( $user_xy ne $user ) { |
| |
| print {FILE} qq~$x\n~ or croak "$croak{'print'} birthday"; |
| |
| } |
| |
| else { |
| |
| print {FILE} q{} or croak "$croak{'print'} no-birthday"; |
| |
| } |
| |
| } |
| |
| fclose(FILE); |
| |
| |
| |
| # EventCalbday End |
| |
| |
| |
| if ( !$iamadmin ) { |
| |
| UpdateCookie('delete'); |
| |
| $username = 'Guest'; |
| |
| $iamguest = 1; |
| |
| $iamadmin = q{}; |
| |
| $iamgmod = q{}; |
| |
| $iamfmod = q{}; |
| |
| $password = q{}; |
| |
| $yyim = q{}; |
| |
| local $ENV{'HTTP_COOKIE'} = q{}; |
| |
| $yyuname = q{}; |
| |
| } |
| |
| $yySetLocation = $scripturl; |
| |
| |
| |
| } |
| |
| else { |
| |
| fatal_error('not_allowed'); |
| |
| } |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ModifyProfileContacts2 { |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| my ( %member, $key, $value, $newpassemail, $tempname ); |
| |
| while ( ( $key, $value ) = each %FORM ) { |
| |
| $value =~ s/\A\s+//xsm; |
| |
| $value =~ s/\s+\Z//xsm; |
| |
| $value =~ s/\r//gxsm; |
| |
| if ( $key ne 'awayreply' ) { $value =~ s/\n//gxsm; } |
| |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ( $member{'moda'} ne $profile_txt{'88'} ) { fatal_error('not_allowed'); } |
| |
| |
| |
| if ( $emailnewpass |
| |
| && lc $member{'email'} ne lc ${ $uid . $user }{'email'} |
| |
| && !$iamadmin ) |
| |
| { |
| |
| srand; |
| |
| $member{'passwrd1'} = int rand 100; |
| |
| $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/; |
| |
| $_ = int rand 77; |
| |
| $_ =~ tr/0123456789/q8dv7w4jm3/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int rand 89; |
| |
| $_ =~ tr/0123456789/y6uivpkcxw/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int rand 188; |
| |
| $_ =~ tr/0123456789/poiuytrewq/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| $_ = int rand 65; |
| |
| $_ =~ tr/0123456789/lkjhgfdaut/; |
| |
| $member{'passwrd1'} .= $_; |
| |
| ${ $uid . $user }{'password'} = encode_password( $member{'passwrd1'} ); |
| |
| $newpassemail = 1; |
| |
| } |
| |
| |
| |
| if ( $member{'email'} eq q{} ) { fatal_error('no_email'); } |
| |
| if ( $member{'email'} !~ /^[\w\-\.\+]+\@[\w\-\.\+]+\.\w{2,4}$/xsm ) { |
| |
| fatal_error( 'invalid_character', |
| |
| "$profile_txt{'69'} $profile_txt{'241e'}" ); |
| |
| } |
| |
| if ( |
| |
| ( $member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/xsm ) |
| |
| || ( $member{'email'} !~ |
| |
| /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?$/xsm ) |
| |
| ) |
| |
| { |
| |
| fatal_error('invalid_email'); |
| |
| } |
| |
| LoadCensorList(); |
| |
| if ( Censor( $member{'email'} ) ne $member{'email'} ) { |
| |
| fatal_error( 'censor2', CheckCensor("$member{'email'}") ); |
| |
| } |
| |
| |
| |
| $member{'icq'} =~ s/[^0-9]//gxsm; |
| |
| $member{'aim'} =~ s/ /\+/gsm; |
| |
| $member{'yim'} =~ s/ /\+/gsm; |
| |
| |
| |
| ToHTML( $member{'email'} ); |
| |
| ToHTML( $member{'icq'} ); |
| |
| ToHTML( $member{'aim'} ); |
| |
| ToHTML( $member{'yim'} ); |
| |
| ToHTML( $member{'gtalk'} ); |
| |
| ToHTML( $member{'skype'} ); |
| |
| ToHTML( $member{'myspace'} ); |
| |
| ToHTML( $member{'facebook'} ); |
| |
| ToHTML( $member{'twitter'} ); |
| |
| ToHTML( $member{'youtube'} ); |
| |
| ToHTML( $member{'weburl'} ); |
| |
| FromChars( $member{'webtitle'} ); |
| |
| ToHTML( $member{'webtitle'} ); |
| |
| ToChars( $member{'webtitle'} ); |
| |
| ToHTML( $member{'offlinestatus'} ); |
| |
| FromChars( $member{'awaysubj'} ); |
| |
| ToHTML( $member{'awaysubj'} ); |
| |
| ToChars( $member{'awaysubj'} ); |
| |
| |
| |
| FromChars( $member{'awayreply'} ); |
| |
| ToHTML( $member{'awayreply'} ); |
| |
| $member{'awayreply'} =~ s/\n/<br \/>/gsm; |
| |
| $convertstr = $member{'awayreply'}; |
| |
| $convertcut = $MaxAwayLen; |
| |
| CountChars(); |
| |
| $member{'awayreply'} = $convertstr; |
| |
| ToChars( $member{'awayreply'} ); |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require Sources::ExtendedProfiles; |
| |
| my $error = ext_validate_submition( $username, $user ); |
| |
| if ( $error ne q{} ) { |
| |
| fatal_error( 'extended_profiles_validation', $error ); |
| |
| } |
| |
| ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| # Check to see if email is already taken |
| |
| if ( lc ${ $uid . $user }{'email'} ne lc $member{'email'} ) { |
| |
| $testemail = lc $member{'email'}; |
| |
| my $is_existing = MemberIndex( 'check_exist', $testemail, 2 ); |
| |
| if ( lc $is_existing eq $testemail ) { |
| |
| fatal_error( 'email_taken', "($member{'email'})" ); |
| |
| } |
| |
| } |
| |
| |
| |
| # Since we haven't encountered a fatal error, time to rewrite our memberlist a little. |
| |
| ManageMemberinfo( 'update', $user, q{}, $member{'email'} ); |
| |
| ## if enabled but not set, default offline status to 'offline' |
| |
| if ( $enable_MCaway && $member{'offlinestatus'} eq q{} ) { |
| |
| $member{'offlinestatus'} = 'offline'; |
| |
| } |
| |
| |
| |
| # if user is switching 'away' to 'off/on', clean out the away-sent list |
| |
| if ( $FORM{'offlinestatus'} eq 'offline' ) { |
| |
| ${ $uid . $user }{'awayreplysent'} = q{}; |
| |
| } |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| ${ $uid . $user }{'email'} = $member{'email'}; |
| |
| ${ $uid . $user }{'hidemail'} = $member{'hideemail'} ? 1 : 0; |
| |
| ${ $uid . $user }{'icq'} = $member{'icq'}; |
| |
| ${ $uid . $user }{'aim'} = $member{'aim'}; |
| |
| ${ $uid . $user }{'yim'} = $member{'yim'}; |
| |
| ${ $uid . $user }{'gtalk'} = $member{'gtalk'}; |
| |
| ${ $uid . $user }{'skype'} = $member{'skype'}; |
| |
| ${ $uid . $user }{'myspace'} = $member{'myspace'}; |
| |
| ${ $uid . $user }{'facebook'} = $member{'facebook'}; |
| |
| ${ $uid . $user }{'twitter'} = $member{'twitter'}; |
| |
| ${ $uid . $user }{'youtube'} = $member{'youtube'}; |
| |
| ${ $uid . $user }{'webtitle'} = $member{'webtitle'}; |
| |
| ${ $uid . $user }{'weburl'} = ( |
| |
| ( $member{'weburl'} && $member{'weburl'} !~ m{\Ahttps?://}sm ) |
| |
| ? 'http://' |
| |
| : q{} |
| |
| ) . $member{'weburl'}; |
| |
| ${ $uid . $user }{'offlinestatus'} = $member{'offlinestatus'}; |
| |
| ${ $uid . $user }{'awaysubj'} = $member{'awaysubj'}; |
| |
| ${ $uid . $user }{'awayreply'} = $member{'awayreply'}; |
| |
| ${ $uid . $user }{'stealth'} = |
| |
| ( ${ $uid . $user }{'position'} eq 'Administrator' |
| |
| || ${ $uid . $user }{'position'} eq 'Global Moderator' ) |
| |
| ? $member{'stealth'} |
| |
| : q{}; |
| |
| |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| if ( $emailnewpass && $newpassemail == 1 ) { |
| |
| RemoveUserOnline($user); # Remove user from online log |
| |
| |
| |
| if ( $username eq $user ) { |
| |
| UpdateCookie('delete'); |
| |
| $username = 'Guest'; |
| |
| $iamguest = 1; |
| |
| $iamadmin = q{}; |
| |
| $iamgmod = q{}; |
| |
| $iamfmod = q{}; |
| |
| $password = q{}; |
| |
| $yyim = q{}; |
| |
| local $ENV{'HTTP_COOKIE'} = q{}; |
| |
| $yyuname = q{}; |
| |
| } |
| |
| FormatUserName( $member{'username'} ); |
| |
| require Sources::Mailer; |
| |
| my $scriptAction = $view ? 'myprofile' : 'profile'; |
| |
| sendmail( |
| |
| $member{'email'}, |
| |
| qq~$profile_txt{'700'} $mbname~, |
| |
| "$profile_txt{'733'} $member{'passwrd1'} $profile_txt{'734'} $member{'username'}.\n\n$profile_txt{'701'} $scripturl?action=$scriptAction;username=$useraccount{$member{'username'}}\n\n$profile_txt{'130'}" |
| |
| ); |
| |
| require Sources::LogInOut; |
| |
| $sharedLogin_title = "$profile_txt{'34'}: $user"; |
| |
| $sharedLogin_text = $profile_txt{'638'}; |
| |
| $shared_login = sharedLogin(); |
| |
| $yymain .= $shared_login; |
| |
| $yytitle = $profile_txt{'245'}; |
| |
| template(); |
| |
| } |
| |
| |
| |
| my $scriptAction = $view ? 'myprofileOptions' : 'profileOptions'; |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ModifyProfileOptions2 { |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| my ( %member, $key, $value, $tempname ); |
| |
| while ( ( $key, $value ) = each %FORM ) { |
| |
| $value =~ s/\A\s+//xsm; |
| |
| $value =~ s/\s+\Z//xsm; |
| |
| $value =~ s/\r//gxsm; |
| |
| if ( $key ne 'signature' ) { $value =~ s/\n//gxsm; } |
| |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ( $member{'moda'} ne $profile_txt{'88'} ) { fatal_error('not_allowed'); } |
| |
| |
| |
| if ( !$minlinksig ) { $minlinksig = 0; } |
| |
| if ( ${ $uid . $user }{'postcount'} < $minlinksig |
| |
| && !$iamadmin |
| |
| && !$iamgmod ) |
| |
| { |
| |
| if ( $member{'signature'} =~ m{http:\/\/}xsm |
| |
| || $member{'signature'} =~ m{https:\/\/}xsm |
| |
| || $member{'signature'} =~ m{ftp:\/\/}xsm |
| |
| || $member{'signature'} =~ m{www.}xsm |
| |
| || $member{'signature'} =~ m{ftp.}xsm =~ m{\[url}xsm |
| |
| || $member{'signature'} =~ m{\[link}xsm |
| |
| || $member{'signature'} =~ m{\[img}xsm |
| |
| || $member{'signature'} =~ m{\[ftp}xsm ) |
| |
| { |
| |
| fatal_error('no_siglinks_allowed'); |
| |
| } |
| |
| } |
| |
| FromChars( $member{'usertext'} ); |
| |
| $convertstr = $member{'usertext'}; |
| |
| $convertcut = 51; |
| |
| CountChars(); |
| |
| $member{'usertext'} = $convertstr; |
| |
| ToHTML( $member{'usertext'} ); |
| |
| ToChars( $member{'usertext'} ); |
| |
| |
| |
| if ($allowpics) { |
| |
| opendir DIR, |
| |
| $facesdir |
| |
| or fatal_error( 'cannot_open_dir', |
| |
| "($facesdir)!<br \/>$profile_txt{'681'}", 1 ); |
| |
| closedir DIR; |
| |
| } |
| |
| |
| |
| if ( $allowpics && $upload_useravatar && $upload_avatargroup ) { |
| |
| $upload_useravatar = 0; |
| |
| foreach my $av_gr ( split /, /sm, $upload_avatargroup ) { |
| |
| if ( $av_gr eq ${ $uid . $user }{'position'} ) { |
| |
| $upload_useravatar = 1; |
| |
| last; |
| |
| } |
| |
| foreach ( split /,/xsm, ${ $uid . $user }{'addgroups'} ) { |
| |
| if ( $av_gr eq $_ ) { $upload_useravatar = 1; last; } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| if ($CGI_query) { $file = $CGI_query->upload('file_avatar'); } |
| |
| if ( $allowpics && $upload_useravatar && $file ) { |
| |
| if ( $file !~ /\.(gif|png|jpe?g)$/ixsm ) { |
| |
| LoadLanguage('FA'); |
| |
| fatal_error( 'file_not_uploaded', |
| |
| "$file $fatxt{'20'} gif png jpeg jpg" ); |
| |
| } |
| |
| else { $ext = $1; } |
| |
| my $fixfile = ${ $uid . $user }{'realname'}; |
| |
| if ( $fixfile =~ /[^0-9A-Za-z\+\-\.:_]/xsm ) |
| |
| { # replace all inappropriate characters |
| |
| # Transliteration |
| |
| my $x = 0; |
| |
| foreach ( @uploadtranlist ) |
| |
| { |
| |
| $fixfile =~ s/$_/$ISO_8859_1[$x]/gxsm; |
| |
| $x++; |
| |
| } |
| |
| |
| |
| # END Transliteration. Thanks to "Velocity" for this contribution. |
| |
| $fixfile =~ s/[^0-9A-Za-z\+\-\.:_]/_/gxsm; |
| |
| } |
| |
| $fixfile .= ".$ext"; |
| |
| |
| |
| require Sources::SpamCheck; |
| |
| my $spamdetected = spamcheck("$fixfile"); |
| |
| if ( !$staff ) { |
| |
| if ( $spamdetected == 1 ) { |
| |
| ${ $uid . $username }{'spamcount'}++; |
| |
| ${ $uid . $username }{'spamtime'} = $date; |
| |
| UserAccount( $username, 'update' ); |
| |
| $spam_hits_left_count = |
| |
| $post_speed_count - ${ $uid . $username }{'spamcount'}; |
| |
| fatal_error('tsc_alert'); |
| |
| } |
| |
| } |
| |
| |
| |
| my ( $size, $buffer, $filesize, $file_buffer ); |
| |
| while ( $size = read $file, $buffer, 512 ) { |
| |
| $filesize += $size; |
| |
| $file_buffer .= $buffer; |
| |
| } |
| |
| $avatar_limit ||= 0; |
| |
| if ( $avatar_limit > 0 && $filesize > ( 1024 * $avatar_limit ) ) { |
| |
| LoadLanguage('FA'); |
| |
| fatal_error( 'file_not_uploaded', |
| |
| "$fatxt{'21'} $file (" |
| |
| . int( $filesize / 1024 ) |
| |
| . " KB) $fatxt{'21b'} " |
| |
| . $avatar_limit ); |
| |
| } |
| |
| $avatar_dirlimit ||= 0; |
| |
| if ( $avatar_dirlimit > 0 ) { |
| |
| my $dirsize = dirsize("$facesdir/UserAvatars"); |
| |
| if ( $filesize > ( ( 1024 * $avatar_dirlimit ) - $dirsize ) ) { |
| |
| LoadLanguage('FA'); |
| |
| fatal_error( |
| |
| 'file_not_uploaded', |
| |
| "$fatxt{'22'} $file (" |
| |
| . ( |
| |
| int( $filesize / 1024 ) - |
| |
| $avatar_dirlimit + |
| |
| int( $dirsize / 1024 ) |
| |
| ) |
| |
| . " KB) $fatxt{'22b'}" |
| |
| ); |
| |
| } |
| |
| } |
| |
| |
| |
| if ( ${ $uid . $user }{'userpic'} =~ /$facesurl\/UserAvatars\/(.+)/xsm ) |
| |
| { |
| |
| unlink "$facesdir/UserAvatars/$1"; |
| |
| } |
| |
| $fixfile = check_existence( "$facesdir/UserAvatars", $fixfile ); |
| |
| |
| |
| # create a new file on the server using the formatted ( new instance ) filename |
| |
| if ( fopen( NEWFILE, ">$facesdir/UserAvatars/$fixfile" ) ) { |
| |
| binmode NEWFILE; |
| |
| |
| |
| # needed for operating systems (OS) Windows, ignored by Linux |
| |
| print {NEWFILE} $file_buffer |
| |
| or croak "$croak{'print'} NEWFILE"; # write new file on HD |
| |
| fclose(NEWFILE); |
| |
| |
| |
| } |
| |
| else |
| |
| { # return the server's error message if the new file could not be created |
| |
| fatal_error( 'file_not_open', "$facesdir/UserAvatars" ); |
| |
| } |
| |
| |
| |
| # check if file has actually been uploaded, by checking the file has a size |
| |
| if ( !-s "$facesdir/UserAvatars/$fixfile" ) { |
| |
| fatal_error( 'file_not_uploaded', $fixfile ); |
| |
| } |
| |
| |
| |
| my $illegal; |
| |
| if ( $fixfile =~ /gif$/ixsm ) { |
| |
| my $header; |
| |
| fopen( ATTFILE, "$facesdir/UserAvatars/$fixfile" ); |
| |
| read ATTFILE, $header, 10; |
| |
| my ( $giftest, undef, undef, undef, undef, undef ) = |
| |
| unpack 'a3a3C4', $header; |
| |
| fclose(ATTFILE); |
| |
| if ( $giftest ne 'GIF' ) { $illegal = $giftest; } |
| |
| } |
| |
| fopen( ATTFILE, "$facesdir/UserAvatars/$fixfile" ); |
| |
| while ( read ATTFILE, $buffer, 1024 ) { |
| |
| if ( $buffer =~ /<(html|script|body)/igsm ) { $illegal = $1; last; } |
| |
| } |
| |
| fclose(ATTFILE); |
| |
| if ($illegal) { # delete the file as it contains illegal code |
| |
| unlink "$facesdir/UserAvatars/$fixfile"; |
| |
| ToHTML($illegal); |
| |
| fatal_error( 'file_not_uploaded', |
| |
| "$fixfile <= illegal code ($illegal) inside image file!" ); |
| |
| } |
| |
| |
| |
| $member{'userpic'} = "$facesurl/UserAvatars/$fixfile"; |
| |
| |
| |
| } |
| |
| elsif ( |
| |
| $member{'userpicpersonalcheck'} |
| |
| && ( $member{'userpicpersonal'} =~ /\.gif\Z/ixsm |
| |
| || $member{'userpicpersonal'} =~ /\.jpe?g\Z/ixsm |
| |
| || $member{'userpicpersonal'} =~ /\.png\Z/ixsm ) |
| |
| ) |
| |
| { |
| |
| $member{'userpic'} = $member{'userpicpersonal'}; |
| |
| } |
| |
| if ( $member{'userpic'} eq q{} || !$allowpics ) { |
| |
| $member{'userpic'} = $my_blank_avatar; |
| |
| } |
| |
| if ( $member{'userpic'} !~ |
| |
| m{\A[0-9a-zA-Z_\.\#\%\-\:\+\?\$\&\~\.\,\@/]+\Z}xsm ) |
| |
| { |
| |
| fatal_error( 'invalid_character', "$profile_txt{'592'}" ); |
| |
| } |
| |
| if ( $member{'userpic'} ne ${ $uid . $user }{'userpic'} |
| |
| && ${ $uid . $user }{'userpic'} =~ /$facesurl\/UserAvatars\/(.+)/xsm ) |
| |
| { |
| |
| unlink "$facesdir/UserAvatars/$1"; |
| |
| } |
| |
| |
| |
| if ( $member{'usertemplate'} ne q{} |
| |
| && !$templateset{ $member{'usertemplate'} } ) |
| |
| { |
| |
| fatal_error('invalid_template'); |
| |
| } |
| |
| if ( $member{'usertemplate'} eq q{} ) { |
| |
| $member{'usertemplate'} = $template; |
| |
| } |
| |
| if ( $member{'userlanguage'} ne q{} |
| |
| && !-e "$langdir/$member{'userlanguage'}/Main.lng" ) |
| |
| { |
| |
| fatal_error('invalid_language'); |
| |
| } |
| |
| if ( $member{'userlanguage'} eq q{} ) { |
| |
| $member{'userlanguage'} = $language; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require Sources::ExtendedProfiles; |
| |
| my $error = ext_validate_submition( $username, $user ); |
| |
| if ( $error ne q{} ) { |
| |
| fatal_error( 'extended_profiles_validation', $error ); |
| |
| } |
| |
| ext_saveprofile($user); |
| |
| } |
| |
| |
| |
| # update notifications if users language is changed |
| |
| if ( ${ $uid . $user }{'language'} ne "$member{'userlanguage'}" ) { |
| |
| require Sources::Notify; |
| |
| updateLanguage( $user, $member{'userlanguage'} ); |
| |
| } |
| |
| |
| |
| if ( $addmemgroup_enabled > 1 ) { |
| |
| my %groups; |
| |
| map { $groups{$_} = 2; } split /,/xsm, ${ $uid . $user }{'addgroups'}; |
| |
| map { $groups{$_} = 1; } split /, /sm, $member{'joinmemgroup'}; |
| |
| my @nopostmember; |
| |
| for ( keys %NoPost ) { |
| |
| next if ${ $uid . $user }{'position'} eq $_; |
| |
| if ( $groups{$_} == 1 && ( split /\|/xsm, $NoPost{$_} )[10] ) { |
| |
| push @nopostmember, $_; |
| |
| } |
| |
| elsif ( $groups{$_} == 2 && !( split /\|/xsm, $NoPost{$_} )[10] ) { |
| |
| push @nopostmember, $_; |
| |
| } |
| |
| } |
| |
| $member{'joinmemgroup'} = join q{,}, @nopostmember; |
| |
| if ( $member{'joinmemgroup'} eq '###blank###' ) { |
| |
| $member{'joinmemgroup'} = q{}; |
| |
| } |
| |
| if ( $member{'joinmemgroup'} ne ${ $uid . $user }{'addgroups'} ) { |
| |
| ManageMemberinfo( 'update', $user, q{}, q{}, q{}, q{}, |
| |
| $member{'joinmemgroup'} ); |
| |
| } |
| |
| if ( $member{'joinmemgroup'} eq '###blank###' ) { |
| |
| $member{'joinmemgroup'} = q{}; |
| |
| } |
| |
| ${ $uid . $user }{'addgroups'} = $member{'joinmemgroup'}; |
| |
| } |
| |
| |
| |
| FromChars( $member{'signature'} ); |
| |
| ToHTML( $member{'signature'} ); |
| |
| $member{'signature'} =~ s/\n/<br \/>/gsm; |
| |
| $convertstr = $member{'signature'}; |
| |
| $convertcut = $MaxSigLen; |
| |
| CountChars(); |
| |
| $member{'signature'} = $convertstr; |
| |
| ToChars( $member{'signature'} ); |
| |
| |
| |
| ToHTML( $member{'userpic'} ); |
| |
| ToHTML( $member{'usertemplate'} ); |
| |
| ToHTML( $member{'userlanguage'} ); |
| |
| ToHTML( $member{'timeformat'} ); |
| |
| |
| |
| # 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{'usertimesign'}$member{'usertimehour'}.$member{'usertimemin'}"; |
| |
| ${ $uid . $user }{'onlinealert'} = $member{'onlinealert'} ? 1 : 0; |
| |
| ${ $uid . $user }{'notify_me'} = |
| |
| $member{'notify_N'} |
| |
| ? ( |
| |
| ( |
| |
| !${ $uid . $user }{'notify_me'} |
| |
| || ${ $uid . $user }{'notify_me'} == 1 |
| |
| ) ? 1 : 3 |
| |
| ) |
| |
| : ( |
| |
| ( |
| |
| ${ $uid . $user }{'notify_me'} == 2 |
| |
| || ${ $uid . $user }{'notify_me'} == 3 |
| |
| ) ? 2 : 0 |
| |
| ); |
| |
| ${ $uid . $user }{'reversetopic'} = $member{'reversetopic'} ? 1 : 0; |
| |
| ${ $uid . $user }{'user_tz'} = $member{'user_tz'}; |
| |
| ${ $uid . $user }{'dynamic_clock'} = $member{'dynamic_clock'} ? 1 : 0; |
| |
| ${ $uid . $user }{'timeselect'} = int $member{'usertimeselect'}; |
| |
| ${ $uid . $user }{'template'} = $member{'usertemplate'}; |
| |
| ${ $uid . $user }{'language'} = $member{'userlanguage'}; |
| |
| ${ $uid . $user }{'hide_avatars'} = |
| |
| ( $member{'hide_avatars'} && $user_hide_avatars ) ? 1 : 0; |
| |
| ${ $uid . $user }{'hide_user_text'} = |
| |
| ( $member{'hide_user_text'} && $user_hide_user_text ) ? 1 : 0; |
| |
| ${ $uid . $user }{'hide_img'} = |
| |
| ( $member{'hide_img'} && $user_hide_img ) ? 1 : 0; |
| |
| ${ $uid . $user }{'hide_attach_img'} = |
| |
| ( $member{'hide_attach_img'} && $user_hide_attach_img ) ? 1 : 0; |
| |
| ${ $uid . $user }{'hide_signat'} = |
| |
| ( $member{'hide_signat'} && $user_hide_signat ) ? 1 : 0; |
| |
| ${ $uid . $user }{'hide_smilies_row'} = |
| |
| ( $member{'hide_smilies_row'} && $user_hide_smilies_row ) ? 1 : 0; |
| |
| ${ $uid . $user }{'numberformat'} = int $member{'usernumberformat'}; |
| |
| ${ $uid . $user }{'return_to'} = $member{'return_to'}; |
| |
| |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| my $scriptAction; |
| |
| if ( |
| |
| $iamadmin |
| |
| || ( $iamgmod |
| |
| && $allow_gmod_profile |
| |
| && $gmod_access2{'profileAdmin'} eq 'on' ) |
| |
| ) |
| |
| { |
| |
| $scriptAction = q~profileAdmin~; |
| |
| } |
| |
| else { |
| |
| $scriptAction = q~viewprofile~; |
| |
| } |
| |
| if ( $pm_lev == 1 ) { |
| |
| $scriptAction = q~profileIM~; |
| |
| } |
| |
| if ($buddyListEnabled) { |
| |
| $scriptAction = q~profileBuddy~; |
| |
| } |
| |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ModifyProfileBuddy2 { |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| my ( %member, $key, $value, $tempname ); |
| |
| while ( ( $key, $value ) = each %FORM ) { |
| |
| $value =~ s/\A\s+//xsm; |
| |
| $value =~ s/\s+\Z//xsm; |
| |
| $value =~ s/[\n\r]//gxsm; |
| |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ( $member{'moda'} ne $profile_txt{'88'} ) { fatal_error('not_allowed'); } |
| |
| |
| |
| if ( $member{'buddylist'} ) { |
| |
| my @buddies = split /\,/xsm, $member{'buddylist'}; |
| |
| chomp @buddies; |
| |
| $member{'buddylist'} = q{}; |
| |
| foreach my $cloakedBuddy (@buddies) { |
| |
| $cloakedBuddy =~ s/^ //sm; |
| |
| $cloakedBuddy = decloak($cloakedBuddy); |
| |
| ToHTML($cloakedBuddy); |
| |
| $member{'buddylist'} = qq~$member{'buddylist'}\|$cloakedBuddy~; |
| |
| } |
| |
| $member{'buddylist'} =~ s/^\|//sm; |
| |
| } |
| |
| ${ $uid . $user }{'buddylist'} = $member{'buddylist'}; |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| my $scriptAction; |
| |
| if ( |
| |
| $iamadmin |
| |
| || ( $iamgmod |
| |
| && $allow_gmod_profile |
| |
| && $gmod_access2{'profileAdmin'} eq 'on' ) |
| |
| ) |
| |
| { |
| |
| $scriptAction = q~profileAdmin~; |
| |
| } |
| |
| else { |
| |
| $scriptAction = q~viewprofile~; |
| |
| } |
| |
| if ( $pm_lev == 1 ) { |
| |
| $scriptAction = q~profileIM~; |
| |
| } |
| |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ModifyProfileIM2 { |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| my ( %member, $key, $value, $ignorelist ); |
| |
| while ( ( $key, $value ) = each %FORM ) { |
| |
| $value =~ s/\A\s+//xsm; |
| |
| $value =~ s/\s+\Z//xsm; |
| |
| if ( $key ne 'ignore' ) { $value =~ s/[\n\r]//gxsm; } |
| |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ( $member{'moda'} ne $profile_txt{'88'} ) { fatal_error('not_allowed'); } |
| |
| |
| |
| if ( !$member{'ignoreall'} ) { |
| |
| my @ignoreList = split /\,/xsm, $member{'ignore'}; |
| |
| chomp @ignoreList; |
| |
| foreach my $cloakedIgnore (@ignoreList) { |
| |
| $cloakedIgnore =~ s/\A //sm; |
| |
| $cloakedIgnore =~ s/ \Z//sm; |
| |
| $cloakedIgnore = decloak($cloakedIgnore); |
| |
| ToHTML($cloakedIgnore); |
| |
| $ignorelist .= qq~\|$cloakedIgnore~; |
| |
| } |
| |
| $ignorelist =~ s/\A\|//xsm; |
| |
| } |
| |
| else { |
| |
| $ignorelist = q{*}; |
| |
| } |
| |
| |
| |
| # Time to print the changes to the username.vars file |
| |
| ${ $uid . $user }{'im_ignorelist'} = $ignorelist; |
| |
| ${ $uid . $user }{'notify_me'} = |
| |
| $member{'notify_PM'} |
| |
| ? ( |
| |
| ( |
| |
| !${ $uid . $user }{'notify_me'} |
| |
| || ${ $uid . $user }{'notify_me'} == 2 |
| |
| ) ? 2 : 3 |
| |
| ) |
| |
| : ( |
| |
| ( |
| |
| ${ $uid . $user }{'notify_me'} == 1 |
| |
| || ${ $uid . $user }{'notify_me'} == 3 |
| |
| ) ? 1 : 0 |
| |
| ); |
| |
| ${ $uid . $user }{'im_popup'} = $member{'userpopup'} ? 1 : 0; |
| |
| ${ $uid . $user }{'im_imspop'} = $member{'popupims'} ? 1 : 0; |
| |
| ${ $uid . $user }{'pmviewMess'} = $member{'pmviewMess'} ? 1 : 0; |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require Sources::ExtendedProfiles; |
| |
| my $error = ext_validate_submition( $username, $user ); |
| |
| if ( $error ne q{} ) { |
| |
| fatal_error( 'extended_profiles_validation', $error ); |
| |
| } |
| |
| ext_saveprofile($user); |
| |
| } |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| my $scriptAction = q~viewprofile~; |
| |
| if ( |
| |
| $iamadmin |
| |
| || ( $iamgmod |
| |
| && $allow_gmod_profile |
| |
| && $gmod_access2{'profileAdmin'} eq 'on' ) |
| |
| ) |
| |
| { |
| |
| $scriptAction = q~profileAdmin~; |
| |
| } |
| |
| if ($view) { $scriptAction = qq~my$scriptAction~; } |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$member{'username'}};sid=$INFO{'sid'}~; |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ModifyProfileAdmin2 { |
| |
| is_admin_or_gmod(); |
| |
| |
| |
| SidCheck($action); |
| |
| PrepareProfile(); |
| |
| |
| |
| my ( %member, $key, $value ); |
| |
| while ( ( $key, $value ) = each %FORM ) { |
| |
| $value =~ s/\A\s+//sm; |
| |
| $value =~ s/\s+\Z//sm; |
| |
| if ( $key ne 'regreason' ) { $value =~ s/[\n\r]//gxsm; } |
| |
| $member{$key} = $value; |
| |
| } |
| |
| $member{'username'} = $user; |
| |
| |
| |
| if ( $member{'moda'} ne $profile_txt{'88'} ) { |
| |
| fatal_error('cannot_kill_admin'); |
| |
| } |
| |
| |
| |
| if ( |
| |
| !$iamadmin |
| |
| && ( $member{'settings7'} eq 'Administrator' |
| |
| || $member{'settings7'} eq 'Global Moderator' ) |
| |
| ) |
| |
| { |
| |
| $member{'settings7'} = ${ $uid . $user }{'position'}; |
| |
| } |
| |
| |
| |
| if ( $member{'settings6'} eq q{} ) { $member{'settings6'} = 0; } |
| |
| if ( $member{'settings6'} !~ /\A[0-9]+\Z/xsm ) { |
| |
| fatal_error('invalid_postcount'); |
| |
| } |
| |
| if ( $member{'username'} eq 'admin' |
| |
| && $member{'settings7'} ne 'Administrator' ) |
| |
| { |
| |
| fatal_error('cannot_regroup_admin'); |
| |
| } |
| |
| |
| |
| $dr_month = $member{'dr_month'}; |
| |
| $dr_day = $member{'dr_day'}; |
| |
| $dr_year = $member{'dr_year'}; |
| |
| $dr_hour = $member{'dr_hour'}; |
| |
| $dr_minute = $member{'dr_minute'}; |
| |
| $dr_secund = $member{'dr_secund'}; |
| |
| |
| |
| if ( $dr_month == 4 || $dr_month == 6 || $dr_month == 9 || $dr_month == 11 ) |
| |
| { |
| |
| $max_days = 30; |
| |
| } |
| |
| elsif ( $dr_month == 2 && $dr_year % 4 == 0 ) { |
| |
| $max_days = 29; |
| |
| } |
| |
| elsif ( $dr_month == 2 && $dr_year % 4 != 0 ) { |
| |
| $max_days = 28; |
| |
| } |
| |
| else { |
| |
| $max_days = 31; |
| |
| } |
| |
| if ( $dr_day > $max_days ) { $dr_day = $max_days; } |
| |
| |
| |
| $member{'dr'} = |
| |
| qq~$dr_month/$dr_day/$dr_year $maintxt{'107'} $dr_hour:$dr_minute:$dr_secund~; |
| |
| |
| |
| if ( $member{'settings6'} != ${ $uid . $user }{'postcount'} |
| |
| || $member{'settings7'} ne ${ $uid . $user }{'position'} ) |
| |
| { |
| |
| if ( $member{'settings7'} ) { |
| |
| $grp_after = qq~$member{'settings7'}~; |
| |
| } |
| |
| else { |
| |
| for my $postamount ( reverse sort { $a <=> $b } keys %Post ) { |
| |
| if ( $member{'settings6'} >= $postamount ) { |
| |
| ( $title, undef ) = split /\|/xsm, $Post{$postamount}, 2; |
| |
| $grp_after = $title; |
| |
| last; |
| |
| } |
| |
| } |
| |
| } |
| |
| ManageMemberinfo( 'update', $user, q{}, q{}, $grp_after, |
| |
| $member{'settings6'} ); |
| |
| } |
| |
| |
| |
| my %groups; |
| |
| map { $groups{$_} = 1; } split /, /sm, $member{'addgroup'}; |
| |
| my @nopostmember; |
| |
| for ( keys %NoPost ) { |
| |
| next if $member{'settings7'} eq $_; |
| |
| if ( $groups{$_} ) { push @nopostmember, $_; } |
| |
| } |
| |
| $member{'addgroup'} = join q{,}, @nopostmember; |
| |
| if ( $member{'addgroup'} eq q{} ) { $member{'addgroup'} = '###blank###'; } |
| |
| if ( $member{'addgroup'} ne ${ $uid . $user }{'addgroups'} ) { |
| |
| ManageMemberinfo( 'update', $user, q{}, q{}, q{}, q{}, |
| |
| $member{'addgroup'} ); |
| |
| } |
| |
| if ( $member{'addgroup'} eq '###blank###' ) { $member{'addgroup'} = q{}; } |
| |
| ${ $uid . $user }{'addgroups'} = $member{'addgroup'}; |
| |
| |
| |
| if ( $member{'dr'} ne ${ $uid . $user }{'regdate'} ) { |
| |
| $newreg = stringtotime( $member{'dr'} ); |
| |
| $newreg = sprintf '%010d', $newreg; |
| |
| ManageMemberlist( 'update', $user, $newreg ); |
| |
| ${ $uid . $user }{'regtime'} = $newreg; |
| |
| } |
| |
| |
| |
| if ( !$iamadmin ) { $member{'dr'} = ${ $uid . $user }{'regdate'}; } |
| |
| FromChars( $member{'regreason'} ); |
| |
| ToHTML( $member{'regreason'} ); |
| |
| ToChars( $member{'regreason'} ); |
| |
| $member{'regreason'} =~ s/[\n\r]{1,2}/<br \/>/gsm; |
| |
| ${ $uid . $user }{'regreason'} = $member{'regreason'}; |
| |
| ${ $uid . $user }{'postcount'} = $member{'settings6'}; |
| |
| ${ $uid . $user }{'position'} = $member{'settings7'}; |
| |
| ${ $uid . $user }{'regdate'} = $member{'dr'}; |
| |
| if ( ${ $uid . $user }{'position'} ne 'Administrator' |
| |
| && ${ $uid . $user }{'position'} ne 'Global Moderator' ) |
| |
| { |
| |
| ${ $uid . $user }{'stealth'} = q{}; |
| |
| } |
| |
| |
| |
| if ($extendedprofiles) { # run this before you start to save something! |
| |
| require Sources::ExtendedProfiles; |
| |
| my $error = ext_validate_submition( $username, $user ); |
| |
| if ( $error ne q{} ) { |
| |
| fatal_error( 'extended_profiles_validation', $error ); |
| |
| } |
| |
| ext_saveprofile($user); |
| |
| } |
| |
| UserAccount( $user, 'update' ); |
| |
| |
| |
| AddModerators2( $user, $member{'addmod'} ); |
| |
| my $scriptAction = $view ? 'myviewprofile' : 'viewprofile'; |
| |
| $yySetLocation = |
| |
| qq~$scripturl?action=$scriptAction;username=$useraccount{$user}~; |
| |
| redirectexit(); |
| |
| return; |
| |
| } |
| |
| |
| |
| sub ViewProfile { |
| |
| if ($iamguest) { fatal_error('members_only'); } |
| |
| |
| |
| # If someone registers with a '+' in their name It causes problems. |
| |
| # Get's turned into a <space> in the query string Change it back here. |
| |
| # Users who register with spaces get them replaced with _ |
| |
| # So no problem there. |
| |
| $INFO{'username'} =~ tr/ /+/; |
| |
| |
| |
| $user = $INFO{'username'}; |
| |
| if ($do_scramble_id) { decloak($user); } |
| |
| if ( $user =~ m{/}xsm ) { fatal_error('no_user_slash'); } |
| |
| if ( $user =~ m{\\}xsm ) { fatal_error('no_user_backslash'); } |
| |
| |
| |
| if ( !LoadUser($user) ) { fatal_error('no_profile_exists'); } |
| |
| if ( $user eq $username ) { LoadMiniUser($user); } |
| |
| |
| |
| my ( $modify, $gender ); |
| |
| my ( |
| |
| $pic_row, $buddybutton, $row_addgrp, $row_gender, |
| |
| $row_age, $row_location, $row_icq, $row_aim, |
| |
| $row_yim, $row_gtalk, $row_skype, $row_myspace, |
| |
| $row_facebook, $row_twitter, $row_youtube, $row_email, |
| |
| $row_website, $row_signature, $showusertext |
| |
| ); |
| |
| my ($row_zodiac); |
| |
| |
| |
| # Convert forum start date to string, if there is no date set, |
| |
| # Defaults to 1st Jan, 2005 |
| |
| $forumstart = $forumstart ? stringtotime($forumstart) : '1104537600'; |
| |
| |
| |
| $memsettingsd[9] = ${ $uid . $user }{'aim'}; |
| |
| $memsettingsd[9] =~ tr/+/ /; |
| |
| $memsettingsd[10] = ${ $uid . $user }{'yim'}; |
| |
| $memsettingsd[10] =~ tr/+/ /; |
| |
| |
| |
| if ( ${ $uid . $user }{'regtime'} ) { |
| |
| $dr = timeformat( ${ $uid . $user }{'regtime'},0,0,0,1 ); |
| |
| } |
| |
| else { |
| |
| $dr = $profile_txt{'470'}; |
| |
| } |
| |
| |
| |
| CalcAge( $user, 'calc' ); # How old is he/she? |
| |
| CalcAge( $user, 'isbday' ); # is it the bday? |
| |
| if ($isbday) { |
| |
| $isbday = qq~<img src="$imagesdir/$my_bdaycake" />~; |
| |
| } |
| |
| |
| |
| ## only show the 'modify' button if not using 'my center' or admin/gmod viewing |
| |
| $modify = |
| |
| ( |
| |
| !$view |
| |
| && ( $user ne 'admin' || $username eq 'admin' ) |
| |
| && ( |
| |
| $iamadmin |
| |
| || ( $iamgmod |
| |
| && $allow_gmod_profile |
| |
| && ${ $uid . $user }{'position'} ne 'Administrator' ) |
| |
| ) |
| |
| ) |
| |
| ? qq~<a href="$scripturl?action=profileCheck;username=$useraccount{$user}">$img{'modify'}</a>~ |
| |
| : ' '; |
| |
| |
| |
| if ($allowpics) { |
| |
| my $no_userpic; |
| |
| if ( ${ $uid . $user }{'userpic'} eq $my_blank_avatar ) { |
| |
| $no_userpic = $default_avatar ? $default_userpic : $nn_avatar; |
| |
| $pic = |
| |
| qq~<img src="$imagesdir/$no_userpic" id="avatar_img_resize" alt="" style="display:none" />~; |
| |
| } |
| |
| elsif ( ${ $uid . $user }{'userpic'} =~ /^https?:\/\//xsm ) { |
| |
| $pic = |
| |
| qq~<img src="${$uid.$user}{'userpic'}" id="avatar_img_resize" alt="" style="display:none" />~; |
| |
| } |
| |
| else { |
| |
| $pic = |
| |
| qq~<img src="$facesurl/${$uid.$user}{'userpic'}" id="avatar_img_resize" alt="" style="display:none" />~; |
| |
| } |
| |
| $pic_row = qq~<div class="picrow"> |
| |
| $pic |
| |
| </div>~; |
| |
| } |
| |
| |
| |
| if ( $buddyListEnabled && $user ne $username ) { |
| |
| loadMyBuddy(); |
| |
| $buddybutton = '<br />' |
| |
| . ( |
| |
| $mybuddie{$user} |
| |
| ? qq~<img src="$micon_bg{'buddylist'}" alt="$display_txt{'isbuddy'}" /> $display_txt{'isbuddy'}~ |
| |
| : qq~<a href="$scripturl?action=addbuddy;name=$useraccount{$user}">$img{'addbuddy'}</a>~ |
| |
| ); |
| |
| } |
| |
| |
| |
| # Hide empty profile fields from display |
| |
| if ( $addmembergroup{$user} ) { |
| |
| $showaddgr = $addmembergroup{$user}; |
| |
| $showaddgr =~ s/<br \/>/\, /gsm; |
| |
| $showaddgr =~ s/\A, //sm; |
| |
| $showaddgr =~ s/, \Z//sm; |
| |
| $row_addgrp .= qq~$showaddgr<br />~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'gender'} ) { |
| |
| if ( ${ $uid . $user }{'gender'} eq 'Male' ) { |
| |
| $gender = $profile_txt{'238'}; |
| |
| } |
| |
| elsif ( ${ $uid . $user }{'gender'} eq 'Female' ) { |
| |
| $gender = $profile_txt{'239'}; |
| |
| } |
| |
| $row_gender = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'231'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| $gender |
| |
| </div>~; |
| |
| } |
| |
| if ($age) { |
| |
| if ( $showage == 1 && ${ $uid . $user }{'hideage'} && !$iamadmin ) { |
| |
| $age = qq~$profile_txt{'722'} ~; |
| |
| } |
| |
| else { $age = qq~$age ~; } |
| |
| $row_age = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'420'}:</b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| $age$isbday |
| |
| </div>~; |
| |
| if ($showzodiac) { |
| |
| require Sources::EventCalBirthdays; |
| |
| my ($user_bdmon, $user_bdday, undef ) = split /\//xsm, ${ $uid . $user }{'bday'} ; |
| |
| $memberzodiac = starsign($user_bdday, $user_bdmon, 'text' ); |
| |
| $row_zodiac = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$zodiac_txt{'sign'}:</b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| $memberzodiac |
| |
| </div>~; |
| |
| } |
| |
| } |
| |
| if ( ${ $uid . $user }{'location'} ) { |
| |
| $row_location = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'227'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| ${$uid.$user}{'location'} |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'icq'} && ${ $uid . $user }{'icq'} !~ m{\D}xsm ) { |
| |
| $row_icq .= qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'513'}:</b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <a href="http://web.icq.com/${$uid.$user}{'icq'}" title="${$uid.$user}{'icq'}" target="_blank"> |
| |
| <img src="http://web.icq.com/whitepages/online?icq=${$uid.$user}{'icq'}&img=5" alt="${$uid.$user}{'icq'}" /> ${$uid.$user}{'icq'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'aim'} ) { |
| |
| $row_aim = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'603'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <a href="aim:goim?screenname=${$uid.$user}{'aim'}&message=Hi,+are+you+there?"> |
| |
| <img src="$imagesdir/$my_aim" alt="${$uid.$user}{'aim'}" /> $memsettingsd[9]</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'yim'} ) { |
| |
| $row_yim = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'604'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="http://opi.yahoo.com/online?u=${$uid.$user}{'yim'}&m=g&t=0" alt="${$uid.$user}{'yim'}" /> |
| |
| <a href="http://edit.yahoo.com/config/send_webmesg?.target=${$uid.$user}{'yim'}" target="_blank"> $memsettingsd[10]</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'gtalk'} ) { |
| |
| $row_gtalk = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'825'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$gtalk" alt="" /> |
| |
| <a href="#" onclick="window.open('$scripturl?action=setgtalk;gtalkname=$user','','height=80,width=340,menubar=0,toolbar=0,scrollbars=0,resizable=1'); return false">$profile_txt{'825'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'skype'} ) { |
| |
| $row_skype = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'827'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$imagesdir/$my_skype" alt="" /> |
| |
| <a href="javascript:void(window.open('callto://${$uid.$user}{'skype'}','skype','height=80,width=340,menubar=no,toolbar=no,scrollbars=no'))">$profile_txt{'827'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'myspace'} ) { |
| |
| $row_myspace = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'570'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$imagesdir/$my_myspace" alt="" /> |
| |
| <a href="http://www.myspace.com/${$uid.$user}{'myspace'}" target="_blank">$profile_txt{'570'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'facebook'} ) { |
| |
| $row_facebook = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'573'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$imagesdir/$my_facebook" alt="" /> |
| |
| <a href="http://www.facebook.com/~ |
| |
| . ( |
| |
| ${ $uid . $user }{'facebook'} !~ /\D/xsm ? 'profile.php?id=' : q{} ) |
| |
| . qq~${$uid.$user}{'facebook'}" target="_blank"> ${$uid.$user}{'facebook'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'twitter'} ) { |
| |
| $row_twitter = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'576'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$imagesdir/$my_twitter" alt="" /> |
| |
| <a href="http://twitter.com/${$uid.$user}{'twitter'}" target="_blank">$profile_txt{'576'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'youtube'} ) { |
| |
| $row_youtube = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'579'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <img src="$imagesdir/$my_youtube" alt="" /> |
| |
| <a href="http://www.youtube.com/${$uid.$user}{'youtube'}" target="_blank">$profile_txt{'579'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( !${ $uid . $user }{'hidemail'} |
| |
| || $iamadmin |
| |
| || !$allow_hide_email |
| |
| || $view ) |
| |
| { |
| |
| my $rowEmail = q{}; |
| |
| if ($view) { |
| |
| if ( !${ $uid . $user }{'hidemail'} ) { |
| |
| $rowEmail = $profile_txt{'showingemail'}; |
| |
| } |
| |
| else { |
| |
| my ( $admtitle, undef ) = |
| |
| split /\|/xsm, $Group{'Administrator'}, 2; |
| |
| $rowEmail = |
| |
| qq~$profile_txt{'notshowingemail'} $admtitle$profile_txt{'notshowingemailend'}~; |
| |
| } |
| |
| } |
| |
| else { |
| |
| $rowEmail = enc_eMail( |
| |
| "$profile_txt{'889'} ${$uid.$user}{'realname'}", |
| |
| ${ $uid . $user }{'email'}, |
| |
| q{}, q{}, 1 |
| |
| ); |
| |
| } |
| |
| |
| |
| $row_email = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'69'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| $rowEmail |
| |
| </div>~; |
| |
| } |
| |
| if ( !$minlinkweb ) { $minlinkweb = 0; } |
| |
| if ( |
| |
| ${ $uid . $user }{'weburl'} |
| |
| && ${ $uid . $user }{'webtitle'} |
| |
| && ( ${ $uid . $user }{'postcount'} >= $minlinkweb |
| |
| || ${ $uid . $user }{'position'} eq 'Administrator' |
| |
| || ${ $uid . $user }{'position'} eq 'Global Moderator' ) |
| |
| ) |
| |
| { |
| |
| $row_website = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'96'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <a href="${$uid.$user}{'weburl'}" target="_blank">${$uid.$user}{'webtitle'}</a> |
| |
| </div>~; |
| |
| } |
| |
| if ( ${ $uid . $user }{'signature'} ) { |
| |
| |
| |
| # do some ubbc on the signature to display in the view profile area |
| |
| $message = ${ $uid . $user }{'signature'}; |
| |
| $displayname = ${ $uid . $user }{'realname'}; |
| |
| |
| |
| if ($enable_ubbc) { |
| |
| enable_yabbc(); |
| |
| DoUBBC(1); |
| |
| } |
| |
| |
| |
| ToChars($message); |
| |
| |
| |
| # Censor the signature. |
| |
| LoadCensorList(); |
| |
| $message = Censor($message); |
| |
| |
| |
| $row_signature = $myrow_sig; |
| |
| $row_signature =~ s/{yabb message}/$message/sm; |
| |
| } |
| |
| |
| |
| # End empty field checking |
| |
| |
| |
| # Just maths below... |
| |
| $post_count = ${ $uid . $user }{'postcount'}; |
| |
| if ( !$post_count ) { $post_count = 0 } |
| |
| |
| |
| $string_regdate = stringtotime( ${ $uid . $user }{'regdate'} ); |
| |
| $string_curdate = $date; |
| |
| |
| |
| if ( $string_curdate < $forumstart ) { $string_curdate = $forumstart } |
| |
| |
| |
| $member_for_days = int( ( $string_curdate - $string_regdate ) / 86400 ); |
| |
| |
| |
| if ( $member_for_days < 1 ) { $tmpmember_for_days = 1; } |
| |
| else { $tmpmember_for_days = $member_for_days; } |
| |
| $post_per_day = sprintf '%.2f', ( $post_count / $tmpmember_for_days ); |
| |
| $member_for_days = NumberFormat($member_for_days); |
| |
| $post_per_day = NumberFormat($post_per_day); |
| |
| $post_count = NumberFormat($post_count); |
| |
| |
| |
| # End statistics. |
| |
| if ( ${ $uid . $user }{'usertext'} ) { |
| |
| |
| |
| # Censor the usertext and wrap it |
| |
| LoadCensorList(); |
| |
| $showusertext = |
| |
| WrapChars( Censor( ${ $uid . $user }{'usertext'} ), 20 ); |
| |
| } |
| |
| |
| |
| if ( !$view ) { |
| |
| $yynavigation = qq~› $profile_txt{'92'}~; |
| |
| if ( $iamadmin || $iamgmod ) { |
| |
| $my_not_view_b .= qq~ |
| |
| <img src="$imagesdir/$my_profile" alt="" /> <b>$profile_txt{'35'}: $INFO{'username'}</b>~; |
| |
| } |
| |
| else { |
| |
| $my_not_view_b .= qq~ |
| |
| <img src="$imagesdir/$my_profile" alt="" /> <b>$profile_txt{'68'}: ${$uid.$INFO{'username'}}{'realname'}</b>~; |
| |
| } |
| |
| $my_not_view = $myshow_b; |
| |
| $my_not_view =~ s/{yabb my_not_view_b}/$my_not_view_b/sm; |
| |
| } |
| |
| $my_online = userOnLineStatus($user); |
| |
| |
| |
| my $userismod; |
| |
| if ( ${ $uid . $user }{'position'} ne 'Administrator' |
| |
| && ${ $uid . $user }{'position'} ne 'Global Moderator' |
| |
| && ${ $uid . $user }{'position'} ne 'Mid Moderator' ) |
| |
| { |
| |
| $userismod = is_moderator($user); |
| |
| } |
| |
| if ($userismod) { |
| |
| @memstats = split /\|/xsm, $Group{'Moderator'}; |
| |
| my $starnum = $memstats[1]; |
| |
| my $memberstartemp = q{}; |
| |
| if ( $memstats[2] !~ /\//xsm ) { $memstats[2] = "$imagesdir/$memstats[2]"; } |
| |
| while ( $starnum-- > 0 ) { |
| |
| $memberstartemp .= qq~<img src="$memstats[2]" alt="*" />~; |
| |
| } |
| |
| $memberstar = $memberstartemp ? "$memberstartemp<br />" : q{}; |
| |
| |
| |
| *get_subboards = sub { |
| |
| my @x = @_; |
| |
| $indent += 2; |
| |
| foreach my $board (@x) { |
| |
| my $dash; |
| |
| if ( $indent > 2 ) { $dash = q{-}; } |
| |
| |
| |
| ( $boardname, $boardperms, $boardview ) = |
| |
| split /\|/xsm, $board{$board}; |
| |
| if ( ${ $uid . $board }{'ann'} == 1 |
| |
| || ${ $uid . $board }{'rbin'} == 1 ) |
| |
| { |
| |
| next; |
| |
| } |
| |
| $moderators = ${ $uid . $board }{'mods'}; |
| |
| my @BoardModerators = split /, ?/sm, $moderators; |
| |
| for my $thisMod (@BoardModerators) { |
| |
| if ( $thisMod eq $user ) { |
| |
| ( $boardname, $boardperms, $boardview ) = |
| |
| split /\|/xsm, $board{"$board"}; |
| |
| ToChars($boardname); |
| |
| if ( !${ $uid . $board }{'canpost'} |
| |
| && $subboard{$board} ) |
| |
| { |
| |
| $my_brd = 'boardselect'; |
| |
| } |
| |
| else { $my_brd = 'board'; } |
| |
| $my_mod_star .= |
| |
| qq~<a href="$scripturl?$my_brd=$board" class="a">~ |
| |
| . ( ' ' x $indent ) |
| |
| . ( $dash x ( $indent / 2 ) ) |
| |
| . qq~$boardname</a><br />\n~; |
| |
| } |
| |
| } |
| |
| if ( $subboard{$board} ) { |
| |
| get_subboards( split /\|/xsm, $subboard{$board} ); |
| |
| } |
| |
| } |
| |
| $indent -= 2; |
| |
| }; |
| |
| |
| |
| for my $catid (@categoryorder) { |
| |
| (@bdlist) = split /\,/xsm, $cat{$catid}; |
| |
| my $indent = -2; |
| |
| get_subboards(@bdlist); |
| |
| } |
| |
| |
| |
| $my_star = $myshow_star; |
| |
| $my_star =~ s/{yabb title}/$memstats[0]/sm; |
| |
| $my_star =~ s/{yabb memberstar}/$memberstar/sm; |
| |
| $my_star =~ s/{yabb my_mod_star}/$my_mod_star/sm; |
| |
| } |
| |
| if ( $row_gender || $row_age || $row_location ) { |
| |
| $my_gender = $myshow_gender; |
| |
| $my_gender =~ s/{yabb row_gender}/$row_gender/sm; |
| |
| $my_gender =~ s/{yabb row_age}/$row_age/sm; |
| |
| $my_gender =~ s/{yabb row_zodiac}/$row_zodiac/sm; |
| |
| $my_gender =~ s/{yabb row_location}/$row_location/sm; |
| |
| } |
| |
| if ($extendedprofiles) { |
| |
| require Sources::ExtendedProfiles; |
| |
| $my_extprofile .= ext_viewprofile($user); |
| |
| } |
| |
| |
| |
| CheckUserPM_Level($user); |
| |
| if ( |
| |
| !$view |
| |
| && $user ne $username |
| |
| && ( |
| |
| $PM_level == 1 |
| |
| || ( $PM_level == 2 |
| |
| && $UserPM_Level{$user} > 1 |
| |
| && ($staff) ) |
| |
| || ( $PM_level == 3 |
| |
| && $UserPM_Level{$user} == 3 |
| |
| && ( $iamadmin || $iamgmod ) ) |
| |
| || ( $PM_level == 4 |
| |
| && $UserPM_Level{$user} == 4 |
| |
| && ( $iamadmin || $iamgmod || $iamfmod ) ) |
| |
| ) |
| |
| ) |
| |
| { |
| |
| $my_userlevel = qq~ |
| |
| <div class="contactleft"> |
| |
| <b>$profile_txt{'144'}: </b> |
| |
| </div> |
| |
| <div class="contactright"> |
| |
| <a href="$scripturl?action=imsend;to=$useraccount{$user}">$profile_txt{'688'} ${$uid.$user}{'realname'}</a> |
| |
| </div>~; |
| |
| } |
| |
| $userlastlogin = timeformat( ${ $uid . $user }{'lastonline'} ); |
| |
| $userlastpost = timeformat( ${ $uid . $user }{'lastpost'} ); |
| |
| $userlastim = timeformat( ${ $uid . $user }{'lastim'} ); |
| |
| if ( $userlastlogin eq q{} ) { $userlastlogin = "$profile_txt{'470'}"; } |
| |
| if ( $userlastpost eq q{} ) { $userlastpost = "$profile_txt{'470'}"; } |
| |
| if ( $userlastim eq q{} ) { $userlastim = "$profile_txt{'470'}"; } |
| |
| my ( $lastonline, $lastpost, $lastPM ); |
| |
| ## MF-B code fix for lpd |
| |
| if ( ${ $uid . $user }{'postcount'} > 0 ) { |
| |
| $userlastpost = usersrecentposts(1); |
| |
| } |
| |
| #### |
| |
| if ( !$view ) { |
| |
| $lastonline = qq~$profile_amv_txt{'9'}~; |
| |
| $lastpost = qq~$profile_amv_txt{'10'}~; |
| |
| $lastPM = qq~$profile_amv_txt{'11'}~; |
| |
| |
| |
| } |
| |
| else { |
| |
| $lastonline = qq~$profile_amv_txt{'mylastonline'}~; |
| |
| $lastpost = qq~$profile_amv_txt{'mylastpost'}~; |
| |
| $lastPM = qq~$profile_amv_txt{'mylastpm'}~; |
| |
| } |
| |
| if ( $pm_lev == 1 ) { |
| |
| $my_lastPM = qq~ |
| |
| <div class="contactleft"><b>$lastPM: </b></div> |
| |
| <div class="contactright">$userlastim</div>~; |
| |
| } |
| |
| if ( ( $iamadmin || $iamgmod || $iamfmod ) |
| |
| && !$view |
| |
| && $user ne $username |
| |
| && $user ne 'admin' ) |
| |
| { |
| |
| $is_banned = check_banlist( "${$uid.$user}{'email'}", q{}, "$user" ); |
| |
| $ban_user_email = ${ $uid . $user }{'email'}; |
| |
| $ban_user_email =~ s/([^A-Za-z0-9])/sprintf('%%%02X', ord($1))/segm; |
| |
| require Sources::Security; |
| |
| if ( $is_banned =~ /E/sm ) { |
| |
| $ban_email_link = |
| |
| qq~<span class="small">[ <a href="$scripturl?action=ipban_update;ban_email=$ban_user_email;username=$useraccount{$user};unban=1" onclick="return confirm('$profile_txt{'904a'}${$uid.$user}{'email'}');">$profile_txt{'904'}</a> ]</span>~; |
| |
| } |
| |
| elsif ( ${ $uid . $user }{'position'} ne 'Administrator' ) { |
| |
| $ban_email_link = qq~<span class="small">[ $profile_txt{'907'}: ~; |
| |
| my $bansep = $#timeban; |
| |
| my $levsep = q~ | ~; |
| |
| for my $i (@timeban) { |
| |
| if ( !$bansep-- ) { $levsep = q{}; } |
| |
| $ban_email_link .= |
| |
| qq~<a href="$scripturl?action=ipban_update;ban_email=$ban_user_email;username=$useraccount{$user};lev=$i" onclick="return confirm('$profile_txt{'907a'}${$uid.$user}{'email'}');">$profile_txt{$i}</a>$levsep~; |
| |
| } |
| |
| $ban_email_link .= q~ ]</span>~; |
| |
| } |
| |
| else { |
| |
| $ban_email_link = q{}; |
| |
| } |
| |
| $ban_user_name = $useraccount{$user}; |
| |
| |
| |
| if ( $is_banned =~ /U/sm ) { |
| |
| $ban_user_link = |
| |
| qq~<span class="small">[ <a href="$scripturl?action=ipban_update;ban_memname=$ban_user_name;username=$useraccount{$user};unban=1" onclick="return confirm('$profile_txt{'903a'}$user');">$profile_txt{'903'}</a> ]</span>~; |
| |
| } |
| |
| elsif ( ${ $uid . $user }{'position'} ne 'Administrator' ) { |
| |
| $ban_user_link = qq~<span class="small">[ $profile_txt{'906'}: ~; |
| |
| my $bansep = $#timeban; |
| |
| my $levsep = q~ | ~; |
| |
| for my $i (@timeban) { |
| |
| if ( !$bansep-- ) { $levsep = q{}; } |
| |
| $ban_user_link .= |
| |
| qq~<a href="$scripturl?action=ipban_update;ban_memname=$ban_user_name;username=$useraccount{$user};lev=$i" onclick="return confirm('$profile_txt{'906a'}$user');">$profile_txt{$i}</a>$levsep~; |
| |
| } |
| |
| $ban_user_link .= q~ ]</span>~; |
| |
| } |
| |
| else { |
| |
| $ban_user_link = q{}; |
| |
| } |
| |
| |
| |
| # Shows the banning stuff for IP's |
| |
| @banlink = (); |
| |
| $ip_ban_options = q{}; |
| |
| if ( ${ $uid . $user }{'lastips'} ) { |
| |
| @ip_ban = split /\|/xsm, ${ $uid . $user }{'lastips'}; |
| |
| for my $ip ( 0 .. $#ip_ban ) { |
| |
| if ( check_banlist( q{}, "$ip_ban[$ip]", q{} ) ) { |
| |
| $banlink[$ip] = |
| |
| qq~<span class="small">[ <a href="$scripturl?action=ipban_update;ban=$ip_ban[$ip];username=$useraccount{$user};unban=1" onclick="return confirm('$profile_txt{'905a'}$ip_ban[$ip]');">$profile_txt{'905'}</a> ]</span>~; |
| |
| } |
| |
| elsif ( ${ $uid . $user }{'position'} ne 'Administrator' ) { |
| |
| $banlink[$ip] = |
| |
| qq~<span class="small">[ $profile_txt{'908'}: ~; |
| |
| my $bansep = $#timeban; |
| |
| my $levsep = q~ | ~; |
| |
| for my $i (@timeban) { |
| |
| if ( !$bansep-- ) { $levsep = q{}; } |
| |
| $banlink[$ip] .= |
| |
| qq~<a href="$scripturl?action=ipban_update;ban=$ip_ban[$ip];username=$useraccount{$user};lev=$i" onclick="return confirm('$profile_txt{'908a'}$ip_ban[$ip]');">$profile_txt{$i}</a>$levsep~; |
| |
| } |
| |
| $banlink[$ip] .= q~ ]</span>~; |
| |
| } |
| |
| else { |
| |
| $banlink[$ip] .= q{}; |
| |
| } |
| |
| } |
| |
| for my $i ( 0 .. $#ip_ban ) { |
| |
| if ( $ip_ban[$i] ) { |
| |
| my $lookupIP = |
| |
| ($ipLookup) |
| |
| ? qq~<a href="$scripturl?action=iplookup;ip=$ip_ban[$i]">$ip_ban[$i]</a>~ |
| |
| : qq~$ip_ban[$i]~; |
| |
| $ip_ban_options .= qq~$lookupIP<br />$banlink[$i]<br />~; |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| $my_banning = $myshow_banning; |
| |
| $my_banning =~ s/{yabb ban_user}/$user/sm; |
| |
| $my_banning =~ s/{yabb ban_user_link}/$ban_user_link/sm; |
| |
| $my_banning =~ s/{yabb ban_email}/${$uid.$user}{'email'}/sm; |
| |
| $my_banning =~ s/{yabb ban_email_link}/$ban_email_link/sm; |
| |
| $my_banning =~ s/{yabb ip_ban_options}/$ip_ban_options/sm; |
| |
| } |
| |
| if ( ${ $uid . $user }{'position'} eq 'Administrator' && !$iamadmin ) { |
| |
| $my_banning = q{}; |
| |
| } |
| |
| |
| |
| if ( $iamadmin |
| |
| && !$view |
| |
| && $user ne $username |
| |
| && ${ $uid . $user }{'position'} ne 'Administrator' ) |
| |
| { |
| |
| $my_reminder = $myshow_reminder; |
| |
| $my_reminder =~ s/{yabb my_realname}/${$uid.$user}{'realname'}/sm; |
| |
| } |
| |
| |
| |
| if ( ${ $uid . $user }{'postcount'} > 0 |
| |
| && $maxrecentdisplay > 0 |
| |
| && !$view ) |
| |
| { |
| |
| my ( $x, $y ) = ( int( $maxrecentdisplay / 5 ), 0 ); |
| |
| if ($x) { |
| |
| for my $i ( 1 .. 5 ) { |
| |
| $y = $i * $x; |
| |
| $my_recent_display .= qq~ |
| |
| <option value="$y">$y</option>~; |
| |
| } |
| |
| } |
| |
| if ( $maxrecentdisplay > $y ) { |
| |
| $my_recent_display .= qq~ |
| |
| <option value="$maxrecentdisplay">$maxrecentdisplay</option>~; |
| |
| } |
| |
| |
| |
| $my_recent = $myshow_recent; |
| |
| $my_recent =~ s/{yabb user}/$useraccount{$user}/sm; |
| |
| $my_recent =~ s/{yabb my_recent_display}/$my_recent_display/sm; |
| |
| $my_recent =~ s/{yabb my_realname}/${$uid.$user}{'realname'}/sm; |
| |
| } |
| |
| |
| |
| $showProfile .= $myshow_profile; |
| |
| $showProfile =~ s/{yabb pic_row}/$pic_row/sm; |
| |
| $showProfile =~ s/{yabb realname}/${$uid.$user}{'realname'}/sm; |
| |
| $showProfile =~ s/{yabb col_title_user}/$col_title{$user}/sm; |
| |
| $showProfile =~ s/{yabb row_addgrp}/$row_addgrp/sm; |
| |
| $showProfile =~ s/{yabb memberstar_user}/$memberstar{$user}/sm; |
| |
| $showProfile =~ s/{yabb my_online}/$my_online/sm; |
| |
| $showProfile =~ s/{yabb showusertext}/$showusertext/sm; |
| |
| $showProfile =~ s/{yabb buddybutton}/$buddybutton/sm; |
| |
| $showProfile =~ s/{yabb modify}/$modify/sm; |
| |
| $showProfile =~ s/{yabb my_star}/$my_star/sm; |
| |
| $showProfile =~ s/{yabb post_count}/$post_count/sm; |
| |
| $showProfile =~ s/{yabb post_per_day}/$post_per_day/sm; |
| |
| $showProfile =~ s/{yabb dr}/$dr/sm; |
| |
| $showProfile =~ s/{yabb member_for_days}/$member_for_days/sm; |
| |
| $showProfile =~ s/{yabb my_gender}/$my_gender/sm; |
| |
| $showProfile =~ s/{yabb my_extprofile}/$my_extprofile/sm; |
| |
| $showProfile =~ s/{yabb my_userlevel}/$my_userlevel/sm; |
| |
| $showProfile =~ s/{yabb row_email}/$row_email/sm; |
| |
| $showProfile =~ s/{yabb row_website}/$row_website/sm; |
| |
| $showProfile =~ s/{yabb row_aim}/$row_aim/sm; |
| |
| $showProfile =~ s/{yabb row_skype}/$row_skype/sm; |
| |
| $showProfile =~ s/{yabb row_yim}/$row_yim/sm; |
| |
| $showProfile =~ s/{yabb row_gtalk}/$row_gtalk/sm; |
| |
| $showProfile =~ s/{yabb row_myspace}/$row_myspace/sm; |
| |
| $showProfile =~ s/{yabb row_facebook}/$row_facebook/sm; |
| |
| $showProfile =~ s/{yabb row_twitter}/$row_twitter/sm; |
| |
| $showProfile =~ s/{yabb row_youtube}/$row_youtube/sm; |
| |
| $showProfile =~ s/{yabb row_icq}/$row_icq/sm; |
| |
| $showProfile =~ s/{yabb row_signature}/$row_signature/sm; |
| |
| $showProfile =~ s/{yabb lastonline}/$lastonline/sm; |
| |
| $showProfile =~ s/{yabb userlastlogin}/$userlastlogin/sm; |
| |
| $showProfile =~ s/{yabb lastpost}/$lastpost/sm; |
| |
| $showProfile =~ s/{yabb userlastpost}/$userlastpost/sm; |
| |
| $showProfile =~ s/{yabb my_lastPM}/$my_lastPM/sm; |
| |
| $showProfile =~ s/{yabb my_banning}/$my_banning/sm; |
| |
| $showProfile =~ s/{yabb my_reminder}/$my_reminder/sm; |
| |
| $showProfile =~ s/{yabb my_recent}/$my_recent/sm; |
| |
| ## Mod Hook showProfile2 ## |
| |
| |
| |
| $yytitle = $profile_txt{'92u'}; |
| |
| $yytitle =~ s/USER/${$uid.$user}{'realname'}/gsm; |
| |
| if ( !$view ) { |
| |
| $yymain .= $showProfile; |
| |
| template(); |
| |
| } |
| |
| return; |
| |
| } |
| |
| |
| |
| sub usersrecentposts { |
| |
| my @x = @_; |
| |
| if ($iamguest) { fatal_error('members_only'); } |
| |
| if ( $INFO{'username'} =~ /\//xsm ) { fatal_error('no_user_slash'); } |
| |
| if ( $INFO{'username'} =~ /\\/xsm ) { |
| |
| fatal_error('no_user_backslash'); |
| |
| } |
| |
| if ( !-e ("$memberdir/$INFO{'username'}.vars") ) { |
| |
| fatal_error('no_profile_exists'); |
| |
| } |
| |
| if ( $action =~ /^(?:my)?usersrecentposts$/xsm ) { spam_protection(); } |
| |
| |
| |
| my $curuser = $INFO{'username'}; |
| |
| LoadUser($curuser); |
| |
| |
| |
| my $display = $FORM{'viewscount'} ? $FORM{'viewscount'} : $x[0]; |
| |
| if ( !$display ) { $display = 5; } |
| |
| elsif ( $display =~ /\D/xsm ) { fatal_error('only_numbers_allowed'); } |
| |
| if ( $display > $maxrecentdisplay ) { $display = $maxrecentdisplay; } |
| |
| |
| |
| my ( |
| |
| %data, $numfound, %threadfound, %boardtxt, |
| |
| %recentthreadfound, $recentfound, $save_recent, $boardperms, |
| |
| %boardcat, %catinfos, $curboard, $c, |
| |
| @messages, $tnum, $tsub, $tname, |
| |
| $temail, $tdate, $treplies, $tusername, |
| |
| $ticon, $tstate, $mname, $memail, |
| |
| $mdate, $musername, $micon, $mattach, |
| |
| $mip, $mns, $counter, $board, |
| |
| $notify, $catid |
| |
| ); |
| |
| |
| |
| Recent_Load($curuser); |
| |
| my @recent = |
| |
| reverse sort { ${ $recent{$a} }[1] <=> ${ $recent{$b} }[1] } |
| |
| grep { ${ $recent{$_} }[1] > 0 } keys %recent; |
| |
| my $recentcount = keys %recent; |
| |
| my @data; |
| |
| $#data = $display - 1; |
| |
| @data = map { 0 } @data; |
| |
| |
| |
| get_forum_master(); |
| |
| foreach my $catid (@categoryorder) { |
| |
| foreach ( split /\,/xsm, $cat{$catid} ) { |
| |
| $boardcat{$_} = $catid; |
| |
| @{ $catinfos{$_} } = split /\|/xsm, $catinfo{$catid}, 3; |
| |
| } |
| |
| } |
| |
| |
| |
| RECENTCHECK: foreach my $thread (@recent) { |
| |
| MessageTotals( 'load', $thread ); |
| |
| if ( ${$thread}{'board'} eq q{} ) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$thread}; |
| |
| $recentcount--; |
| |
| next RECENTCHECK; |
| |
| } |
| |
| $curboard = ${$thread}{'board'}; |
| |
| |
| |
| if ( !$boardtxt{$curboard} ) { |
| |
| ( $boardname{$curboard}, $boardperms, undef ) = split /\|/xsm, |
| |
| $board{$curboard}; |
| |
| |
| |
| if ( |
| |
| !$iamadmin |
| |
| && ( !CatAccess( ${ $catinfos{$curboard} }[1] ) |
| |
| || AccessCheck( $curboard, q{}, $boardperms ) ne 'granted' ) |
| |
| ) |
| |
| { |
| |
| $recentcount--; |
| |
| next RECENTCHECK; |
| |
| } |
| |
| |
| |
| fopen( FILE, "$boardsdir/$curboard.txt" ); |
| |
| @{ $boardtxt{$curboard} } = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| if ( !@{ $boardtxt{$curboard} } ) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$thread}; |
| |
| $recentcount--; |
| |
| next RECENTCHECK; |
| |
| } |
| |
| } |
| |
| elsif ($numfound) { |
| |
| if ( exists $recentthreadfound{$thread} ) { |
| |
| $recentfound += $recentthreadfound{$thread}; |
| |
| } |
| |
| last |
| |
| if $recentfound >= $display |
| |
| && $data[-1] > ${ $recent{$thread} }[1]; |
| |
| next; |
| |
| } |
| |
| |
| |
| for my $i ( 0 .. $#{ $boardtxt{$curboard} } ) { |
| |
| ( |
| |
| $tnum, $tsub, $tname, $temail, $tdate, |
| |
| $treplies, $tusername, $ticon, $tstate |
| |
| ) = split /\|/xsm, ${ $boardtxt{$curboard} }[$i]; |
| |
| |
| |
| if ( ( $display == 1 && $thread == $tnum ) |
| |
| || ( $display > 1 && exists $recent{$tnum} ) ) |
| |
| { |
| |
| if ( $tstate =~ /h/sm && !$iamadmin && !$iamgmod ) { |
| |
| $recentcount--; |
| |
| } |
| |
| else { |
| |
| fopen( FILE, "$datadir/$tnum.txt" ); |
| |
| @messages = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| my $usercheck = 0; |
| |
| |
| |
| for my $c ( reverse 0 .. $#messages ) { |
| |
| ( |
| |
| $msub, $mname, $memail, $mdate, |
| |
| $musername, $micon, $mattach, $mip, |
| |
| $message, $mns |
| |
| ) = split /\|/xsm, $messages[$c]; |
| |
| |
| |
| if ( $curuser eq $musername ) { |
| |
| my @i = ( @data, $mdate ); |
| |
| @data = reverse sort { $a <=> $b } @i; |
| |
| if ( pop(@data) < $mdate ) { |
| |
| chomp $mns; |
| |
| $data{$mdate} = [ |
| |
| $curboard, $tnum, $c, |
| |
| $tname, $msub, $mname, |
| |
| $memail, $mdate, $musername, |
| |
| $micon, $mattach, $mip, |
| |
| $message, $mns, $tstate, |
| |
| $tusername |
| |
| ]; |
| |
| if ( !$usercheck ) { |
| |
| $numfound++; |
| |
| $threadfound{$tnum} = 1; |
| |
| } |
| |
| if ( exists $recent{$tnum} ) { |
| |
| $recentthreadfound{$tnum}++; |
| |
| if ( $thread == $tnum ) { |
| |
| $recentfound++; |
| |
| } |
| |
| } |
| |
| if ( ${ $recent{$tnum} }[1] < $mdate ) { |
| |
| $save_recent = 1; |
| |
| ${ $recent{$tnum} }[1] = $mdate; |
| |
| } |
| |
| } |
| |
| $usercheck = 1; |
| |
| } |
| |
| } |
| |
| if ( !$usercheck ) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$tnum}; |
| |
| $recentcount--; |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| if ( $recentfound < $display && $numfound < $recentcount ) { |
| |
| CATEGORYCHECK: foreach my $catid (@categoryorder) { |
| |
| if ( !CatAccess( ( split /\|/xsm, $catinfo{$catid}, 3 )[1] ) ) { |
| |
| next CATEGORYCHECK; |
| |
| } |
| |
| |
| |
| BOARDCHECK: |
| |
| foreach my $curboard ( split /\,/xsm, $cat{$catid} ) { |
| |
| if ( !$boardtxt{$curboard} ) { |
| |
| ( $boardname{$curboard}, $boardperms, undef ) = |
| |
| split /\|/xsm, $board{$curboard}; |
| |
| |
| |
| if ( !$iamadmin |
| |
| && AccessCheck( $curboard, q{}, $boardperms ) ne |
| |
| 'granted' ) |
| |
| { |
| |
| next BOARDCHECK; |
| |
| } |
| |
| |
| |
| my $bdmods = ${ $uid . $curboard }{'mods'}; |
| |
| $bdmods =~ s/\, /\,/gsm; |
| |
| $bdmods =~ s/\ /\,/gsm; |
| |
| my %moderators = (); |
| |
| my $pswiammod = 0; |
| |
| foreach my $curuser ( split /\,/xsm, $bdmods ) { |
| |
| if ( $username eq $curuser ) { $pswiammod = 1; } |
| |
| } |
| |
| my $bdmodgroups = ${ $uid . $curboard }{'modgroups'}; |
| |
| $bdmodgroups =~ s/\, /\,/gsm; |
| |
| my %moderatorgroups = (); |
| |
| foreach my $curgroup ( split /\,/xsm, $bdmodgroups ) { |
| |
| if ( ${ $uid . $username }{'position'} eq $curgroup ) { |
| |
| $pswiammod = 1; |
| |
| } |
| |
| foreach my $memberaddgroups ( split /\, /sm, |
| |
| ${ $uid . $username }{'addgroups'} ) |
| |
| { |
| |
| chomp $memberaddgroups; |
| |
| if ( $memberaddgroups eq $curgroup ) { |
| |
| $pswiammod = 1; |
| |
| last; |
| |
| } |
| |
| } |
| |
| } |
| |
| my $cookiename = "$cookiepassword$curboard$username"; |
| |
| my $crypass = ${ $uid . $curboard }{'brdpassw'}; |
| |
| if ( !$staff |
| |
| && !$pswiammod |
| |
| && $yyCookies{$cookiename} ne $crypass ) |
| |
| { |
| |
| next; |
| |
| } |
| |
| fopen( FILE, "$boardsdir/$curboard.txt" ) |
| |
| || next BOARDCHECK; |
| |
| @{ $boardtxt{$curboard} } = <FILE>; |
| |
| fclose(FILE); |
| |
| } |
| |
| |
| |
| for my $i ( 0 .. $#{ $boardtxt{$curboard} } ) { |
| |
| ( |
| |
| $tnum, $tsub, $tname, |
| |
| $temail, $tdate, $treplies, |
| |
| $tusername, $ticon, $tstate |
| |
| ) = split /\|/xsm, ${ $boardtxt{$curboard} }[$i]; |
| |
| |
| |
| if ( exists( $recent{$tnum} ) |
| |
| && !exists $threadfound{$tnum} ) |
| |
| { |
| |
| if ( $tstate !~ /h/sm || $iamadmin || $iamgmod ) { |
| |
| fopen( FILE, "$datadir/$tnum.txt" ); |
| |
| @messages = <FILE>; |
| |
| fclose(FILE); |
| |
| |
| |
| my $usercheck = 0; |
| |
| |
| |
| for my $c ( reverse 0 .. $#messages ) { |
| |
| ( |
| |
| $msub, $mname, $memail, $mdate, |
| |
| $musername, $micon, $mattach, $mip, |
| |
| $message, $mns |
| |
| ) = split /\|/xsm, $messages[$c]; |
| |
| |
| |
| if ( $curuser eq $musername ) { |
| |
| my @i = @data; |
| |
| push @i, $mdate; |
| |
| @data = reverse sort { $a <=> $b } @i; |
| |
| if ( pop(@data) != $mdate ) { |
| |
| chomp $mns; |
| |
| $data{$mdate} = [ |
| |
| $curboard, $tnum, |
| |
| $c, $tname, |
| |
| $msub, $mname, |
| |
| $memail, $mdate, |
| |
| $musername, $micon, |
| |
| $mattach, $mip, |
| |
| $message, $mns, |
| |
| $tstate, $tusername |
| |
| ]; |
| |
| if ( ${ $recent{$tnum} }[1] < $mdate ) { |
| |
| $save_recent = 1; |
| |
| ${ $recent{$tnum} }[1] = $mdate; |
| |
| } |
| |
| } |
| |
| $usercheck = 1; |
| |
| } |
| |
| } |
| |
| |
| |
| if ( !$usercheck ) { |
| |
| $save_recent = 1; |
| |
| delete $recent{$tnum}; |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| } |
| |
| |
| |
| undef %boardtxt; |
| |
| |
| |
| if ($save_recent) { Recent_Save($curuser); } |
| |
| |
| |
| if ( $display == 1 ) { |
| |
| return if !$data[0]; |
| |
| ( |
| |
| $board, $tnum, $c, $tname, |
| |
| $msub, $mname, $memail, $mdate, |
| |
| $musername, $micon, $mattach, $mip, |
| |
| $message, $mns, $tstate, $tusername |
| |
| ) = @{ $data{ $data[0] } }; |
| |
| ToChars($msub); |
| |
| ( $msub, undef ) = Split_Splice_Move( $msub, 0 ); |
| |
| return ( timeformat($mdate) |
| |
| . qq~<br />$profile_txt{'view'} › <a href="$scripturl?num=$tnum/$c#$c">$msub</a>~ |
| |
| ); |
| |
| } |
| |
| |
| |
| LoadCensorList(); |
| |
| |
| |
| for my $i ( 0 .. $#data ) { |
| |
| next if !$data[$i]; |
| |
| |
| |
| ( |
| |
| $board, $tnum, $c, $tname, |
| |
| $msub, $mname, $memail, $mdate, |
| |
| $musername, $micon, $mattach, $mip, |
| |
| $message, $mns, $tstate, $tusername |
| |
| ) = @{ $data{ $data[$i] } }; |
| |
| ( $msub, undef ) = Split_Splice_Move( $msub, 0 ); |
| |
| wrap(); |
| |
| $displayname = $mname; |
| |
| ( $message, undef ) = Split_Splice_Move( $message, $tnum ); |
| |
| if ($enable_ubbc) { |
| |
| $ns = $mns; |
| |
| enable_yabbc(); |
| |
| DoUBBC(); |
| |
| } |
| |
| wrap2(); |
| |
| ToChars($msub); |
| |
| ToChars($message); |
| |
| $msub = Censor($msub); |
| |
| $message = Censor($message); |
| |
| ToChars( ${ $catinfos{$board} }[0] ); |
| |
| ToChars( $boardname{$board} ); |
| |
| |
| |
| $counter++; |
| |
| |
| |
| if ( $tusername !~ m{Guest}sm ) { |
| |
| if ( -e ("$memberdir/$tusername.vars") ) { |
| |
| LoadUser($tusername); |
| |
| $mytname = |
| |
| qq~<a href="$scripturl?action=viewprofile;username=$useraccount{$tusername}" rel="nofollow">$format_unbold{$tusername}</a>~; |
| |
| } |
| |
| else { $mytname = qq~$tname - $maintxt{'470a'}~; } |
| |
| } |
| |
| else { |
| |
| $mytname = "$tname ($maintxt{'28'})"; |
| |
| } |
| |
| |
| |
| $mname = |
| |
| qq~<a href="$scripturl?action=viewprofile;username=$useraccount{$curuser}" rel="nofollow">$format_unbold{$curuser}</a>~; |
| |
| |
| |
| $mdate = timeformat($mdate); |
| |
| |
| |
| get_template('MyPosts'); |
| |
| $mypostborder = q{}; |
| |
| if ( $action eq 'myusersrecentposts' ) { |
| |
| $mypostborder = ' class="mypostborder"'; |
| |
| } |
| |
| |
| |
| $showProfile .= $myshow_recent_a; |
| |
| |
| |
| $showProfile =~ s/{yabb counter}/$counter/sm; |
| |
| $showProfile =~ s/{yabb brdcat}/$boardcat{$board}/sm; |
| |
| $showProfile =~ s/{yabb brd}/$boardcat{$board}/sm; |
| |
| $showProfile =~ s/{yabb catinfobrd}/${$catinfos{$board}}[0]/sm; |
| |
| $showProfile =~ s/{yabb brdbrd}/$boardname{$board}/sm; |
| |
| $showProfile =~ s/{yabb tnum}/$tnum\/$c#$c/sm; |
| |
| $showProfile =~ s/{yabb msub}/$msub/sm; |
| |
| $showProfile =~ s/{yabb mdate}/$mdate/sm; |
| |
| $showProfile =~ s/{yabb tname}/$mytname/sm; |
| |
| $showProfile =~ s/{yabb poster}/$mname/sm; |
| |
| $showProfile =~ s/{yabb mypostborder}/$mypostborder/sm; |
| |
| |
| |
| if ( $tstate != 1 ) { |
| |
| if ( ${ $uid . $username }{'thread_notifications'} =~ |
| |
| /\b$tnum\b/xsm ) |
| |
| { |
| |
| $notify = |
| |
| qq~$menusep<a href="$scripturl?action=notify3;num=$tnum/$c;oldnotify=1">$img{'del_notify'}</a>~; |
| |
| } |
| |
| else { |
| |
| $notify = |
| |
| qq~$menusep<a href="$scripturl?action=notify2;num=$tnum/$c;oldnotify=1">$img{'add_notify'}</a>~; |
| |
| } |
| |
| $showProfile .= |
| |
| qq~<a href="$scripturl?board=$board;action=post;num=$tnum/$c#$c;title=PostReply">$img{'reply'}</a>$menusep<a href="$scripturl?board=$board;action=post;num=$tnum;quote=$c;title=PostReply">$img{'recentquote'}</a>$notify ~; |
| |
| } |
| |
| |
| |
| $showProfile .= $myshow_recent_b; |
| |
| $showProfile =~ s/{yabb recentmsg}/$message/sm; |
| |
| } |
| |
| |
| |
| if ( !$counter ) { |
| |
| $showProfile .= qq~<b>$profile_txt{'755'}</b>~; |
| |
| } |
| |
| elsif ( !$view ) { |
| |
| $showProfile .= |
| |
| qq~<p><a href="$scripturl?action=viewprofile;username=$useraccount{$curuser}"><b>$profile_txt{'92u'}</b></a></p>~; |
| |
| $showProfile =~ s/USER/${$uid.$curuser}{'realname'}/gsm; |
| |
| } |
| |
| |
| |
| $yytitle = "$profile_txt{'458'} ${$uid.$curuser}{'realname'}"; |
| |
| if ( !$view ) { |
| |
| $yynavigation = qq~› $maintxt{'213'}~; |
| |
| $yymain .= $showProfile; |
| |
| template(); |
| |
| } |
| |
| return; |
| |
| } |
| |
| |
| |
| sub DrawGroups { |
| |
| my ( $availgroups, $position, $show_additional ) = @_; |
| |
| my ( %groups, $groupsel ); |
| |
| map { $groups{$_} = 1; } split /,/xsm, $availgroups; |
| |
| |
| |
| for my $key (@nopostorder) { |
| |
| my ( |
| |
| $name, undef, undef, undef, undef, undef, |
| |
| undef, undef, undef, undef, $additional |
| |
| ) = split /\|/xsm, $NoPost{$key}; |
| |
| next if ( !$show_additional && !$additional ) || $position eq $key; |
| |
| |
| |
| $groupsel .= |
| |
| qq~<option value="$key"~ |
| |
| . ( $groups{$key} ? ' selected="selected"' : q{} ) |
| |
| . qq~>$name</option>~; |
| |
| $selsize++; |
| |
| } |
| |
| return ( $groupsel, ( $selsize > 6 ? 6 : $selsize ) ); |
| |
| } |
| |
| |
| $groupsel .= qq~<option value="$key"~ . ($groups{$key} ? ' selected="selected"' : '') . qq~>$name</option>~; |
| sub isselected { |
| $selsize++; |
| my ($inp) = @_; |
| } |
| |
| |
| |
| ($groupsel,($selsize > 6 ? 6 : $selsize)); |
| # Return a ref so we can be used like ${isselected($var)} inside a string |
| |
| return \' selected="selected"' if $inp; |
| |
| return \q{}; |
| } |
| } |
| |
| |
| 1; |
| 1; |
| |
| |