From: Moritz Bunkus
Date: Tue, 18 Jun 2013 07:28:14 +0000 (+0200)
Subject: Unterstützung für andere Datenbankencodings als Unicode/UTF-8 entfernt
X-Git-Tag: release-3.1.0beta1~309^2~13
X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=dbda14c263efd93aca3b7114015a47d86b8581e3;p=kivitendo-erp.git
Unterstützung für andere Datenbankencodings als Unicode/UTF-8 entfernt
---
diff --git a/SL/AM.pm b/SL/AM.pm
index e2ea0be0e..cf48de61c 100644
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -1021,7 +1021,7 @@ sub load_template {
close(TEMPLATE);
}
- $content = Encode::decode('utf-8-strict', $content) if $::locale->is_utf8;
+ $content = Encode::decode('utf-8-strict', $content);
$main::lxdebug->leave_sub();
@@ -1038,7 +1038,7 @@ sub save_template {
my $error = "";
if (open(TEMPLATE, ">", $filename)) {
- $content = Encode::encode('utf-8-strict', $content) if $::locale->is_utf8;
+ $content = Encode::encode('utf-8-strict', $content);
$content =~ s/\r\n/\n/g;
print(TEMPLATE $content);
close(TEMPLATE);
diff --git a/SL/Auth.pm b/SL/Auth.pm
index 184468e56..2e49aff30 100644
--- a/SL/Auth.pm
+++ b/SL/Auth.pm
@@ -251,7 +251,7 @@ sub dbconnect {
$main::lxdebug->message(LXDebug->DEBUG1, "Auth::dbconnect DSN: $dsn");
- $self->{dbh} = SL::DBConnect->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 1 });
+ $self->{dbh} = SL::DBConnect->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => 1, AutoCommit => 1 });
if (!$may_fail && !$self->{dbh}) {
$main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr);
@@ -326,18 +326,13 @@ sub create_database {
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database DSN: $dsn");
- my $charset = $::lx_office_conf{system}->{dbcharset};
- $charset ||= Common::DEFAULT_CHARSET;
- my $encoding = $Common::charset_to_db_encoding{$charset};
- $encoding ||= 'UNICODE';
-
- my $dbh = SL::DBConnect->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => scalar($charset =~ m/^utf-?8$/i) });
+ my $dbh = SL::DBConnect->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => 1 });
if (!$dbh) {
$main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr);
}
- my $query = qq|CREATE DATABASE "$cfg->{db}" OWNER "$cfg->{user}" TEMPLATE "$params{template}" ENCODING '$encoding'|;
+ my $query = qq|CREATE DATABASE "$cfg->{db}" OWNER "$cfg->{user}" TEMPLATE "$params{template}" ENCODING 'UNICODE'|;
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database query: $query");
@@ -349,8 +344,8 @@ sub create_database {
$query = qq|SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'template0'|;
my ($cluster_encoding) = $dbh->selectrow_array($query);
- if ($cluster_encoding && ($cluster_encoding =~ m/^(?:UTF-?8|UNICODE)$/i) && ($encoding !~ m/^(?:UTF-?8|UNICODE)$/i)) {
- $error = $main::locale->text('Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure kivitendo to use UTF-8 as well.');
+ if ($cluster_encoding && ($cluster_encoding !~ m/^(?:UTF-?8|UNICODE)$/i)) {
+ $error = $::locale->text('Your PostgreSQL installationen does not use Unicode as its encoding. This is not supported anymore.');
}
$dbh->disconnect();
@@ -369,11 +364,8 @@ sub create_tables {
my $self = shift;
my $dbh = $self->dbconnect();
- my $charset = $::lx_office_conf{system}->{dbcharset};
- $charset ||= Common::DEFAULT_CHARSET;
-
$dbh->rollback();
- SL::DBUpgrade2->new(form => $::form)->process_query($dbh, 'sql/auth_db.sql', undef, $charset);
+ SL::DBUpgrade2->new(form => $::form)->process_query($dbh, 'sql/auth_db.sql');
$main::lxdebug->leave_sub();
}
diff --git a/SL/BackgroundJob/SelfTest.pm b/SL/BackgroundJob/SelfTest.pm
index aab279610..6137ced42 100644
--- a/SL/BackgroundJob/SelfTest.pm
+++ b/SL/BackgroundJob/SelfTest.pm
@@ -124,7 +124,7 @@ sub _send_email {
my ($output, $content_type) = $self->_prepare_report;
- my $mail = Mailer->new(charset => $::locale->is_utf8 ? 'UTF-8' : Common->DEFAULT_CHARSET );
+ my $mail = Mailer->new;
$mail->{from} = $self->config->{email_from};
$mail->{to} = $email;
$mail->{subject} = $self->config->{email_subject};
diff --git a/SL/Common.pm b/SL/Common.pm
index b58d877c6..e63b698a1 100644
--- a/SL/Common.pm
+++ b/SL/Common.pm
@@ -17,27 +17,6 @@ use Data::Dumper;
use SL::DBUtils;
-use vars qw(@db_encodings %db_encoding_to_charset %charset_to_db_encoding);
-
-@db_encodings = (
- { "label" => "ASCII", "dbencoding" => "SQL_ASCII", "charset" => "ASCII" },
- { "label" => "UTF-8 Unicode", "dbencoding" => "UNICODE", "charset" => "UTF-8" },
- { "label" => "ISO 8859-1", "dbencoding" => "LATIN1", "charset" => "ISO-8859-1" },
- { "label" => "ISO 8859-2", "dbencoding" => "LATIN2", "charset" => "ISO-8859-2" },
- { "label" => "ISO 8859-3", "dbencoding" => "LATIN3", "charset" => "ISO-8859-3" },
- { "label" => "ISO 8859-4", "dbencoding" => "LATIN4", "charset" => "ISO-8859-4" },
- { "label" => "ISO 8859-5", "dbencoding" => "LATIN5", "charset" => "ISO-8859-5" },
- { "label" => "ISO 8859-15", "dbencoding" => "LATIN9", "charset" => "ISO-8859-15" },
- { "label" => "KOI8-R", "dbencoding" => "KOI8", "charset" => "KOI8-R" },
- { "label" => "Windows CP1251", "dbencoding" => "WIN", "charset" => "CP1251" },
- { "label" => "Windows CP866", "dbencoding" => "ALT", "charset" => "CP866" },
-);
-
-%db_encoding_to_charset = map { $_->{dbencoding}, $_->{charset} } @db_encodings;
-%charset_to_db_encoding = map { $_->{charset}, $_->{dbencoding} } @db_encodings;
-
-use constant DEFAULT_CHARSET => 'ISO-8859-15';
-
sub unique_id {
my ($a, $b) = gettimeofday();
return "${a}-${b}-${$}";
diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm
index 88f10b7bd..a37ac8bef 100644
--- a/SL/Controller/Base.pm
+++ b/SL/Controller/Base.pm
@@ -116,7 +116,7 @@ sub render {
: 'application/json';
print $::form->create_http_response(content_type => $content_type,
- charset => $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET());
+ charset => 'UTF-8');
}
}
diff --git a/SL/DB.pm b/SL/DB.pm
index 54214c8ca..f5c408d3e 100644
--- a/SL/DB.pm
+++ b/SL/DB.pm
@@ -42,7 +42,7 @@ sub _register_db {
driver => 'Pg',
european_dates => ((SL::DBConnect->get_datestyle || '') =~ m/european/i) ? 1 : 0,
connect_options => {
- pg_enable_utf8 => $::locale && $::locale->is_utf8,
+ pg_enable_utf8 => 1,
},
);
diff --git a/SL/DBConnect.pm b/SL/DBConnect.pm
index afdf2c9e1..7d3ea4108 100644
--- a/SL/DBConnect.pm
+++ b/SL/DBConnect.pm
@@ -72,7 +72,7 @@ sub get_connect_args {
sub get_options {
my $self = shift;
my $options = {
- pg_enable_utf8 => $::locale->is_utf8,
+ pg_enable_utf8 => 1,
@_
};
diff --git a/SL/DBUpgrade2.pm b/SL/DBUpgrade2.pm
index cdfca9b74..54a651c05 100644
--- a/SL/DBUpgrade2.pm
+++ b/SL/DBUpgrade2.pm
@@ -82,7 +82,7 @@ sub parse_dbupdate_controls {
next if ($control->{ignore});
$control->{charset} = 'UTF-8' if $file =~ m/\.pl$/;
- $control->{charset} = $control->{charset} || $control->{encoding} || Common::DEFAULT_CHARSET;
+ $control->{charset} = $control->{charset} || $control->{encoding} || 'UTF-8';
if (!$control->{"tag"}) {
_control_error($form, $file_name, $locale->text("Missing 'tag' field.")) ;
@@ -133,7 +133,7 @@ sub parse_dbupdate_controls {
sub process_query {
$::lxdebug->enter_sub();
- my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
+ my ($self, $dbh, $filename, $version_or_control) = @_;
my $form = $self->{form};
my $fh = IO::File->new($filename, "r") or $form->error("$filename : $!\n");
@@ -141,7 +141,7 @@ sub process_query {
my $sth;
my @quote_chars;
- my $file_charset = Common::DEFAULT_CHARSET;
+ my $file_charset = 'UTF-8';
while (<$fh>) {
last if !/^--/;
next if !/^--\s*\@(?:charset|encoding):\s*(.+)/;
@@ -150,12 +150,10 @@ sub process_query {
}
$fh->seek(0, SEEK_SET);
- $db_charset ||= Common::DEFAULT_CHARSET;
-
$dbh->begin_work();
while (<$fh>) {
- $_ = SL::Iconv::convert($file_charset, $db_charset, $_);
+ $_ = SL::Iconv::convert($file_charset, 'UTF-8', $_);
# Remove DOS and Unix style line endings.
chomp;
@@ -241,7 +239,7 @@ sub process_query {
sub process_perl_script {
$::lxdebug->enter_sub();
- my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
+ my ($self, $dbh, $filename, $version_or_control) = @_;
my %form_values = map { $_ => $::form->{$_} } qw(dbconnect dbdefault dbhost dbmbkiviunstable dbname dboptions dbpasswd dbport dbupdate dbuser login template_object version);
@@ -288,12 +286,12 @@ sub process_perl_script {
}
sub process_file {
- my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
+ my ($self, $dbh, $filename, $version_or_control) = @_;
if ($filename =~ m/sql$/) {
- $self->process_query($dbh, $filename, $version_or_control, $db_charset);
+ $self->process_query($dbh, $filename, $version_or_control);
} else {
- $self->process_perl_script($dbh, $filename, $version_or_control, $db_charset);
+ $self->process_perl_script($dbh, $filename, $version_or_control);
}
}
@@ -357,10 +355,9 @@ sub apply_admin_dbupgrade_scripts {
return 0 if !@unapplied_scripts;
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
$self->{form}->{login} ||= 'admin';
- map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $self->{all_controls} };
+ map { $_->{description} = SL::Iconv::convert($_->{charset}, 'UTF-8', $_->{description}) } values %{ $self->{all_controls} };
if ($called_from_admin) {
$self->{form}->{title} = $::locale->text('Dataset upgrade');
@@ -373,7 +370,7 @@ sub apply_admin_dbupgrade_scripts {
$::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}");
print $self->{form}->parse_html_template("dbupgrade/upgrade_message2", $control);
- $self->process_file($dbh, "sql/Pg-upgrade2-auth/$control->{file}", $control, $db_charset);
+ $self->process_file($dbh, "sql/Pg-upgrade2-auth/$control->{file}", $control);
}
print $self->{form}->parse_html_template("dbupgrade/footer", { is_admin => 1 }) if $called_from_admin;
@@ -617,25 +614,22 @@ are missing/wrong (e.g. a tag name listed in C is not
found). Sets C<$Self->{all_controls}> to the list of database
scripts.
-=item C
+=item C
Applies a single database upgrade file. Calls L
for Perl update files and C for SQL update
files. Requires an open database handle(C<$dbh>), the file name
-(C<$filename>), a hash structure of the file's control fields as
-produced by L (C<$version_or_control>) and
-the database charset (for on-the-fly charset recoding of the script if
-required, C<$db_charset>).
+(C<$filename>) and a hash structure of the file's control fields as
+produced by L (C<$version_or_control>).
Returns the result of the actual function called.
-=item C
+=item C
Applies a single Perl database upgrade file. Requires an open database
-handle(C<$dbh>), the file name (C<$filename>), a hash structure of the
-file's control fields as produced by L
-(C<$version_or_control>) and the database charset (for on-the-fly
-charset recoding of the script if required, C<$db_charset>).
+handle(C<$dbh>), the file name (C<$filename>) and a hash structure of
+the file's control fields as produced by L
+(C<$version_or_control>).
Perl scripts are executed via L. If L returns falsish then
an error is expected. There are two special return values: If the
@@ -675,13 +669,12 @@ the following function:
}
}
-=item C
+=item C
Applies a single SQL database upgrade file. Requires an open database
-handle(C<$dbh>), the file name (C<$filename>), a hash structure of the
-ofile's control fields as produced by L
-(C<$version_or_control>) and the database charset (for on-the-fly
-charset recoding of the script if required, C<$db_charset>).
+handle(C<$dbh>), the file name (C<$filename>), and a hash structure of
+the file's control fields as produced by L
+(C<$version_or_control>).
=item C
diff --git a/SL/DBUpgrade2/Base.pm b/SL/DBUpgrade2/Base.pm
index 4a817c423..6f0bb829c 100644
--- a/SL/DBUpgrade2/Base.pm
+++ b/SL/DBUpgrade2/Base.pm
@@ -59,7 +59,7 @@ sub db_errstr {
my $error = $handle ? $handle->errstr : $self->dbh->errstr;
- return $::locale->is_utf8 ? Encode::decode('utf-8', $error) : $error;
+ return Encode::decode('utf-8', $error);
}
sub check_coa {
diff --git a/SL/DN.pm b/SL/DN.pm
index 2eeed6762..b64e48ce6 100644
--- a/SL/DN.pm
+++ b/SL/DN.pm
@@ -369,7 +369,6 @@ sub send_email {
my $template = SL::Template::create(type => 'PlainText', form => $form, myconfig => $myconfig);
my $mail = Mailer->new();
- $mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
$mail->{from} = $myconfig->{email};
$mail->{to} = $ref->{recipient};
$mail->{subject} = $template->parse_block($ref->{email_subject});
diff --git a/SL/FCGIFixes.pm b/SL/FCGIFixes.pm
index f1fa869f1..62f4a934e 100644
--- a/SL/FCGIFixes.pm
+++ b/SL/FCGIFixes.pm
@@ -25,7 +25,6 @@ use version;
sub fix_print_and_internal_encoding_after_0_68 {
return if version->new("$FCGI::VERSION")->numify <= version->new("0.68")->numify;
- return if lc($::lx_office_conf{system}->{dbcharset}) !~ m/^(?:utf-?8|unicode)$/;
my $encoder = Encode::find_encoding('UTF-8');
my $original_fcgi_print = \&FCGI::Stream::PRINT;
diff --git a/SL/Form.pm b/SL/Form.pm
index 3e56b69fc..b42569851 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -447,7 +447,6 @@ sub header {
$::lxdebug->enter_sub;
my ($self, %params) = @_;
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
my @header;
$::lxdebug->leave_sub and return if !$ENV{HTTP_USER_AGENT} || $self->{header}++;
@@ -499,12 +498,12 @@ sub header {
);
# output
- print $self->create_http_response(content_type => 'text/html', charset => $db_charset);
+ print $self->create_http_response(content_type => 'text/html', charset => 'UTF-8');
print $doctypes{$params{doctype} || 'transitional'}, $/;
print <
-
+
$self->{titlebar}
EOT
print " $_\n" for @header;
@@ -543,8 +542,7 @@ sub ajax_response_header {
my ($self) = @_;
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
- my $output = $::request->{cgi}->header('-charset' => $db_charset);
+ my $output = $::request->{cgi}->header('-charset' => 'UTF-8');
$main::lxdebug->leave_sub();
@@ -616,7 +614,6 @@ sub _prepare_html_template {
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig;
}
- $additional_params->{"conf_dbcharset"} = $::lx_office_conf{system}->{dbcharset};
$additional_params->{"conf_webdav"} = $::lx_office_conf{features}->{webdav};
$additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex};
$additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument};
@@ -1100,7 +1097,6 @@ sub parse_template {
map { $mail->{$_} = $self->{$_} }
qw(cc bcc subject message version format);
- $mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
$mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
$mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|;
$mail->{fileid} = time() . '.' . $$ . '.';
diff --git a/SL/Iconv.pm b/SL/Iconv.pm
index 19b8ca169..aba271a0a 100644
--- a/SL/Iconv.pm
+++ b/SL/Iconv.pm
@@ -33,8 +33,8 @@ sub convert {
my ($from_charset, $to_charset, $text) = @_;
- $from_charset ||= Common::DEFAULT_CHARSET;
- $to_charset ||= Common::DEFAULT_CHARSET;
+ $from_charset ||= 'UTF-8';
+ $to_charset ||= 'UTF-8';
my $converter = _get_converter($from_charset, $to_charset);
$text = $converter->convert($text);
diff --git a/SL/Locale.pm b/SL/Locale.pm
index 3216cd270..b6065da77 100644
--- a/SL/Locale.pm
+++ b/SL/Locale.pm
@@ -77,7 +77,6 @@ sub _init {
my $self = shift;
my $country = shift;
- $self->{charset} = Common::DEFAULT_CHARSET;
$self->{countrycode} = $country;
if ($country && -d "locale/$country") {
@@ -87,29 +86,17 @@ sub _init {
eval($code);
close(IN);
}
-
- if (open IN, "<", "locale/$country/charset") {
- $self->{charset} = ;
- close IN;
-
- chomp $self->{charset};
- }
}
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
- $self->{is_utf8} = (any { lc($::lx_office_conf{system}->{dbcharset} || '') eq $_ } qw(utf8 utf-8 unicode)) ? 1 : 0;
-
- if ($self->{is_utf8}) {
- binmode STDOUT, ":utf8";
- binmode STDERR, ":utf8";
- }
+ binmode STDOUT, ":utf8";
+ binmode STDERR, ":utf8";
- $self->{iconv} = SL::Iconv->new($self->{charset}, $db_charset);
- $self->{iconv_reverse} = SL::Iconv->new($db_charset, $self->{charset});
- $self->{iconv_english} = SL::Iconv->new('ASCII', $db_charset);
- $self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', $db_charset);
- $self->{iconv_to_iso8859} = SL::Iconv->new($db_charset, 'ISO-8859-15');
- $self->{iconv_utf8} = SL::Iconv->new('UTF-8', $db_charset);
+ $self->{iconv} = SL::Iconv->new('UTF-8', 'UTF-8');
+ $self->{iconv_reverse} = SL::Iconv->new('UTF-8', 'UTF-8');
+ $self->{iconv_english} = SL::Iconv->new('ASCII', 'UTF-8');
+ $self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', 'UTF-8');
+ $self->{iconv_to_iso8859} = SL::Iconv->new('UTF-8', 'ISO-8859-15');
+ $self->{iconv_utf8} = SL::Iconv->new('UTF-8', 'UTF-8');
$self->_read_special_chars_file($country);
@@ -121,12 +108,6 @@ sub _init {
(qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec));
}
-sub is_utf8 {
- my $self = shift;
- my $handle = shift;
- return $self->{is_utf8} && (!$handle || $handle->is_utf8);
-}
-
sub _handle_markup {
my $self = shift;
my $str = shift;
@@ -514,7 +495,7 @@ sub with_raw_io {
$self->{raw_io_active} = 1;
binmode $fh, ":raw";
$code->();
- binmode $fh, ":utf8" if $self->is_utf8;
+ binmode $fh, ":utf8";
$self->{raw_io_active} = 0;
}
@@ -623,10 +604,6 @@ Add hour:minute:second to the date.
TODO: Describe get_local_time_zone
-=item C
-
-TODO: Describe is_utf8
-
=item C
TODO: Describe lang_to_locale
diff --git a/SL/Mailer.pm b/SL/Mailer.pm
index f5b3b7764..2f2408119 100644
--- a/SL/Mailer.pm
+++ b/SL/Mailer.pm
@@ -190,7 +190,7 @@ sub send {
}
# Set defaults & headers
- $self->{charset} ||= Common::DEFAULT_CHARSET;
+ $self->{charset} = 'UTF-8';
$self->{contenttype} ||= "text/plain";
$self->{headers} = [
Subject => $self->{subject},
diff --git a/SL/Mailer/Sendmail.pm b/SL/Mailer/Sendmail.pm
index ea1e63b8a..3a6c2c6ca 100644
--- a/SL/Mailer/Sendmail.pm
+++ b/SL/Mailer/Sendmail.pm
@@ -18,7 +18,7 @@ sub init {
Rose::Object::init(@_);
- my $email = $::locale->is_utf8 ? Encode::encode('utf-8', $self->myconfig->{email}) : $self->myconfig->{email};
+ my $email = Encode::encode('utf-8', $self->myconfig->{email});
$email =~ s/[^\w\.\-\+=@]//ig;
my %temp_form = ( %{ $self->form }, myconfig_email => $email );
@@ -27,7 +27,7 @@ sub init {
$sendmail = $template->parse_block($sendmail);
$self->{sendmail} = IO::File->new("|$sendmail") || die "sendmail($sendmail): $!";
- $self->{sendmail}->binmode(':utf8') if $::locale->is_utf8;
+ $self->{sendmail}->binmode(':utf8');
}
sub start_mail {
diff --git a/SL/MoreCommon.pm b/SL/MoreCommon.pm
index 41cac3c08..1aa9c2d4c 100644
--- a/SL/MoreCommon.pm
+++ b/SL/MoreCommon.pm
@@ -155,7 +155,7 @@ sub ary_to_hash {
sub uri_encode {
my ($str) = @_;
- $str = Encode::encode('utf-8-strict', $str) if $::locale->is_utf8;
+ $str = Encode::encode('utf-8-strict', $str);
$str =~ s/([^a-zA-Z0-9_.:-])/sprintf("%%%02x", ord($1))/ge;
return $str;
@@ -168,7 +168,7 @@ sub uri_decode {
$str =~ s/\\$//;
$str =~ s/%([0-9a-fA-Z]{2})/pack("C",hex($1))/eg;
- $str = Encode::decode('utf-8-strict', $str) if $::locale->is_utf8;
+ $str = Encode::decode('utf-8-strict', $str);
return $str;
}
diff --git a/SL/Presenter.pm b/SL/Presenter.pm
index 67e1948e4..ade14123b 100644
--- a/SL/Presenter.pm
+++ b/SL/Presenter.pm
@@ -251,7 +251,7 @@ the following variables:
=item * C -- all parameters from C
with the same name they appear in the file (first level is the
-section, second the actual variable, e.g. C,
+section, second the actual variable, e.g. C,
C etc)
=item * C -- C<$::lxdebug>
diff --git a/SL/ReportGenerator.pm b/SL/ReportGenerator.pm
index d9edae200..e965e4422 100644
--- a/SL/ReportGenerator.pm
+++ b/SL/ReportGenerator.pm
@@ -441,7 +441,7 @@ sub generate_pdf_content {
my $num_columns = scalar @visible_columns;
my $num_header_rows = 1;
- my $font_encoding = $::lx_office_conf{system}->{dbcharset} || 'ISO-8859-15';
+ my $font_encoding = 'UTF-8';
foreach my $name (@visible_columns) {
push @column_props, { 'justify' => $self->{columns}->{$name}->{align} eq 'right' ? 'right' : 'left' };
@@ -703,7 +703,7 @@ sub _handle_quoting_and_encoding {
my ($self, $text, $do_unquote) = @_;
$text = $main::locale->unquote_special_chars('HTML', $text) if $do_unquote;
- $text = Encode::encode('UTF-8', $text) if $::locale->is_utf8;
+ $text = Encode::encode('UTF-8', $text);
return $text;
}
diff --git a/SL/Request.pm b/SL/Request.pm
index 860a0f035..26be5f79b 100644
--- a/SL/Request.pm
+++ b/SL/Request.pm
@@ -126,7 +126,7 @@ sub _parse_multipart_formdata {
$content_type = "text/plain";
$boundary_found = 1;
$need_cr = 0;
- $encoding = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
+ $encoding = 'UTF-8';
$transfer_encoding = undef;
last if $last_boundary;
next;
@@ -255,7 +255,6 @@ sub read_cgi_input {
$::lxdebug->enter_sub;
my ($target) = @_;
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
# yes i know, copying all those values around isn't terribly efficient, but
# the old version of dumping everything into form and then launching a
@@ -284,9 +283,9 @@ sub read_cgi_input {
}
}
- my $encoding = delete $temp_target->{INPUT_ENCODING} || $db_charset;
+ my $encoding = delete $temp_target->{INPUT_ENCODING} || 'UTF-8';
- _recode_recursively(SL::Iconv->new($encoding, $db_charset), $temp_target => $target) if keys %$target;
+ _recode_recursively(SL::Iconv->new($encoding, 'UTF-8'), $temp_target => $target) if keys %$target;
if ($target->{RESTORE_FORM_FROM_SESSION_ID}) {
my %temp_form;
diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm
index d99afa43c..2f99f7e18 100644
--- a/SL/Template/LaTeX.pm
+++ b/SL/Template/LaTeX.pm
@@ -338,7 +338,7 @@ sub parse {
$self->{"error"} = "$form->{templates}/$form->{IN}: $!";
return 0;
}
- binmode IN, ":utf8" if $::locale->is_utf8;
+ binmode IN, ":utf8";
my @lines = ;
close(IN);
@@ -374,13 +374,8 @@ sub parse {
return 0;
}
- if ($::locale->is_utf8) {
- binmode OUT, ":utf8";
- print OUT Unicode::Normalize::normalize('C', $new_contents);
-
- } else {
- print OUT $new_contents;
- }
+ binmode OUT, ":utf8";
+ print OUT Unicode::Normalize::normalize('C', $new_contents);
if ($form->{"format"} =~ /postscript/i) {
return $self->convert_to_postscript();
diff --git a/SL/Template/OpenDocument.pm b/SL/Template/OpenDocument.pm
index 4eed5eae2..a90a9aeea 100644
--- a/SL/Template/OpenDocument.pm
+++ b/SL/Template/OpenDocument.pm
@@ -22,7 +22,6 @@ sub new {
my $self = $type->SUPER::new(@_);
$self->{"rnd"} = int(rand(1000000));
- $self->{"iconv"} = SL::Iconv->new($::lx_office_conf{system}->{dbcharset}, "UTF-8");
$self->set_tag_style('<%', '%>');
$self->{quot_re} = '"';
@@ -575,7 +574,6 @@ sub convert_to_pdf {
sub format_string {
my ($self, $variable) = @_;
my $form = $self->{"form"};
- my $iconv = $self->{"iconv"};
$variable = $main::locale->quote_special_chars('Template/OpenDocument', $variable);
@@ -591,7 +589,7 @@ sub format_string {
$variable =~ s|\</${key}\>||gi;
}
- return $iconv->convert($variable);
+ return $variable;
}
sub get_mime_type() {
diff --git a/SL/Template/Plugin/HTMLFixes.pm b/SL/Template/Plugin/HTMLFixes.pm
index 5c6207829..fad69932a 100644
--- a/SL/Template/Plugin/HTMLFixes.pm
+++ b/SL/Template/Plugin/HTMLFixes.pm
@@ -21,7 +21,7 @@ no warnings 'redefine';
sub url {
my ($self, $text) = @_;
return undef unless defined $text;
- $text = Encode::encode('utf-8-strict', $text) if $::locale && $::locale->is_utf8;
+ $text = Encode::encode('utf-8-strict', $text);
$text =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg;
return $text;
}
diff --git a/SL/User.pm b/SL/User.pm
index 9f411a1b5..ca9f19410 100644
--- a/SL/User.pm
+++ b/SL/User.pm
@@ -258,15 +258,12 @@ sub dbcreate {
$dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options)
or $form->dberror;
- my $db_charset = $Common::db_encoding_to_charset{$form->{encoding}};
- $db_charset ||= Common::DEFAULT_CHARSET;
-
my $dbupdater = SL::DBUpgrade2->new(form => $form);
# create the tables
- $dbupdater->process_query($dbh, "sql/lx-office.sql", undef, $db_charset);
+ $dbupdater->process_query($dbh, "sql/lx-office.sql");
# load chart of accounts
- $dbupdater->process_query($dbh, "sql/$form->{chart}-chart.sql", undef, $db_charset);
+ $dbupdater->process_query($dbh, "sql/$form->{chart}-chart.sql");
my $query = qq|UPDATE defaults SET coa = ?, accounting_method = ?, profit_determination = ?, inventory_system = ?, curr = ?|;
do_query($form, $dbh, $query, map { $form->{$_} } qw(chart accounting_method profit_determination inventory_system defaultcurrency));
@@ -399,9 +396,6 @@ sub dbupdate {
closedir(SQLDIR);
}
- my $db_charset = $::lx_office_conf{system}->{dbcharset};
- $db_charset ||= Common::DEFAULT_CHARSET;
-
my $dbupdater = SL::DBUpgrade2->new(form => $form);
foreach my $db (split(/ /, $form->{dbupdate})) {
@@ -441,7 +435,7 @@ sub dbupdate {
# apply upgrade
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $upgradescript");
- $dbupdater->process_file($dbh, "sql/Pg-upgrade/$upgradescript", $str_maxdb, $db_charset);
+ $dbupdater->process_file($dbh, "sql/Pg-upgrade/$upgradescript", $str_maxdb);
$version = $maxdb;
@@ -466,9 +460,8 @@ sub dbupdate2 {
my $dbupdater = $params{updater};
my $db = $params{database};
my $rc = -2;
- my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
- map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $dbupdater->{all_controls} };
+ map { $_->{description} = SL::Iconv::convert($_->{charset}, 'UTF-8', $_->{description}) } values %{ $dbupdater->{all_controls} };
&dbconnect_vars($form, $db);
@@ -487,7 +480,7 @@ sub dbupdate2 {
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}");
print $form->parse_html_template("dbupgrade/upgrade_message2", $control);
- $dbupdater->process_file($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset);
+ $dbupdater->process_file($dbh, "sql/Pg-upgrade2/$control->{file}", $control);
}
$rc = 0;
diff --git a/bin/mozilla/sepa.pl b/bin/mozilla/sepa.pl
index edb6edae1..4e2a223e0 100755
--- a/bin/mozilla/sepa.pl
+++ b/bin/mozilla/sepa.pl
@@ -489,7 +489,7 @@ sub bank_transfer_download_sepa_xml {
my $sepa_xml = SL::SEPA::XML->new('company' => $defaults->company,
'creditor_id' => $defaults->sepa_creditor_id,
- 'src_charset' => $::lx_office_conf{system}->{dbcharset} || 'ISO-8859-15',
+ 'src_charset' => 'UTF-8',
'message_id' => $message_id,
'grouped' => 1,
'collection' => $vc eq 'customer',
diff --git a/bin/mozilla/ustva.pl b/bin/mozilla/ustva.pl
index 06258d63e..22ba04c5c 100644
--- a/bin/mozilla/ustva.pl
+++ b/bin/mozilla/ustva.pl
@@ -903,10 +903,6 @@ sub generate_ustva {
$form->{attachment_filename} =~ s|.*/||;
- # TODO: set Output to UTF-8 or system Preference
- #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
- #my $iconv = $self->{"iconv"};
- #$iconv->convert($variable);
if ($form->{period} =~ /^[4]\d$/ ){
my %periods = ( # Lx => taxbird
'41' => '12',
diff --git a/config/kivitendo.conf.default b/config/kivitendo.conf.default
index 3fb87cdf2..c729c6bde 100644
--- a/config/kivitendo.conf.default
+++ b/config/kivitendo.conf.default
@@ -65,10 +65,6 @@ bind_password =
# and "en" (English, not perfect) are available.
language = de
-# The database charset. Must match the encoding of the database cluster you want to
-# connect to. (Used on the shell command to create a database "pg_createcluster". Option "-e ".)
-dbcharset = UTF-8
-
[features]
# Activate certain optional features and modules.
webdav = 0
diff --git a/doc/UPGRADE b/doc/UPGRADE
index b2af8a32b..f90507c36 100644
--- a/doc/UPGRADE
+++ b/doc/UPGRADE
@@ -18,6 +18,10 @@ Upgrade auf v3.x.0
* Perl v5.10.1 oder neuer wird zwingend vorausgesetzt.
+* Die Datenbank muss zwingend Unicode als Encoding nutzen. Daher wird
+ auch die Konfigurationsvariable "system.dbcharset" nicht mehr
+ unterstützt.
+
* Einführung von Mandanten. Früher war die Konfiguration der
Datenbanken für jeden Benutzer getrennt vorzunehmen. Mit diesem
Release wurden Mandanten eingeführt: ein Mandant bekommt einen Namen
diff --git a/doc/changelog b/doc/changelog
index 1d4e5c058..e1a827f66 100644
--- a/doc/changelog
+++ b/doc/changelog
@@ -67,6 +67,10 @@ Wichtige Ãnderungen:
Die alte URL wird weiterhin funktionieren und lediglich auf die neue
URL umleiten.
+- Datenbanken, die nicht Unicode als Encoding nutzen, werden nicht
+ mehr unterstützt. Die Konfigurationsvariable "system.dbcharset"
+ wurde entfernt.
+
- Upgrades von alten SQL-Ledger-Versionen im Allgemeinen sowie
Upgrades von alten kivitendo-Versionen, die Benutzer noch über die
Datei "users/members" verwaltet haben, werden nicht mehr
diff --git a/doc/dokumentation.xml b/doc/dokumentation.xml
index 1c5f93ca7..3635f6228 100644
--- a/doc/dokumentation.xml
+++ b/doc/dokumentation.xml
@@ -381,10 +381,7 @@ host = localhost
port = 5432
db = kivitendo_auth
user = postgres
-password =
-
-[system]
-dbcharset = UTF-8
+password =
Nutzt man wiederkehrende Rechnungen, kann man unter
[periodic_invoices] den Login eines Benutzers
@@ -428,21 +425,20 @@ dbcharset = UTF-8
PostgreSQL muss auf verschiedene Weisen angepasst werden.
- Zeichensätze/die Verwendung von UTF-8
+ Zeichensätze/die Verwendung von Unicode/UTF-8
- Bei aktuellen Serverinstallationen braucht man hier meist nicht
- eingreifen
+ kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen
+ braucht man hier meist nicht einzugreifen.
- Dieses kann überprüft werden: ist das Encoding der Datenbank
- âtemplate1â âUTF8â, so braucht man nichts weiteres diesbezüglich
- unternehmen. Zum Testen:
+ Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so
+ braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:su postgres
echo '\l' | psql
exit
- Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
- UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
+ Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
+ Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
getan werden:
@@ -453,10 +449,6 @@ exit
Unter anderen Distributionen gibt es ähnliche Methoden.
- Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
- ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
- kivitendo mit ISO-8859-15 als Encoding betrieben werden.
-
Das Encoding einer Datenbank kann in psql mit
\l geprüft werden.
@@ -1243,16 +1235,6 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/
Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
Beispielen ist dies âkivitendoâ).
-
- Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
- wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei config/kivitendo.conf die Variable
- dbcharset im Abschnitt system auf den Wert âISO-8859-15â setzen.
-
- Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
- verwenden müssen, da diese Einstellungen momentan global in kivitendo
- vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
- Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
- angelegt worden sein.
@@ -1681,13 +1663,6 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/
print_templates auf â1â stehen.
Dieses ist die Standardeinstellung.
- Weiterhin muss in der Datei
- config/kivitendo.conf die Variable
- dbcharset im Abschnitt system auf
- die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
- Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
- "UTF-8".
-
Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
@@ -5474,21 +5449,6 @@ file = /tmp/kivitendo-debug.log
Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
den kritischen Pfaden, unter 0,15 sonst.
-
-
- Bekannte Probleme
-
-
- Encoding Awareness
-
- UTF-8 kodierte Installationen sind sehr anfällig gegen
- fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
- falsch kodierte Zeichen eher unwissend, und geben sie einfach
- weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
- das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
- beseitigen.
-
-
@@ -5781,6 +5741,13 @@ sub run {
point.
+
+ Character set
+
+ All files included in a language pack must use UTF-8 as their encoding.
+
+
File structure
@@ -5817,27 +5784,6 @@ sub run {
-
- charset
-
-
- This file should be present.
-
- The charset file describes which
- charset a language package is written in and applies to all
- other language files in the package. It is possible to write
- some language packages without an explicit charset, but it is
- still strongly recommended. You'll never know in what
- environment your language package will be used, and neither
- UTF-8 nor Latin1 are guaranteed.
-
- The whole content of this file is a string that can be
- recognized as a valid charset encoding. Example:
-
- UTF-8
-
-
-
all
diff --git a/doc/html/ch02s04.html b/doc/html/ch02s04.html
index a679e5f11..e9e710d57 100644
--- a/doc/html/ch02s04.html
+++ b/doc/html/ch02s04.html
@@ -52,10 +52,7 @@ host = localhost
port = 5432
db = kivitendo_auth
user = postgres
-password =
-
-[system]
-dbcharset = UTF-8
Nutzt man wiederkehrende Rechnungen, kann man unter
+password =
Nutzt man wiederkehrende Rechnungen, kann man unter
[periodic_invoices] den Login eines Benutzers
angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
mit Informationen über die erstellten Rechnungen bekommt.
kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den Taskserver. Er wird u.a. für Features wie die wiederkehrenden Rechnungen benötigt, erledigt aber auch andere erforderliche Aufgaben
diff --git a/doc/html/ch02s05.html b/doc/html/ch02s05.html
index 9db8fffd7..7eb3cb56b 100644
--- a/doc/html/ch02s05.html
+++ b/doc/html/ch02s05.html
@@ -1,21 +1,14 @@
PostgreSQL muss auf verschiedene Weisen angepasst werden.
2.5.1. Zeichensätze/die Verwendung von UTF-8
Bei aktuellen Serverinstallationen braucht man hier meist nicht
- eingreifen
Dieses kann überprüft werden: ist das Encoding der Datenbank
- âtemplate1â âUTF8â, so braucht man nichts weiteres diesbezüglich
- unternehmen. Zum Testen:
-
-
su postgres
+ 2.5. Anpassung der PostgreSQL-Konfiguration
PostgreSQL muss auf verschiedene Weisen angepasst werden.
2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8
kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen
+ braucht man hier meist nicht einzugreifen.
Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so
+ braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:
su postgres
echo '\l' | psql
-exit
-
- Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
- UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
+exit
Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
+ Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
getan werden:
Die Datenbankversionsnummer muss an die tatsächlich verwendete
- Versionsnummer angepasst werden.
Unter anderen Distributionen gibt es ähnliche Methoden.
Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
- ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
- kivitendo mit ISO-8859-15 als Encoding betrieben werden.
Das Encoding einer Datenbank kann in psql mit
+ Versionsnummer angepasst werden.
Unter anderen Distributionen gibt es ähnliche Methoden.
Das Encoding einer Datenbank kann in psql mit
\l geprüft werden.
2.5.2. Ãnderungen an Konfigurationsdateien
In der Datei postgresql.conf, die je nach
Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
/var/lib/pgsql/data/ oder
diff --git a/doc/html/ch02s06.html b/doc/html/ch02s06.html
index 53fa96a9f..8059a3ef8 100644
--- a/doc/html/ch02s06.html
+++ b/doc/html/ch02s06.html
@@ -1,6 +1,6 @@
Für einen deutlichen Performanceschub sorgt die Ausführung
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
Konfiguration für FastCGI/FCGI beschrieben.
Der Zugriff auf das Programmverzeichnis muss in der Apache
Webserverkonfigurationsdatei httpd.conf eingestellt
diff --git a/doc/html/ch02s07.html b/doc/html/ch02s07.html
index 50542d895..e6202b869 100644
--- a/doc/html/ch02s07.html
+++ b/doc/html/ch02s07.html
@@ -29,7 +29,7 @@
Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
einzubinden. Da das bei neueren Linux-Distributionen aber nicht
zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
- anstelle eines symbolischen Links verwendet werden können.
Kopieren Sie die Datei
scripts/boot/system-v/kivitendo-server
nach /etc/init.d/kivitendo-server. Passen
Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
@@ -37,12 +37,12 @@
Boot-Prozess ein. Dies ist distributionsabhängig:
Debian-basierende Systeme:
update-rc.d kivitendo-task-server defaults
# Nur bei Debian Squeeze und neuer:
insserv kivitendo-task-server
Ãltere OpenSUSE und ältere Fedora Core:
chkconfig --add kivitendo-task-server
Danach kann der Task-Server mit dem folgenden Befehl gestartet
- werden:
/etc/init.d/kivitendo-task-server start
2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)
Kopieren Sie die Datei
+ werden:
/etc/init.d/kivitendo-task-server start
2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)
Kopieren Sie die Datei
scripts/boot/upstart/kivitendo-task-server.conf
nach /etc/init/kivitendo-task-server.conf.
Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
exec ....).
Danach kann der Task-Server mit dem folgenden Befehl gestartet
- werden:
Verlinken Sie die Datei scripts/boot/systemd/kivitendo-task-server.service nach
/etc/systemd/system/. Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
ExecStart=.... und ExecStop=...). Binden Sie das Script in den Boot-Prozess ein.
Alle hierzu benötigten Befehle sehen so aus:
cd /var/www/kivitendo-erp/scripts/boot/systemd
diff --git a/doc/html/ch02s09.html b/doc/html/ch02s09.html
index 92dfcdde2..495958ba1 100644
--- a/doc/html/ch02s09.html
+++ b/doc/html/ch02s09.html
@@ -30,13 +30,7 @@
allen denjenigen Gruppen, die zum Einen dem Mandanten zugeordnet sind und in denen der Benutzer zum Anderen Mitglied ist,
Die Reihenfolge, in der Datenbanken, Mandanten, Gruppen und Benutzer angelegt werden, kann im Prinzip beliebig gewählt
werden. Die folgende Reihenfolge beinhaltet die wenigsten Arbeitsschritte:
Datenbank anlegen
Gruppen anlegen
Benutzer anlegen und Gruppen als Mitglied zuordnen
Mandanten anlegen und Gruppen sowie Benutzer zuweisen
2.9.3. Datenbanken anlegen
Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
- Beispielen ist dies âkivitendoâ).
Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
- wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei config/kivitendo.conf die Variable
- dbcharset im Abschnitt system auf den Wert âISO-8859-15â setzen.
Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
- verwenden müssen, da diese Einstellungen momentan global in kivitendo
- vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
- Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
- angelegt worden sein.
2.9.4. Gruppen anlegen
Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
+ Beispielen ist dies âkivitendoâ).
2.9.4. Gruppen anlegen
Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
Anlegen können Sie die verschiedenen Bereiche wählen, auf die
Mitglieder dieser Gruppe Zugriff haben sollen.
Benutzergruppen werden zwar in der Authentifizierungsdatenbank gespeichert, gelten aber nicht automatisch für alle
diff --git a/doc/html/ch02s12.html b/doc/html/ch02s12.html
index 515b141af..d24a40cfb 100644
--- a/doc/html/ch02s12.html
+++ b/doc/html/ch02s12.html
@@ -8,12 +8,7 @@
config/kivitendo.conf die Variable
opendocument im Abschnitt
print_templates auf â1â stehen.
- Dieses ist die Standardeinstellung.
Weiterhin muss in der Datei
- config/kivitendo.conf die Variable
- dbcharset im Abschnitt system auf
- die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
- Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
- "UTF-8".
Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
+ Dieses ist die Standardeinstellung.
Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
neben OpenOffice.org ab Version 2 auch der âX virtual frame bufferâ
diff --git a/doc/html/ch03s02.html b/doc/html/ch03s02.html
index 46605eb18..ab606295b 100644
--- a/doc/html/ch03s02.html
+++ b/doc/html/ch03s02.html
@@ -560,7 +560,7 @@
invdate
Rechnungsdatum
invnumber
-
Rechnungsnummer
3.2.10. Variablen in anderen Vorlagen
3.2.10.1. Einführung
Die Variablen in anderen Vorlagen sind ähnlich wie in der
+
Rechnungsnummer
3.2.10. Variablen in anderen Vorlagen
3.2.10.1. Einführung
Die Variablen in anderen Vorlagen sind ähnlich wie in der
Rechnung. Allerdings heiÃen die Variablen, die mit
inv beginnen, jetzt anders. Bei den Angeboten
fangen sie mit quo für "quotation" an:
diff --git a/doc/html/ch04.html b/doc/html/ch04.html
index 2bf9b5a9c..955ae9251 100644
--- a/doc/html/ch04.html
+++ b/doc/html/ch04.html
@@ -1,6 +1,6 @@
Globale Variablen liegen in einem speziellen namespace namens
"main", der von überall erreichbar ist. Darüber hinaus sind bareword
globs global und die meisten speziellen Variablen sind...
speziell.
Daraus ergeben sich folgende Formen:
@@ -25,7 +25,7 @@
$PACKAGE::form.
local $form
Alle Ãnderungen an $form werden am Ende
- des scopes zurückgesetzt
4.1.2. Warum sind globale Variablen ein Problem?
Das erste Problem ist FCGIâ¢.
+ des scopes zurückgesetzt
4.1.2. Warum sind globale Variablen ein Problem?
Das erste Problem ist FCGIâ¢.
SQL-Ledger⢠hat fast alles im globalen
namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
Unter FCGI⢠müssen diese Sachen aber wieder
@@ -39,7 +39,7 @@
dies hat, seit der Einführung, u.a. schon so manche langwierige
Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
angegeben werden, werden die nicht geprüft, und somit kann sich
- schnell ein Tippfehler einschleichen.
4.1.3. Kanonische globale Variablen
Um dieses Problem im Griff zu halten gibt es einige wenige
+ schnell ein Tippfehler einschleichen.
4.1.3. Kanonische globale Variablen
Um dieses Problem im Griff zu halten gibt es einige wenige
globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
vorgegebenen Eigenschaften, und alles andere sollte anderweitig
umhergereicht werden.
Diese Variablen sind im Moment die folgenden neun:
@@ -62,7 +62,7 @@
$::request
Damit diese nicht erneut als Müllhalde missbraucht werden, im
Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
- Eigenschaften (Konventionen):
4.1.3.1. $::form
Ist ein Objekt der Klasse
+ Eigenschaften (Konventionen):
4.1.3.1. $::form
Ist ein Objekt der Klasse
"Form"
Wird nach jedem Request gelöscht
Muss auch in Tests und Konsolenscripts vorhanden
sein.
Enthält am Anfang eines Requests die Requestparameter vom
User
Kann zwar intern über Requestgrenzen ein Datenbankhandle
@@ -110,7 +110,7 @@
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"};
push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"};
# ...
-}
4.1.3.2. %::myconfig
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank
+}
4.1.3.2. %::myconfig
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank
zugegriffen wird
Wird bei jedem Request neu erstellt.
Enthält die Userdaten des aktuellen Logins
Sollte nicht ohne Filterung irgendwo gedumpt werden oder
extern serialisiert werden, weil da auch der Datenbankzugriff
für diesen user drinsteht.
Enthält unter anderem Listenbegrenzung vclimit,
@@ -122,10 +122,10 @@
überwiegend die Daten, die sich unter Programm
-> Einstellungen befinden, bzw. die
Informationen über den Benutzer die über die
- Administrator-Schnittstelle eingegeben wurden.
4.1.3.3. $::locale
Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar
+ Administrator-Schnittstelle eingegeben wurden.
4.1.3.3. $::locale
Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar
sein.
Lokalisierung für den aktuellen User. Alle Ãbersetzungen,
- Zahlen- und Datumsformatierungen laufen über dieses Objekt.
4.1.3.4. $::lxdebug
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen
+ Zahlen- und Datumsformatierungen laufen über dieses Objekt.
4.1.3.4. $::lxdebug
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen
Funktionen
$::lxdebug stellt Debuggingfunktionen
bereit, wie "enter_sub" und
@@ -135,14 +135,14 @@
"message" und "dump" mit
denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
packen kann.
Beispielsweise so:
$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig));
-$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
4.1.3.5. $::auth
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
+$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
4.1.3.5. $::auth
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
$::auth stellt Funktionen bereit um die
Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
vom aktuellen User abhängen wird das Objekt aus
Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
Request kurz resettet.
Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
$::auth->client abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
- auth.clients.
4.1.3.6. $::lx_office_conf
Objekt der Klasse
+ auth.clients.
4.1.3.6. $::lx_office_conf
Objekt der Klasse
"SL::LxOfficeConf"
Global gecached
Repräsentation der
config/kivitendo.conf[.default]-Dateien
Globale Konfiguration. Configdateien werden zum Start gelesen
und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
@@ -152,16 +152,16 @@ $main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{
file = /tmp/kivitendo-debug.log
ist der Key file im Programm als
$::lx_office_conf->{debug}{file}
erreichbar.
Warnung
Zugriff auf die Konfiguration erfolgt im Moment über
- Hashkeys, sind also nicht gegen Tippfehler abgesichert.
4.1.3.7. $::instance_conf
Objekt der Klasse
+ Hashkeys, sind also nicht gegen Tippfehler abgesichert.
4.1.3.7. $::instance_conf
Objekt der Klasse
"SL::InstanceConfiguration"
wird pro Request neu erstellt
Funktioniert wie $::lx_office_conf,
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
ist hier eine Mandantendatenbank. Beispielsweise überprüft
- ob die berüchtigte Bestandsmethode zur Anwendung kommt.
4.1.3.8. $::dispatcher
Objekt der Klasse
+ ob die berüchtigte Bestandsmethode zur Anwendung kommt.
4.1.3.8. $::dispatcher
Objekt der Klasse
"SL::Dispatcher"
wird pro Serverprozess erstellt.
enthält Informationen über die technische Verbindung zum
Server
Der dritte Punkt ist auch der einzige Grund warum das Objekt
global gespeichert wird. Wird vermutlich irgendwann in einem anderen
- Objekt untergebracht.
4.1.3.9. $::request
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
+ Objekt untergebracht.
4.1.3.9. $::request
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
$::request ist ein generischer Platz um
Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
at a distance benutzt werden, sondern um lokales memoizing zu
@@ -174,20 +174,20 @@ file = /tmp/kivitendo-debug.log
ist der Key file
$::request
Muss ich von anderen Teilen des Programms lesend drauf
zugreifen? Dann $::request, aber Zugriff über
- Wrappermethode
4.1.4. Ehemalige globale Variablen
Die folgenden Variablen waren einmal im Programm, und wurden
- entfernt.
4.1.4.1. $::cgi
war nötig, weil cookie Methoden nicht als
+ Wrappermethode
4.1.4. Ehemalige globale Variablen
Die folgenden Variablen waren einmal im Programm, und wurden
+ entfernt.
4.1.4.1. $::cgi
war nötig, weil cookie Methoden nicht als
Klassenfunktionen funktionieren
Aufruf als Klasse erzeugt Dummyobjekt was im
Klassennamespace gehalten wird und über Requestgrenzen
leaked
liegt jetzt unter
$::request->{cgi}
-
4.1.4.2. $::all_units
war nötig, weil einige Funktionen in Schleifen zum Teil
+
4.1.4.2. $::all_units
war nötig, weil einige Funktionen in Schleifen zum Teil
ein paar hundert mal pro Request eine Liste der Einheiten
brauchen, und de als Parameter durch einen Riesenstack von
Funktionen geschleift werden müssten.
Liegt jetzt unter
$::request->{cache}{all_units}
Wird nur in
AM->retrieve_all_units() gesetzt oder
- gelesen.
4.1.4.3. %::called_subs
wurde benutzt um callsub deep recursions
+ gelesen.
4.1.4.3. %::called_subs
wurde benutzt um callsub deep recursions
abzufangen.
Wurde entfernt, weil callsub nur einen Bruchteil der
möglichen Rekursioenen darstellt, und da nie welche
auftreten.
komplette recursion protection wurde entfernt.
\ No newline at end of file
diff --git a/doc/html/ch04s02.html b/doc/html/ch04s02.html
index 86a8684e7..d5f370870 100644
--- a/doc/html/ch04s02.html
+++ b/doc/html/ch04s02.html
@@ -34,9 +34,4 @@
4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
sind es je nach Menge der definierten Variablen 1-2s. Ab der
Moose/Rose::DB Version sind es 5-6s.
Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
- den kritischen Pfaden, unter 0,15 sonst.
4.2.5. Bekannte Probleme
4.2.5.1. Encoding Awareness
UTF-8 kodierte Installationen sind sehr anfällig gegen
- fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
- falsch kodierte Zeichen eher unwissend, und geben sie einfach
- weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
- das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
- beseitigen.
\ No newline at end of file
+ den kritischen Pfaden, unter 0,15 sonst.
\ No newline at end of file
diff --git a/doc/html/ch04s04.html b/doc/html/ch04s04.html
index 91d0cd4c3..98d906906 100644
--- a/doc/html/ch04s04.html
+++ b/doc/html/ch04s04.html
@@ -5,7 +5,7 @@
are built. Currently the only language fully supported is German, and
since most of the internal messages are held in English the English
version is usable too.
A stub version of French is included but not functunal at this
- point.
4.4.2. File structure
The structure of locales in kivitendo is:
kivitendo/locale/<langcode>/
where <langcode> stands for an abbreviation of the
+ point.
4.4.2. Character set
All files included in a language pack must use UTF-8 as their encoding.
4.4.3. File structure
The structure of locales in kivitendo is:
kivitendo/locale/<langcode>/
where <langcode> stands for an abbreviation of the
language package. The builtin packages use two letter ISO 639-1 codes,
but the actual name is not relevant for the program and can easily be
extended to IETF language
@@ -14,14 +14,7 @@
recognized:
LANGUAGE
This file is mandatory.
The LANGUAGE file contains the self
descripted name of the language. It should contain a native
representation first, and in parenthesis an english translation
- after that. Example:
Deutsch (German)
charset
This file should be present.
The charset file describes which
- charset a language package is written in and applies to all
- other language files in the package. It is possible to write
- some language packages without an explicit charset, but it is
- still strongly recommended. You'll never know in what
- environment your language package will be used, and neither
- UTF-8 nor Latin1 are guaranteed.
The whole content of this file is a string that can be
- recognized as a valid charset encoding. Example:
UTF-8
all
This file is mandatory.
The central translation file. It is essentially an inline
+ after that. Example:
Deutsch (German)
all
This file is mandatory.
The central translation file. It is essentially an inline
Perl script autogenerated by locales.pl. To
generate it, generate the directory and the two files mentioned
above, and execute the following command:
scripts/locales.pl <langcode>
Otherwise you can simply copy one of the other languages.
diff --git a/doc/html/index.html b/doc/html/index.html
index 565860f54..abda51614 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -1,9 +1,9 @@
- kivitendo 3.0.0: Installation, Konfiguration, Entwicklung
kivitendo 3.0.0: Installation, Konfiguration, Entwicklung