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 @@ - 2.5. Anpassung der PostgreSQL-Konfiguration

2.5. Anpassung der PostgreSQL-Konfiguration

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

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:

pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername

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 @@ - 2.6. Webserver-Konfiguration

2.6. Webserver-Konfiguration

2.6.1. Grundkonfiguration mittels CGI

[Anmerkung]Anmerkung

Für einen deutlichen Performanceschub sorgt die Ausführung + 2.6. Webserver-Konfiguration

2.6. Webserver-Konfiguration

2.6.1. Grundkonfiguration mittels CGI

[Anmerkung]Anmerkung

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.

2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)

Kopieren Sie die Datei + anstelle eines symbolischen Links verwendet werden können.

2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)

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:

service kivitendo-task-server start

2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)

Verlinken Sie die Datei scripts/boot/systemd/kivitendo-task-server.service nach + werden:

service kivitendo-task-server start

2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)

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:

  1. Datenbank anlegen

  2. Gruppen anlegen

  3. Benutzer anlegen und Gruppen als Mitglied zuordnen

  4. 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 @@ - Kapitel 4. Entwicklerdokumentation

Kapitel 4. Entwicklerdokumentation

4.1. Globale Variablen

4.1.1. Wie sehen globale Variablen in Perl aus?

Globale Variablen liegen in einem speziellen namespace namens + Kapitel 4. Entwicklerdokumentation

Kapitel 4. Entwicklerdokumentation

4.1. Globale Variablen

4.1.1. Wie sehen globale Variablen in Perl aus?

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.

    • Cached intern über Requestgrenzen hinweg benutzte Locales

    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]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

$::instance_conf->get_inventory_system eq 'perpetual'

- 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


    Inhaltsverzeichnis

    1. Aktuelle Hinweise
    2. Installation und Grundkonfiguration
    2.1. Übersicht
    2.2. Benötigte Software und Pakete
    2.2.1. Betriebssystem
    2.2.2. Benötigte Perl-Pakete installieren
    2.3. Manuelle Installation des Programmpaketes
    2.4. kivitendo-Konfigurationsdatei
    2.4.1. Einführung
    2.4.2. Abschnitte und Parameter
    2.4.3. Versionen vor 2.6.3
    2.5. Anpassung der PostgreSQL-Konfiguration
    2.5.1. Zeichensätze/die Verwendung von UTF-8
    2.5.2. Änderungen an Konfigurationsdateien
    2.5.3. Erweiterung für servergespeicherte Prozeduren
    2.5.4. Datenbankbenutzer anlegen
    2.6. Webserver-Konfiguration
    2.6.1. Grundkonfiguration mittels CGI
    2.6.2. Konfiguration für FastCGI/FCGI
    2.7. Der Task-Server
    2.7.1. Verfügbare und notwendige Konfigurationsoptionen
    2.7.2. Automatisches Starten des Task-Servers beim Booten
    2.7.3. Wie der Task-Server gestartet und beendet wird
    2.7.4. Task-Server mit mehreren Mandanten
    2.8. Benutzerauthentifizierung und Administratorpasswort
    2.8.1. Grundlagen zur Benutzerauthentifizierung
    2.8.2. Administratorpasswort
    2.8.3. Authentifizierungsdatenbank
    2.8.4. Passwortüberprüfung
    2.8.5. Name des Session-Cookies
    2.8.6. Anlegen der Authentifizierungsdatenbank
    2.9. Mandanten-, Benutzer- und Gruppenverwaltung
    2.9.1. Zusammenhänge
    2.9.2. Mandanten, Benutzer und Gruppen
    2.9.3. Datenbanken anlegen
    2.9.4. Gruppen anlegen
    2.9.5. Benutzer anlegen
    2.9.6. Mandanten anlegen
    2.10. E-Mail-Versand aus kivitendo heraus
    2.10.1. Versand über lokalen E-Mail-Server
    2.10.2. Versand über einen SMTP-Server
    2.11. Drucken mit kivitendo
    2.11.1. Vorlagenverzeichnis anlegen
    2.11.2. Standard
    2.11.3. f-tex
    2.11.4. RB
    2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen
    2.12. OpenDocument-Vorlagen
    2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: + kivitendo 3.0.0: Installation, Konfiguration, Entwicklung

    kivitendo 3.0.0: Installation, Konfiguration, Entwicklung


    Inhaltsverzeichnis

    1. Aktuelle Hinweise
    2. Installation und Grundkonfiguration
    2.1. Übersicht
    2.2. Benötigte Software und Pakete
    2.2.1. Betriebssystem
    2.2.2. Benötigte Perl-Pakete installieren
    2.3. Manuelle Installation des Programmpaketes
    2.4. kivitendo-Konfigurationsdatei
    2.4.1. Einführung
    2.4.2. Abschnitte und Parameter
    2.4.3. Versionen vor 2.6.3
    2.5. Anpassung der PostgreSQL-Konfiguration
    2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8
    2.5.2. Änderungen an Konfigurationsdateien
    2.5.3. Erweiterung für servergespeicherte Prozeduren
    2.5.4. Datenbankbenutzer anlegen
    2.6. Webserver-Konfiguration
    2.6.1. Grundkonfiguration mittels CGI
    2.6.2. Konfiguration für FastCGI/FCGI
    2.7. Der Task-Server
    2.7.1. Verfügbare und notwendige Konfigurationsoptionen
    2.7.2. Automatisches Starten des Task-Servers beim Booten
    2.7.3. Wie der Task-Server gestartet und beendet wird
    2.7.4. Task-Server mit mehreren Mandanten
    2.8. Benutzerauthentifizierung und Administratorpasswort
    2.8.1. Grundlagen zur Benutzerauthentifizierung
    2.8.2. Administratorpasswort
    2.8.3. Authentifizierungsdatenbank
    2.8.4. Passwortüberprüfung
    2.8.5. Name des Session-Cookies
    2.8.6. Anlegen der Authentifizierungsdatenbank
    2.9. Mandanten-, Benutzer- und Gruppenverwaltung
    2.9.1. Zusammenhänge
    2.9.2. Mandanten, Benutzer und Gruppen
    2.9.3. Datenbanken anlegen
    2.9.4. Gruppen anlegen
    2.9.5. Benutzer anlegen
    2.9.6. Mandanten anlegen
    2.10. E-Mail-Versand aus kivitendo heraus
    2.10.1. Versand über lokalen E-Mail-Server
    2.10.2. Versand über einen SMTP-Server
    2.11. Drucken mit kivitendo
    2.11.1. Vorlagenverzeichnis anlegen
    2.11.2. Standard
    2.11.3. f-tex
    2.11.4. RB
    2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen
    2.12. OpenDocument-Vorlagen
    2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR
    2.13.1. Einführung
    2.13.2. Konfigurationsparameter
    2.13.3. Festlegen der Parameter
    2.13.4. Bemerkungen zu Bestandsmethode
    2.13.5. Bekannte Probleme
    2.14. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb
    2.14.1. Einführung
    2.14.2. Konto 3804 manuell anlegen
    2.15. Einstellungen pro Mandant
    2.16. kivitendo ERP verwenden
    3. Features und Funktionen
    3.1. Wiederkehrende Rechnungen
    3.1.1. Einführung
    3.1.2. Konfiguration
    3.1.3. Spezielle Variablen
    3.1.4. Auflisten
    3.1.5. Erzeugung der eigentlichen Rechnungen
    3.1.6. Erste Rechnung für aktuellen Monat erstellen
    3.2. Dokumentenvorlagen und verfügbare Variablen
    3.2.1. Einführung
    3.2.2. Variablen ausgeben
    3.2.3. Verwendung in Druckbefehlen
    3.2.4. Anfang und Ende der Tags verändern
    3.2.5. Zuordnung von den Dateinamen zu den Funktionen
    3.2.6. Sprache, Drucker und E-Mail
    3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
    3.2.8. Variablen in Rechnungen
    3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren
    3.2.10. Variablen in anderen Vorlagen
    3.2.11. Blöcke, bedingte Anweisungen und Schleifen
    3.2.12. Markup-Code zur Textformatierung innerhalb von - Formularen
    3.3. Excel-Vorlagen
    3.3.1. Zusammenfassung
    3.3.2. Bedienung
    3.3.3. Variablensyntax
    3.3.4. Einschränkungen
    4. Entwicklerdokumentation
    4.1. Globale Variablen
    4.1.1. Wie sehen globale Variablen in Perl aus?
    4.1.2. Warum sind globale Variablen ein Problem?
    4.1.3. Kanonische globale Variablen
    4.1.4. Ehemalige globale Variablen
    4.2. Entwicklung unter FastCGI
    4.2.1. Allgemeines
    4.2.2. Programmende und Ausnahmen
    4.2.3. Globale Variablen
    4.2.4. Performance und Statistiken
    4.2.5. Bekannte Probleme
    4.3. SQL-Upgradedateien
    4.3.1. Einführung
    4.3.2. Format der Kontrollinformationen
    4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten
    4.3.4. Hilfsscript dbupgrade2_tool.pl
    4.4. Translations and languages
    4.4.1. Introduction
    4.4.2. File structure
    4.5. Die kivitendo-Test-Suite
    4.5.1. Einführung
    4.5.2. Voraussetzungen
    4.5.3. + Formularen
    3.3. Excel-Vorlagen
    3.3.1. Zusammenfassung
    3.3.2. Bedienung
    3.3.3. Variablensyntax
    3.3.4. Einschränkungen
    4. Entwicklerdokumentation
    4.1. Globale Variablen
    4.1.1. Wie sehen globale Variablen in Perl aus?
    4.1.2. Warum sind globale Variablen ein Problem?
    4.1.3. Kanonische globale Variablen
    4.1.4. Ehemalige globale Variablen
    4.2. Entwicklung unter FastCGI
    4.2.1. Allgemeines
    4.2.2. Programmende und Ausnahmen
    4.2.3. Globale Variablen
    4.2.4. Performance und Statistiken
    4.3. SQL-Upgradedateien
    4.3.1. Einführung
    4.3.2. Format der Kontrollinformationen
    4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten
    4.3.4. Hilfsscript dbupgrade2_tool.pl
    4.4. Translations and languages
    4.4.1. Introduction
    4.4.2. Character set
    4.4.3. File structure
    4.5. Die kivitendo-Test-Suite
    4.5.1. Einführung
    4.5.2. Voraussetzungen
    4.5.3. Existierende Tests ausführen
    4.5.4. Bedeutung der verschiedenen Test-Scripte diff --git a/doc/kivitendo-Dokumentation.pdf b/doc/kivitendo-Dokumentation.pdf index 23acc4d6c..f5ffee6a4 100644 Binary files a/doc/kivitendo-Dokumentation.pdf and b/doc/kivitendo-Dokumentation.pdf differ diff --git a/locale/de/all b/locale/de/all index 713abd0a6..365415b5c 100755 --- a/locale/de/all +++ b/locale/de/all @@ -1,6 +1,6 @@ #!/usr/bin/perl # -*- coding: utf-8; -*- -# vim: fenc=UTF-8 +# vim: fenc=utf-8 use utf8; @@ -2457,7 +2457,7 @@ $self->{texts} = { 'You should create a backup of the database before proceeding because the backup might not be reversible.' => 'Sie sollten eine Sicherungskopie der Datenbank erstellen, bevor Sie fortfahren, da die Aktualisierung unter Umständen nicht umkehrbar ist.', 'You\'re not editing a file.' => 'Sie bearbeiten momentan keine Datei.', 'You\'ve already chosen the following limitations:' => 'Sie haben bereits die folgenden Einschränkungen vorgenommen:', - 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure kivitendo to use UTF-8 as well.' => 'Ihre PostgreSQL-Installation benutzt UTF-8 als Zeichensatz. Sie müssen deshalb kivitendo so konfigurieren, dass es ebenfalls UTF-8 als Zeichensatz benutzt.', + 'Your PostgreSQL installationen does not use Unicode as its encoding. This is not supported anymore.' => 'Ihre PostgreSQL-Installation benutzt ein anderes Encoding als Unicode. Dies wird nicht mehr unterstützt.', 'Your TODO list' => 'Ihre Aufgabenliste', 'Your account number' => 'Ihre Kontonummer', 'Your bank' => 'Der Name Ihrer Bank', diff --git a/locale/de/charset b/locale/de/charset deleted file mode 100644 index 7edc66b06..000000000 --- a/locale/de/charset +++ /dev/null @@ -1 +0,0 @@ -UTF-8 diff --git a/locale/en/charset b/locale/en/charset deleted file mode 100644 index 7edc66b06..000000000 --- a/locale/en/charset +++ /dev/null @@ -1 +0,0 @@ -UTF-8 diff --git a/scripts/dbupgrade2_tool.pl b/scripts/dbupgrade2_tool.pl index 3b9faf976..9b1e9e0d8 100755 --- a/scripts/dbupgrade2_tool.pl +++ b/scripts/dbupgrade2_tool.pl @@ -349,9 +349,6 @@ sub apply_upgrade { exit 0; } - my $db_charset = $::lx_office_conf{system}->{dbcharset}; - $db_charset ||= Common::DEFAULT_CHARSET(); - foreach my $control (@upgradescripts) { $control->{file} =~ /\.(sql|pl)$/; my $file_type = $1; @@ -360,9 +357,9 @@ sub apply_upgrade { print "Applying upgrade $control->{file}\n"; if ($file_type eq "sql") { - $dbupgrader->process_query($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset); + $dbupgrader->process_query($dbh, "sql/Pg-upgrade2/$control->{file}", $control); } else { - $dbupgrader->process_perl_script($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset); + $dbupgrader->process_perl_script($dbh, "sql/Pg-upgrade2/$control->{file}", $control); } } diff --git a/scripts/locales.pl b/scripts/locales.pl index 53c3af5be..ccccea831 100755 --- a/scripts/locales.pl +++ b/scripts/locales.pl @@ -120,9 +120,6 @@ if (-f "$locales_dir/lost") { unlink "$locales_dir/lost"; } -my $charset = slurp("$locales_dir/charset") || 'utf-8'; -chomp $charset; - my %old_texts = %{ $self->{texts} || {} }; handle_file(@{ $_ }) for @progfiles; @@ -717,10 +714,7 @@ sub generate_file { open my $fh, '>:encoding(utf8)', $file or die "$! : $file"; - $charset =~ s/\r?\n//g; - my $emacs_charset = lc $charset; - - print $fh "#!/usr/bin/perl\n# -*- coding: $emacs_charset; -*-\n# vim: fenc=$charset\n\nuse utf8;\n\n"; + print $fh "#!/usr/bin/perl\n# -*- coding: utf-8; -*-\n# vim: fenc=utf-8\n\nuse utf8;\n\n"; print $fh $header, "\n" if $header; print $fh "$data_name = $delim[0]\n" if $data_name;