403Webshell
Server IP : 208.122.213.31  /  Your IP : 216.73.216.45
Web Server : Apache
System : Linux msd6191.mjhst.com 4.18.0-553.137.1.el8_10.x86_64 #1 SMP Wed Jun 24 11:40:24 UTC 2026 x86_64
User : WHMCS_MIA_382 ( 1001)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/httpd/html/bukkake-mpegs.com/cgi-bin/tgp/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/httpd/html/bukkake-mpegs.com/cgi-bin/tgp/admin/admin.cgi
#!/usr/bin/perl
##############################
##  AutoGallery Pro v2.1.x  ##
#############################################################
##  admin.cgi - control administration of AutoGallery Pro  ##
#############################################################

BEGIN
{
    chdir('..');
}

use lib '.';
use cgiworks;

print "Content-type: text/html\n\n";
$HEADER = 1;

eval
{
    require 'agp.pl';
    main();
};

err("$@", 'admin.cgi') if( $@ );
exit;

########################################################################
##  Removing the link back to JMB Software is a copyright violation.  ##
##  Altering or removing any of the code that is responsible, in      ##
##  any way, for generating that link is strictly forbidden.          ##
##  Anyone violating the above policy will have their license         ##
##  terminated on the spot.  Do not remove that link - ever.          ##
########################################################################


sub main
{
    derr(1024) if( !$RMTUSR );
    derr(1039) if( !dbselect("$DDIR/dbs/moderators", $RMTUSR) );
    derr(1025) if( !-e "$DDIR/vars.dat" );  
    diskspace();

    if( $REQMTH eq 'GET' )
    {
        displayMain();
    }

    else
    {
        parsepost();
        derr(1016) if( !$FRM{run} );
        &{$FRM{run}};
    }
}



sub displayMain
{
    $TPL{MESSAGE}       = shift;
    $TPL{P0ST_STATUS}   = (-e "$DDIR/disabled") ? '<option value="enablePost">Enable Post.cgi</option>' : '<option value="disablePost">Disable Post.cgi</option>';
    $TPL{QUEUE}         = '<option value="queue">Queue Database</option>' if( !$USE_AUTO_APPROVE );
    $TPL{ARCHIVES}      = getDatabases();
    $TPL{TGP_PAGES}     = getPages();
    $TPL{IN_QUEUE}      = $USE_AUTO_APPROVE ? 'NA' : dbsize("$DDIR/dbs/queue");
    $TPL{CHEAT_REPORTS} = dbsize("$DDIR/dbs/cheats");
    $TPL{LAST_BACKUP}   = timetostr( getAge("$DDIR/backup") );
    $TPL{TGP_PAGE}      = "$HTML_URL/" . (split(/,/, $MAIN_PAGE))[0];
    $TPL{VERSION}       = $VERSION;

    if( getAge("$DDIR/backup") >= 259200 )
    {
        $TPL{REMIND}  = 'A database backup is recommended';
        $TPL{COLOR}   = '#FF0000';
    }

    fparse('_admin_main.htmlt');
}



sub displayTemplate
{
    $line = freadalls("$TDIR/$FRM{template}");
    stripHTML($line);

    $TPL{HTML}     = $$line;
    $TPL{TEMPLATE} = $FRM{template};
 
    fparse('_admin_template.htmlt');
}



sub displayHTML
{
    require "$DDIR/html/$FRM{hpage}";

    stripHTML(\$HTML);
    stripHTML(\$TEMP);
    stripHTML(\$THUMB);

    $TPL{HTML}     = $HTML;
    $TPL{TEMP}     = $TEMP;
    $TPL{THUMB}    = $THUMB;
    $TPL{HPAGE}    = $FRM{hpage};
    $TPL{ALL}      = qq|<option value="$MAIN_PAGE,$CAT_PAGE_LIST">All Pages</option>\n|;
    $TPL{ARCHIVES} = qq|<option value="$CAT_PAGE_LIST">All Archive Pages</option>\n|;
    $TPL{MAIN}     = $MAIN_PAGE;

    fparse('_admin_html.htmlt');
}



sub displayBans
{
    $TPL{MESSAGE} = shift;
    $TPL{EMAIL}   = ${ freadalls("$DDIR/dbs/email.ban") };
    $TPL{DOMAIN}  = ${ freadalls("$DDIR/dbs/url.ban"  ) };
    $TPL{WORD}    = ${ freadalls("$DDIR/dbs/word.ban" ) };
    $TPL{IP}      = ${ freadalls("$DDIR/dbs/IP.ban"   ) };

    fparse('_admin_bans.htmlt');
}



sub displayRecip
{
    my($msg, $htm) = @_;

    $TPL{MESSAGE}  = $msg;
    $TPL{HTML}     = $$htm if( defined $htm );
    $TPL{RECIP_ID} = $FRM{id};

    fparse('_admin_recip.htmlt');
    printRecip();
}



sub displayBanned
{
    my($msg, $htm) = @_;

    $TPL{MESSAGE} = $msg;
    $TPL{HTML}    = $$htm if( defined $htm );
    $TPL{BAN_ID}  = $FRM{id};

    fparse('_admin_banned.htmlt');
    printBanned();
}



sub displayIcons
{
    my($msg, $html) = @_;

    $TPL{MESSAGE} = $msg;
    $TPL{HTML}    = $$html if( defined $html );
    $TPL{ICON_ID} = $FRM{id};

    fparse('_admin_iconst.htmlt');
    printIcons();
    fparse('_admin_iconsb.htmlt');
}



sub displayReject
{
    my($msg, $html) = @_;

    derr(1027) if( $USE_AUTO_APPROVE );

    $TPL{MESSAGE}   = $msg;
    $TPL{HTML}      = $$html if( defined $html );
    $TPL{REJECT_ID} = $FRM{id};

    fparse('_admin_reject.htmlt');
    printReject();
}



sub displayManual
{
    $TPL{MESSAGE} = shift;

    for( split(/,/, $CATEGORIES) )
    {
        $TPL{CAT_OPTIONS} .= qq|<option value="$_">$_</option>\n|;
    }

    fparse('_admin_manual.htmlt');
}



sub displayPost
{
    derr(1000, 'Post ID') if( !$FRM{id} );

    my $pd = dbselect("$DDIR/dbs/$FRM{pdb}", $FRM{id});

    derr(1030) if( !$pd );

    $TPL{POST_ID}     = $$pd[0];
    $TPL{EMAIL}       = $$pd[1];
    $TPL{GALLERY_URL} = $$pd[2];
    $TPL{DESCRIPTION} = $$pd[3];
    $TPL{RECIP_URL}   = $$pd[4];
    $TPL{NUM_PICS}    = $$pd[6];
    $TPL{CATEGORY}    = $$pd[7];
    $TPL{SUBMIT_TIME} = fdate($DATE_FORMAT, $$pd[9] + 3600 * $TIME_ZONE) . ' ' . ftime($TIME_FORMAT, $$pd[9] + 3600 * $TIME_ZONE);
    $TPL{PARTNER_ID}  = $$pd[12];
    $TPL{APPROVED_BY} = $$pd[13];
    $TPL{PERMANENT}   = $$pd[14] ? 'Yes' : 'No';
    $TPL{SUBMIT_IP}   = $$pd[15];
    $TPL{DATABASE}    = $FRM{pdb};
    $TPL{CODED_RECIP} = urlencode($$pd[4]);

    fparse('_admin_details.htmlt');
}



sub displayEditPost
{
    derr(1000, 'Post ID') if( !$FRM{id} );

    tprint('_admin_editpostt.htmlt');
 
    for( split(/,/, $FRM{id}) )
    {
        my $pd = dbselect("$DDIR/dbs/$FRM{db}", $_);
        
        next if( !$pd );

        $TPL{POST_ID}     = $$pd[0];
        $TPL{EMAIL}       = $$pd[1];
        $TPL{GALLERY_URL} = $$pd[2];
        $TPL{DESCRIPTION} = $$pd[3];
        $TPL{RECIP_URL}   = $$pd[4];
        $TPL{NUM_PICS}    = $$pd[6];
        $TPL{DATABASE}    = $FRM{db};
        $TPL{CAT_OPTIONS} = getCatOptions($$pd[7]);
        $TPL{PERMANENT}   = getPermanent($$pd[14]);
  
        fparse('_admin_editpostm.htmlt');
     }

    $TPL{FROM}     = $FRM{from};
    $TPL{PAGE}     = $FRM{page};
    $TPL{SHOW}     = $FRM{show};
    $TPL{POST_IDS} = $FRM{id};
    $TPL{DATABASE} = $FRM{db};
    
    fparse('_admin_editpostb.htmlt');
}



sub displayCheats
{
    $TPL{MESSAGE} = shift;

    fparse('_admin_cheatt.htmlt');
    printCheats();
    tprint('_admin_cheatb.htmlt');
}



sub displaySearch
{
    $TPL{DATABASE} = $FRM{sdb};
    $TPL{KEYWORD}  = $FRM{key};

    fparse('_admin_searcht.htmlt');
    searchPosts();
    fparse('_admin_searchb.htmlt');
}



sub displayPosts
{
    $FRM{page} = 0 if( $FRM{page} < 0 );

    $TPL{MESSAGE}  = shift;
    $TPL{SHOW}     = $FRM{show};
    $TPL{TOTAL}    = dbsize("$DDIR/dbs/$FRM{db}");
    $TPL{START}    = getStart($TPL{TOTAL}, $FRM{show});
    $TPL{END}      = getEnd($TPL{TOTAL}, $FRM{show}, $TPL{START});
    $TPL{NEXT}     = $TPL{TOTAL} > $TPL{END} ? qq|<option value="displayPosts">Display Next Page</option>| : '';
    $TPL{PAGE}     = $FRM{page} + 1;
    $TPL{JUMP}     = getJump($TPL{TOTAL}, $FRM{show});
    $TPL{DATABASE} = $FRM{db};    

    if( $FRM{db} eq 'queue' )
    {
        fparse('_admin_queuet.htmlt');
        printPosts('queue');
        fparse('_admin_queueb.htmlt');
    }
    else
    {
        fparse('_admin_postst.htmlt');
        printPosts('posts');
        fparse('_admin_postsb.htmlt');
    }
}



sub displayEditPartner
{
    derr(1036) if( !hasAccess(10) );

    my $id = (split(/,/, $FRM{id}))[0];

    derr(1000, 'Partner ID') if( !$id );

    my $res = dbselect("$DDIR/dbs/partners", $id);
    derr(1035,) if( !$res );

    $TPL{USERNAME} = $$res[0];
    $TPL{EMAIL}    = $$res[1];
    $TPL{NAME}     = $$res[2];
    $TPL{SITE_URL} = $$res[3];
    $TPL{PASSWORD} = $$res[4];
    $TPL{ICONS}    = getIconSelect($$res[5]);

    fparse('_admin_epartner.htmlt');
}



sub displayAllPartners
{
    $TPL{MESSAGE} = shift;

    fparse('_admin_partnerst.htmlt');
    printPartners();
    fparse('_admin_partnersb.htmlt');
}



sub displayAddPartner
{
    $TPL{MESSAGE}     = shift;
    $TPL{ICON_SELECT} = getIconSelect();

    fparse('_admin_apartner.htmlt');
}



sub displayEditMod
{
    derr(1036) if( !hasAccess(11) );

    my $id = (split(/,/, $FRM{id}))[0];

    derr(1000, 'Moderator ID') if( !$id );

    my $res = dbselect("$DDIR/dbs/moderators", $id);
    derr(1035) if( !$res );


    $TPL{NAME}     = $$res[2];
    $TPL{EMAIL}    = $$res[1];
    $TPL{USERNAME} = $$res[0];
    $TPL{PASSWORD} = $$res[3];
    $TPL{SUPER}    = getCheckbox($$res[4]);   
    $TPL{PST}      = getCheckbox($$res[5]);
    $TPL{SET}      = getCheckbox($$res[6]);
    $TPL{HTM}      = getCheckbox($$res[7]);
    $TPL{BLK}      = getCheckbox($$res[8]);
    $TPL{EML}      = getCheckbox($$res[9]);
    $TPL{PRT}      = getCheckbox($$res[10]);
    $TPL{MOD}      = getCheckbox($$res[11]);
    $TPL{CHT}      = getCheckbox($$res[12]);

    fparse('_admin_emod.htmlt');
}


sub displayAllMods
{
    $TPL{MESSAGE} = shift;

    fparse('_admin_modst.htmlt');
    printModerators();
    tprint('_admin_modsb.htmlt');
}



sub displayAddMod
{
    $TPL{MESSAGE} = shift;

    fparse('_admin_amod.htmlt');
}



sub displayMail
{
    derr(1000, 'E-mail Recipient') if( !$FRM{id} );

    $TPL{RUN}      = $FRM{efnct};
    $TPL{DATABASE} = $FRM{db};
    $TPL{TO}       = $FRM{id};
    $TPL{SHOW}     = $FRM{show};
    $TPL{PAGE}     = $FRM{page} - 1;
    $TPL{FROM}     = $FRM{from};

    fparse('_admin_mail.htmlt');
}



sub displayLang
{
    require "$DDIR/errors.dat";

    %TPL = %error;

    for( @{ freadall("$DDIR/lang.dat") } ) {
        $_ =~ /\$([^\s]+)/;
        $TPL{$1} = ${$1};
    }

    for( keys %TPL ) {
        stripHTML(\$TPL{$_});
    }

    fparse('_admin_lang.htmlt');
}



sub displayBackup
{
    fparse('_admin_backup.htmlt');
}



sub displayConfig
{
    if( $FRM{run} eq 'loadConfig' )
    {
        $TPL{'CONFIG_ID'} = substr($FRM{'config'}, 0, length($FRM{'config'})-4);

        for( @{freadall("$DDIR/lcheck/$FRM{'config'}")} )
        {
            $_ =~ m/\$([^\s]+)\s+= '([^']*)'/;

            if( $2 eq '0' )
            {
                $TPL{$1} = undef;
            }
            elsif( $2 eq '1' )
            {
                $TPL{$1} = ' checked';
            }
            else
            {
                $TPL{"$1-$2"} = ' selected';
            }
        }
    }
    else
    {
        $TPL{'CONFIG_ID'} = 'default';
    }

    for( @{dread("$DDIR/lcheck", '\.dat$')} )
    {
        my $file = $_;
        my $id   = substr($file, 0, length($file)-4);

        $TPL{'CONFIGS'} .= "<option value=\"$file\">$id</option>";
    }

    fparse('_admin_config.htmlt');
}



sub displayStarter
{
    for( @{dread("$DDIR/lcheck", '\.dat$')} )
    {
        my $file = $_;
        my $id   = substr($file, 0, length($file)-4);

        if( -e "$DDIR/lcheck/$id.pid" )
        {
            my $pid = freadline("$DDIR/lcheck/$id.pid");

            if( kill(0, $pid) )
            {
                $TPL{MESSAGE} .= "<b>$id</b><br>An instance of the linkchecker is currently running.  You can " .
                                 'start a new instance, but the previous instance will not be ' .
                                 'able to complete it\'s task.<br><br>';
            }
            else
            {
                $TPL{MESSAGE} .= "<b>$id</b><br>An instance of the linkchecker may be running.  It is recommended that " .
                                 'you wait an hour and come back.  If you still get this message, you can ' .
                                 'start a new instance of the linkchecker.<br><br>';
            }
        }
        else
        {
            $TPL{MESSAGE} .= "<b>$id</b><br>The linkchecker is ready to be started.  Select the <b>$id</b> ID and press the button to begin.<br><br>";
        }

        $TPL{'CONFIGS'} .= "<option value=\"$id\">$id</option>";
    }


    if( !$TPL{MESSAGE} )
    {
        $TPL{MESSAGE} = 'Please use the Configure Linkchecker function before starting the linkchecker.';
    }


    fparse('_admin_starter.htmlt');
}



sub displayImport
{
    fparse('_admin_import.htmlt');
}



sub displayAnalysis
{
    derr(1044) if( !-f "$DDIR/$FRM{file}" );

    tprint('_admin_analyzet.htmlt');

    my $line   = freadline("$DDIR/$FRM{file}");
    my @fields = split(/\Q$FRM{delim}\E/, $line);



    for( $i=0; $i<=$#fields; $i++ )
    {
        print <<HTML;
        <tr bgcolor="#ececec">
        <td width="10%" align="center">
        <font face="Verdana" size="2" style="font-size: 11px;">
        $i
        </font>
        </td>
        <td width="75%">
        <font face="Verdana" size="2" style="font-size: 11px;">
        $fields[$i]
        </font>
        </td>
        <td width="15%">
        <select name="field_$i" style="font-size: 11px; font-family: Verdana">
          <option value="Category">Category</option>
          <option value="Gallery_URL">Gallery URL</option>
          <option value="Recip_URL">Recip URL</option>
          <option value="Description">Description</option>
          <option value="Email">E-mail</option>
          <option value="Num_Pics"># of Images</option>
          <option value="IGNORE">IGNORE</option>
        </select>
        </td>
        </tr>
HTML
    }

    $TPL{FILE}  = $FRM{file};
    $TPL{DELIM} = $FRM{delim};

    fparse('_admin_analyzeb.htmlt');
}



#########################################################################################################



sub saveConfig
{
    derr(1036) if( !hasAccess(6) );
    derr(1000, 'Configuration ID') if( !$FRM{'config'} );

    my @options = qw(
                      REBUILD_PAGES
                      EMAIL_ADMIN
                      GENERATE_REPORT
                      USE_TAKE_SAMPLE
                      USE_REJECT_300
                      USE_COUNT_LINKS
                      USE_BANNED_HTML
                      USE_CHECK_RECIP
                      USE_CHECK_CHANGED
                      USE_BAN_DOMAIN
                    );

    my $config = $FRM{'config'};


    delete $FRM{'run'};
    delete $FRM{'config'};

    fwrite("$DDIR/lcheck/$config.dat", '');

    for( @options )
    {
        my $opt = $_;

        if( !defined($FRM{$opt}) )
        {
            $FRM{$opt} = 0;
        }
    }

    for( keys %FRM )
    {
        fappend("$DDIR/lcheck/$config.dat", "\$$_ = '$FRM{$_}';\n");
    }

    fappend("$DDIR/lcheck/$config.dat", "\n1;\n");

    displayMain('Linkchecker configuration has been saved');
}



sub loadConfig
{
    displayConfig();
}



sub startLinkchecker
{
    derr(1036) if( !hasAccess(6) );

    system("./linkcheck $FRM{'config'} -d &");

    sleep(2);

    if( !-e "$DDIR/lcheck/$FRM{'config'}.pid" )
    {
        derr(1054);
    }

    displayMain('Linkchecker has been started');
}



sub rebuildAll
{
    doArchive();
    buildMain();
    buildArchives();
    displayMain('All pages have been rebuilt');
}



sub rebuildMain
{
    doArchive();
    buildMain();
    displayMain('Main pages have been rebuilt');
}



sub rebuildArchives
{
    doArchive();
    buildArchives();
    displayMain('Archive pages have been rebuilt');
}



sub importGalleries
{
    my %index = ();
    my $count = 0;

    for( keys %FRM )
    {
        my $key = $_;

        next if( $FRM{$key} eq 'IGNORE' );

        if( $index{$FRM{$key}} )
        {
            derr(1045);
        }

        if( $key =~ /^field_(\d+)/gi )
        {
            $index{$FRM{$key}} = $1 + 1;
        }
    }


    for( @{freadall("$DDIR/$FRM{file}")} )
    {
        $_ =~ s/'/\\'/g;
        $_ =~ s/\n|\r//g;

        next if ( $_ eq '' );

        my @data = split(/\Q$FRM{delim}\E/, $_);
        unshift(@data, '');

        my $partial = getPartialURL($data[$index{'Gallery_URL'}]);
        my $email   = $data[$index{'Email'}];
        my $mod     = $FRM{approved} ? $RMTUSR : '-';
        my $rating  = $data[$index{'Rating'}];
        my $db      = $FRM{'approved'} ? 'current' : 'queue';


        my $time  = time; 
        my $sdate = fdate('%Y%m%d', $time);


        if( !$index{'Rating'} )
        {
            $rating = 1;
        }

        if( !$index{'Email'} )
        {
            $email = "'$ADMIN_EMAIL'";
        }

        my @pd = ();

        $pd[0]  = getNewPostID();
        $pd[1]  = $email;
        $pd[2]  = $data[$index{'Gallery_URL'}];
        $pd[3]  = $data[$index{'Description'}];
        $pd[4]  = $data[$index{'Recip_URL'}];
        $pd[5]  = $partial;
        $pd[6]  = $data[$index{'Num_Pics'}];
        $pd[7]  = $data[$index{'Category'}];
        $pd[8]  = $sdate;
        $pd[9]  = $time;
        $pd[10] = $time;
        $pd[11] = 0;
        $pd[12] = '-';
        $pd[13] = $mod;
        $pd[14] = 1;
        $pd[15] = $RMTADR;
        $pd[16] = 0;
        $pd[17] = 0;
        $pd[18] = '-';

        fappend("$DDIR/dbs/$db", join('|', @pd) . "\n");

        $count++;
    }

    displayMain("$count Galleries Imported");
}



sub processPosts
{
    derr(1036) if( !hasAccess(5) );

    derr(1000, 'No Submissions Selected') if( !$FRM{id} && !$FRM{rej} && !$FRM{ban} );
    my( @apr, @rej, @ban );

    my $time = time;

    ## Process the banned submissions
    for( split(/,/, $FRM{ban}) )
    {
        my $pd = dbselect("$DDIR/dbs/queue", $_);
        next if( !$pd );
        dbdelete("$DDIR/dbs/queue", $_);
        unlink("$THUMB_DIR/$_.jpg");
         
        $DEL = "\n";
        dbinsert("$DDIR/dbs/email.ban", $$pd[1]);
        dbinsert("$DDIR/dbs/url.ban",   $$pd[5]);
        $DEL = '|';
    }


    ## Process the rejected submissions
    for( split(/,/, $FRM{rej}) )
    {
        my $pd = dbselect("$DDIR/dbs/queue", $_);
        next if( !$pd );
        dbdelete("$DDIR/dbs/queue", $_);
        unlink("$THUMB_DIR/$_.jpg");
        
        $$pd[18] = $FRM{"rej_$_"};
        push(@rej, join('|', @{$pd})) if( $$pd[11] && $FRM{"rej_$_"} ne 'none' );
    }


    ## Process the approved submissions
    for( split(/,/, $FRM{id}) )
    {
        my $pd = dbselect("$DDIR/dbs/queue", $_);
        next if( !$pd );
        dbdelete("$DDIR/dbs/queue", $_);

        $$pd[3]  = $FRM{"desc_$_"};
        $$pd[6]  = $FRM{"pics_$_"};
        $$pd[7]  = $FRM{"cat_$_"};
        $$pd[10] = $time;
        $$pd[13] = $RMTUSR;
        
        my $res = dbinsert("$DDIR/dbs/current", @{$pd});

        if( !$res )
        {
            $$pd[0] = "$$pd[0]-a";
            dbinsert("$DDIR/dbs/current", @{$pd});
        }

        push(@apr, join('|', @{$pd})) if( $$pd[11] );
    }

    doArchive();
 
    $TPL{ADMIN_EMAIL} = $ADMIN_EMAIL;

    ## Fork off to take care of mailing the submitters
    my $pid = fork();
    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        for( @apr )
        {
            my @pd = split(/\|/, $_);

            $TPL{POST_ID}     = $pd[0];
            $TPL{EMAIL}       = $pd[1];
            $TPL{GALLERY_URL} = $pd[2];
            $TPL{DESCRIPTION} = $pd[3] ? $pd[3] : '';
            $TPL{RECIP_URL}   = $pd[4] ? $pd[4] : '';
            $TPL{NUM_PICS}    = $pd[6];
            $TPL{CATEGORY}    = $pd[7];
            $TPL{SUBMIT_DATE} = fdate($DATE_FORMAT, $pd[9] + (3600 * $TIME_ZONE)); 
            $TPL{SUBMIT_TIME} = ftime($DATE_FORMAT, $pd[9] + (3600 * $TIME_ZONE));

            mail($SENDMAIL, freadalls("$TDIR/_email_approved.etmpl"), \%TPL);
        }

        for( @rej )
        {
            my @pd = split(/\|/, $_);

            $TPL{POST_ID}     = $pd[0];
            $TPL{EMAIL}       = $pd[1];
            $TPL{GALLERY_URL} = $pd[2];
            $TPL{DESCRIPTION} = $pd[3] ? $pd[3] : '';
            $TPL{RECIP_URL}   = $pd[4] ? $pd[4] : '';
            $TPL{NUM_PICS}    = $pd[6];
            $TPL{CATEGORY}    = $pd[7];
            $TPL{SUBMIT_DATE} = fdate($DATE_FORMAT, $pd[9] + (3600 * $TIME_ZONE)); 
            $TPL{SUBMIT_TIME} = ftime($DATE_FORMAT, $pd[9] + (3600 * $TIME_ZONE));

            mail($SENDMAIL, freadalls("$DDIR/mails/$pd[18]"), \%TPL);
        }

        exit;
    }
    else
    {
        $FRM{page}--;

        displayPosts('Selected Submissions Have Been Processed');
    }
}



sub manualSubmit
{
    my $hexip = IPtoHex($ENV{'REMOTE_ADDR'});
    $tmpimg   = $hexip . '-' . time;

    derr(1036) if( !hasAccess(5) );

    derr(1006                 ) if( $FRM{email} !~ /^[\w\d][\w\d\,\.\-]*\@([\w\d\-]+\.)+([a-zA-Z]+)$/ );
    derr(1005, $L_GALLERY_URL ) if( $FRM{gurl}  !~ /^http:\/\/[\w\d\-\.]+\.[\w\d\-\.]+/               );

    my $partial = getPartialURL($FRM{gurl});  
    my $time    = time;
    my $date    = fdate("%Y%m%d", $time);
    
    $Data = undef;

    ## Software automatically selecting thumbnail
    if( $USE_SELECT_THUMB )
    {
        my $results;

        if( !analyzeGallery($FRM{gurl}, \%results) )
        {
            httpError($FRM{gurl}, $Errstr);
        }

        if( !$results{'IMAGES'} )
        {
            derr(1053);
        }

        $SendRef = 1;

        ## Download the full size image
        if( !GET($results{'PREVIEW_IMAGE'}) )
        {
            httpError($results{'PREVIEW_IMAGE'}, $Errstr);
        }
        else
        {
            fwrite("$THUMB_DIR/$tmpimg.jpg", $Data);
        }

        require 'magick.pl';

        processImage("$THUMB_DIR/$tmpimg.jpg", $FRM{cat});
    }

    else
    {
        if( $FRM{turl} || $FRM{upfile} )
        {
            if( $FRM{turl} )
            {
                $SendRef = 1;
                if( !GET($FRM{turl}) )
                {
                    httpError($FRM{turl}, $Errstr);
                }
                else
                {
                    fwrite("$THUMB_DIR/$tmpimg.jpg", $Data);
                }
            }
            else
            {
                fwrite("$THUMB_DIR/$tmpimg.jpg", $FRM{upfile});
                $BodyBytes = (-s "$THUMB_DIR/$tmpimg.jpg");
            }

            ## Automatic resize and crop
            if( $USE_RESIZE )
            {
                require 'magick.pl';
                processImage("$THUMB_DIR/$tmpimg.jpg", $FRM{cat});
            }
            else
            {
                if( $USE_SHOW_CAT )
                {
                    require 'magick.pl';
                    annotateImage("$THUMB_DIR/$tmpimg.jpg", $FRM{cat});
                }
            }
        }
    } ## end thumbnail preview code

    my $pid = getNewPostID();

    for( keys %FRM  ) { $FRM{$_} =~ s/\|//g; }

    $TPL{EMAIL}       = $FRM{email};
    $TPL{GALLERY_URL} = $FRM{gurl};
    $TPL{DESCRIPTION} = $FRM{desc};
    $TPL{RECIP_URL}   = $FRM{rurl};
    $TPL{NUM_PICS}    = $FRM{pics};
    $TPL{PERMANENT}   = $FRM{perm} ? $L_YES : $L_NO;
    $TPL{CONFIRM}     = $FRM{conf} ? $L_YES : $L_NO;
    $TPL{CATEGORY}    = $FRM{cat};
    $TPL{ADMIN_EMAIL} = $ADMIN_EMAIL;

    my $dbh = dbinsert("$DDIR/dbs/current", $pid, "$FRM{email}|$FRM{gurl}|$FRM{desc}|$FRM{rurl}|$partial|$FRM{pics}|$FRM{cat}|$date|$time|$time|0|-|$RMTUSR|$FRM{perm}|$RMTADR|0|0|-");   
    derr(1022) if( !$dbh );

    if( -e "$THUMB_DIR/$tmpimg.jpg" )
    {
        rename("$THUMB_DIR/$tmpimg.jpg", "$THUMB_DIR/$pid.jpg");
    }

    displayManual("Submission added and assigned ID $pid");
}



sub deletePosts
{
    derr(1036) if( !hasAccess(5) );

    for( split(/,/, $FRM{id}) )
    {
        my $id = $_;

        dbdelete("$DDIR/dbs/$FRM{db}", $id);
        unlink("$THUMB_DIR/$id.jpg");
    }

    $FRM{page}--;

    &{$FRM{from}}("The selected posts have been deleted");
}



sub archivePosts
{
    derr(1036) if( !hasAccess(5) );

    derr(1031) if( $FRM{db} ne 'current' );

    for( split(/,/, $FRM{id}) )
    {
        my $pd = dbselect("$DDIR/dbs/$FRM{db}", $_);

        if( $pd )
        {
            dbdelete("$DDIR/dbs/$FRM{db}", $_);
            dbinsert("$DDIR/dbs/" . getDBName($$pd[7]), @{$pd});
        }
    }

    $FRM{page}--;

    &{$FRM{from}}("The selected posts have been archived");
}



sub editPosts
{
    derr(1036) if( !hasAccess(5) );

    for( split(/,/, $FRM{ids}) )
    {
        my $id = $_;
        my $pd = dbselect("$DDIR/dbs/$FRM{db}", $id);

        next if( !$pd );

        $$pd[1]  = $FRM{"email_$id"};
        $$pd[2]  = $FRM{"gurl_$id"};
        $$pd[3]  = $FRM{"desc_$id"};
        $$pd[4]  = $FRM{"rurl_$id"};
        $$pd[6]  = $FRM{"pics_$id"};
        $$pd[7]  = $FRM{"cat_$id"};
        $$pd[14] = $FRM{"perm_$id"};

        dbupdate("$DDIR/dbs/$FRM{db}", $id, @{$pd});
    }

    $FRM{page}--;

    &{$FRM{from}}("Post IDs $FRM{ids} Have Been Updated");
}



sub backupData
{
    derr(1036) if( !hasAccess(6) );

    derr(1000, 'Backup Filename') if( !$FRM{file} );

    fwrite("$DDIR/$FRM{file}");

    my $pid = fork();

    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        my @dirs = qw( banned dbs html icons links mails );

        fwrite("$DDIR/$FRM{file}", "Database: postid\n<<<" . freadline("$DDIR/postid") . ">>>\nDatabase: cheatid\n<<<" . freadline("$DDIR/cheatid") . ">>>\n");

        foreach $dir ( @dirs )
        { 
            for( @{ dread("$DDIR/$dir", '^[^.]') } )
            {
                fappend("$DDIR/$FRM{file}", "Database: $dir/$_\n<<<");
                open(DB, "$DDIR/$dir/$_") || err("$!", "$DDIR/$dir/$_");
                flock(DB, $LOCK_EX);
                while( <DB> )
                {
                    fappend("$DDIR/$FRM{file}", $_);
                }
                fappend("$DDIR/$FRM{file}", ">>>\n");
                flock(DB, $LOCK_UN);
                close(DB);
            }
        }

        exit;
    }

    else
    {
        fwrite("$DDIR/backup", time);
        displayMain("Databases are now being backed up.<br>Allow at least 60 seconds for this process to complete.");
    }
}



sub restoreData
{
    derr(1036) if( !hasAccess(6) );

    derr(1000, 'Backup Filename') if( !$FRM{file} );

    freadline("$DDIR/$FRM{file}");

    my $pid = fork();

    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        open(BAK, "$DDIR/$FRM{file}") || err("$!", "$DDIR/$FRM{file}");

        while( <BAK> )
        {
            $line = $_;

            if( $line =~ /^Database:\s(.+)$/ )
            {
                $file = $1;
                fwrite("$DDIR/$file");
            }
            else
            {
                if( $line =~ /^<<<(.*?)>>>$/s )
                {
                    fappend("$DDIR/$file", $1);
                }
                elsif( $line =~ /^<<<(.*)/s )
                {
                    fappend("$DDIR/$file", $1);
                }
                elsif( $line =~ /(.*?)>>>$/s )
                {
                    fappend("$DDIR/$file", $1);
                }
                else
                {
                    fappend("$DDIR/$file", $line);
                }
            }

        }

        close(BAK);

        $DEL = ':';
        for( @{freadall("$DDIR/dbs/moderators")} )
        {
            my @md = split(/\|/, $_);
            dbinsert('./admin/.htpasswd', $md[0], crypt($md[3], getsalt()));
        }
        $DEL = '|';

        exit;
    }

    else
    {
        displayMain("Databases are now being restored.<br>Allow at least 60 seconds for this process to complete.");
    }
}



sub saveLangSettings
{
    derr(1036) if( !hasAccess(6) );

    delete $FRM{run};

    fwrite("$DDIR/errors.dat");
    fwrite("$DDIR/lang.dat");

    for( sort keys %FRM )
    {
        $FRM{$_} =~ s/"/\\"/g;

        if( index($_, 'L_') == 0 )
        {
            fappend("$DDIR/lang.dat", "\$$_ = \"$FRM{$_}\";\n");
        }
        else
        {
            fappend("$DDIR/errors.dat", "\$error{$_} = \"$FRM{$_}\";\n");
        }
    }

    fappend("$DDIR/errors.dat", "\n1;\n");
    fappend("$DDIR/lang.dat", "\n1;\n");

    displayMain("Language settings have been updated");
}



sub mailPosters
{
    derr(1036) if( !hasAccess(9) );

    derr(1000, 'Subject') if( !$FRM{sub} );
  
    my $pid = fork();

    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        for( split(/,/, $FRM{to}) )
        {
            my $dat = dbselect("$DDIR/dbs/$FRM{db}", $_);
            next if( !$dat );

            $TPL{POST_ID}      = $$dat[0];
            $TPL{EMAIL}        = $$dat[1];
            $TPL{GALLERY_URL}  = $$dat[2];
            $TPL{DESCRIPTION}  = $$dat[3];
            $TPL{RECIP_URL}    = $$dat[4];
            $TPL{NUM_PICS}     = $$dat[6];
            $TPL{CATEGORY}     = $$dat[7];
            $TPL{SUBMIT_DATE}  = fdate($DATE_FORMAT, $$dat[9] + (3600 * $TIME_ZONE));
            $TPL{SUBMIT_TIME}  = ftime($TIME_FORMAT, $$dat[9] + (3600 * $TIME_ZONE));

            my $msg = "To: $$dat[1]\nFrom: $ADMIN_EMAIL\nSubject: $FRM{sub}\n\n$FRM{bod}";

            mail($SENDMAIL, \$msg, \%TPL);
        }

        exit;
    }
    else
    {
        &{$FRM{from}}('Selected Posters Have Been E-mailed');
    }
}



sub mailModerators
{
    derr(1036) if( !hasAccess(9) );

    derr(1000, 'Subject') if( !$FRM{sub} );

    my $pid = fork();

    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        for( split(/,/, $FRM{to}) )
        {
            my $dat = dbselect("$DDIR/dbs/moderators", $_);
            next if( !$dat );

            $TPL{USERNAME} = $$dat[0];
            $TPL{NAME}     = $$dat[2];
            $TPL{PASSWORD} = $$dat[3];

            my $msg = "To: $$dat[1]\nFrom: $ADMIN_EMAIL\nSubject: $FRM{sub}\n\n$FRM{bod}";

            mail($SENDMAIL, \$msg, \%TPL);
        }

        exit;
    }
    else
    {
        displayAllMods('Selected Moderators Have Been E-mailed');
    }
}



sub mailPartners
{
    derr(1036) if( !hasAccess(9) );

    derr(1000, 'Subject') if( !$FRM{sub} );

    my $pid = fork();

    if( !$pid )
    {
        close STDIN; close STDOUT; close STDERR;

        for( split(/,/, $FRM{to}) )
        {
            my $dat = dbselect("$DDIR/dbs/partners", $_);
            next if( !$dat );

            $TPL{USERNAME} = $$dat[0];
            $TPL{NAME}     = $$dat[2];
            $TPL{PASSWORD} = $$dat[4];

            my $msg = "To: $$dat[1]\nFrom: $ADMIN_EMAIL\nSubject: $FRM{sub}\n\n$FRM{bod}";

            mail($SENDMAIL, \$msg, \%TPL);
        }

        exit;

    }
    else
    {
        displayAllPartners('Selected Partners Have Been E-mailed');
    }
}



sub editPartner
{
    derr(1036) if( !hasAccess(10) );

    for( keys %FRM )
    {
        derr(1000, 'All Fields Are Required') if( !$FRM{$_} );
    }

    my $res = dbupdate("$DDIR/dbs/partners", $FRM{user}, $FRM{user}, $FRM{mail}, $FRM{name}, $FRM{surl}, $FRM{pass}, $FRM{icon});
    derr(1035) if( !$res );

    displayAllPartners("Partner '$FRM{user}' Has Been Updated");
}



sub deletePartners
{
    derr(1036) if( !hasAccess(10) );

    for( split(/,/, $FRM{id}) )
    {
        dbdelete("$DDIR/dbs/partners", $_);
    }

    displayAllPartners("Selected Partners Have Been Deleted");
}



sub addPartner
{
    derr(1036) if( !hasAccess(10) );

    derr(1032) if( length($FRM{user}) > 8            );
    derr(1033) if( $FRM{user} !~ m/^[a-zA-Z0-9]*$/gi );

    for( keys %FRM )
    {
        derr(1000, 'All Fields Are Required') if( !$FRM{$_} );
    }

    my $res = dbinsert("$DDIR/dbs/partners", $FRM{user}, $FRM{mail}, $FRM{name}, $FRM{surl}, $FRM{pass}, $FRM{icon});
    derr(1034) if( !$res );

    $TPL{EMAIL}       = $FRM{mail};
    $TPL{ADMIN_EMAIL} = $ADMIN_EMAIL;
    $TPL{CONTACT}     = $FRM{name};
    $TPL{CGI_URL}     = $CGI_URL;
    $TPL{PARTNER_ID}  = $FRM{user};
    $TPL{PASSWORD}    = $FRM{pass};

    mail($SENDMAIL, freadalls("$TDIR/_email_partner.etmpl"), \%TPL) if( $FRM{conf} );

    displayAddPartner("Partner '$FRM{user}' Successfully Added");
}



sub addModerator
{
    derr(1036) if( !hasAccess(11) );

    derr(1032) if( length($FRM{user}) > 8            );
    derr(1033) if( $FRM{user} !~ m/^[a-zA-Z0-9]*$/gi );

    for( keys %FRM )
    {
        derr(1000, 'All Fields Are Required') if( !$FRM{$_} );
    }

    my $res = dbinsert("$DDIR/dbs/moderators", $FRM{user}, "$FRM{mail}|$FRM{name}|$FRM{pass}|$FRM{super}|$FRM{pst}|$FRM{set}|$FRM{htm}|$FRM{blk}|$FRM{eml}|$FRM{prt}|$FRM{mod}|$FRM{cht}");
    derr(1034) if( !$res );

    $DEL = ':';
    $res = dbinsert('./admin/.htpasswd', $FRM{user}, crypt($FRM{pass}, getsalt()));
    derr(1034) if( !$res );
    $DEL = '|';
  
    $TPL{EMAIL}       = $FRM{mail};
    $TPL{ADMIN_EMAIL} = $ADMIN_EMAIL;
    $TPL{NAME}        = $FRM{name};
    $TPL{CGI_URL}     = $CGI_URL;
    $TPL{USERNAME}    = $FRM{user};
    $TPL{PASSWORD}    = $FRM{pass};

    mail($SENDMAIL, freadalls("$TDIR/_email_moderator.etmpl"), \%TPL) if( $FRM{conf} );

    displayAddMod("Moderator '$FRM{user}' Successfully Added");
}



sub editModerator
{
    derr(1036) if( !hasAccess(11) );

    for( keys %FRM )
    {
        derr(1000, 'All Fields Are Required') if( !$FRM{$_} );
    }

    $res = dbupdate("$DDIR/dbs/moderators", $FRM{user}, $FRM{user}, "$FRM{mail}|$FRM{name}|$FRM{pass}|$FRM{super}|$FRM{pst}|$FRM{set}|$FRM{htm}|$FRM{blk}|$FRM{eml}|$FRM{prt}|$FRM{mod}|$FRM{cht}");
    derr(1035) if( !$res );

    $DEL = ':';
    my $res = dbupdate('./admin/.htpasswd', $FRM{user}, $FRM{user}, crypt($FRM{pass}, getsalt()));
    derr(1035) if( !$res );
    $DEL = '|';

    displayAllMods("Moderator '$FRM{user}' Has Been Updated");
}



sub deleteModerators
{
    derr(1036) if( !hasAccess(11) );

    for( split(/,/, $FRM{id}) )
    {
        dbdelete("$DDIR/dbs/moderators", $_);

        $DEL = ':';
        dbdelete('./admin/.htpasswd', $_);
        $DEL = '|';
    }

    displayAllMods("Selected Moderators Have Been Deleted");
}



sub cheatNothing
{
    derr(1036) if( !hasAccess(12) );

    for( split(/,/, $FRM{id}) )
    {
        my $cid = $_;
        dbdelete("$DDIR/dbs/cheats", $cid);
    }

    displayCheats("Selected Cheat Reports Have Been Processed");
}



sub cheatDelete
{
    derr(1036) if( !hasAccess(12) );

    for( split(/,/, $FRM{id}) )
    {
        my $cid = $_;
        my $res = dbselect("$DDIR/dbs/cheats", $cid);
        next if( !$res );

        dbdelete("$DDIR/dbs/cheats", $cid);
        dbdelete("$DDIR/dbs/$$res[3]", $$res[2]);
        unlink("$THUMB_DIR/$$res[2].jpg");
    }

    displayCheats("Selected Cheat Reports Have Been Processed");
}



sub cheatBan
{
    derr(1036) if( !hasAccess(12) );

    for( split(/,/, $FRM{id}) )
    {
        my $cid = $_;
        my $cd = dbselect("$DDIR/dbs/cheats", $cid);
        next if( !$cd );

        dbdelete("$DDIR/dbs/cheats",  $cid     );
        dbdelete("$DDIR/dbs/$$cd[3]", $$cd[2] );
        unlink("$THUMB_DIR/$$cd[2].jpg");

        dbinsert("$DDIR/dbs/email.ban", $$cd[5] );
        dbinsert("$DDIR/dbs/url.ban",   getPartialURL($$cd[4]) );
    }

    displayCheats("Selected Cheat Reports Have Been Processed");
}



##  Edit icon functions 
sub deleteIcon
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} || !-e "$DDIR/icons/$FRM{id}" );
    fremove("$DDIR/icons/$FRM{id}");
    delete $FRM{id};
    displayIcons("Selected Icon Has Been Deleted");
}



sub loadIcon
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} || !-e "$DDIR/icons/$FRM{id}");
    displayIcons("Loaded Icon With ID '$FRM{id}'", freadalls("$DDIR/icons/$FRM{id}"));
}



sub saveIcon
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} );
    $FRM{id}   =~ s/ /_/g;
    $FRM{html} =~ s/\r|\n$//g;
    fwrite("$DDIR/icons/$FRM{id}", "$FRM{html}\n");
    delete $FRM{id};
    displayIcons("Icon Data Has Been Saved");
}



##  Edit Rejection e-mail functions 
sub deleteReject
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/mails/$FRM{id}" || !$FRM{id} );
    fremove("$DDIR/mails/$FRM{id}");
    delete $FRM{id};
    displayReject("Selected Rejection E-mail Has Been Deleted");
}



sub loadReject
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/mails/$FRM{id}" || !$FRM{id});
    displayReject("Loaded Rejection E-mail With ID '$FRM{id}'", freadalls("$DDIR/mails/$FRM{id}"));
}



sub saveReject
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} );
    $FRM{id}   =~ s/ /_/g;
    $FRM{html} =~ s/\r|\n$//g;
    fwrite("$DDIR/mails/$FRM{id}", "$FRM{html}\n");
    delete $FRM{id};
    displayReject("Rejection E-mail Has Been Saved");
}



##  Edit reciprocal link functions
sub deleteRecip
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/links/$FRM{id}" || !$FRM{id} );
    fremove("$DDIR/links/$FRM{id}");
    delete $FRM{id};
    displayRecip("Selected Reciprocal Link Has Been Deleted");
}



sub loadRecip
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/links/$FRM{id}" || !$FRM{id});
    displayRecip("Loaded HTML For Reciprocal Link '$FRM{id}'", freadalls("$DDIR/links/$FRM{id}"));
}



sub saveRecip
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} );
    $FRM{id}   =~ s/ /_/g;
    $FRM{html} =~ s/\r//g;
    fwrite("$DDIR/links/$FRM{id}", "$FRM{html}\n");
    delete $FRM{id};
    displayRecip("Reciprocal Link Has Been Saved");
}



##  Edit reciprocal link functions
sub deleteBannedHTML
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/banned/$FRM{id}" || !$FRM{id} );
    fremove("$DDIR/banned/$FRM{id}");
    delete $FRM{id};
    displayBanned("Selected HTML Ban Has Been Deleted");
}



sub loadBannedHTML
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !-e "$DDIR/banned/$FRM{id}" || !$FRM{id});
    displayBanned("Loaded Data For HTML Ban '$FRM{id}'", freadalls("$DDIR/banned/$FRM{id}"));
}



sub saveBannedHTML
{
    derr(1036) if( !hasAccess(7) );

    derr(1029) if( !$FRM{id} );
    $FRM{id}   =~ s/ /_/g;
    $FRM{html} =~ s/\r//g;
    fwrite("$DDIR/banned/$FRM{id}", "$FRM{html}\n");
    delete $FRM{id};
    displayBanned("HTML Ban Has Been Saved");
}



##  Edit Blacklist Functions
sub addBan
{
    derr(1036) if( !hasAccess(8) );

    $FRM{ban} =~ s/\r//g;
    derr(1028) if( !$FRM{ban} || $FRM{ban} =~ /^\n/m );

    $DEL = "\n";
    dbinsert("$DDIR/dbs/$FRM{type}.ban", $FRM{ban});
    $DEL = '|';

    displayBans("$FRM{ban} Added To the $FRM{type} Blacklist");
}



sub removeBan
{
    derr(1036) if( !hasAccess(8) );

    $FRM{ban} =~ s/\r//g;

    $DEL = "\n";
    for( split(/\n/, $FRM{ban}) )
    {
        dbdelete("$DDIR/dbs/$FRM{type}.ban", $_);
    }
    $DEL = '|';

    displayBans("$FRM{ban} removed from the $FRM{type} blacklist");
}



sub restoreTemplate
{
    derr(1036) if( !hasAccess(7) );

    my $pages = "$MAIN_PAGE,$CAT_PAGE_LIST";
    my $html  = freadalls("$DDIR/def.html");

    for( split(/,/, $pages) )
    {
         fwrite("$DDIR/html/$_", $$html);
    }

    displayMain("The default TGP page HTML has been restored");
}



sub clearQueue
{
    derr(1036) if( !hasAccess(5) );

    derr(1026) if( $FRM{date} !~ /\d{4}-\d{2}-\d{2}/ );

    $FRM{date} =~ s/-//g;

    sysopen(QUEUE, "$DDIR/dbs/queue", $O_RDWR | $O_CREAT) || err("$!", "$DDIR/dbs/queue");
    flock(QUEUE, $LOCK_EX);
    my @old = <QUEUE>;
    seek(QUEUE, 0, 0);

    foreach $line ( @old )
    {
        my $submit = (split(/\|/, $line))[8];
        
        next if( $submit < $FRM{date} );

        print QUEUE $line;
    }

    truncate(QUEUE, tell(QUEUE));
    flock(QUEUE, $LOCK_UN);
    close(QUEUE);

    displayMain("Old posts have been removed from the queue");
}



sub enablePost
{
    derr(1036) if( !hasAccess(6) );

    fremove("$DDIR/disabled");
    displayMain("post.cgi Has Been Enabled");
}



sub disablePost
{
    derr(1036) if( !hasAccess(6) );

    fcreate("$DDIR/disabled");
    displayMain("post.cgi Has Been Disabled");
}



sub updateHTML
{
    derr(1036) if( !hasAccess(7) );

    $FRM{html} =~ s/\r//gi;
    $FRM{html} =~ s/\n+$//g;
    $FRM{temp} =~ s/\r//gi;
    $FRM{temp} =~ s/\n+$//g;
  
    for( split(/,/, $FRM{pages}) )
    {
        fwrite("$DDIR/html/$_", qq|\n\n# DO NOT EDIT THIS FILE\n\n\n\$HTML = <<'HTML';\n$FRM{html}\nHTML\n\n\$TEMP = <<'TEMP';\n$FRM{temp}\nTEMP\n\n| .
                                qq|\$THUMB = <<'THUMB';\n$FRM{thumb}\nTHUMB\n\n1;\n|);
    }

    displayMain("HTML successfully updated");
}



sub updateTemplate
{
    derr(1036) if( !hasAccess(7) );

    $FRM{html} =~ s/\r//gi;
    $FRM{html} =~ s/\n+$//g;
    fwrite("$TDIR/$FRM{template}", $FRM{html});
    displayMain("The $FRM{template} template has been updated");
}



sub stripHTML
{
    my($html, $amp) = @_;

    $$html =~ s/&/&amp;/gi if( !$amp );
    $$html =~ s/>/&gt;/gi;
    $$html =~ s/</&lt;/gi;
    $$html =~ s/\"/&quot;/gi;
}



sub getCheckbox
{
    my $val = shift;
    return ' checked' if( $val );
    return;
}


sub getIconSelect
{
    my $icons = shift;
    my $html;

    for( @{dread("$DDIR/icons", '^[^.]')} )
    {
        my $id = $_;

        $html .= qq|<input type="checkbox" name="icon" value="$id"> | . ${freadalls("$DDIR/icons/$id")} . qq|&nbsp;&nbsp;&nbsp;|;

        $html =~ s/value="$id"/value="$id" checked/ if( index(",$icons,", ",$id,") != -1 );
    }

    return $html;
}



sub getPages
{
    my $html;

    for( split(/,/, $MAIN_PAGE) )
    {
      $html .= qq|<option value="$_">$_</option>|;
    }

    if( $USE_ARCHIVES )
    {
        for( split(/,/, $CAT_PAGE_LIST) )
        {
            $html .= qq|<option value="$_">$_</option>|;
        }
    }

    return $html;
}



sub getDatabases
{
    my $html;

    if( $USE_ARCHIVES )
    {
        for( split(/,/, $CATEGORIES) )
        {
            $html .= qq|<option value="| . getDBName($_) . qq|">$_ Archives</option>|;
        }
    }

    return $html;
}



sub getCatOptions
{
    my $cat = shift;
    my $html;

    for( split(',', $CATEGORIES) )
    {
        $html .= $cat eq $_ ? qq|<option value="$_" selected>$_</option>\n| : qq|<option value="$_">$_</option>\n|;
    }

    return $html;
}



sub getPermanent
{
    my $perm = shift;
    my $opts = qq|<option value="1">Permanent - ok to put in the archives</option>\n<option value="0">Temporary - not ok to put in the archives</option>|;

    if( $perm )
    {
        $opts =~ s/value="1"/value="1" selected/;
    }
    else
    {
        $opts =~ s/value="0"/value="0" selected/;
    }

    return $opts;
}



sub searchPosts
{ 
    open(DB, "$DDIR/dbs/$FRM{sdb}") || err("$!", "$DDIR/dbs/$FRM{sdb}");
    flock(DB, $LOCK_SH);
    while( <DB> )
    {
        if( $_ =~ /$FRM{key}/i )
        {
            my @pd = split(/\|/, $_);

            $TPL{POST_ID}       = $pd[0];
            $TPL{EMAIL}         = $pd[1];
            $TPL{GALLERY_URL}   = $pd[2];
            $TPL{DESCRIPTION}   = $pd[3];
            $TPL{NUM_PICS}      = $pd[6];
            $TPL{CATEGORY}      = $pd[7];
            $TPL{PARTNER_ID}    = $pd[12];
            $TPL{APPROVED_BY}   = $pd[13];
            $TPL{APPROVE_TIME}  = fdate($DATE_FORMAT, $pd[10] + (3600 * $TIME_ZONE)) . ' ' . ftime($TIME_FORMAT, $pd[10] + (3600 * $TIME_ZONE));
            $TPL{PERMANENT}     = $pd[14] ? $L_YES : $L_NO;
            $TPL{SUBMIT_IP}     = $pd[15];
            $TPL{CODED_RECIP}   = urlencode($pd[4]);
            $TPL{CODED_GURL}    = urlencode($pd[2]);
            $TPL{CHECK_RECIP}   = $pd[4]  ? 'Check Now' : '</a>None Provided';
            $TPL{RECIP_CHECKED} = $pd[16] ? 'Checked'   : 'Not Checked';
            $TPL{RECIP_FOUND}   = $pd[17] ? 'Found'     : 'Not Found';

            fparse('_admin_searchm.htmlt');
        }
    }
    flock(DB, $LOCK_UN);
    close(DB);
}



sub printPartners
{
    my $line;

    open(DB, "$DDIR/dbs/partners") || err($!, "$DDIR/dbs/partners");
    flock(DB, $LOCK_SH);
    while( $line = <DB> ) 
    {
        my @pd = split(/\|/, $line);

        $TPL{USERNAME} = $pd[0];
        $TPL{EMAIL}    = $pd[1];
        $TPL{NAME}     = $pd[2];
        $TPL{SITE_URL} = $pd[3];

        fparse('_admin_partnersm.htmlt');
    }
    flock(DB, $LOCK_UN);
    close(DB);
}



sub printModerators
{
    my $line;

    open(DB, "$DDIR/dbs/moderators") || err($!, "$DDIR/dbs/moderators");
    flock(DB, $LOCK_SH);
    while( $line = <DB> )
    {
        my @pd = split(/\|/, $line);

        $TPL{USERNAME} = $pd[0];
        $TPL{EMAIL}    = $pd[1];
        $TPL{NAME}     = $pd[2];

        fparse('_admin_modsm.htmlt');
    }
    flock(DB, $LOCK_UN);
    close(DB);
}



sub printPosts
{
    my $page = shift;
    my $i;
  
    for( @{ dread("$DDIR/mails", '^[^.]') } ) {
        $TPL{REJ} .= qq|<option value="$_">$_</option>\n|;
    }

    open(DB, "$DDIR/dbs/$FRM{db}") || err($!, "$DDIR/dbs/$FRM{db}");
    flock(DB, $LOCK_SH);
    for( $i = 1; $i <= $TPL{END}; $i++ )
    {
        $line = <DB>;
        next if( $i < $TPL{START} );

        @pd = split(/\|/, $line);

        $TPL{POST_ID}       = $pd[0];
        $TPL{EMAIL}         = $pd[1];
        $TPL{GALLERY_URL}   = $pd[2];
        $TPL{DESCRIPTION}   = $pd[3];
        $TPL{NUM_PICS}      = $pd[6];
        $TPL{CATEGORY}      = $pd[7];
        $TPL{CAT_OPTIONS}   = getCatOptions($pd[7]);
        $TPL{APPROVED_BY}   = $pd[13];
        $TPL{PARTNER_ID}    = $pd[12];
        $TPL{APPROVE_TIME}  = fdate($DATE_FORMAT, $pd[10] + (3600 * $TIME_ZONE)) . ' ' . ftime($TIME_FORMAT, $pd[10] + (3600 * $TIME_ZONE));
        $TPL{SUBMIT_TIME}   = fdate($DATE_FORMAT, $pd[9] + (3600 * $TIME_ZONE))  . ' ' . ftime($TIME_FORMAT, $pd[9] + (3600 * $TIME_ZONE));
        $TPL{PERMANENT}     = $pd[14] ? $L_YES : $L_NO;
        $TPL{SUBMIT_IP}     = $pd[15];
        $TPL{CODED_RECIP}   = urlencode($pd[4]);
        $TPL{CODED_GURL}    = urlencode($pd[2]);
        $TPL{THUMB_URL}     = (-e "$THUMB_DIR/$pd[0].jpg") ? "$THUMB_URL/$pd[0].jpg" : undef;
        $TPL{PREVIEW}       = $TPL{THUMB_URL} ? '' : '</a>';
        $TPL{CHECK_RECIP}   = $pd[4]  ? 'Check Now' : '</a>None Provided';
        $TPL{RECIP_CHECKED} = $pd[16] ? 'Checked'   : 'Not Checked';
        $TPL{RECIP_FOUND}   = $pd[17] ? 'Found'     : 'Not Found';
        $TPL{R_SELECT}      = "rej_$pd[0]";
        
        fparse('_admin_' . $page . 'm.htmlt');
    }
    flock(DB, $LOCK_UN);
    close(DB);
}



sub printCheats
{
    my $line;

    open(DB, "$DDIR/dbs/cheats") || err("$!", "$DDIR/dbs/cheats");
    flock(DB, $LOCK_SH);
    while( $line = <DB> )
    {
        my @pd = split(/\|/, $line);

        $TPL{CHEAT_ID}    = $pd[0];
        $TPL{SUBMIT_IP}   = $pd[1];
        $TPL{POST_ID}     = $pd[2];
        $TPL{DATABASE}    = $pd[3];
        $TPL{GALLERY_URL} = $pd[4];
        $TPL{EMAIL}       = $pd[5];
        $TPL{DESCRIPTION} = $pd[6];

        fparse('_admin_cheatm.htmlt');
    }
    flock(DB, $LOCK_UN);
    close(DB);
}



sub printBanned
{
    for( @{ dread("$DDIR/banned", '^[^.]') } )
    {
        print qq|<tr bgcolor="#ffffff">\n<td>\n<font face="Arial" size="2">\n<b>Ban ID:</b> $_\n</font>\n<br>\n<xmp>| . ${freadalls("$DDIR/banned/$_")} . qq|</xmp>\n</td>\n</tr>\n|;
    }
    printFooter();
}



sub printRecip
{
    for( @{ dread("$DDIR/links", '^[^.]') } )
    {
        print qq|<tr bgcolor="#ffffff">\n<td>\n<font face="Arial" size="2">\n<b>Link ID:</b> $_\n</font>\n<br>\n<xmp>| . ${freadalls("$DDIR/links/$_")} . qq|</xmp>\n</td>\n</tr>\n|;
    }
    printFooter();
}



sub printReject
{
    for( @{ dread("$DDIR/mails", '^[^.]') } )
    {
        print qq|<tr bgcolor="#ffffff">\n<td>\n<font face="Verdana" size="2">\n<b>E-mail ID:</b> $_\n</font>\n<br>\n<pre>| . ${freadalls("$DDIR/mails/$_")} . qq|</pre>\n</td>\n</tr>\n|;
    }
    printFooter();
}



sub printFooter
{
    print <<HTML;
    </table>

    </td>
    </tr>
    </table>

    <br><br>

    <font face="Verdana" size="1" style="font-size: 11px;">
    <b><a href="admin.cgi" class="reg">Back To Main Admin Page</a></b>
    </font>

    </div>

    </body>
    </html>
HTML
}



sub printIcons
{
    for( @{ dread("$DDIR/icons", '^[^.]') } )
    {
        print qq|<tr bgcolor="#ffffff">\n<td>\n<font face="Verdana" size="2">\n<b>Icon ID:</b> $_\n</font>\n<br>\n| . ${freadalls("$DDIR/icons/$_")} . qq|\n</td>\n</tr>\n|;
    }
}



sub quickJump
{
    $FRM{page}--;
    displayPosts();
}



sub getStart
{
    my($total, $show) = @_;

    return 0 if( !$total );

    my $start = $FRM{page} * $show + 1;

    while( $start > $total ) {
        $FRM{page}--;
        $start = $FRM{page} * $show + 1
    }

    $start = 0 if( $start < 0 );

    return $start;
}



sub getEnd
{
    my($total, $show, $start) = @_;

    return 0 if( !$total );

    my $end = $start + $show - 1;
    $end = $total if( $end > $total );
    return $end;
}



sub getJump
{
    my($total, $show) = @_;

    if( !$total || $show == 9999999 || $total <= $show )
    {
        $TPL{STATUS} = ' disabled';
        return qq|<option value="--">--</option>|;
    }

    my $html;
    my $num = $total % $show == 0 ? 0 : 1;
    for( 1..($total/$show + $num) )
    {
        $html .= qq|<option value="$_">\#| . ($show*($_-1)+1) . qq|</option>|;
    }

    return $html;
}



sub execute
{
    derr(1016) if( !$FRM{fnct} );
    &{$FRM{fnct}};
}

Youez - 2016 - github.com/yon3zu
LinuXploit