]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/captive.cgi
captive: Redesign generated coupons table
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / captive.cgi
index 91fe522eeed8849b5d373393a4039432e6780f58..4d2564afe79760616211b67a5b9fa8f89b5dfa53 100755 (executable)
@@ -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
                        </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>
@@ -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<<END
-               <center><table class='tbl' border='0'>
-               <tr>
-                       <th align='center' width='15%'>$Lang::tr{'Captive coupon'}</th><th align='center' width='15%'>$Lang::tr{'date'}</th><th th align='center' width='15%'>$Lang::tr{'Captive expire'}</th><th align='center' width='60%'>$Lang::tr{'remark'}</th><th align='center' width='5%'>$Lang::tr{'delete'}</th></tr>
+       &Header::openbox('100%', 'left', $Lang::tr{'Captive issued coupons'});
+
+       print <<END;
+               <table class='tbl' border='0'>
+                       <tr>
+                               <th align='center' width='15%'>
+                                       $Lang::tr{'Captive coupon'}
+                               </th>
+                               <th align='center' width='15%'>$Lang::tr{'Captive expiry time'}</th>
+                               <th align='center' width='65%'>$Lang::tr{'remark'}</th>
+                               <th align='center' width='5%'>$Lang::tr{'delete'}</th>
+                       </tr>
 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" <tr>";
+               if ($count++ % 2) {
                        $col="bgcolor='$color{'color20'}'";
-               }else{
+               } else {
                        $col="bgcolor='$color{'color22'}'";
-                       print" <tr>";
                }
 
-               print "<td $col><center><b>$couponhash{$key}[1]</b></td>";
-               print "<td $col><center>$starttime</td>";
-               print "<td $col><center>$endtime</td>";
-               print "<td $col align='center'>$couponhash{$key}[3]</td>";
-               print "<td $col><form method='post'><center><input type='image' src='/images/delete.gif' align='middle' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' /><form method='post'><input type='hidden' name='ACTION' value='delete-coupon' /><input type='hidden' name='key' value='$couponhash{$key}[0]' /></form></tr>";
-               $count++;
+               print <<END;
+                       <tr>
+                               <td $col align="center">
+                                       <b>$couponhash{$key}[1]</b>
+                               </td>
+                               <td $col align="center">
+                                       $expirytime
+                               </td>
+                               <td $col align="center">
+                                       $couponhash{$key}[3]
+                               </td>
+                               <td $col align="center">
+                                       <form method='post'>
+                                               <input type='image' src='/images/delete.gif' align='middle' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' />
+                                               <input type='hidden' name='ACTION' value='delete-coupon' />
+                                               <input type='hidden' name='key' value='$couponhash{$key}[0]' />
+                                       </form>
+                               </td>
+                       </tr>
+END
        }
 
        print "</table>";
+
        &Header::closebox();
 }