############################################################################### # InstantMessage.pl # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Software Version: YaBB 1 Gold - SP1 # # Released: December 2001 # # =========================================================================== # # Software Distributed by: http://yabb.xnull.com # # Support, News, Updates at: http://yabb.xnull.com/community/ # # =========================================================================== # # Copyright (c) 2000-2002 Xnull (www.xnull.com) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # ############################################################################### # Advanced Instant Message Box by dOCda S! in January 2002 # # Last Edit: 01.12.2002 # ############################################################################### $instantmessageplver="1 Gold - SP 1.1 - Advanced 2.0"; if(-e("$memberdir/$username.off")) { fopen(FILE, "$memberdir/$username.off"); @offsettings = ; fclose(FILE); } if (-e("$memberdir/$username.imconfig")) { fopen(FILE, "$memberdir/$username.imconfig"); @imconfig = ; fclose(FILE); } sub CallBack { $receiver = "$INFO{'receiver'}"; $rid = "$INFO{'rid'}"; chomp($rid); undef $nodel; fopen(FILE, "$memberdir/$receiver.msg"); @rims = ; fclose(FILE); fopen(REVMSG, ">$memberdir/$receiver.msg"); foreach $line (@rims) { chomp($line); ($rusername, $rsub, $rdate, $rimmessage, $rmessageid, $rimip, $rnew) = split( /\|/, $line); chomp($rmessageid); chomp($rnew); if($rmessageid != $rid) { print REVMSG "$line\n"; } elsif ($rnew != 1) { print REVMSG "$line\n"; $nodel = 1;} } close(REVMSG); fopen(FILE, "$memberdir/$username.outbox"); @outbox = ; fclose(FILE); fopen(UOB, ">$memberdir/$username.outbox"); foreach $line (@outbox) { chomp($line); ($rusername, $rsub, $rdate, $rimmessage, $rmessageid, $rimip, $rnew) = split( /\|/, $line); chomp($rmessageid); chomp($rnew); if($rmessageid != $rid) { print UOB "$line\n"; } elsif ($rnew == 1) { print UOB "$line\n"; $nodel = 1;} } close(UOB); if($nodel == 1) { &fatal_error("$imtxt{'72'}"); } $yySetLocation = qq~$scripturl?action=imoutbox~; &redirectexit; } sub ModList { unlink("$vardir/modslist.txt"); fopen(FILE, "$vardir/cat.txt"); @categories = ; fclose(FILE); foreach $curcat (@categories) { $curcat =~ s/[\n\r]//g; fopen(CAT, "$boardsdir/$curcat.cat"); @catinfo = ; fclose(CAT); foreach $curboard (@catinfo) { if($curboard ne "$catinfo[0]" && $curboard ne "$catinfo[1]") { $curboard =~ s/[\n\r]//g; fopen(BOARD, "$boardsdir/$curboard.dat"); @boardinfo = ; fclose(BOARD); chomp @boardinfo; foreach(split(/\|/,$boardinfo[2])) { open(FILE, "$vardir/modslist.txt"); @exmods = ; close(FILE); $a=0; foreach $lines (@exmods) { chomp($lines); if ($lines eq "$_") { $a++; next;} } if ($a == 0) { fopen(FILE, ">>$vardir/modslist.txt"); print FILE "$_\n"; fclose(FILE); } } } } } } sub IMGroups { if( $FORM{'waction'} =~ 'preview' ) { require "$sourcedir/Post.pl"; $FORM{'icon'} = "xx"; &Preview; exit;} &is_admin; &fatal_error("$txt{'752'}") unless($FORM{'to'}); &fatal_error("$txt{'77'}") unless($FORM{'subject'}); &fatal_error("$txt{'78'}") unless($FORM{'message'}); $subject = $FORM{'subject'}; $subject =~ s/\A\s+//; $subject =~ s/\s+\Z//; $message = $FORM{'message'}; $memgroup = $FORM{'to'}; chomp $memgroup; if ($enable_maxlen == 0 || $enable_maxlen eq "") { if (length($message)>$MaxMessLen) { &fatal_error("$txt{'499'}"); } } &ToHTML($subject); &ToHTML($message); $message =~ s/\t/ \  \  \ /g; $message =~ s/\cM//g; $message =~ s/\n/
/g; $messageid = $^T.$$; if(-e("$sourcedir/MemberGroups.pl")) { &IMMemGroups; exit; } fopen(FILE, "$vardir/membergroups.txt"); @membergroups = ; fclose(FILE); fopen(FILE, "$memberdir/memberlist.txt"); @memberlist = ; fclose(FILE); chomp($membergroups[1]); if($memgroup eq "$membergroups[1]") { &ModList; fopen(FILE,"$vardir/modslist.txt"); @memberlist = ; fclose(FILE); } foreach $lines (@memberlist) { $i=0; chomp $lines; fopen(FILE, "$memberdir/$lines.dat"); @memberfile = ; fclose(FILE); if($memgroup ne "All" && $memgroup ne "$membergroups[1]") { chomp $memberfile[7]; if( !$memberfile[7] ) { if($memberfile[6] > $GodPostNum) { $mem{$lines} = "$membergroups[6]"; } elsif($memberfile[6] > $SrPostNum) { $mem{$lines} = "$membergroups[5]"; } elsif($memberfile[6] > $FullPostNum) { $mem{$lines} = "$membergroups[4]"; } elsif($memberfile[6] > $JrPostNum) { $mem{$lines} = "$membergroups[3]"; } else { $mem{$lines} = "$membergroups[2]"; } chomp $mem{$lines}; if( $mem{$lines} eq "$memgroup" ) { $i=1; } } else { if( $memberfile[7] eq "$memgroup" ) { $i=1; } } } else { $i=1; } if($i == 1) { # Send message to user open(FILE, "$memberdir/$lines.msg"); @inmessages = ; close(FILE); fopen(FILE, ">$memberdir/$lines.msg", 1); print FILE "$username|$subject|$date|$message|$messageid|$ENV{'REMOTE_ADDR'}|1\n"; print FILE @inmessages; fclose(FILE); } } $yySetLocation = qq~$scripturl?action=admin~; &redirectexit; } sub IMMemGroups { fopen(FILE, "$memberdir/memberlist.txt"); @memberlist = ; fclose(FILE); if($memgroup eq "$MemStatMod") { &ModList; fopen(FILE,"$vardir/modslist.txt"); @memberlist = ; fclose(FILE); } foreach $lines (@memberlist) { $i=0; chomp $lines; fopen(FILE, "$memberdir/$lines.dat"); @memberfile = ; fclose(FILE); if($memgroup ne "All" && $memgroup ne "$MemStatMod") { chomp $memberfile[7]; if( !$memberfile[7] ) { $memgcount=0; while ($MemStat[$memgcount] && $MemPostNum[$memgcount] ne "x") { undef $mem{$_}; if($memberfile[6] >= $MemPostNum[$memgcount]) { $mem{$lines} = "$MemStat[$memgcount]"; } $memgcount++; } if ($mem{$lines} eq "") { $mem{$lines} = "$MemStatNewbie"; } chomp $mem{$lines}; if( $mem{$lines} eq "$memgroup" ) { $i=1; } } else { if( $memberfile[7] eq "$memgroup" ) { $i=1; } } if($memberfile[7] eq "Administrator" && $memgroup eq "$MemStatAdmin") { $i=1; } } else { $i=1; } if($i == 1) { # Send message to user open(FILE, "$memberdir/$lines.msg"); @inmessages = ; close(FILE); fopen(FILE, ">$memberdir/$lines.msg", 1); print FILE "$username|$subject|$date|$message|$messageid|$ENV{'REMOTE_ADDR'}|1\n"; print FILE @inmessages; fclose(FILE); } } $yySetLocation = qq~$scripturl?action=admin~; &redirectexit; } sub Del_Some_IM { if($username eq 'Guest') { &fatal_error($txt{'147'}); } if($FORM{'imaction'} eq "$imtxt{'10'}") { if($INFO{'caller'} == 1) { open(FILE, "$memberdir/$username.msg"); } elsif($INFO{'caller'} == 2) { open(FILE, "$memberdir/$username.outbox"); } elsif($INFO{'caller'} == 3) { open(FILE, "$memberdir/$username.imstore"); } @messages = ; close(FILE); if($INFO{'caller'} == 1) { fopen(FILE, ">$memberdir/$username.msg", 1); } elsif($INFO{'caller'} == 2) { fopen(FILE, ">$memberdir/$username.outbox", 1); } elsif($INFO{'caller'} == 3) { fopen(FILE, ">$memberdir/$username.imstore", 1); } for ($a = 0; $a < @messages; $a++) { if($FORM{"message$a"} != 1) { print FILE "$messages[$a]"; } } fclose(FILE); if($INFO{'caller'} == 1) { $yySetLocation = qq~$scripturl?action=im~; } elsif($INFO{'caller'} == 2) { $yySetLocation = qq~$scripturl?action=imoutbox~; } elsif($INFO{'caller'} == 3) { $yySetLocation = qq~$scripturl?action=imstorage~; } &redirectexit; } if($FORM{'imaction'} eq "$imtxt{'50'}") { my( @messages, $a, $musername, $msub, $mdate, $mmessage, $messageid, $mip ); $source = $INFO{'caller'} == 1 ? "inbox" : "outbox"; if ($INFO{'caller'} == 1) { fopen(FILE, "$memberdir/$username.msg"); } elsif ($INFO{'caller'} == 2) { fopen(FILE, "$memberdir/$username.outbox"); } @messages = ; fclose(FILE); if ($INFO{'caller'} == 1) { fopen(FILE, ">$memberdir/$username.msg", 1); } elsif ($INFO{'caller'} == 2) { fopen(FILE, ">$memberdir/$username.outbox", 1); } fopen(TRANSFER, ">>$memberdir/$username.imstore", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; ($imusername, $imsub, $imdate, $mmessage, $imessageid, $mip, $imnew) = split(/\|/,$messages[$a]); $imdummy = ""; if($imnew eq "") { $imdummy = "|"; } if($FORM{"message$a"} != 1) { print FILE "$messages[$a]\n"; } else { print TRANSFER "$messages[$a]$imdummy|$source\n"; } } fclose(TRANSFER); fclose(FILE); my $redirect = $INFO{'caller'} == 1 ? 'im' : 'imoutbox'; $yySetLocation = qq~$scripturl?action=$redirect~; &redirectexit; } } sub DoShowIM { $yymain .= qq~ ~; if( $msub eq '' ) { $msub = $txt{'24'}; } $mydate = &timeformat($mdate); if( $musername ne 'Guest' && ! $yyUDLoaded{$musername} && -e("$memberdir/$musername.dat") ) { # If user is not in memory, s/he must be loaded. &LoadUserDisplay($musername); } if( $yyUDLoaded{$musername} ) { @userprofile = @{$userprofile{$musername}}; $displayname = $userprofile[1]; $star = $memberstar{$musername}; $memberinfo = $memberinfo{$musername}; $memberinfo =~ s~\n~~g; $icqad = $icqad{$musername}; $yimon = $yimon{$musername}; $usernamelink = qq~$userprofile[1]~; $profbutton = $profilebutton && $musername ne 'Guest' ? qq~$menusep$img{'viewprofile'}~ : ''; $postinfo = qq~$txt{'26'}: $userprofile[6]
~; $memail = $userprofile[2]; if ($disable_publicname != 1) { $usernamelink = qq~$userprofile[1]~; } else { $usernamelink = qq~$musername~; } } else { $usernamelink = qq~$musername~; } foreach (@censored) { ($tmpa,$tmpb) = @{$_}; $immessage =~ s~\Q$tmpa\E~$tmpb~gi; $msub =~ s~\Q$tmpa\E~$tmpb~gi; } $message = $immessage; # put the message back in the proper variable for doing ubbc ### Begin HTML MOD if ($message =~ /\#enable_html/isg) { $message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where) $enable_html = HTML_allow($musername); $message = $message_backup; if ($enable_html == 1) { $message =~ s/\#enable_html//isg; &FromHTML($message); } } else { $enable_html = 0; } if($enable_ubbc && $enable_html == 0) { if(!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } &DoUBBC; } ### End HTML MOD $message =~ s~(\S{80})(?=\S)~$1\n~g; ### Checking what MemberGroup the User is ### if(!-e("$sourcedir/MemberGroups.pl")) { fopen(FILE, "$vardir/membergroups.txt"); @membergroups = ; fclose(FILE); if($userprofile[6] > $GodPostNum) { $memberinfo = "$membergroups[6]"; } elsif($userprofile[6] > $SrPostNum) { $memberinfo = "$membergroups[5]"; } elsif($userprofile[6] > $FullPostNum) { $memberinfo = "$membergroups[4]"; } elsif($userprofile[6] > $JrPostNum) { $memberinfo = "$membergroups[3]"; } else { $memberinfo = "$membergroups[2]"; } if($userprofile[7] ne "") { $memberinfo = "$userprofile[7]"; } if($userprofile[7] eq "Administrator") { $memberinfo = "$membergroups[0]"; } } ### End Checking what MemberGroup the User is ### $online = qq~
(Offline $imtxt{'61'})~; foreach $lines (@logentries) { ($name, $dummy) = split(/\|/, $lines); chomp $name; if( $name eq $musername) { $online = qq~
(Online $imtxt{'60'})~; } } if ($offsettings[0] == 1) { $ava = "
"; } else { $ava = $userprofile[13]; } if ($offsettings[1] == 1) { $text = ""; } else { $text = $userprofile[12]; } if ($offsettings[2] == 1 || $INFO{'caller'} == 2 || $INFO{'caller'} == 3) { $signature = ""; } else { $signature = $userprofile[5]; } if (-e("$sourcedir/MemberGroups.pl")) { $usernamelink = $link{$musername}; } else { $usernamelink = qq~$usernamelink
~; } $yymain .= qq~
 $rectext $txt{'118'}
$usernamelink $memberinfo
$star
$online

$postinfo $userprofile[11]
$ava$text $userprofile[8] $icqad   $userprofile[10] $yimon   $userprofile[9]
~; if ($settings[7] eq "Administrator") { $yymain .= qq~~; } $yymain .= qq~
$txt{'70'}: $msub $txt{'317'}: $mydate

$message
 $imip
$signature
~; if ($userprofile[19] ne "checked" || $settings[7] eq "Administrator" || $allow_hide_email ne 1) { $yymain .= qq~$userprofile[4]$img{'email'}$profbutton~; } else { $yymain .= qq~$userprofile[4]$profbutton~; } $yymain .= qq~ $img{'replyquote'}$menusep$img{'reply_ims'}$menusep$img{'im_remove'}
~; } sub IMShow { open(FILE, "$vardir/log.txt"); @logentries = ; close(FILE); my(@messages); $yytitle = $txt{'143'}; if($INFO{'caller'} == 1) { $linktext = qq~$txt{'316'}~; $callvar = "1"; $rectext="$txt{'318'}"; fopen(FILE, "$memberdir/$username.msg"); } elsif($INFO{'caller'} == 2) { $linktext = qq~$txt{'320'}~; $callvar = "2"; $rectext="$txt{'324'}"; fopen(FILE, "$memberdir/$username.outbox"); } elsif($INFO{'caller'} == 3) { $linktext = qq~$imtxt{'46'}~; $callvar = "3"; fopen(FILE, "$memberdir/$username.imstore"); } @messages = ; fclose(FILE); if($INFO{'id'} ne "all") { $messcount=0; while($INFO{'id'} ne "$idcheck") { ($musername, $msub, $mdate, $immessage, $messageid, $imip, $mnew, $imwhere) = split( /\|/, $messages[$messcount]); $idcheck = $messageid; $messcount++; } if($INFO{'caller'} == 2 && $mnew != 1 && $INFO{'id'} ne "all") { $recall=qq~« $imtxt{'83'} »~; } $nextid = $messcount-2; $previd = $messcount; $counter= $messcount-1; ($pusername, $psub, $pdate, $pimmessage, $pmessageid, $pimip, $pmnew, $imwhere) = split( /\|/, $messages[$previd]); if($pmessageid ne "") { $previd = qq~$imtxt{'40'}~; } else { $previd = "$imtxt{'39'}"; } ($nusername, $nsub, $ndate, $nimmessage, $nmessageid, $nimip, $nmnew, $imwhere) = split( /\|/, $messages[$nextid]); if($nmessageid ne "" && $nextid >= 0) { $nextid = qq~$imtxt{'41'}~; } else { $nextid = "$imtxt{'39'}"; } if(@messages != 1) { $allid = qq~$txt{'190'}~; } else { $allid = qq~$txt{'190'}~; } } if($INFO{'caller'} == 1) { fopen(FILE, ">$memberdir/$username.msg", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; ($imusername, $imsub, $imdate, $mmessage, $imessageid, $mip, $imnew) = split(/\|/,$messages[$a]); if($imessageid ne "$INFO{'id'}") { print FILE "$messages[$a]\n"; } else { print FILE "$imusername|$imsub|$imdate|$mmessage|$imessageid|$mip\n"; } } fclose(FILE); } if(-e(FILE, "$memberdir/$musername.dat")) { fopen(FILE, "$memberdir/$musername.outbox"); @muoutmessages = ; fclose(FILE); fopen(FILE, ">$memberdir/$musername.outbox", 1); for ($a = 0; $a < @muoutmessages; $a++) { chomp $muoutmessages[$a]; ($muoutusername, $muoutsub, $muoutdate, $muoutmessage, $muoutmessageid, $muoutip, $muoutnew) = split(/\|/,$muoutmessages[$a]); if($muoutmessageid ne "$INFO{'id'}") { print FILE "$muoutmessages[$a]\n"; } else { print FILE "$muoutusername|$muoutsub|$muoutdate|$muoutmessage|$muoutmessageid|$muoutip|1\n"; } } fclose(FILE); } $yymain .= qq~
   $mbname
   $txt{'144'}
   $linktext
~; if($INFO{'id'} ne "all") { $yymain .= qq~    » $msub « ~; } $yymain .= qq~
$img{'im_inbox'}$menusep$img{'im_outbox'}$menusep$img{'im_store'}$menusep$img{'im_new'}$menusep$img{'im_reload'}$menusep$img{'im_config'}~; if($INFO{'id'} eq "all") { $yymain .= qq~$menusep$img{'print_im'}~; } $yymain .= qq~
~; if($INFO{'id'} ne "all") { &DoShowIM; $yymain .= qq~
$recall« $previd | $allid | $nextid »


~; } if($INFO{'id'} eq "all") { foreach $lines (@messages) { ($musername, $msub, $mdate, $immessage, $messageid, $imip, $mnew, $imwhere) = split( /\|/, $lines); fopen(FILE, "$memberdir/$musername.outbox"); @muoutmessages = ; fclose(FILE); fopen(FILE, ">$memberdir/$musername.outbox", 1); for ($a = 0; $a < @muoutmessages; $a++) { chomp $muoutmessages[$a]; ($muoutusername, $muoutsub, $muoutdate, $muoutmessage, $muoutmessageid, $muoutip, $muoutnew) = split(/\|/,$muoutmessages[$a]); if($muoutmessageid ne "$messageid") { print FILE "$muoutmessages[$a]\n"; } else { print FILE "$muoutusername|$muoutsub|$muoutdate|$muoutmessage|$muoutmessageid|$muoutip|1\n"; } } fclose(FILE); &DoShowIM; } if($INFO{'caller'} == 1) { fopen(FILE, ">$memberdir/$username.msg", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; ($imusername, $imsub, $imdate, $mmessage, $imessageid, $mip, $imnew) = split(/\|/,$messages[$a]); print FILE "$imusername|$imsub|$imdate|$mmessage|$imessageid|$mip\n"; } fclose(FILE); } } &template; exit; } sub IMIndex { if( $username eq 'Guest' ) { &fatal_error($txt{147}); } if($action eq "im") { $immenu = qq~ $img{'im_outbox'}$menusep $img{'im_store'}$menusep $img{'im_new'}$menusep $img{'im_reload'}$menusep $img{'mark_ims'}$menusep $img{'im_config'}~; $status = "$imtxt{'23'}"; $senderinfo = "$txt{'318'}"; $callerid = "1"; $boxtxt = "$txt{'316'}"; $movebutton = qq~~; open(FILE, "$memberdir/$username.msg"); } elsif($action eq "imoutbox") { $immenu = qq~ $img{'im_inbox'}$menusep $img{'im_store'}$menusep $img{'im_new'}$menusep $img{'im_reload'}$menusep $img{'im_config'}~; $status = "$imtxt{'23'}"; $senderinfo = "$txt{'324'}"; $callerid = "2"; $boxtxt = "$txt{'320'}"; $movebutton = qq~~; open(FILE, "$memberdir/$username.outbox"); } elsif($action eq "imstorage") { $immenu = qq~ $img{'im_inbox'}$menusep $img{'im_outbox'}$menusep $img{'im_new'}$menusep $img{'im_reload'}$menusep $img{'im_config'}~; $status = ""; $senderinfo = "$txt{'318'} / $txt{'324'}"; $callerid = "3"; $boxtxt = "$imtxt{'46'}"; $movebutton = qq~ ~; open(FILE, "$memberdir/$username.imstore"); } @dimmessages = ; close(FILE); $mnum = @dimmessages; if( !@dimmessages && $action eq "im" ) { unlink(FILE, "$memberdir/$username.msg"); } if( !@dimmessages && $action eq "imoutbox" ) { unlink(FILE, "$memberdir/$username.outbox"); } if( !@dimmessages && $action eq "imstorage" ) { unlink(FILE, "$memberdir/$username.imstore"); } # Load censor list. &LoadCensorList; # Fix moderator showing in info $sender = "im"; $acount=0; $yytitle = $txt{'143'}; $yymain .= qq~
   $mbname
   $txt{'144'}
   $boxtxt
~; $yymain .= qq~ $immenu
~; unless( @dimmessages ) { $yymain .= qq~ ~; } $acount++; @bgcolors = ( $color{windowbg}, $color{windowbg2} ); @bgstyles = qw~windowbg windowbg2~; $bgcolornum = scalar @bgcolors; $bgstylenum = scalar @bgstyles; boardcheck: for( $counter = 0; $counter < @dimmessages; $counter++ ) { $windowbg = $bgcolors[($counter % $bgcolornum)]; $windowcss = $bgstyles[($counter % $bgstylenum)]; chomp $dimmessages[$counter]; ($musername, $msub, $mdate, $immessage, $messageid, $mips, $imnew, $imwhere) = split( /\|/, $dimmessages[$counter] ); if($imwhere eq "inbox") { $senderinfo2 = qq~$txt{'318'}: ~; } if($imwhere eq "outbox") { $senderinfo2 = qq~$txt{'324'}: ~; } if( $musername ne 'Guest' && -e("$memberdir/$musername.dat") ) { # If user is not in memory, s/he must be loaded. &LoadUserDisplay($musername); } $rname=$musername; if($yyUDLoaded{$musername}) { $musername = qq~$userprofile{$musername}->[1]~; } if( $messageid < 100 ) { $messageid = $counter; } if( $msub eq '' ) { $msub = $txt{'24'}; } foreach (@censored) { ($tmpa,$tmpb) = @{$_}; $msub =~ s~\Q$tmpa\E~$tmpb~gi; } $mydate = &timeformat($mdate); $innum = $mnum--; $yymain .= qq~ ~; } else { $yymain .= qq~ ~; } $acount++; } if($enable_imlimit == 1) { $impercent = 0; $imbar = 0; $imrest = 0; if($action eq "im") { if ($counter ne 0) { $impercent = int( 100 / $numibox * $counter); $imbar = int( 200 / $numibox * $counter); } $intext = qq~($imtxt{'13'} $counter $imtxt{'01'} $numibox $imtxt{'19'})~; } elsif($action eq "imoutbox") { if ($counter ne 0) { $impercent = int( 100 / $numobox * $counter); $imbar = int( 200 / $numobox * $counter); } $intext = qq~($imtxt{'13'} $counter $imtxt{'01'} $numobox $imtxt{'20'})~; } elsif($action eq "imstorage") { if ($counter ne 0) { $impercent = int( 100 / $numstore * $counter); $imbar = int( 200 / $numstore * $counter); } $intext = qq~($imtxt{'13'} $counter $imtxt{'01'} $numstore $imtxt{'45'})~; } $imrest = 200 - $imbar; if ($imbar > 200) { $imbar = 200; } if ($imrest <= 0) { $dorest = ""; } else { $dorest = qq~~; } $imbargfx = qq~$imtxt{'67'}: $dorest $impercent % ~; } else { $intext = qq~ ~; $imbargfx = qq~ ~; } if(@dimmessages != 0) { $yymain .= qq~$movebutton ~; } $yymain .= qq~
 #  $txt{'317'} $senderinfo $txt{'319'} $status  
$txt{'151'}
$innum $mydate $senderinfo2$musername $msub ~; if($action ne "imstorage") { if ($imnew == 1 && $action eq "im") { $yymain .= qq~$imtxt{'07'}~; } elsif ($imnew == 2 && $action eq "im") { $yymain .= qq~$imtxt{'08'}~; } elsif ($imnew eq "" && $action eq "im") { $yymain .= qq~$imtxt{'09'}~; } elsif ($imnew == 1 && $action eq "imoutbox") { $yymain .= qq~$imtxt{'21'}~; } elsif ($imnew eq "" && $action eq "imoutbox") { $yymain .= qq~$imtxt{'22'}
$imtxt{'83'}~; } } chomp($imconfig[4]); if ($imconfig[4] eq "on") { undef $quotecount; undef $shorten; if ($immessage =~ /\[quote(.+?)\]/isg) { $quotecount = length($qauthor); $shorten = (100+(69+$quotecount)); } else { $shorten = 100; } $immessage =~ s/\[quote(.+?)\](.+?)\[\/quote\]/\$imtxt{'69'} /g; if(length($immessage) > 100) { $immessage = substr($immessage,0,$shorten); $immessage .= qq~...~; } $immessage =~ s~
~ ~g; $immessage =~ s~  ~ ~g; $message = $immessage; # put the message back in the proper variable for doing ubbc ### Begin HTML MOD if ($message =~ /\#enable_html/isg) { $message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where) $enable_html = HTML_allow($musername); $message = $message_backup; if ($enable_html == 1) { $message =~ s/\#enable_html//isg; &FromHTML($message); } } else { $enable_html = 0; } if($enable_ubbc && $enable_html == 0) { if(!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } &DoUBBC; } ### End HTML MOD $immessage = $message; if($MenuType != 1) { $sepa = ' | '; } else { $sepa = $menusep; } if($action eq "im") { $quotemenu = qq~$txt{'145'}$sepa$txt{'146'}$sepa$txt{'154'}~; } else { $quotemenu = qq~$txt{'154'}~; } $yymain .= qq~
$immessage$quotemenu
$imbargfx $intext
~; if (@dimmessages > 1) { $yymain .= qq~
$txt{'737'} 
~; } $yymain .= qq~
~; &template; exit; } sub IMPost { if($settings[7] ne "Administrator" && $settings[7] ne "Global Moderator" && $settings[6] < $numposts) { &ModList; fopen(FILE, "$vardir/modslist.txt"); @moderators = ; fclose(FILE); foreach $line (@moderators) { chomp $line; if($line eq "$username") { $access = 1; next; } } if ($access != 1) { &fatal_error($imtxt{'74'}); } } if($INFO{'adminim'}) { if(!-e("$sourcedir/MemberGroups.pl")) { fopen(FILE, "$vardir/membergroups.txt"); @membergroups = ; fclose(FILE); $adminim .= qq~ $imtxt{'49'} ~; $i=1; while ($membergroups[$i]) { $membergroups[$i] =~ s/[\n\r]//g; $option .= ""; $i++; } $adminim .= qq~ ~; } else { require "$vardir/MemberStats.txt"; $adminim .= qq~ $imtxt{'49'} ~; $memgcount=0; while ($MemStat[$memgcount]) { $line =~ s/[\n\r]//g; $option .= ""; $memgcount++; } $adminim .= qq~ ~; } } if($username eq 'Guest') { &fatal_error($txt{'147'}); } my($mdate, $mip, $mmessage); if($INFO{'num'} ne "") { if($INFO{'caller'} == 1) { fopen(FILE, "$memberdir/$username.msg"); } elsif($INFO{'caller'} == 2) { fopen(FILE, "$memberdir/$username.outbox"); } elsif($INFO{'caller'} == 3) { fopen(FILE, "$memberdir/$username.imstore"); } @messages = ; fclose(FILE); ($mfrom, $sub, $mdate, $mmessage, $mnum, $mip, $imwhere) = split(/\|/,$messages[$INFO{'num'}]); $sub =~ s/Re: //g; if($INFO{'quote'} == 1) { $message=$mmessage; $message =~ s~
~\n~g; $message =~ s~\n{0,1}\[quote([^\]]*)\](.*?)\[/quote\]\n{0,1}~\n~isg; $message =~ s~\n*\[/*quote([^\]]*)\]\n*~~ig; $mname ||= $musername || $txt{'470'}; $quotestart = int( $quotemsg / $maxmessagedisplay ) * $maxmessagedisplay; $message = qq~[quote author=$mfrom link=action=imshow;caller=$INFO{'caller'};id=$mnum date=$mdate\]$message\[/quote\]\n~; $msubject =~ s/\bre:\s+//ig; if ($message =~ /\#nosmileys/isg) {$message =~ s/\#nosmileys//isg; $nscheck="checked";} $sub = "Re: $sub"; } if($INFO{'reply'} == 1) { $sub = "Re: $sub";} } if ($sub eq "") { $sub = "$txt{'24'}"; } $yymain .= qq~
   $mbname
   $txt{'144'}
   $txt{'321'}
$img{'im_inbox'}$menusep$img{'im_outbox'}$menusep$img{'im_store'}$menusep$img{'im_reload'}$menusep$img{'im_config'}
~; $submittxt = "$txt{'148'}"; $destination = "imsend2"; $waction = "imsend"; $post = "imsend"; $preview = "previewim"; $icon = "xx"; require "$sourcedir/Post.pl"; $yytitle = $txt{'148'}; &Postpage; &doshowims; &template; exit; } sub doshowims { my $tempdate; if($INFO{'num'} ne "") { chomp $messages[$INFO{'num'}]; ($musername, $msub, $mdate, $message, $messageid, $mips, $imnew, $imwhere) = split( /\|/, $messages[$INFO{'num'}]); # Load Censor List &LoadCensorList; $yymain .= qq~
~; $tempdate = &timeformat($mdate); foreach (@censored) { ($tmpa,$tmpb) = @{$_}; $message =~ s~\Q$tmpa\E~$tmpb~gi; } &wrap; ### Begin HTML MOD if ($message =~ /\#enable_html/isg) { $message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where) $enable_html = HTML_allow($musername); $message = $message_backup; if ($enable_html == 1) { $message =~ s/\#enable_html//isg; &FromHTML($message); } } else { $enable_html = 0; } if($enable_ubbc && $enable_html == 0) { if(!$yyYaBBCloaded) { require "$sourcedir/YaBBC.pl"; } &DoUBBC; } ### End HTML MOD &wrap2; $yymain .= qq~
$txt{'319'}: $msub
$txt{'318'}: $musername$txt{'30'}: $tempdate
$message
\n ~; } } sub IMPost2 { if($username eq 'Guest') { &fatal_error($txt{'147'}); } my( @ignore, $igname, $messageid, $subject, $message, @recipient, $ignored ); $subject = $FORM{'subject'}; $subject =~ s/\A\s+//; $subject =~ s/\s+\Z//; $message = $FORM{'message'}; if ($enable_maxlen == 0 || $enable_maxlen eq "") { if (length($message)>$MaxMessLen) { &fatal_error("$txt{'499'}"); } } &fatal_error("$txt{'752'}") unless($FORM{'to'}); &fatal_error("$txt{'77'}") unless($subject); &fatal_error("$txt{'78'}") unless($message); $mmessage = $message; $msubject = $subject; if (length($subject) > 50) { $subject = substr($subject,0,50); } &ToHTML($subject); &ToHTML($message); $message =~ s/\t/ \  \  \ /g; $message =~ s/\cM//g; $message =~ s/\n/
/g; if ($FORM{'ns'} eq "NS") {$message .= "#nosmileys";} ### Begin HTML Mod $message =~ s/\#enable_html//isg; if($FORM{enable_html} eq "1") { $message_backup = $message; # since $message is no local variable, it often gets overwritten accidently somehwere (couldn't find out where) $enable_html = HTML_allow($username); $message = $message_backup; if ($enable_html == 1) { $message .= qq~#enable_html~; } } ### End HTML Mod if( $FORM{'waction'} eq 'previewim' ) { $FORM{'waction'} = 'previewim'; require "$sourcedir/Post.pl"; &Preview; } undef @multiple; open(MEMLIST, "$memberdir/memberlist.txt"); @memlist = ; $allmems = @memlist; close(MEMLIST); @multiple = split(/,/, $FORM{'to'}); if($imspam ne "off") { $memnums = @multiple; $checkspam = 100/$allmems*$memnums; if(@multiple == 1) { $checkspam = 0; } if($checkspam > $imspam && $settings[7] ne "Administrator") { &fatal_error("$imtxt{'70'}"); } } foreach $db (@multiple) { $addnr++; chomp $db; $ignored = 0; $db =~ s/\A\s+//; $db =~ s/\s+\Z//; $db =~ s/[^0-9A-Za-z#%+,-\.@^_]//g; # Check Ignore-List if($imconfig[0]) { # Build Ignore-List $imconfig[0] =~ s/[\n\r]//g; $imconfig[1] =~ s/[\n\r]//g; @ignore = split(/\|/,$imconfig[0]); # If User is on Recipient's Ignore-List, show Error Message foreach $igname (@ignore) { #adds ignored user's name to array which error list will be built from later if ($igname eq $username) { push(@nouser, $db); $ignored = 1; } if ($igname eq "*") { push(@nouser, "$txt{'761'} $db $txt{'762'};"); $ignored = 1; } } } if (!(-e("$memberdir/$db.dat"))) { #adds invalid user's name to array which error list will be built from later push(@nouser, $db); $ignored = 1; } if(!$ignored) { # Create unique Message ID = Time & ProccessID $messageid = $^T.$$; $messageid = $messageid + $addnr; # Add message to outbox open(FILE, "$memberdir/$username.outbox"); @outmessages = ; close(FILE); fopen(FILE, ">$memberdir/$username.outbox", 1); print FILE "$db|$subject|$date|$message|$messageid|$ENV{'REMOTE_ADDR'}\n"; print FILE @outmessages; fclose(FILE); # Send message to user open(FILE, "$memberdir/$db.msg"); @inmessages = ; close(FILE); fopen(FILE, ">$memberdir/$db.msg", 1); print FILE "$username|$subject|$date|$message|$messageid|$ENV{'REMOTE_ADDR'}|1\n"; print FILE @inmessages; fclose(FILE); open(FILE, "$memberdir/$username.msg"); @messages = ; close(FILE); $id = "$INFO{'id'}"; fopen(FILE, ">$memberdir/$username.msg", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; ($imboxusername, $imboxsub, $imboxdate, $imboxmessage, $imboxmessageid, $imboxmip, $imboximnew) = split(/\|/,$messages[$a]); if($imboxmessageid != $FORM{'info'}) { print FILE "$messages[$a]\n"; } else { print FILE "$imboxusername|$imboxsub|$imboxdate|$imboxmessage|$imboxmessageid|$imboxmip|2\n"; } } fclose(FILE); if(!$ignored) { open(FILE, "$memberdir/$db.imconfig"); @dbimcfg = ; close(FILE); chomp($dbimcfg[6]); $jalla = $^T.$$; if($dbimcfg[6] eq "on") { open(FILE, "$memberdir/$username.msg"); @am = ; close(FILE); fopen(FILE, ">$memberdir/$username.msg", 1) || die("WTF?"); print FILE "$db|AUTO AWAY MESSAGE|$date|$dbimcfg[7]|$jalla|0.0.0.0|1\n"; foreach $line (@am) { print FILE "$line"; } fclose(FILE); } } # Send notification (Will just work if Admin has allowed the Email Notification) if ($dbimcfg[1]==1 && $enable_notification == 1) { fopen(FILE, "$memberdir/$db.dat"); @recipient = ; fclose(FILE); $mydate = &timeformat($date); $recipient[2] =~ s/[\n\r]//g; # get email address if ($recipient[2] ne "") { $fromname = $settings[1]; $txt{'561'} =~ s~SUBJECT~$msubject~g; $txt{'561'} =~ s~SENDER~$fromname~g; $txt{'561'} =~ s~DATE~$mydate~g; $txt{'562'} =~ s~SUBJECT~$msubject~g; $txt{'562'} =~ s~MESSAGE~$mmessage~g; $txt{'562'} =~ s~SENDER~$fromname~g; $txt{'562'} =~ s~DATE~$mydate~g; &sendmail($recipient[2],$txt{'561'},"$cgi;action=login\n\n$txt{'562'}\n\n$cgi;action=login"); } } } } #end foreach loop #if there were invalid usernames in the recipient list, these names are listed after all valid users have been IMed if (@nouser) { $badusers = join(" $txt{'763'} ", @nouser); $badusers =~ s/; $txt{'763'}/;/; &fatal_error("$badusers $txt{'747'}"); } if($username ne 'Guest') {&WriteLastOnline($username, "x", "x", $date);} $yySetLocation = qq~$scripturl?action=im~; &redirectexit; } sub IMRemove { if($username eq 'Guest') { &fatal_error($txt{'147'}); } my( @messages, $a, $musername, $msub, $mdate, $mmessage, $messageid, $mip ); if ($INFO{'caller'} == 1) { fopen(FILE, "$memberdir/$username.msg"); } elsif ($INFO{'caller'} == 2) { fopen(FILE, "$memberdir/$username.outbox"); } elsif ($INFO{'caller'} == 3) { fopen(FILE, "$memberdir/$username.imstore"); } @messages = ; fclose(FILE); if ($INFO{'caller'} == 1) { fopen(FILE, ">$memberdir/$username.msg", 1); } elsif ($INFO{'caller'} == 2) { fopen(FILE, ">$memberdir/$username.outbox", 1); } elsif ($INFO{'caller'} == 3) { fopen(FILE, ">$memberdir/$username.imstore", 1); } for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; # ONLY delete MSG with correct ID ($musername, $msub, $mdate, $mmessage, $messageid, $mip) = split(/\|/,$messages[$a]); # If Message-ID is < 100, user has used the old IM before if ($messageid < 100 ) { if($a ne $INFO{'id'}) { print FILE "$messages[$a]\n"; } } else { if($messageid ne "$INFO{'id'}") { print FILE "$messages[$a]\n"; } } } fclose(FILE); if ($INFO{'caller'} == 1) { $redirect = "im"; } elsif ($INFO{'caller'} == 2) { $redirect = "imoutbox"; } elsif ($INFO{'caller'} == 3) { $redirect = "imstorage"; } $yySetLocation = qq~$scripturl?action=$redirect~; &redirectexit; } sub MarkAll { open(FILE, "$memberdir/$username.msg"); @messages = ; close(FILE); fopen(FILE, ">$memberdir/$username.msg", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; ($imusername, $imsub, $imdate, $mmessage, $imessageid, $mip, $imnew) = split(/\|/,$messages[$a]); if($imnew != 2) { print FILE "$imusername|$imsub|$imdate|$mmessage|$imessageid|$mip\n"; } else { print FILE "$messages[$a]\n"; } } fclose(FILE); $yySetLocation = qq~$scripturl?action=im~; &redirectexit; } 1;