From a54350cdb9d56691644486a49b7e5b7594d8d504 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 16 Oct 2017 16:36:24 +0200 Subject: [PATCH] captive: Allow PDF export of coupons Signed-off-by: Michael Tremer --- doc/language_issues.es | 8 ++ doc/language_issues.fr | 8 +- doc/language_issues.it | 8 ++ doc/language_issues.nl | 8 ++ doc/language_issues.pl | 8 ++ doc/language_issues.ru | 8 ++ doc/language_issues.tr | 8 ++ doc/language_missings | 29 ++++++- html/cgi-bin/captive.cgi | 158 +++++++++++++++++++++++++++++++++++++++ langs/de/cgi-bin/de.pl | 5 ++ langs/en/cgi-bin/en.pl | 5 ++ 11 files changed, 251 insertions(+), 2 deletions(-) diff --git a/doc/language_issues.es b/doc/language_issues.es index a7010105b6..38cf21080c 100644 --- a/doc/language_issues.es +++ b/doc/language_issues.es @@ -613,6 +613,7 @@ WARNING: translation string unused: web proxy 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 @@ -621,6 +622,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -632,6 +634,7 @@ WARNING: untranslated string: Captive clients 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 @@ -640,11 +643,14 @@ WARNING: untranslated string: Captive menu 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 @@ -1243,4 +1249,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp 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 diff --git a/doc/language_issues.fr b/doc/language_issues.fr index 1389cbbe75..351d8a2ef9 100644 --- a/doc/language_issues.fr +++ b/doc/language_issues.fr @@ -631,6 +631,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -642,6 +643,7 @@ WARNING: untranslated string: Captive clients 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 @@ -650,11 +652,14 @@ WARNING: untranslated string: Captive menu 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 @@ -1260,8 +1265,9 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp 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 diff --git a/doc/language_issues.it b/doc/language_issues.it index 5b921a84a9..36af273231 100644 --- a/doc/language_issues.it +++ b/doc/language_issues.it @@ -690,6 +690,7 @@ WARNING: translation string unused: web proxy 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 @@ -698,6 +699,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -709,6 +711,7 @@ WARNING: untranslated string: Captive clients 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 @@ -717,11 +720,14 @@ WARNING: untranslated string: Captive menu 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 @@ -887,3 +893,5 @@ WARNING: untranslated string: wlan client method 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 diff --git a/doc/language_issues.nl b/doc/language_issues.nl index 16f6c0d893..91fca78476 100644 --- a/doc/language_issues.nl +++ b/doc/language_issues.nl @@ -686,6 +686,7 @@ WARNING: translation string unused: web proxy 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 @@ -694,6 +695,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -705,6 +707,7 @@ WARNING: untranslated string: Captive clients 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 @@ -713,11 +716,14 @@ WARNING: untranslated string: Captive menu 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 @@ -935,3 +941,5 @@ WARNING: untranslated string: wlan client method 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 diff --git a/doc/language_issues.pl b/doc/language_issues.pl index a7010105b6..38cf21080c 100644 --- a/doc/language_issues.pl +++ b/doc/language_issues.pl @@ -613,6 +613,7 @@ WARNING: translation string unused: web proxy 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 @@ -621,6 +622,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -632,6 +634,7 @@ WARNING: untranslated string: Captive clients 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 @@ -640,11 +643,14 @@ WARNING: untranslated string: Captive menu 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 @@ -1243,4 +1249,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp 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 diff --git a/doc/language_issues.ru b/doc/language_issues.ru index a2a771ecee..25227c4c4a 100644 --- a/doc/language_issues.ru +++ b/doc/language_issues.ru @@ -615,6 +615,7 @@ WARNING: translation string unused: warn when traffic reaches 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 @@ -623,6 +624,7 @@ WARNING: untranslated string: 24 hours 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 @@ -634,6 +636,7 @@ WARNING: untranslated string: Captive clients 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 @@ -642,11 +645,14 @@ WARNING: untranslated string: Captive menu 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 @@ -1238,4 +1244,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp 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 diff --git a/doc/language_issues.tr b/doc/language_issues.tr index 96849cd691..733c664113 100644 --- a/doc/language_issues.tr +++ b/doc/language_issues.tr @@ -698,6 +698,7 @@ WARNING: translation string unused: web proxy 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 @@ -706,6 +707,7 @@ WARNING: translation string unused: yearly firewallhits 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 @@ -717,6 +719,7 @@ WARNING: untranslated string: Captive clients 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 @@ -725,11 +728,14 @@ WARNING: untranslated string: Captive menu 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 @@ -818,3 +824,5 @@ WARNING: untranslated string: wlan client method 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 diff --git a/doc/language_missings b/doc/language_missings index 46f6d694d1..64c184dbf5 100644 --- a/doc/language_missings +++ b/doc/language_missings @@ -56,6 +56,7 @@ < Captive err doublevoucher < Captive expire < Captive expiry time +< Captive export coupons < Captive GAIN ACCESS < Captive generate coupon < Captive genvoucher @@ -73,16 +74,20 @@ < 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 @@ -632,8 +637,9 @@ < vpn statistic rw < vpn weak < wireless network -< wlanap access point +< wlanap < wlanap channel +< wlanap configuration < wlanap country < wlanap debugging < wlanap del interface @@ -747,6 +753,7 @@ < Captive err doublevoucher < Captive expire < Captive expiry time +< Captive export coupons < Captive GAIN ACCESS < Captive generate coupon < Captive genvoucher @@ -764,16 +771,20 @@ < 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 @@ -1325,6 +1336,8 @@ < vpn statistic rw < vpn weak < wireless network +< wlanap +< wlanap configuration < wlanap country < wlan client < wlan client advanced settings @@ -1419,6 +1432,7 @@ < Captive err doublevoucher < Captive expire < Captive expiry time +< Captive export coupons < Captive GAIN ACCESS < Captive generate coupon < Captive genvoucher @@ -1436,16 +1450,20 @@ < 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 @@ -1983,6 +2001,8 @@ < vpn statistic rw < vpn weak < wireless network +< wlanap +< wlanap configuration < wlanap country < wlan client < wlan client advanced settings @@ -2078,6 +2098,7 @@ < Captive err doublevoucher < Captive expire < Captive expiry time +< Captive export coupons < Captive GAIN ACCESS < Captive generate coupon < Captive genvoucher @@ -2095,16 +2116,20 @@ < 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 @@ -2647,6 +2672,8 @@ < vpn weak < week-graph < wireless network +< wlanap +< wlanap configuration < wlanap country < wlan client < wlan client advanced settings diff --git a/html/cgi-bin/captive.cgi b/html/cgi-bin/captive.cgi index 54ea54ffaf..c595c0e313 100755 --- a/html/cgi-bin/captive.cgi +++ b/html/cgi-bin/captive.cgi @@ -20,8 +20,11 @@ ############################################################################### #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; @@ -57,6 +60,20 @@ unless (-e $settingsfile) { system("touch $settingsfile"); } &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'}) { @@ -572,6 +589,16 @@ END print ""; + # Download PDF + print < +
+ + +
+ +END + &Header::closebox(); } @@ -660,5 +687,136 @@ sub validremark 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(); diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index af96a6445b..1398329d35 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -12,6 +12,7 @@ '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', @@ -28,6 +29,7 @@ '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', @@ -44,12 +46,15 @@ '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', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index 7e4f95ccfd..29c87dbd40 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -13,6 +13,7 @@ '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', @@ -28,6 +29,7 @@ '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', @@ -45,12 +47,15 @@ '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', -- 2.39.2