WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: ConnSched dial
WARNING: untranslated string: wlan client wpa mode ccmp tkip
WARNING: untranslated string: wlan client wpa mode tkip tkip
WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
WARNING: untranslated string: wlanap country
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: ConnSched dial
WARNING: untranslated string: wlan client wpa mode ccmp tkip
WARNING: untranslated string: wlan client wpa mode tkip tkip
WARNING: untranslated string: wlan clients
-WARNING: untranslated string: wlanap access point
+WARNING: untranslated string: wlanap
WARNING: untranslated string: wlanap channel
+WARNING: untranslated string: wlanap configuration
WARNING: untranslated string: wlanap country
WARNING: untranslated string: wlanap debugging
WARNING: untranslated string: wlanap del interface
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: MTU settings
WARNING: untranslated string: wlan client password
WARNING: untranslated string: wlan client tls cipher
WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: MTU settings
WARNING: untranslated string: wlan client password
WARNING: untranslated string: wlan client tls cipher
WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: ConnSched dial
WARNING: untranslated string: wlan client wpa mode ccmp tkip
WARNING: untranslated string: wlan client wpa mode tkip tkip
WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
WARNING: untranslated string: wlanap country
WARNING: translation string unused: web proxy configuration
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: Add a route
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: ConnSched dial
WARNING: untranslated string: wlan client wpa mode ccmp tkip
WARNING: untranslated string: wlan client wpa mode tkip tkip
WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
WARNING: untranslated string: wlanap country
WARNING: translation string unused: week-graph
WARNING: translation string unused: weekly firewallhits
WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
WARNING: translation string unused: wlanap wlan services
WARNING: translation string unused: xtaccess all error
WARNING: translation string unused: xtaccess bad transfert
WARNING: untranslated string: 24 hours
WARNING: untranslated string: Captive ACTIVATE
WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
WARNING: untranslated string: Captive activated
WARNING: untranslated string: Captive active on
WARNING: untranslated string: Captive agree tac
WARNING: untranslated string: Captive config
WARNING: untranslated string: Captive coupon
WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
WARNING: untranslated string: Captive generate coupon
WARNING: untranslated string: Captive issued coupons
WARNING: untranslated string: Captive logo uploaded
WARNING: untranslated string: Captive noexpiretime
WARNING: untranslated string: Captive nolimit
WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
WARNING: untranslated string: Captive terms
WARNING: untranslated string: Captive terms short
WARNING: untranslated string: Captive title
WARNING: untranslated string: Captive upload logo
WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
WARNING: untranslated string: Captive vouchervalid
WARNING: untranslated string: Captive wrong ext
WARNING: untranslated string: Scan for Songs
WARNING: untranslated string: wlan client password
WARNING: untranslated string: wlan client tls cipher
WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
< Captive err doublevoucher
< Captive expire
< Captive expiry time
+< Captive export coupons
< Captive GAIN ACCESS
< Captive generate coupon
< Captive genvoucher
< Captive nolimit
< Captive nr
< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
< Captive terms
< Captive terms short
< Captive time
< Captive title
< Captive upload logo
< Captive upload logo recommendations
+< Captive valid for
< Captive voactive
< Captive voucher
< Captive vouchervalid
< Captive vout
+< Captive WiFi coupon
< Captive wrong ext
< ccd add
< ccd choose net
< vpn statistic rw
< vpn weak
< wireless network
-< wlanap access point
+< wlanap
< wlanap channel
+< wlanap configuration
< wlanap country
< wlanap debugging
< wlanap del interface
< Captive err doublevoucher
< Captive expire
< Captive expiry time
+< Captive export coupons
< Captive GAIN ACCESS
< Captive generate coupon
< Captive genvoucher
< Captive nolimit
< Captive nr
< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
< Captive terms
< Captive terms short
< Captive time
< Captive title
< Captive upload logo
< Captive upload logo recommendations
+< Captive valid for
< Captive voactive
< Captive voucher
< Captive vouchervalid
< Captive vout
+< Captive WiFi coupon
< Captive wrong ext
< ccd add
< ccd choose net
< vpn statistic rw
< vpn weak
< wireless network
+< wlanap
+< wlanap configuration
< wlanap country
< wlan client
< wlan client advanced settings
< Captive err doublevoucher
< Captive expire
< Captive expiry time
+< Captive export coupons
< Captive GAIN ACCESS
< Captive generate coupon
< Captive genvoucher
< Captive nolimit
< Captive nr
< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
< Captive terms
< Captive terms short
< Captive time
< Captive title
< Captive upload logo
< Captive upload logo recommendations
+< Captive valid for
< Captive voactive
< Captive voucher
< Captive vouchervalid
< Captive vout
+< Captive WiFi coupon
< Captive wrong ext
< ccd add
< ccd choose net
< vpn statistic rw
< vpn weak
< wireless network
+< wlanap
+< wlanap configuration
< wlanap country
< wlan client
< wlan client advanced settings
< Captive err doublevoucher
< Captive expire
< Captive expiry time
+< Captive export coupons
< Captive GAIN ACCESS
< Captive generate coupon
< Captive genvoucher
< Captive nolimit
< Captive nr
< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
< Captive terms
< Captive terms short
< Captive time
< Captive title
< Captive upload logo
< Captive upload logo recommendations
+< Captive valid for
< Captive voactive
< Captive voucher
< Captive vouchervalid
< Captive vout
+< Captive WiFi coupon
< Captive wrong ext
< ccd add
< ccd choose net
< vpn weak
< week-graph
< wireless network
+< wlanap
+< wlanap configuration
< wlanap country
< wlan client
< wlan client advanced settings
###############################################################################
#use strict;
+use Encode;
use HTML::Entities();
use File::Basename;
+use PDF::API2;
+use constant mm => 25.4 / 72;
# enable only the following on debugging purpose
#use warnings;
&General::readhash("$settingsfile", \%settings) if(-f $settingsfile);
&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
+if ($cgiparams{'ACTION'} eq "export-coupons") {
+ my $pdf = &generate_pdf();
+
+ print "Content-Type: application/pdf\n";
+ print "Content-Disposition: attachment; filename=captive-portal-coupons.pdf\n";
+ print "\n"; # end headers
+
+ # Send PDF
+ print $pdf;
+
+ exit(0);
+}
+
+
&Header::showhttpheaders();
if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
print "</table>";
+ # Download PDF
+ print <<END;
+ <div align="right">
+ <form method="POST">
+ <input type="hidden" name="ACTION" value="export-coupons">
+ <input type="submit" value="$Lang::tr{'Captive export coupons'}">
+ </form>
+ </div>
+END
+
&Header::closebox();
}
return 1;
}
+sub generate_pdf() {
+ my $pdf = PDF::API2->new();
+
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time);
+ my $timestamp = sprintf("D:%04d%02d%02d%02d%02d%02d+00;00", $year+1900, $mon+1, $mday, $hour, $min, $sec);
+
+ $pdf->info(
+ "Creator" => $Lang::tr{'Captive portal'},
+ "Title" => $Lang::tr{'Captive portal coupons'},
+ "CreationDate" => $timestamp,
+ "ModDate" => $timestamp,
+ );
+
+ # Set page size
+ $pdf->mediabox("A4");
+ $pdf->trimbox(28/mm, 27/mm, 182/mm, 270/mm);
+
+ # Set font
+ my $font = $pdf->ttfont("/usr/share/fonts/Ubuntu-R.ttf");
+
+ my $page_h_margin = 27/mm;
+ my $page_v_margin = 28/mm;
+
+ my $height = 68/mm;
+ my $width = 91/mm;
+ my $margin = 2/mm;
+
+ # Tux Image
+ my $tux_image = $pdf->image_png("/srv/web/ipfire/html/captive/assets/ipfire.png");
+ my $logo_height = 12/mm;
+ my $logo_width = 12/mm;
+
+ my @coupons = ();
+ my %coupon_expiry_times = ();
+
+ # Read coupons
+ &General::readhasharray($coupons, \%couponhash) if (-e $coupons);
+ foreach my $key (keys %couponhash) {
+ $coupon_expiry_times{$couponhash{$key}[1]} = $couponhash{$key}[2];
+ push @coupons, $couponhash{$key}[1];
+ }
+
+ while (@coupons) {
+ # Make a new page
+ my $page = $pdf->page();
+
+ # Graphics
+ $gfx = $page->gfx();
+
+ # Headline font
+ my $f_headline = $page->text();
+ $f_headline->font($font, 20);
+
+ # Subheadline font
+ my $f_subheadline = $page->text();
+ $f_subheadline->font($font, 14);
+
+ # Coupon font
+ my $f_coupon = $page->text();
+ $f_coupon->font($font, 36);
+
+ # Lifetime
+ my $f_lifetime = $page->text();
+ $f_lifetime->font($font, 14);
+
+ # Watermark font
+ my $f_watermark = $page->text();
+ $f_watermark->fillcolor("#666666");
+ $f_watermark->font($font, 10);
+
+ my $i = 0;
+ while (@coupons && $i < 8) {
+ my $coupon = shift @coupons;
+
+ # Box corners
+ my $x = ($page_v_margin / 2) + (($i % 2) ? $width : 0);
+ my $y = ($page_h_margin / 2) + (int($i / 2) * $height);
+
+ # Weidth and height of the box
+ my $w = $width - $margin;
+ my $h = $height - $margin;
+
+ # Center
+ my $cx = $x + ($w / 2);
+ my $cy = $y + ($h / 2);
+
+ # Draw border box
+ $gfx->strokecolor("#333333");
+ $gfx->linedash(1/mm, 1/mm);
+ $gfx->rect($x, $y, $w, $h);
+ $gfx->stroke();
+ $gfx->endpath();
+
+ # Headline
+ $f_headline->translate($cx, ($y + $h - $cy) / 1.7 + $cy);
+ $f_subheadline->translate($cx, ($y + $h - $cy) / 2.4 + $cy);
+
+ if ($settings{'TITLE'}) {
+ $f_headline->text_center($settings{'TITLE'});
+ $f_subheadline->text_center(decode("utf8", $Lang::tr{'Captive WiFi coupon'}));
+ } else {
+ $f_headline->text_center(decode("utf8", $Lang::tr{'Captive WiFi coupon'}));
+ }
+
+ # Coupon
+ $f_coupon->translate($cx, $cy);
+ $f_coupon->text_center(decode("utf8", $coupon));
+
+ # Show lifetime
+ my $expiry_time = $coupon_expiry_times{$coupon};
+ $f_lifetime->translate($cx, $cy - ($y + $h - $cy) / 4);
+ if ($expiry_time > 0) {
+ my $lifetime = &General::format_time($expiry_time);
+ $f_lifetime->text_center(decode("utf8", $Lang::tr{'Captive valid for'} . " " . $lifetime));
+ } else {
+ $f_lifetime->text_center(decode("utf8", $Lang::tr{'Captive nolimit'}));
+ }
+
+ # Add watermark
+ $gfx->image($tux_image, $x + $w - $logo_width - $margin, $y + $margin, $logo_width, $logo_height);
+ $f_watermark->translate($x + $w - ($margin * 2) - $logo_width, $y + ($logo_height / 2));
+ $f_watermark->text_right("Powered by IPFire");
+
+ $i++;
+ }
+ }
+
+ # Write out the PDF document
+ return $pdf->stringify();
+}
+
&Header::closebigbox();
&Header::closepage();
'Captive 1week' => '1 Woche',
'Captive ACTIVATE' => 'AKTIVIEREN',
'Captive GAIN ACCESS' => 'ZUGANG',
+'Captive WiFi coupon' => 'WLAN-Coupon',
'Captive activate' => 'Aktivieren',
'Captive activated' => 'Aktiviert',
'Captive active on' => 'Aktiviert auf',
'Captive err doublevoucher' => 'Ein Gutschein mit diesem Code ist bereits im Umlauf',
'Captive expire' => 'Ablauf',
'Captive expiry time' => 'Ablaufzeit',
+'Captive export coupons' => 'Coupons exportieren',
'Captive generate coupon' => 'Coupon generieren',
'Captive genvoucher' => 'Gutschein generieren',
'Captive invalid logosize' => 'Die hochgeladene Datei entspricht nicht der vorgegeben Auflösung von mindestens 1280x400 und maximal 1920x800 Pixeln',
'Captive nolimit' => 'Unbegrenzt',
'Captive nr' => 'Nummer',
'Captive please accept the terms and conditions' => 'Bitte akzeptieren Sie die Bedingungen',
+'Captive portal' => 'IPFire Captive-Portal',
+'Captive portal coupons' => 'Captive-Portal-Coupons',
'Captive terms' => 'Bedingungen',
'Captive terms short' => 'Bedingungen',
'Captive time' => 'Erlaubter Nutzungszeitraum nach Aktivierung (Stunden)',
'Captive title' => 'Titel der Anmeldeseite',
'Captive upload logo' => 'Logo hochladen',
'Captive upload logo recommendations' => '(PNG oder JPEG, 1280x720 Pixel empfohlen)',
+'Captive valid for' => 'Gültig für',
'Captive voactive' => 'Aktive Gutscheine',
'Captive voucher' => 'Gutschein',
'Captive vouchervalid' => 'Erlaubter Zeitraum für Gutschein',
'Captive 1week' => '1 week',
'Captive ACTIVATE' => 'ACTIVATE',
'Captive GAIN ACCESS' => 'GAIN ACCESS',
+'Captive WiFi coupon' => 'WiFi Coupon',
'Captive activate' => 'Activate',
'Captive activated' => 'Activated',
'Captive active on' => 'Activated on',
'Captive err doublevoucher' => 'A voucher with this code already exists',
'Captive expire' => 'Expire',
'Captive expiry time' => 'Expiry Time',
+'Captive export coupons' => 'Export Coupons',
'Captive generate coupon' => 'Generate Coupon',
'Captive heading terms' => 'Terms & Conditions',
'Captive heading voucher' => 'Voucher or Access Code',
'Captive nr' => 'Number',
'Captive please accept the terms and conditions' => 'Please accept the terms & conditions',
'Captive please enter a coupon code' => 'Please enter a coupon code',
+'Captive portal' => 'IPFire Captive Portal',
+'Captive portal coupons' => 'Captive Portal Coupons',
'Captive terms' => 'Terms & Conditions',
'Captive terms short' => 'T&Cs',
'Captive time' => 'Access time post activation (hours)',
'Captive title' => 'Title of Login Page',
'Captive upload logo' => 'Upload Logo',
'Captive upload logo recommendations' => '(PNG or JPEG, recommended 1280x720 pixels)',
+'Captive valid for' => 'Valid for',
'Captive voactive' => 'Active Vouchers',
'Captive voucher' => 'Voucher',
'Captive vouchervalid' => 'Allowed time for this voucher',