From ed7009df4275acc00b584fb6cc0271d0e8b56c8a Mon Sep 17 00:00:00 2001 From: Chris Nighswonger Date: Mon, 11 Jan 2010 18:19:09 -0500 Subject: [PATCH] [30/30] Removing depricated files --- C4/Labels/PDF.pm | 291 ----------------- C4/Patroncards/Patroncards.pm | 292 ------------------ .../prog/en/modules/labels/label-manager.tmpl | 156 ---------- .../modules/labels/pcard-members-search.tmpl | 140 --------- labels/pcard-member-search.pl | 164 ---------- 5 files changed, 1043 deletions(-) delete mode 100644 C4/Labels/PDF.pm delete mode 100644 C4/Patroncards/Patroncards.pm delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl delete mode 100755 labels/pcard-member-search.pl diff --git a/C4/Labels/PDF.pm b/C4/Labels/PDF.pm deleted file mode 100644 index ccee175c29..0000000000 --- a/C4/Labels/PDF.pm +++ /dev/null @@ -1,291 +0,0 @@ -package C4::Labels::PDF; - -# Copyright 2009 Foundations Bible College. -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - -use strict; -use warnings; -use PDF::Reuse; -use PDF::Reuse::Barcode; - -BEGIN { - use version; our $VERSION = qv('1.0.0_1'); -} - -sub _InitVars { - my $self = shift; - my $param = shift; - prInitVars($param); -} - -sub new { - my $invocant = shift; - my $type = ref($invocant) || $invocant; - my %opts = @_; - my $self = {}; - _InitVars() if ($opts{InitVars} == 0); - _InitVars($opts{InitVars}) if ($opts{InitVars} > 0); - delete($opts{InitVars}); - prDocDir($opts{'DocDir'}) if $opts{'DocDir'}; - delete($opts{'DocDir'}); - prFile(%opts); - bless ($self, $type); - return $self; -} - -sub End { - my $self = shift; - prEnd(); -} - -sub Add { - my $self = shift; - my $string = shift; - prAdd($string); -} - -sub Bookmark { - my $self = shift; - my $reference = shift; - prBookmark($reference); -} - -sub Compress { - my $self = shift; - my $directive = shift; - prCompress($directive); -} - -sub Doc { - my $self = shift; - my %params = @_; - prDoc(%params); -} - -sub DocForm { - my $self = shift; - my %params = @_; - return prDocForm(%params); -} - -sub Extract { - my $self = shift; - my ($pdfFile, $pageNo, $oldInternalName) = @_; - return prExtract($pdfFile, $pageNo, $oldInternalName); -} - -sub Field { - my $self = shift; - my ($fieldName, $value) = @_; - prField($fieldName, $value); -} - -sub Font { - my $self = shift; - my $fontName = shift; - return prFont($fontName); -} - -sub FontSize { - my $self = shift; - my $size = shift; - return prFontSize($size); -} - -sub Form { - my $self = shift; - my %params = @_; - return prForm(%params); -} - -sub GetLogBuffer { - my $self = shift; - return prGetLogBuffer(); -} - -sub GraphState { - my $self = shift; - my $string = shift; - prGraphState($string); -} - -sub Image { - my $self = shift; - my %params = @_; - return prImage(%params); -} - -sub Init { - my $self = shift; - my ($string, $duplicateCode) = @_; - prInit($string, $duplicateCode); -} - -sub Jpeg { - my $self = shift; - my ($imageData, $width, $height, $imageFormat) = @_; - return prJpeg($imageData, $width, $height, $imageFormat); -} - -sub Js { - my $self = shift; - my $string_or_fileName = shift; - prJs($string_or_fileName); -} - -sub Link { - my $self = shift; - my %params = @_; - prLink(%params); -} - -sub Log { - my $self = shift; - my $string = shift; - prLog($string); -} - -sub LogDir { - my $self = shift; - my $directory = shift; - prLogDir($directory); -} - -sub Mbox { - my $self = shift; - my ($lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY) = @_; - prMbox($lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY); -} - -sub Page { - my $self = shift; - my $noLog = shift; - prPage($noLog); -} - -sub SinglePage { - my $self = shift; - my ($file, $pageNumber) = @_; - return prSinglePage($file, $pageNumber); -} - -sub StrWidth { - my $self = shift; - my ($string, $font, $fontSize) = @_; - return prStrWidth($string, $font, $fontSize); -} - -sub Text { - my $self = shift; - my ($x, $y, $string, $align, $rotation) = @_; - return prText($x, $y, $string, $align, $rotation); -} - -sub TTFont { - my $self = shift; - my $path = shift; - return prTTFont($path); -} - -sub Code128 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::Code128(%opts); -} - -sub Code39 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::Code39(%opts); -} - -sub COOP2of5 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::COOP2of5(%opts); -} - -sub EAN13 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::EAN13(%opts); -} - -sub EAN8 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::EAN8(%opts); -} - -sub IATA2of5 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::IATA2of5(%opts); -} - -sub Industrial2of5 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::Industrial2of5(%opts); -} - -sub ITF { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::ITF(%opts); -} - -sub Matrix2of5 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::Matrix2of5(%opts); -} - -sub NW7 { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::NW7(%opts); -} - -sub UPCA { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::UPCA(%opts); -} - -sub UPCE { - my $self = shift; - my %opts = @_; - PDF::Reuse::Barcode::UPCE(%opts); -} - -1; -__END__ - - -=head1 NAME - -C4::Labels::PDF - A class wrapper for PDF::Reuse and PDF::Reuse::Barcode to allow usage as a psuedo-object. For usage see - PDF::Reuse documentation and C4::Labels::PDF code. - -=cut - -=head1 AUTHOR - -Chris Nighswonger - -=cut diff --git a/C4/Patroncards/Patroncards.pm b/C4/Patroncards/Patroncards.pm deleted file mode 100644 index e3cf150694..0000000000 --- a/C4/Patroncards/Patroncards.pm +++ /dev/null @@ -1,292 +0,0 @@ -package C4::Labels::Patroncard; - -# Copyright 2009 Foundations Bible College. -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - -use strict; -use warnings; - -use C4::Context; -use C4::Debug; -use C4::Biblio; -use C4::Labels::Layout 1.000000; # use version 1.0.0 or better -use C4::Labels::Template 1.000000; -use Data::Dumper; - -BEGIN { - use version; our $VERSION = qv('1.0.0_1'); -} - -sub _check_params { - my $given_params = {}; - my $exit_code = 0; - my @valid_template_params = ( - 'layout_id', - 'tmpl_id', - 'prof_id', - ); - if (scalar(@_) >1) { - $given_params = {@_}; - foreach my $key (keys %{$given_params}) { - if (!(grep m/$key/, @valid_template_params)) { - warn sprintf('Unrecognized parameter type of "%s".', $key); - $exit_code = 1; - } - } - } - else { - if (!(grep m/$_/, @valid_template_params)) { - warn sprintf('Unrecognized parameter type of "%s".', $_); - $exit_code = 1; - } - } - return $exit_code; -} - -=head1 NAME - -C4::Labels::Batch - A class for creating and manipulating batch objects in Koha - -=cut - -=head1 METHODS - -=head2 C4::Labels::Batch->new(layout_id => layout_id, tmpl_id => template_id, prof_id => prof_id) - - Invoking the I method constructs a new batch object with no items. - - example: - my $batch = C4::Labels::Batch->new(layout_id => layout_id, tmpl_id => template_id, prof_id => prof_id); - # Creates and returns a new batch object - - B This batch is I written to the database untill $batch->save() is invoked. You have been warned! - -=cut - -sub new { - my ($invocant, %params) = @_; - my $type = ref($invocant) || $invocant; - my $self = { - batch_id => 0, - layout_id => $params{layout_id}, - tmpl_id => $params{tmpl_id}, - prof_id => $params{prof_id}, - items => [], - batch_stat => 0, # False if any data has changed and the db has not been updated - }; - bless ($self, $type); - return $self; -} - -=head2 $batch->add_item($item_number) - - Invoking the I method will add the supplied item to the batch object. - - example: - $batch->add_item($item_number); - -=cut - -sub add_item { - my $self = shift; - my $item_num = shift; - push (@{$self->{items}}, $item_num); - $self->{batch_stat} = 0; -} - -=head2 $batch->get_attr() - - Invoking the I method will return the requested attribute. - - example: - my @items = $batch->get_attr($attr); - -=cut - -sub get_attr { - my $self = shift; - return $self->{$_[0]}; -} - -=head2 $batch->delete_item() - - Invoking the I method will delete the supplied item from the batch object. - - example: - $batch->delete_item(); - -=cut - -sub delete_item { - my $self = shift; - my $item_num = shift; - my $index = 0; - ++$index until $$self->{items}[$index] == $item_num or $item_num > $#$self->{items}; - delete ($$self->{items}[$index]); - $self->{batch_stat} = 0; -} - -=head2 $batch->save() - - Invoking the I method attempts to insert the batch into the database if the batch is new and - update the existing batch record if the batch exists. The method returns the new record batch_id upon - success and -1 upon failure (This avoids conflicting with a record batch_id of 1). Errors are - logged to the Apache log. - - example: - my $exitstat = $batch->save(); # to save the record behind the $batch object - -=cut - -sub save { - my $self = shift; - if ($self->{batch_id} > 0) { - foreach my $item_number (@$self->{items}) { - my $query = "UPDATE labels_batches SET item_number=?, layout_id=?, tmpl_id=?, prof_id=? WHERE batch_id=?;"; - warn "DEBUG: Updating: $query\n" if $debug; - my $sth->C4::Context->dbh->prepare($query); - $sth->execute($item_number, $self->{layout_id}, $self->{tmpl_id}, $self->{prof_id}, $self->{batch_id}); - if ($sth->err) { - warn sprintf('Database returned the following error: %s', $sth->errstr); - return -1; - } - } - } - else { - foreach my $item_number (@$self->{items}) { - my $query = "INSERT INTO labels_batches (item_number, layout_id, tmpl_id, prof_id) VALUES (?,?,?,?);"; - warn "DEBUG: Inserting: $query\n" if $debug; - my $sth->C4::Context->dbh->prepare($query); - $sth->execute($item_number, $self->{layout_id}, $self->{tmpl_id}, $self->{prof_id}); - if ($sth->err) { - warn sprintf('Database returned the following error: %s', $sth->errstr); - return -1; - } - my $sth1 = C4::Context->dbh->prepare("SELECT MAX(batch_id) FROM labels_batches;"); - $sth1->execute(); - my $batch_id = $sth1->fetchrow_array; - $self->{batch_id} = $batch_id; - return $batch_id; - } - } - $self->{batch_stat} = 1; -} - -=head2 C4::Labels::Template->retrieve(template_id) - - Invoking the I method constructs a new template object containing the current values for template_id. The method returns - a new object upon success and 1 upon failure. Errors are logged to the Apache log. Two further options may be accessed. See the example - below for further description. - - examples: - - my $template = C4::Labels::Template->retrieve(template_id => 1); # Retrieves template record 1 and returns an object containing the record - - my $template = C4::Labels::Template->retrieve(template_id => 1, convert => 1); # Retrieves template record 1, converts the units to points, - and returns an object containing the record - - my $template = C4::Labels::Template->retrieve(template_id => 1, prof_id => prof_id); # Retrieves template record 1, converts the units - to points, applies the given profile id, and returns an object containing the record - -=cut - -sub retrieve { - my $invocant = shift; - my %opts = @_; - my $type = ref($invocant) || $invocant; - my $query = "SELECT * FROM labels_batches WHERE batch_id = ? ORDER BY label_id"; - my $sth = C4::Context->dbh->prepare($query); - $sth->execute($opts{batch_id}); - if ($sth->err) { - warn sprintf('Database returned the following error: %s', $sth->errstr); - return 1; - } - my $self = { - items => [], - }; - while (my $record = $sth->fetchrow_hashref) { - $self->{batch_id} = $record->{batch_id}; # FIXME: seems a bit wasteful to re-initialize these every trip: is there a better way? - $self->{layout_id} = $record->{layout_id}; - $self->{tmpl_id} = $record->{tmpl_id}; - $self->{prof_id} = $record->{prof_id}; - push (@{$self->{items}}, $record->{item_number}); - } - $self->{batch_stat} = 1; - bless ($self, $type); - return $self; -} - -=head2 C4::Labels::Batch->delete(batch_id => batch_id) | $batch->delete() - - Invoking the delete method attempts to delete the batch from the database. The method returns 0 upon success - and 1 upon failure. Errors are logged to the Apache log. - - examples: - my $exitstat = $batch->delete(); # to delete the record behind the $batch object - my $exitstat = C4::Labels::Batch->delete(batch_id => 1); # to delete batch record 1 - -=cut - -sub delete { - my $self = shift; - my %opts = @_; - if ((ref $self) && !$self->{'batch_id'}) { # If there is no batch batch_id then we cannot delete it from the db - warn 'Cannot delete batch: Batch has not been saved.'; - return 1; - } - elsif (!$opts{batch_id}) { - warn 'Cannot delete batch: Missing batch_id.'; - return 1; - } - my $query = "DELETE FROM labels_batches WHERE batch_id = ?"; - my $sth = C4::Context->dbh->prepare($query); - $sth->execute($self->{'batch_id'}); - return 0; -} - - -1; -__END__ - -=head1 AUTHOR - -Chris Nighswonger - -=cut - - -# -# elsif ( $label_type eq 'PATCRD' ) { -# my $patron_data = $item; -# -# #FIXME: This needs to be paramatized and passed in from the user... -# #Each element of this hash is a separate line on the patron card. Keys are the text to print and the associated data is the point size. -# my $text = { -# $patron_data->{'description'} => $template->get_attr('font_size'), -# $patron_data->{'branchname'} => ($template->get_attr('font_size') + 3), -# }; -# -# $debug and warn "Generating patron card for cardnumber $patron_data->{'cardnumber'}"; -# -# my $barcode_height = $label_height / 2.75; #FIXME: Scaling barcode height; this needs to be a user parameter. -# $label->barcode( $llx, $lly, $barcode_height, $label_width, $patron_data->{'cardnumber'}, -# $barcodetype ); -# DrawPatronCardText( $llx, $lly, $label_height, $label_width, $template->get_attr('font'), $template->get_attr('font_size'), -# $left_text_margin, $text_wrap_cols, $text, $label_type ); -# _calc_next_label_pos(); -# } - diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl deleted file mode 100644 index aab84df48f..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl +++ /dev/null @@ -1,156 +0,0 @@ -Koha › Tools › Labels › <!-- TMPL_IF NAME="batch_is_labels" -->Label<!-- TMPL_ELSIF NAME="batch_is_patroncards" -->Patron Card<!-- TMPL_ELSE -->Unknown Batchtype<!-- /TMPL_IF --> Batch - - - - - - - -
-
-
-
- - - -
- - - - - -
-
- -

Items to be Printed for Batch ( items)

- - - - - - - - - - - - - - - - - - -
Label Num.SummaryItem TypeBarcodeDelete
"> : : &batch_id=&type=labels">Delete
- -

Patron Cards to be Printed for Batch ( items)

- - - - - - - - - - - - - - - - - - -
Card
Num.
Patron NameBorrower NumberCard NumberDelete
"> &batch_id=&type=patroncards">Remove
- -
Error: Unknown Batch Type ""
- -
-
- -
-
- - - -
-
- -

Label Batches

- - - - - - - - - - - - - - - - - -
ID#EditDeletePrint
records&type=labels">Edit&type=labels">Delete.pl?batch_id=&type=labels">Generate and download
- -
- No Label Batches Currently Defined -
- Select "New Label Batch" to create a Label batch. -
-
- -
-
- -
-
- -
-
- -

Patron Card Batches

- - - - - - - - - - - - - - - - - -
ID#EditDeletePrint
records&type=patroncards">Edit&type=patroncards">Delete.pl?batch_id=&type=patroncards">Generate and download
- -
- No Patron Card Batches Currently Defined -
- Select "New Patron Card Batch" to create a Label batch. -
-
- -
-
- -
-
- - -
-
-
- -
-
- diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl deleted file mode 100644 index 15d3537dbe..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl +++ /dev/null @@ -1,140 +0,0 @@ - -Koha › Patrons <!-- TMPL_IF NAME="searching" -->› Search Results<!-- /TMPL_IF --> - - - - - - - -
- - diff --git a/labels/pcard-member-search.pl b/labels/pcard-member-search.pl deleted file mode 100755 index b269a5ca91..0000000000 --- a/labels/pcard-member-search.pl +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/perl - - -#script to do a borrower enquiry/bring up borrower details etc -#written 20/12/99 by chris@katipo.co.nz - - -# Copyright 2000-2002 Katipo Communications -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - -use strict; -use C4::Auth; -use C4::Output; -use CGI; -use C4::Members; -use C4::Debug; - - -my $input = new CGI; -my $batch_id = $input->param('batch_id'); -my $batch_type = $input->param('type'); - -$debug and warn "[In pcard-member-search] Batch Id: $batch_id, and Type: $batch_type"; - -my $quicksearch = $input->param('quicksearch'); -my $startfrom = $input->param('startfrom')||1; -my $resultsperpage = $input->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20; -my $category = $input->param('category'); - -my ($template, $loggedinuser, $cookie); -if($quicksearch){ - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "members/member-quicksearch-results.tmpl", # FIXME: template doesn't exist - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - debug => 1, - }); -} else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "labels/pcard-members-search.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - debug => 1, - }); -} -my $theme = $input->param('theme') || "default"; - # only used if allowthemeoverride is set -#my %tmpldata = pathtotemplate ( template => 'member.tmpl', theme => $theme, language => 'fi' ); - # FIXME - Error-checking -#my $template = HTML::Template->new( filename => $tmpldata{'path'}, -# die_on_bad_params => 0, -# loop_context_vars => 1 ); - - -my $member=$input->param('member'); -my $orderby=$input->param('orderby'); -$orderby = "surname,firstname" unless $orderby; -$member =~ s/,//g; #remove any commas from search string -$member =~ s/\*/%/g; - -unless ($member||$category) { - $template->param( batch_id => $batch_id, type => $batch_type,); - output_html_with_http_headers $input, $cookie, $template->output; - exit; -} - -my ($count,$results); - -if(length($member) == 1) -{ - ($count,$results)=SearchMember($member,$orderby,"simple"); -} -else -{ - ($count,$results)=SearchMember($member,$orderby,"advanced",$category); -} - - -my @resultsdata; -my $to=($count>($startfrom*$resultsperpage)?$startfrom*$resultsperpage:$count); -for (my $i=($startfrom-1)*$resultsperpage; $i < $to; $i++){ - #find out stats - my ($od,$issue,$fines)=GetMemberIssuesAndFines($results->[$i]{'borrowernumber'}); - - my %row = ( - count => $i+1, - borrowernumber => $results->[$i]{'borrowernumber'}, - cardnumber => $results->[$i]{'cardnumber'}, - surname => $results->[$i]{'surname'}, - firstname => $results->[$i]{'firstname'}, - categorycode => $results->[$i]{'categorycode'}, - category_type => $results->[$i]{'category_type'}, - category_description => $results->[$i]{'description'}, - address => $results->[$i]{'address'}, - address2 => $results->[$i]{'address2'}, - city => $results->[$i]{'city'}, - zipcode => $results->[$i]{'zipcode'}, - country => $results->[$i]{'country'}, - branchcode => $results->[$i]{'branchcode'}, - overdues => $od, - issues => $issue, - odissue => "$od/$issue", - fines => sprintf("%.2f",$fines), - borrowernotes => $results->[$i]{'borrowernotes'}, - sort1 => $results->[$i]{'sort1'}, - sort2 => $results->[$i]{'sort2'}, - dateexpiry => C4::Dates->new($results->[$i]{'dateexpiry'},'iso')->output('syspref'), - ); - push(@resultsdata, \%row); -} -my $base_url = - 'pcard-member-search.pl?' - . join( - '&', - map { $_->{term} . '=' . $_->{val} } ( - { term => 'member', val => $member }, - { term => 'category', val => $category }, - { term => 'orderby', val => $orderby }, - { term => 'resultsperpage', val => $resultsperpage }, - { term => 'type', val => $batch_type }, - { term => 'batch_id', val => $batch_id }, - ) - ); - -$template->param( - paginationbar => pagination_bar( - $base_url, int( $count / $resultsperpage ) + 1, - $startfrom, 'startfrom' - ), - startfrom => $startfrom, - from => ($startfrom-1)*$resultsperpage+1, - to => $to, - multipage => ($count != $to || $startfrom!=1), -); - -$template->param( - searching => "1", - member => $member, - category_type => $category, - numresults => $count, - resultsloop => \@resultsdata, - batch_id => $batch_id, - type => $batch_type, - ); - -output_html_with_http_headers $input, $cookie, $template->output; -- 2.20.1