X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;ds=sidebyside;f=html%2Fcgi-bin%2Fcaptive.cgi;h=4d2564afe79760616211b67a5b9fa8f89b5dfa53;hb=a0b271e4745dafb7daade5dcf4d18406daaddee9;hp=91fe522eeed8849b5d373393a4039432e6780f58;hpb=4f75fbfe12ba48d8f4275d76259db8dd02bfe0fa;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/captive.cgi b/html/cgi-bin/captive.cgi index 91fe522eee..4d2564afe7 100755 --- a/html/cgi-bin/captive.cgi +++ b/html/cgi-bin/captive.cgi @@ -114,30 +114,10 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) { } } -if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}"){ - # Generates a new coupon - $cgiparams{'CODE'} = &gencode(); - - #calculate expiredate - my $expire; - if ($settings{'UNLIMITED'} eq 'on'){ - $expire = $Lang::tr{'Captive nolimit'}; - }else{ - $settings{'EXPIRE'} = $cgiparams{'EXP_HOUR'}+$cgiparams{'EXP_DAY'}+$cgiparams{'EXP_WEEK'}+$cgiparams{'EXP_MONTH'}; - $expire = sub{sprintf '%02d.%02d.%04d %02d:%02d', $_[3], $_[4]+1, $_[5]+1900, $_[2], $_[1] }->(localtime(time()+$settings{'EXPIRE'})); - } - - #Check Expiretime - 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; - } +if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}") { + # Check expiry time + if ($cgiparams{'EXP_HOUR'} + $cgiparams{'EXP_DAY'} + $cgiparams{'EXP_WEEK'} + $cgiparams{'EXP_MONTH'} == 0 && $cgiparams{'UNLIMITED'} == '') { + $errormessage = $Lang::tr{'Captive noexpiretime'}; } #check valid remark @@ -145,28 +125,57 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupon'}"){ $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) { + # Remember selected values + foreach my $val (("UNLIMITED", "EXP_HOUR", "EXP_DAY", "EXP_WEEK", "EXP_MONTH")) { + $settings{$val} = $cgiparams{$val}; + } + &General::writehash($settingsfile, \%settings); + + &General::readhasharray($coupons, \%couponhash) if (-e $coupons); + my $now = time(); + + # Calculate expiry time in seconds + my $expires = 0; + + if ($settings{'UNLIMITED'} ne 'on') { + $expires += $settings{'EXP_HOUR'}; + $expires += $settings{'EXP_DAY'}; + $expires += $settings{'EXP_WEEK'}; + $expires += $settings{'EXP_MONTH'}; + } + + 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; + } + } - #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]); + next if ($code eq ""); - #write logfile entry - &General::log("Captive", "Generated new coupon $couponhash{$key}[1] $couponhash{$key}[2] hours valid expires on $expdate remark $rem"); + # Get a new key from hash + my $key = &General::findhasharraykey(\%couponhash); + + # Initialize all fields + foreach my $i (0 .. 3) { $couponhash{$key}[$i] = ""; } + + $couponhash{$key}[0] = $now; + $couponhash{$key}[1] = $code; + $couponhash{$key}[2] = $expires; + $couponhash{$key}[3] = $cgiparams{'REMARK'}; + } + + # Save everything to disk + &General::writehasharray($coupons, \%couponhash); } } @@ -481,6 +490,22 @@ END
+ +
@@ -539,44 +564,59 @@ END } sub show_coupons() { + &General::readhasharray($coupons, \%couponhash) if (-e $coupons); + #if there are already generated but unsused coupons, print a table - my $count=0; - my $col; - &Header::openbox('100%', 'left', $Lang::tr{'Captive vout'}); - print< - - + &Header::openbox('100%', 'left', $Lang::tr{'Captive issued coupons'}); + + print < + + + + + + END -; - &General::readhasharray($coupons, \%couponhash) if (-e $coupons); - foreach my $key (keys %couponhash) - { - my $starttime = sub{sprintf '%02d.%02d.%04d %02d:%02d', $_[3], $_[4]+1, $_[5]+1900, $_[2], $_[1] }->(localtime($couponhash{$key}[0])); - my $endtime; - if ($couponhash{$key}[2] eq '0'){ - $endtime=$Lang::tr{'Captive nolimit'}; - }else{ - $endtime=sub{sprintf '%02d.%02d.%04d %02d:%02d', $_[3], $_[4]+1, $_[5]+1900, $_[2], $_[1] }->(localtime(time()+$couponhash{$key}[2])); + + foreach my $key (keys %couponhash) { + my $expirytime = $Lang::tr{'Captive nolimit'}; + if ($couponhash{$key}[2] > 0) { + $expirytime = &General::format_time($couponhash{$key}[2]); } - if ($count % 2){ - print" "; + if ($count++ % 2) { $col="bgcolor='$color{'color20'}'"; - }else{ + } else { $col="bgcolor='$color{'color22'}'"; - print" "; } - print ""; - print ""; - print ""; - print ""; - print ""; - $count++; + print < + + + + + +END } print "
$Lang::tr{'Captive coupon'}$Lang::tr{'date'}$Lang::tr{'Captive expire'}$Lang::tr{'remark'}$Lang::tr{'delete'}
+ $Lang::tr{'Captive coupon'} + $Lang::tr{'Captive expiry time'}$Lang::tr{'remark'}$Lang::tr{'delete'}
$couponhash{$key}[1]
$starttime
$endtime
$couponhash{$key}[3]
+ $couponhash{$key}[1] + + $expirytime + + $couponhash{$key}[3] + +
+ + + +
+
"; + &Header::closebox(); }