]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
captive: Allow creating multiple coupons in bulk
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 28 Apr 2017 14:09:56 +0000 (15:09 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 22 Sep 2017 17:56:04 +0000 (18:56 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
html/cgi-bin/captive.cgi

index 91fe522eeed8849b5d373393a4039432e6780f58..46c12fd2444e623709e8fb8fdae54586bed0cebc 100755 (executable)
@@ -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
                        </table>
 
                        <div align="right">
+                               <select name="COUNT">
+                                       <option value="1">1</option>
+                                       <option value="2">2</option>
+                                       <option value="3">3</option>
+                                       <option value="4">4</option>
+                                       <option value="5">5</option>
+                                       <option value="6">6</option>
+                                       <option value="7">7</option>
+                                       <option value="8">8</option>
+                                       <option value="9">9</option>
+                                       <option value="10">10</option>
+                                       <option value="20">20</option>
+                                       <option value="50">50</option>
+                                       <option value="100">100</option>
+                               </select>
+
                                <input type="submit" name="ACTION" value="$Lang::tr{'Captive generate coupon'}">
                        </div>
                </form>