Moved C4/Charset.pm to C4/Interface/CGI/Output.pm
Create output_html_with_http_headers function to contain the "print $query ->header(-type => guesstype...),..." call. This is in preparation for non-HTML output (e.g., text/xml) and charset conversion before output in the future. Created C4/Interface/CGI/Template.pm to hold convenience functions specific to the CGI interface using HTML::Template Modified moremembers.pl to make the "sex" field localizable for languages where M and F doesn't make sense
This commit is contained in:
parent
6d940e0d84
commit
52a5fd4bbd
|
|
@ -0,0 +1,128 @@
|
|||
package C4::Interface::CGI::Output;
|
||||
|
||||
# $Id$
|
||||
|
||||
#package to work around problems in HTTP headers
|
||||
# Note: This is just a utility module; it should not be instantiated.
|
||||
|
||||
|
||||
# Copyright 2003 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;
|
||||
require Exporter;
|
||||
|
||||
use vars qw($VERSION @ISA @EXPORT);
|
||||
|
||||
# set the version for version checking
|
||||
$VERSION = 0.01;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
C4::CGI::Output - Convenience functions for handling outputting HTML pages
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use C4::CGI::Output;
|
||||
|
||||
print $query->header(-type => C4::CGI::Output::gettype($output)), $output;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
The functions in this module peek into a piece of HTML and return strings
|
||||
related to the (guessed) charset.
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=over 2
|
||||
|
||||
=cut
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
&guesscharset
|
||||
&guesstype
|
||||
&output_html_with_http_headers
|
||||
);
|
||||
|
||||
=item guesscharset
|
||||
|
||||
&guesscharset($output)
|
||||
|
||||
"Guesses" the charset from the some HTML that would be output.
|
||||
|
||||
C<$output> is the HTML page to be output. If it contains a META tag
|
||||
with a Content-Type, the tag will be scanned for a language code.
|
||||
This code is returned if it is found; undef is returned otherwise.
|
||||
|
||||
This function only does sloppy guessing; it will be confused by
|
||||
unexpected things like SGML comments. What it basically does is to
|
||||
grab something that looks like a META tag and scan it.
|
||||
|
||||
=cut
|
||||
|
||||
sub guesscharset ($) {
|
||||
my($html) = @_;
|
||||
my $charset = undef;
|
||||
local($`, $&, $', $1, $2, $3);
|
||||
# FIXME... These regular expressions will miss a lot of valid tags!
|
||||
if ($html =~ /<meta\s+http-equiv=(["']?)Content-Type\1\s+content=(["'])text\/html\s*;\s*charset=([^\2\s\r\n]+)\2\s*(?:\/?)>/is) {
|
||||
$charset = $3;
|
||||
} elsif ($html =~ /<meta\s+content=(["'])text\/html\s*;\s*charset=([^\1\s\r\n]+)\1\s+http-equiv=(["']?)Content-Type\3\s*(?:\/?)>/is) {
|
||||
$charset = $2;
|
||||
}
|
||||
return $charset;
|
||||
} # guess
|
||||
|
||||
sub guesstype ($) {
|
||||
my($html) = @_;
|
||||
my $charset = guesscharset($html);
|
||||
return defined $charset? "text/html; charset=$charset": "text/html";
|
||||
}
|
||||
|
||||
=item output_html_with_http_headers
|
||||
|
||||
&output_html_with_http_headers($query, $cookie, $html)
|
||||
|
||||
Outputs the HTML page $html with the appropriate HTTP headers,
|
||||
with the authentication cookie $cookie and a Content-Type that
|
||||
corresponds to the HTML page $html.
|
||||
|
||||
=cut
|
||||
|
||||
sub output_html_with_http_headers ($$$) {
|
||||
my($query, $cookie, $html) = @_;
|
||||
print $query->header(
|
||||
-type => guesstype($html),
|
||||
-cookie => $cookie,
|
||||
), $html;
|
||||
}
|
||||
|
||||
#---------------------------------
|
||||
|
||||
END { } # module clean-up code here (global destructor)
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Koha Developement team <info@koha.org>
|
||||
|
||||
=cut
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
package C4::Interface::CGI::Template;
|
||||
|
||||
# $Id$
|
||||
|
||||
# convenience package for HTML templating
|
||||
# Note: This is just a utility module; it should not be instantiated.
|
||||
|
||||
|
||||
# Copyright 2003 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;
|
||||
require Exporter;
|
||||
|
||||
use vars qw($VERSION @ISA @EXPORT);
|
||||
|
||||
# set the version for version checking
|
||||
$VERSION = 0.01;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
C4::Members - Convenience functions for using HTML::Template
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use C4::Interface::HTML::Template;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
The functions in this module peek into a piece of HTML and return strings
|
||||
related to the (guessed) charset.
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=over 2
|
||||
|
||||
=cut
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
&expand_sex_into_predicate
|
||||
);
|
||||
|
||||
=item expand_sex_into_predicate
|
||||
|
||||
$data{&expand_sex_into_predicate($data{sex})} = 1;
|
||||
|
||||
Converts a single 'M' or 'F' into 'sex_M_p' or 'sex_F_p'
|
||||
respectively.
|
||||
|
||||
In some languages, 'M' and 'F' are not appropriate. However,
|
||||
with HTML::Template, there is no way to localize 'M' or 'F'
|
||||
unless these are converted into variables that TMPL_IF can
|
||||
understand. This function provides this conversion.
|
||||
|
||||
=cut
|
||||
|
||||
sub expand_sex_into_predicate ($) {
|
||||
my($sex) = @_;
|
||||
return "sex_${sex}_p";
|
||||
} # expand_sex_into_predicate
|
||||
|
||||
#---------------------------------
|
||||
|
||||
END { } # module clean-up code here (global destructor)
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Koha Developement team <info@koha.org>
|
||||
|
||||
=cut
|
||||
|
|
@ -50,6 +50,7 @@ require Exporter;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use MARC::Record;
|
||||
|
|
@ -160,8 +161,5 @@ $template->param(item_loop => \@item_value_loop,
|
|||
item_header_loop => \@header_value_loop,
|
||||
biblionumber => $biblionumber,
|
||||
bibid => $bibid);
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ use strict;
|
|||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Biblio;
|
||||
use C4::Context;
|
||||
use HTML::Template;
|
||||
|
|
@ -306,7 +306,4 @@ if ($op eq "addbiblio") {
|
|||
oldbiblioitemnumtagsubfield => $oldbiblioitemnumtagsubfield,
|
||||
oldbiblioitemnumber => $oldbiblioitemnumber);
|
||||
}
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ use C4::Auth;
|
|||
use C4::Catalogue;
|
||||
use C4::Biblio;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use HTML::Template;
|
||||
|
||||
my $query = new CGI;
|
||||
|
|
@ -54,7 +54,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
flagsrequired => {catalogue => 1},
|
||||
debug => 1,
|
||||
});
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ use CGI;
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Biblio;
|
||||
use C4::Context;
|
||||
use HTML::Template;
|
||||
|
|
@ -251,7 +251,4 @@ $template->param(item_loop => \@item_value_loop,
|
|||
itemtagsubfield =>$itemtagsubfield,
|
||||
op => $nextop,
|
||||
opisadd => ($nextop eq "saveitem")?0:1);
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ use C4::Catalogue;
|
|||
use C4::Biblio;
|
||||
use C4::Search;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use HTML::Template;
|
||||
|
||||
my $input = new CGI;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ use DBI;
|
|||
# Koha modules used
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Input;
|
||||
use C4::Biblio;
|
||||
use MARC::File::USMARC;
|
||||
|
|
@ -150,10 +150,7 @@ if ($uploadmarc && length($uploadmarc)>0) {
|
|||
|
||||
}
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
my $menu;
|
||||
my $file;
|
||||
|
||||
|
|
@ -809,6 +806,20 @@ sub FormatMarcText {
|
|||
#---------------
|
||||
# log cleared, as marcimport is (almost) rewritten from scratch.
|
||||
# $Log$
|
||||
# Revision 1.30 2003/02/02 07:18:38 acli
|
||||
# Moved C4/Charset.pm to C4/Interface/CGI/Output.pm
|
||||
#
|
||||
# Create output_html_with_http_headers function to contain the "print $query
|
||||
# ->header(-type => guesstype...),..." call. This is in preparation for
|
||||
# non-HTML output (e.g., text/xml) and charset conversion before output in
|
||||
# the future.
|
||||
#
|
||||
# Created C4/Interface/CGI/Template.pm to hold convenience functions specific
|
||||
# to the CGI interface using HTML::Template
|
||||
#
|
||||
# Modified moremembers.pl to make the "sex" field localizable for languages
|
||||
# where M and F doesn't make sense
|
||||
#
|
||||
# Revision 1.29 2003/01/28 15:28:31 tipaul
|
||||
# removing use MARC::Charset
|
||||
# Was a buggy test
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ use C4::Catalogue;
|
|||
use C4::Biblio;
|
||||
use HTML::Template;
|
||||
use C4::Auth;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
|
||||
my $env;
|
||||
my $input = new CGI;
|
||||
|
|
@ -246,7 +246,4 @@ $template->param( bookselname => $booksellers[0]->{'name'},
|
|||
loopsearch =>\@loopsearch,
|
||||
loopresult =>\@loopresult);
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Database;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -19,7 +19,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
});
|
||||
$template->param(loggeninuser => $loggedinuser);
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -206,7 +206,4 @@ if ($op eq 'add_form') {
|
|||
$template->param(bookfund => \@loop_data);
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -227,8 +227,5 @@ if ($op eq 'add_form') {
|
|||
$template->param(budget => \@loop_data);
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
use C4::Context;
|
||||
|
|
@ -189,7 +189,4 @@ if ($op eq 'add_form') {
|
|||
}
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use HTML::Template;
|
||||
|
||||
# Fixed variables
|
||||
|
|
@ -377,7 +377,4 @@ sub checkdatabasefor {
|
|||
return $message;
|
||||
}
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
use strict;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Auth;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
|
|
@ -121,7 +121,4 @@ if ($res && $res2 eq 10 && $field eq "branches") {
|
|||
}
|
||||
|
||||
$template->param(total => $total);
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
use strict;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Auth;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
|
|
@ -135,7 +135,4 @@ if ($op eq 'add_form') {
|
|||
);
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
use strict;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Auth;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
|
|
@ -347,7 +347,4 @@ if ($op eq 'add_form') {
|
|||
}
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Search;
|
||||
use C4::Context;
|
||||
use HTML::Template;
|
||||
|
|
@ -197,7 +197,4 @@ if ($op eq 'add_form') {
|
|||
} #---- END $OP eq DEFAULT
|
||||
|
||||
$template->param(loggeninuser => $loggedinuser);
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ use CGI;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
use C4::Context;
|
||||
|
|
@ -185,7 +185,4 @@ if ($op eq 'add_form') {
|
|||
}
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
use strict;
|
||||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Search;
|
||||
|
|
@ -256,7 +256,4 @@ if ($op eq 'add_form') {
|
|||
}
|
||||
} #---- END $OP eq DEFAULT
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
|
|
@ -79,7 +79,4 @@ $template->param(
|
|||
total => $total,
|
||||
accounts => \@accountrows );
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Database;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -27,7 +27,4 @@ $template->param(loggedinuser => $loggedinuser,
|
|||
classlist => $classlist,
|
||||
type => 'intranet',);
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ $template->param( genbrname => $genbrname,
|
|||
branchoptionloop => \@branchoptionloop,
|
||||
errmsgloop => \@errmsgloop
|
||||
);
|
||||
print $query->header(-cookie=>$sessioncookie), $template->output;
|
||||
output_html_with_http_headers $query, $sessioncookie, $template->output;
|
||||
|
||||
|
||||
sub name {
|
||||
|
|
|
|||
|
|
@ -93,5 +93,5 @@ $template->param(ITEM_RESULTS => $itemsarray);
|
|||
$template->param(WEB_RESULTS => $webarray);
|
||||
$template->param(SITE_RESULTS => $sitearray);
|
||||
$template->param(loggedinuser => $loggedinuser);
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -94,4 +94,4 @@ $template->param( startmenumember => join('', startmenu('member')),
|
|||
titleloop => \@titledata,
|
||||
cmemloop => \@cmemdata );
|
||||
|
||||
print $input->header(-cookie => $cookie),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@
|
|||
族裔:<TMPL_VAR NAME="ethnicity">, <TMPL_VAR NAME="ethnotes"><br>
|
||||
</TMPL_IF>
|
||||
出生日期:<TMPL_VAR NAME="dateofbirth"><BR>
|
||||
姓別:<TMPL_VAR NAME="sex"><P>
|
||||
姓別:<TMPL_IF NAME="sex_M_p">男<TMPL_ELSE><TMPL_IF NAME="sex_F_p">女<TMPL_ELSE><TMPL_VAR NAME="sex"></TMPL_IF></TMPL_IF>
|
||||
<P>
|
||||
Alternative Contact: <TMPL_VAR NAME="contactname"><BR>
|
||||
Phone: <TMPL_VAR NAME="altphone"><BR>
|
||||
Relationship: <TMPL_VAR NAME="altrelationship"><BR>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
require Exporter;
|
||||
use C4::Database;
|
||||
use C4::Output; # contains gettemplate
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Auth;
|
||||
|
||||
|
|
@ -18,7 +18,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
debug => 1,
|
||||
});
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use HTML::Template;
|
||||
use C4::Search;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use C4::Accounts2;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
|
|
@ -78,7 +78,4 @@ $template->param(
|
|||
member => $member,
|
||||
resultsloop => \@resultsdata );
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ use strict;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use C4::Koha;
|
||||
|
|
@ -242,10 +242,7 @@ if ($delete){
|
|||
cardnumber => $cardnumber,
|
||||
dateofbirth => $data->{'dateofbirth'});
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Context;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -18,7 +18,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
debug => 1,
|
||||
});
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ use strict;
|
|||
use C4::Auth;
|
||||
use C4::Context;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Interface::CGI::Template;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use Date::Manip;
|
||||
|
|
@ -69,6 +70,8 @@ $data->{'dateofbirth'} = slashifyDate($data->{'dateofbirth'});
|
|||
|
||||
$data->{'ethnicity'} = fixEthnicity($data->{'ethnicity'});
|
||||
|
||||
$data->{&expand_sex_into_predicate($data->{'sex'})} = 1;
|
||||
|
||||
if ($data->{'categorycode'} eq 'C'){
|
||||
my $data2=borrdata('',$data->{'guarantor'});
|
||||
$data->{'streetaddress'}=$data2->{'streetaddress'};
|
||||
|
|
@ -203,7 +206,4 @@ $template->param(
|
|||
issueloop => \@issuedata,
|
||||
reserveloop => \@reservedata);
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Input;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use Date::Manip;
|
||||
use HTML::Template;
|
||||
|
|
@ -180,9 +180,6 @@ if ($ok == 0) {
|
|||
;
|
||||
}
|
||||
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -55,5 +55,5 @@ $template->param( ACCOUNT_LINES => $accts );
|
|||
$template->param( total => $total );
|
||||
|
||||
#$template->param(loggeninuser => $loggedinuser);
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require Exporter;
|
|||
use CGI;
|
||||
use C4::Search;
|
||||
use C4::Auth;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use HTML::Template;
|
||||
|
||||
my $query=new CGI;
|
||||
|
|
@ -54,8 +54,5 @@ $template->param(ITEM_RESULTS => $itemsarray);
|
|||
$template->param(WEB_RESULTS => $webarray);
|
||||
$template->param(SITE_RESULTS => $sitearray);
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use CGI;
|
|||
use HTML::Template;
|
||||
|
||||
use C4::Auth; # get_template_and_user
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
|
||||
my $query = new CGI;
|
||||
|
||||
|
|
@ -17,7 +17,4 @@ my ($template, $borrowernumber, $cookie)
|
|||
flagsrequired => {borrow => 1},
|
||||
});
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -15,4 +15,4 @@ my ($template, $borrowernumber, $cookie)
|
|||
flagsrequired => {borrow => 1},
|
||||
});
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -51,5 +51,5 @@ $template->param(count => $count);
|
|||
$template->param(READING_RECORD => $issues);
|
||||
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -225,4 +225,4 @@ if ($query->param('item_types_selected')) {
|
|||
$template->param(BIBLIOITEMS => \@data);
|
||||
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use strict;
|
|||
require Exporter;
|
||||
|
||||
use C4::Auth;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Context;
|
||||
use CGI;
|
||||
use C4::Database;
|
||||
|
|
@ -32,7 +32,4 @@ my ($template, $borrowernumber, $cookie)
|
|||
|
||||
$template->param(classlist => $classlist);
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require Exporter;
|
|||
use CGI;
|
||||
use C4::Search;
|
||||
use C4::Auth;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use HTML::Template;
|
||||
|
||||
my $query=new CGI;
|
||||
|
|
@ -127,8 +127,5 @@ if ($count>10) {
|
|||
|
||||
$template->param(numbers => $numbers);
|
||||
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,4 +28,4 @@ $template->param(INPUTS => \@inputs);
|
|||
my $self_url = $query->url(-absolute => 1);
|
||||
$template->param(url => $self_url);
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -131,5 +131,5 @@ foreach my $res (@$reserves) {
|
|||
# $template->param(WAITING => \@waiting);
|
||||
$template->param(waiting_count => $wcount);
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,5 +30,5 @@ $borr->{'ethnicity'} = fixEthnicity($borr->{'ethnicity'});
|
|||
|
||||
$template->param($borr);
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
|
|
@ -68,4 +68,4 @@ $bordat[0] = $borr;
|
|||
|
||||
$template->param(BORROWER_INFO => \@bordat);
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
use strict;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use CGI;
|
||||
use C4::Search;
|
||||
use HTML::Template;
|
||||
|
|
@ -73,10 +73,7 @@ $template->param(title => $data->{'title'},
|
|||
bornum => $bornum,
|
||||
limit => $limit,
|
||||
loop_reading => \@loop_reading);
|
||||
print $input->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Context;
|
||||
use HTML::Template;
|
||||
|
||||
|
|
@ -17,7 +17,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
flagsrequired => {permissions => 1},
|
||||
debug => 1,
|
||||
});
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
),$template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ use C4::Context;
|
|||
use C4::Search;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
use C4::Biblio;
|
||||
use C4::SearchMarc;
|
||||
|
||||
|
|
@ -108,7 +108,4 @@ if ($op eq "do_search") {
|
|||
$template->param("marclist" => $marclist);
|
||||
}
|
||||
# Print the page
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ use C4::Context;
|
|||
use C4::Search;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
|
||||
my $query=new CGI;
|
||||
my $type=$query->param('type');
|
||||
|
|
@ -200,8 +200,5 @@ if (C4::Context->preference('acquisitions') eq 'simple') {
|
|||
}
|
||||
|
||||
# Print the page
|
||||
print $query->header(
|
||||
-type => guesstype($template->output),
|
||||
-cookie => $cookie
|
||||
), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
|
|
|||
16
shelves.pl
16
shelves.pl
|
|
@ -83,7 +83,7 @@ SWITCH: {
|
|||
$template->param(shelvesloop => \@shelvesloop);
|
||||
}
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
||||
|
||||
sub shelves {
|
||||
|
|
@ -151,6 +151,20 @@ sub viewshelf {
|
|||
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.10 2003/02/02 07:18:37 acli
|
||||
# Moved C4/Charset.pm to C4/Interface/CGI/Output.pm
|
||||
#
|
||||
# Create output_html_with_http_headers function to contain the "print $query
|
||||
# ->header(-type => guesstype...),..." call. This is in preparation for
|
||||
# non-HTML output (e.g., text/xml) and charset conversion before output in
|
||||
# the future.
|
||||
#
|
||||
# Created C4/Interface/CGI/Template.pm to hold convenience functions specific
|
||||
# to the CGI interface using HTML::Template
|
||||
#
|
||||
# Modified moremembers.pl to make the "sex" field localizable for languages
|
||||
# where M and F doesn't make sense
|
||||
#
|
||||
# Revision 1.9 2002/12/19 18:55:40 hdl
|
||||
# Templating reservereport et shelves.
|
||||
#
|
||||
|
|
|
|||
39
t/Charset.t
39
t/Charset.t
|
|
@ -1,5 +1,5 @@
|
|||
use strict;
|
||||
use C4::Charset;
|
||||
use C4::Interface::CGI::Output;
|
||||
|
||||
use vars qw( @tests );
|
||||
use vars qw( $loaded );
|
||||
|
|
@ -8,84 +8,84 @@ BEGIN {
|
|||
@tests = (
|
||||
[
|
||||
'Normal HTML without meta tag',
|
||||
sub { C4::Charset::guesscharset($_[0]) },
|
||||
sub { guesscharset($_[0]) },
|
||||
undef,
|
||||
<<EOF
|
||||
<title>control case</title>
|
||||
EOF
|
||||
], [
|
||||
'Result of guesscharset with normal HTML with irrelevant meta tag',
|
||||
sub { C4::Charset::guesscharset($_[0]) },
|
||||
sub { guesscharset($_[0]) },
|
||||
undef,
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Language" content="zh-TW">
|
||||
EOF
|
||||
], [
|
||||
'Result of guesscharset with normal HTML with irrelevant meta tag',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
undef,
|
||||
'Result of guesstype with normal HTML with irrelevant meta tag',
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html',
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Language" content="zh-TW">
|
||||
EOF
|
||||
], [
|
||||
'Result of guesscharset with normal HTML with relevant meta tag',
|
||||
sub { C4::Charset::guesscharset($_[0]) },
|
||||
sub { guesscharset($_[0]) },
|
||||
'big5',
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=big5">
|
||||
EOF
|
||||
], [
|
||||
'Result of guesstype with normal HTML with relevant meta tag',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=big5',
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=big5">
|
||||
EOF
|
||||
], [
|
||||
'Variant 1 using single quotes',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=iso-2022-jp',
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Type" content='text/html; charset=iso-2022-jp'>
|
||||
EOF
|
||||
], [
|
||||
'Variant 2 using single quotes',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=utf-8',
|
||||
<<EOF
|
||||
<meta http-equiv='Content-Type' content="text/html; charset=utf-8">
|
||||
EOF
|
||||
], [
|
||||
'Unquoted Content-Type',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=big5',
|
||||
<<EOF
|
||||
<meta http-equiv=Content-Type content="text/html; charset=big5">
|
||||
EOF
|
||||
], [
|
||||
'XML syntax',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=iso-8859-2',
|
||||
<<EOF
|
||||
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-2" />
|
||||
EOF
|
||||
], [
|
||||
'Expected attributes in reverse order',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=big5',
|
||||
<<EOF
|
||||
<meta content="text/html; charset=big5" http-equiv="Content-Type">
|
||||
EOF
|
||||
], [
|
||||
'Extra whitespace at end',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=big5',
|
||||
<<EOF
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=big5" >
|
||||
EOF
|
||||
], [
|
||||
'Multiple lines',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=big5',
|
||||
<<EOF
|
||||
<meta
|
||||
|
|
@ -94,8 +94,9 @@ content="text/html; charset=big5"
|
|||
>
|
||||
EOF
|
||||
], [
|
||||
# FIXME - THIS IS NOT A WELL-WRITTEN TEST CASE!!!
|
||||
'With surrounding HTML',
|
||||
sub { C4::Charset::guesstype($_[0]) },
|
||||
sub { guesstype($_[0]) },
|
||||
'text/html; charset=us-ascii',
|
||||
<<EOF
|
||||
<html>
|
||||
|
|
@ -131,13 +132,13 @@ for (my $i = 1; $i <= scalar @tests; $i += 1) {
|
|||
(!defined $output && !defined $expected)
|
||||
|| (defined $output && defined $expected && $output eq $expected)
|
||||
) {
|
||||
print "ok $i ($title)\n";
|
||||
print "ok $i - $title\n";
|
||||
} else {
|
||||
print "not ok $i ($title: got ",
|
||||
print "not ok $i - $title: got ",
|
||||
(defined $output? "\"$output\"": 'undef'),
|
||||
', expected ',
|
||||
(defined $expected? "\"$expected\"": 'undef'),
|
||||
")\n";
|
||||
"\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -93,6 +93,6 @@ $template->param(select_list => $select_list,
|
|||
category => $category,
|
||||
index => $index
|
||||
);
|
||||
print $input->header(-cookie => $cookie),$template->output;
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -38,4 +38,4 @@ my ($template, $loggedinuser, $cookie)
|
|||
|
||||
warn "userloggedin : $loggedinuser (".$query->param('userid')." et ".$query->param('password');
|
||||
|
||||
print $query->header(-cookie => $cookie), $template->output;
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
Loading…
Reference in New Issue