From 5cd9e28bc407f9c3f01a2512a14adda83f89f92e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 28 Apr 2017 15:09:56 +0100 Subject: [PATCH] captive: Allow creating multiple coupons in bulk Signed-off-by: Michael Tremer --- html/cgi-bin/captive.cgi | 82 ++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 32 deletions(-) diff --git a/html/cgi-bin/captive.cgi b/html/cgi-bin/captive.cgi index 91fe522eee..46c12fd244 100755 --- a/html/cgi-bin/captive.cgi +++ b/html/cgi-bin/captive.cgi @@ -114,10 +114,7 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) { } } -if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}"){ - # Generates a new coupon - $cgiparams{'CODE'} = &gencode(); - +if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}") { #calculate expiredate my $expire; if ($settings{'UNLIMITED'} eq 'on'){ @@ -131,42 +128,47 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}"){ if($cgiparams{'EXP_HOUR'}+$cgiparams{'EXP_DAY'}+$cgiparams{'EXP_WEEK'}+$cgiparams{'EXP_MONTH'} == 0 && $cgiparams{'UNLIMITED'} == ''){ $errormessage=$Lang::tr{'Captive noexpiretime'}; } - #check if we already have a coupon with same code - &General::readhasharray($coupons, \%couponhash) if (-e $coupons); - foreach my $key (keys %couponhash) { - if($couponhash{$key}[1] eq $cgiparams{'CODE'}){ - $errormessage=$Lang::tr{'Captive err doublevoucher'}; - last; - } - } #check valid remark if ($cgiparams{'REMARK'} ne '' && !&validremark($cgiparams{'REMARK'})){ $errormessage=$Lang::tr{'fwhost err remark'}; } - #if no error detected, write to disk - if (!$errormessage){ - my $date=time(); #seconds in utc - - #first get new key from hash - my $key=&General::findhasharraykey (\%couponhash); - #initialize all fields with '' - foreach my $i (0 .. 3) { $couponhash{$key}[$i] = "";} - #define fields - $couponhash{$key}[0] = $date; - $couponhash{$key}[1] = $cgiparams{'CODE'}; - $couponhash{$key}[2] = $settings{'EXPIRE'}; - $couponhash{$key}[3] = $cgiparams{'REMARK'}; - #write values to disk - &General::writehasharray($coupons, \%couponhash); + if (!$errormessage) { + &General::readhasharray($coupons, \%couponhash) if (-e $coupons); + my $now = time(); + + my $count = $cgiparams{'COUNT'} || 1; + while($count-- > 0) { + # Generate a new code + my $code = &gencode(); + + # Check if the coupon code already exists + foreach my $key (keys %couponhash) { + if($couponhash{$key}[1] eq $code) { + # Code already exists, so try again + $code = ""; + $count++; + last; + } + } + + next if ($code eq ""); + + # Get a new key from hash + my $key = &General::findhasharraykey(\%couponhash); + + # Initialize all fields + foreach my $i (0 .. 3) { $couponhash{$key}[$i] = ""; } - #now prepare log entry, get expiring date for voucher and decode remark for logfile - my $expdate=localtime(time()+$couponhash{$key}[3]); - my $rem=HTML::Entities::decode_entities($couponhash{$key}[4]); + $couponhash{$key}[0] = $now; + $couponhash{$key}[1] = $code; + $couponhash{$key}[2] = $expires; + $couponhash{$key}[3] = $cgiparams{'REMARK'}; + } - #write logfile entry - &General::log("Captive", "Generated new coupon $couponhash{$key}[1] $couponhash{$key}[2] hours valid expires on $expdate remark $rem"); + # Save everything to disk + &General::writehasharray($coupons, \%couponhash); } } @@ -481,6 +483,22 @@ END
+ +
-- 2.39.5