###############################################################################
# Smilies.pm #
# $Date: 01 Sep 2026 $ #
###############################################################################
# YaBB: Yet another Bulletin Board #
# Open-Source Community Software for Webmasters #
# Version: YaBBForum 3.2 #
# 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. #
###############################################################################
# use strict;
our $VERSION = '3.2';
our $smiliespmver = 'YaBBForum 3.2';
if ( $action eq 'detailedversion' ) { return 1; }
$admin_images = "$yyhtml_root/Templates/Admin/default";
sub SmiliePanel {
is_admin_or_gmod();
if ( $smiliestyle == 1 ) { $ss1 = q{ selected="selected"}; }
elsif ( $smiliestyle == 2 ) { $ss2 = q{ selected="selected"}; }
@sa = ();
foreach my $i ( 1 .. 4 ) {
if ( $showadded == $i ) {
$sa[$i] = q{ selected="selected"};
}
}
@ssm = ();
foreach my $i ( 1 .. 4 ) {
if ( $showsmdir == $i ) {
$ssm[$i] = q{ selected="selected"};
}
}
if ( $detachblock == 1 ) { $dblock = q{ checked="checked"}; }
if ($removenormalsmilies) { $remnosmi = q{ checked="checked"}; }
opendir DIR, "$htmldir/Smilies";
@contents = readdir DIR;
closedir DIR;
$smilieslist = q{};
foreach my $line ( sort { uc($a) cmp uc $b } @contents ) {
my ( $name, $extension ) = split /\./xsm, $line;
if ( $extension =~ /gif/ism
|| $extension =~ /jpg/ism
|| $extension =~ /jpeg/ism
|| $extension =~ /png/ism )
{
if ( $line !~ /banner/ism ) {
$smilieslist .= qq~
|
|
[smiley=$line] |
$line |
$name |
 |
~;
}
}
}
$yymain .= qq~
~;
$yytitle = "$asmtxt{'01'}";
$action_area = 'smilies';
AdminTemplate();
return;
}
sub AddSmilies {
is_admin_or_gmod();
$smiliestyle = $FORM{'smiliestyle'};
$showadded = $FORM{'showadded'};
$showsmdir = $FORM{'showsmdir'};
$detachblock = $FORM{'detachblock'};
$winwidth = $FORM{'winwidth'};
$winheight = $FORM{'winheight'};
$popback = $FORM{'popback'};
$popback =~ s/[^a-f0-9]//igxsm;
$poptext = $FORM{'poptext'};
$poptext =~ s/[^a-f0-9]//igxsm;
$showinbox = $FORM{'showinbox'};
$removenormalsmilies = $FORM{'removenormalsmilies'};
$count_smimg = $FORM{'smimg_count'};
if ( $winwidth eq q{} ) { fatal_error('invalid_value', "$smiltxt{'14'}"); }
if ( $winheight eq q{} ) { fatal_error('invalid_value', "$smiltxt{'15'}"); }
if ( $popback eq q{} ) { fatal_error('invalid_value', "$smiltxt{'20'}"); }
if ( $poptext eq q{} ) { fatal_error('invalid_value', "$smiltxt{'19'}"); }
@SmilieURL = ();
@SmilieCode = ();
@SmilieDescription = ();
@SmilieLinebreak = ();
my $temp_a = 0;
for ( 1 .. $count_smimg ) {
if ( $FORM{"scd[$temp_a]"} ne q{} || $FORM{"smimg[$temp_a]"} ne q{} || $FORM{"sdescr[$temp_a]"} ne q{} ) {
if ( $FORM{"scd[$temp_a]"} eq q{} ) { fatal_error('', $smiltxt{'error_code'}); }
if ( $FORM{"smimg[$temp_a]"} eq q{} && $FORM{"cur_smimg[$temp_a]"} eq q{} ) { fatal_error(q{}, $smiltxt{'error_image'}); }
if ( $FORM{"sdescr[$temp_a]"} eq q{} ) { fatal_error('', $smiltxt{'error_desc'}); }
}
if ( $FORM{"delbox[$temp_a]"} != 1 && $FORM{"sdescr[$temp_a]"} ne q{} && ( $FORM{"smimg[$temp_a]"} ne q{} || $FORM{"cur_smimg[$temp_a]"} ne q{} ) ) {
if ( $FORM{"smimg[$temp_a]"} ne q{} ) {
$FORM{"smimg[$temp_a]"} = UploadFile("smimg[$temp_a]", 'Templates/Forum/default', 'png jpg jpeg gif', '100', '0');
}
else {
$FORM{"smimg[$temp_a]"} = $FORM{"cur_smimg[$temp_a]"};
}
push @SmilieURL, $FORM{"smimg[$temp_a]"};
ToHTML( $FORM{"scd[$temp_a]"} );
$FORM{"scd[$temp_a]"} =~ s/\$/&\x2336;/gxsm;
$FORM{"scd[$temp_a]"} =~ s/\@/&\x2364;/gxsm;
push @SmilieCode, $FORM{"scd[$temp_a]"};
ToHTML( $FORM{"sdescr[$temp_a]"} );
$FORM{"sdescr[$temp_a]"} =~ s/\$/&\x2336;/gxsm;
$FORM{"sdescr[$temp_a]"} =~ s/\@/&\x2364;/gxsm;
push @SmilieDescription, $FORM{"sdescr[$temp_a]"};
push @SmilieLinebreak, ( $FORM{"smbox[$temp_a]"} ? '
' : q{} );
}
if ( $FORM{"delbox[$temp_a]"} == 1 && $FORM{"cur_smimg[$temp_a]"} !~ /^(exclamation|question).png$/) {
unlink "$htmldir/Templates/Forum/default/$FORM{\"cur_smimg[$temp_a]\"}";
}
++$temp_a;
}
require Admin::NewSettings;
SaveSettingsTo('Settings.pm');
$yySetLocation = qq~$adminurl?action=smilies~;
redirectexit();
return;
}
sub SmilieMove {
is_admin_or_gmod();
if ( exists $INFO{'index'} ) {
for my $i ( 0 .. ( @SmilieURL - 1 ) ) {
if (
$i == $INFO{'index'}
&& ( ( $INFO{'movedown'} && $i >= 0 && $i < $#SmilieURL )
|| ( $INFO{'moveup'} && $i <= $#SmilieURL && $i > 0 ) )
)
{
my $j = $INFO{'moveup'} ? $i - 1 : $i + 1;
my $moveit = $SmilieURL[$i];
$SmilieURL[$i] = $SmilieURL[$j];
$SmilieURL[$j] = $moveit;
$moveit = $SmilieCode[$i];
$SmilieCode[$i] = $SmilieCode[$j];
$SmilieCode[$j] = $moveit;
$moveit = $SmilieDescription[$i];
$SmilieDescription[$i] = $SmilieDescription[$j];
$SmilieDescription[$j] = $moveit;
$moveit = $SmilieLinebreak[$i];
$SmilieLinebreak[$i] = $SmilieLinebreak[$j];
$SmilieLinebreak[$j] = $moveit;
last;
}
}
}
require Admin::NewSettings;
SaveSettingsTo('Settings.pm');
$yySetLocation = qq~$adminurl?action=smilies~;
redirectexit();
return;
}
1;