############################################################################### # LivePreview.pm # # $Date: 01.09.2026 $ # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBBForum 3.1 # # Packaged: 01 Sep, 2026 # # Distributed by: https://yabbforum.nz # # =========================================================================== # # Copyright (c) 2000-2026 YaBB (yabbforum.nz) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # # Mod created by Carsten Dalgaard # # and added to YaBB core in Version 2.5.4/2.6.0 # # Released: May 11, 2013, Copyright 2013 Carsten Dalgaard # ############################################################################### use CGI::Carp qw(fatalsToBrowser); our $VERSION = '3.1'; $livepreviewpmver = 'YaBBForum 3.1'; if ( $action eq 'detailedversion' ) { return 1; } use URI::Escape; if ( $yymycharset ne 'UTF-8' ) { require Encode; Encode->import( decode_utf8, encode_utf8 ); } LoadCensorList(); guard(); if ($enable_ubbc) { if ( !$yyYaBBCloaded ) { require Sources::YaBBC; } } sub DoLiveMessage { if ( $FORM{'isprev'} ) { $displayname = $FORM{'musername'}; $FORM{'message'} =~ s/\r//gsm; $message = $FORM{'message'}; uri_unescape($message); if ( $yymycharset ne 'UTF-8' ) { $message = decode_utf8($message); } $message =~ s/\[ch8203\]//igsm; $message =~ s/\&\x238203;//igsm; FromChars($message); ToHTML($message); my $mess = $message; $message =~ s/\cM//gsm; $message =~ s/\[([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[$1$2\]/gsm; $message =~ s/\[\/([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[\/$1$2\]/gsm; $message =~ s/\t/ \  \  \ /gsm; $message =~ s/\n/
/gsm; $message =~ s/([\000-\x09\x0b\x0c\x0e-\x1f\x7f])/\x0d/gsm; wrap(); if ( $FORM{'nschecked'} == 1 ) { $ns = 'NS'; } if ($enable_ubbc) { DoUBBC(); $message =~ s/ style="display:none"/ style="display:inline"/gsm; } wrap2(); ToChars($message); $message = Censor($message); $csubject = $FORM{'subject'}; uri_unescape($csubject); if ( $yymycharset ne 'UTF-8' ) { $csubject = decode_utf8($csubject); } $csubject =~ s/[\r\n]//gsm; FromChars($csubject); $convertstr = $csubject; $convertcut = $set_subjectMaxLength + ( $csubject =~ /^Re: /sm ? 4 : 0 ); CountChars(); $csubject = $convertstr; ToHTML($csubject); ToChars($csubject); $csubject = Censor($csubject); liveimage_resize(); $myname = $FORM{'guestname'}; uri_unescape($myname); if ( $yymycharset ne 'UTF-8' ) { $myname = decode_utf8($myname); } $myname =~ s/[\r\n]//gsm; FromChars($myname); ToHTML($myname); ToChars($myname); $myname = Censor($myname); if ( $yymycharset ne 'UTF-8' ) { $csubject = encode_utf8($csubject); $message = encode_utf8($message); $myname = encode_utf8($message); } print "Content-type: application/x-www-form-urlencoded\n\n" or croak "$croak{'print'} content-type"; print qq~$csubject|$message|$myname~ or croak "$croak{'print'}"; $message = $mess; exit; } else { $yySetLocation = $scripturl; redirectexit(); } return; } sub DoLiveIM { $subjdate = timeformat( $date, 0, 0, 0, 1 ); if ( $FORM{'isprev'} ) { $FORM{'message'} =~ s/\r//gxsm; $message = $FORM{'message'}; uri_unescape($message); if ( $yymycharset ne 'UTF-8' ) { $message = decode_utf8($message); } $message =~ s/\[ch8203\]//igsm; $message =~ s/\&\x238203;//igsm; FromChars($message); ToHTML($message); my $mess = $message; $message =~ s/\cM//gsm; $message =~ s/\[([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[$1$2\]/gsm; $message =~ s/\[\/([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[\/$1$2\]/gsm; $message =~ s/\t/ \  \  \ /gsm; $message =~ s/\n/
/gsm; $message =~ s/([\000-\x09\x0b\x0c\x0e-\x1f\x7f])/\x0d/gsm; wrap(); if ( $FORM{'nschecked'} == 1 ) { $ns = 'NS'; } if ($enable_ubbc) { $displayname = ${ $uid . $tmpmusername }{'realname'}; DoUBBC(); $message =~ s/ style="display:none"/ style="display:inline"/gsm; } wrap2(); ToChars($message); $message = Censor($message); $csubject = $FORM{'subject'}; uri_unescape($csubject); if ( $yymycharset ne 'UTF-8' ) { $csubject = decode_utf8($csubject); } $csubject =~ s/[\r\n]//gsm; FromChars($csubject); $convertstr = $csubject; $convertcut = $set_subjectMaxLength + ( $csubject =~ /^Re: /sm ? 4 : 0 ); CountChars(); $csubject = $convertstr; ToHTML($csubject); ToChars($csubject); $csubject = Censor($csubject); $icon = $FORM{'icon'}; CheckIcon(); get_micon(); $msgimg = qq~$micon{$icon}~; $css = q~windowbg~; LoadLanguage('InstantMessage'); get_template('MyMessage'); $liveipimg = qq~~; $livemip = $inmes_txt{'511'}; $messageblock = $myIM_liveprev_b; $messageblock =~ s/{yabb css}/$css/gsm; $messageblock =~ s/{yabb msgimg}/$msgimg/gsm; $messageblock =~ s/{yabb subjdate}/$subjdate/gsm; $messageblock =~ s/{yabb csubject}/$csubject/gsm; $messageblock =~ s/{yabb message}/$message/gsm; $messageblock =~ s/{yabb my_sig}/$my_sig/gsm; $messageblock =~ s/{yabb my_attach}/$my_attach/gsm; $messageblock =~ s/{yabb my_showIP}/$liveipimg $livemip/gsm; liveimage_resize(); if ( $yymycharset ne 'UTF-8' ) { $messageblock = encode_utf8($messageblock); } print "Content-type: application/x-www-form-urlencoded\n\n" or croak "$croak{'print'} content-type"; print qq~$messageblock\n~ or croak "$croak{'print'} messageblock"; $message = $mess; exit; } else { $yySetLocation = $scripturl; redirectexit(); } return; } sub DoLiveCal { if ( $FORM{'isprev'} ) { LoadLanguage('EventCal'); $message = $FORM{'message'}; uri_unescape($message); if ( $yymycharset ne 'UTF-8' ) { $message = decode_utf8($message); } $message =~ s/\r//gxsm; $message =~ s/\[ch8203\]//igsm; $message =~ s/\&\x238203;//igsm; FromChars($message); ToHTML($message); my $mess = $message; $message =~ s/\cM//gsm; $message =~ s/\[([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[$1$2\]/gsm; $message =~ s/\[\/([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[\/$1$2\]/gsm; $message =~ s/\t/ \  \  \ /gsm; $message =~ s/\n/
/gsm; $message =~ s/([\000-\x09\x0b\x0c\x0e-\x1f\x7f])/\x0d/gsm; wrap(); if ( $FORM{'nschecked'} == 1 ) { $ns = 'NS'; } if ($enable_ubbc) { $displayname = ${ $uid . $tmpmusername }{'realname'}; DoUBBC(); $message =~ s/ style="display:none"/ style="display:inline"/gsm; } wrap2(); ToChars($message); $message = Censor($message); liveimage_resize(); CountChars(); $myname = $FORM{'guestname'}; uri_unescape($myname); if ( $yymycharset ne 'UTF-8' ) { $myname = decode_utf8($myname); } $myname =~ s/[\r\n]//gsm; FromChars($myname); ToHTML($myname); ToChars($myname); $myname = Censor($myname); $d_year = $FORM{'cal_year'}; $d_mon = $FORM{'cal_mon'}; $d_day = $FORM{'cal_day'}; $my_icontxt = $FORM{'icon_txt'}; $txt_icon = $var_cal{$my_icontxt}; $my_caltype = $FORM{'cal_type'}; get_micon(); if ( $my_caltype == 2 ) { $mycal_type = $cal_icon{'eventprivate'}; } else { $mycal_type = q{}; } $mybtime = stringtotime(qq~$d_mon/$d_day/$d_year~); $mybtimein = timeformat($mybtime); $cdate = dtonly($mybtimein); if ( $yymycharset ne 'UTF-8' ) { $message = encode_utf8($message); $myname = encode_utf8($myname); $cdate = encode_utf8($cdate); $txt_icon = encode_utf8($txt_icon); } print "Content-type: application/x-www-form-urlencoded\n\n" or croak "$croak{'print'} content-type"; print qq~$message|$myname|$cdate|$txt_icon|$mycal_type~ or croak "$croak{'print'} message"; $message = $mess; exit; } else { $yySetLocation = $scripturl; redirectexit(); } return; } sub liveimage_resize { my ($resize_num); *check_image_resize = sub { my @x = @_; $resize_num++; $x[0] = "post_liveimg_resize_$resize_num"; return qq~"$x[0]"$x[1]~; }; $messageblock =~ s/"(post_liveimg_resize)"([^>]*>)/ check_image_resize($1,$2) /gesm; $message =~ s/"(post_liveimg_resize)"([^>]*>)/ check_image_resize($1,$2) /gesm; return; } 1;