############################################################################### # AntispamQuestions.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 CGI::Carp qw(fatalsToBrowser); our $VERSION = '3.2'; $antispamquestionspmver = 'YaBBForum 3.2'; if ( $action eq 'detailedversion' ) { return 1; } my $questions_language = $FORM{'questions_language'} || $INFO{'questions_language'} || $lang; sub SpamQuestions { is_admin_or_gmod(); if ($en_spam_questions) { $chk_spam_question = q~ checked="checked"~; } if ($spam_questions_send) { $chk_spam_question_send = q~ checked="checked"~; } if ($spam_questions_gp) { $chk_spam_question_gp = q~ checked="checked"~; } opendir LNGDIR, $langdir; my @lfilesanddirs = readdir LNGDIR; closedir LNGDIR; foreach my $fld (sort {lc($a) cmp lc $b} @lfilesanddirs) { if (-e "$langdir/$fld/Main.lng") { my $displang = $fld; $displang =~ s/(.+?)\_(.+?)$/$1 ($2)/gism; if ($questions_language eq $fld) { $drawnldirs .= qq~~; } else { $drawnldirs .= qq~~; } } } if (-e "$langdir/$questions_language/spam.questions") { fopen(SPAMQUESTIONS, "<$langdir/$questions_language/spam.questions") || fatal_error('cannot_open',"$langdir/$questions_language/spam.questions", 1); @spam_questions = ; fclose(SPAMQUESTIONS); } $total_questions = @spam_questions || 0; if ($total_questions) { $header_row = q~ colspan="5"~; $show_questions = qq~ $spam_question_txt{'question'} $spam_question_txt{'answer'} $spam_question_txt{'image'} $admin_txt{'edit'} $admin_txt{'delete'} ~; foreach my $question ( sort { $a <=> $b } @spam_questions ) { chomp $question; ( $spam_question_id, $spam_question, $spam_answer, undef, $spam_image ) = split /\|/xsm, $question; $spam_image = $spam_image ? qq~$spam_image~ : $spam_question_txt{'na'}; $show_questions .= qq~ $spam_question $spam_answer $spam_image
~; } } else { $header_row = q~ colspan="5"~; $show_questions = qq~ $spam_question_txt{'no_questions'} ~; } $yymain = qq~
$admin_img{'prefimg'} $spam_question_txt{'question_settings'}
$admin_img{'prefimg'} $admin_txt{'10'}
$show_questions
$admin_img{'prefimg'} $spam_question_txt{'questions'} ($total_questions)
$admin_img{'prefimg'} $spam_question_txt{'new_question'}
X
$admin_img{'prefimg'} $admin_txt{'10'}
~; $yytitle = $admintxt{'a3_sub6'}; $action_area = 'spam_questions'; AdminTemplate(); exit; } sub SpamQuestions2 { is_admin_or_gmod(); $en_spam_questions = $FORM{'en_spam_questions'} || '0'; $spam_questions_send = $FORM{'spam_questions_send'} || '0'; $spam_questions_gp = $FORM{'spam_questions_gp'} || '0'; require Admin::NewSettings; SaveSettingsTo('Settings.pm'); if ( $action eq 'spam_questions2' ) { $yySetLocation = qq~$adminurl?action=spam_questions;questions_language=$FORM{'questions_language'}~; redirectexit(); } return; } sub SpamQuestionsAdd { is_admin_or_gmod(); $spam_question = $FORM{'spam_question'}; $spam_answer = $FORM{'spam_answer'}; $spam_case = $FORM{'spam_case'} || '0'; if ( $spam_question eq q{} ) { fatal_error( 'invalid_value', "$spam_question_txt{'question'}" ); } if ( $spam_answer eq q{} ) { fatal_error( 'invalid_value', "$spam_question_txt{'answer'}" ); } $spam_image = UploadFile('spam_image', 'Templates/Forum/default/Spam_Img', 'png jpg jpeg gif', '250', '0'); fopen( SPAMQUESTIONS, ">>$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); print {SPAMQUESTIONS} "$date|$spam_question|$spam_answer|$spam_case|$spam_image\n" or croak "$croak{'print'} SPAMQUESTIONS"; fclose(SPAMQUESTIONS); if ( $action eq 'spam_questions_add' ) { $yySetLocation = qq~$adminurl?action=spam_questions;questions_language=$FORM{'questions_language'}~; redirectexit(); } return; } sub SpamQuestionsEdit { is_admin_or_gmod(); $id = $FORM{'spam_question_id'}; my $question_edit = q{}; fopen( SPAMQUESTIONS, "<$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); @spam_questions = ; fclose(SPAMQUESTIONS); foreach my $question (@spam_questions) { chomp $question; if ( $question =~ /$id/xsm ) { $question_edit = $question; last; } } ( $spam_question_id, $spam_question, $spam_answer, $spam_case, $spam_image ) = split /\|/xsm, $question_edit; if ($spam_case) { $chk_spam_case = q~ checked="checked"~; } my $spam_image_value = q{}; if ( $spam_image ) { $spam_image_value = qq~
$admin_txt{'current_img'}: $spam_image
~; } $yymain = qq~
$admin_img{'prefimg'} $spam_question_txt{'edit_question'}
X$spam_image_value
$admin_img{'prefimg'} $admin_txt{'10'}
 
~; $yytitle = $admintxt{'a3_sub6'}; AdminTemplate(); exit; } sub SpamQuestionsEdit2 { is_admin_or_gmod(); $spam_question_id = $FORM{'spam_question_id'}; $spam_question = $FORM{'spam_question'}; $spam_answer = $FORM{'spam_answer'}; $spam_case = $FORM{'spam_case'} || '0'; $spam_image = $FORM{'spam_image'}; $cur_spam_image = $FORM{'cur_spam_image'}; $del_spam_image = $FORM{'del_spam_image'}; if ( $spam_question eq q{} ) { fatal_error( 'invalid_value', "$spam_question_txt{'question'}" ); } if ( $spam_answer eq q{} ) { fatal_error( 'invalid_value', "$spam_question_txt{'answer'}" ); } if ( $spam_image ne q{} ) { $spam_image = UploadFile('spam_image', 'Templates/Forum/default/Spam_Img', 'png jpg jpeg gif', '250', '0'); unlink "$htmldir/Templates/Forum/default/Spam_Img/$cur_spam_image"; } else { $spam_image = $cur_spam_image; } if ( $del_spam_image ) { unlink "$htmldir/Templates/Forum/default/Spam_Img/$cur_spam_image"; $spam_image = q{}; } fopen( SPAMQUESTIONS, "<$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); @spam_questions = ; fclose(SPAMQUESTIONS); @question = grep { !/$spam_question_id/xsm } @spam_questions; push @question, "$spam_question_id|$spam_question|$spam_answer|$spam_case|$spam_image"; $question = join q{}, @question; fopen( SPAMQUESTIONS, ">$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); print {SPAMQUESTIONS} "$question\n" or croak "$croak{'print'} SPAMQUESTIONS"; fclose(SPAMQUESTIONS); if ( $action eq 'spam_questions_edit2' ) { $yySetLocation = qq~$adminurl?action=spam_questions;questions_language=$FORM{'questions_language'}~; redirectexit(); } return; } sub SpamQuestionsDelete { is_admin_or_gmod(); fopen( SPAMQUESTIONS, "<$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); @spam_questions = ; fclose(SPAMQUESTIONS); fopen( SPAMQUESTIONS, ">$langdir/$questions_language/spam.questions" ) || fatal_error( 'cannot_open', "$langdir/$questions_language/spam.questions", 1 ); print {SPAMQUESTIONS} grep { !/$FORM{'spam_question_id'}/xsm } @spam_questions or croak "$croak{'print'} SPAMQUESTIONS"; fclose(SPAMQUESTIONS); foreach my $spam_image (@spam_questions) { chomp $spam_image; if ( $spam_image =~ /$FORM{'spam_question_id'}/xsm ) { $spam_image_delete = $spam_image; last; } } ( undef, undef, undef, undef, $spam_image ) = split /\|/xsm, $spam_image_delete; if ( $spam_image ) { unlink "$htmldir/Templates/Forum/default/Spam_Img/$spam_image"; } if ( $action eq 'spam_questions_delete' ) { $yySetLocation = qq~$adminurl?action=spam_questions;questions_language=$FORM{'questions_language'}~; redirectexit(); } return; } 1;