Revision dbda14c2
Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt
SL/AM.pm | ||
---|---|---|
1021 | 1021 |
close(TEMPLATE); |
1022 | 1022 |
} |
1023 | 1023 |
|
1024 |
$content = Encode::decode('utf-8-strict', $content) if $::locale->is_utf8;
|
|
1024 |
$content = Encode::decode('utf-8-strict', $content); |
|
1025 | 1025 |
|
1026 | 1026 |
$main::lxdebug->leave_sub(); |
1027 | 1027 |
|
... | ... | |
1038 | 1038 |
my $error = ""; |
1039 | 1039 |
|
1040 | 1040 |
if (open(TEMPLATE, ">", $filename)) { |
1041 |
$content = Encode::encode('utf-8-strict', $content) if $::locale->is_utf8;
|
|
1041 |
$content = Encode::encode('utf-8-strict', $content); |
|
1042 | 1042 |
$content =~ s/\r\n/\n/g; |
1043 | 1043 |
print(TEMPLATE $content); |
1044 | 1044 |
close(TEMPLATE); |
SL/Auth.pm | ||
---|---|---|
251 | 251 |
|
252 | 252 |
$main::lxdebug->message(LXDebug->DEBUG1, "Auth::dbconnect DSN: $dsn"); |
253 | 253 |
|
254 |
$self->{dbh} = SL::DBConnect->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 1 });
|
|
254 |
$self->{dbh} = SL::DBConnect->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => 1, AutoCommit => 1 });
|
|
255 | 255 |
|
256 | 256 |
if (!$may_fail && !$self->{dbh}) { |
257 | 257 |
$main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr); |
... | ... | |
326 | 326 |
|
327 | 327 |
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database DSN: $dsn"); |
328 | 328 |
|
329 |
my $charset = $::lx_office_conf{system}->{dbcharset}; |
|
330 |
$charset ||= Common::DEFAULT_CHARSET; |
|
331 |
my $encoding = $Common::charset_to_db_encoding{$charset}; |
|
332 |
$encoding ||= 'UNICODE'; |
|
333 |
|
|
334 |
my $dbh = SL::DBConnect->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => scalar($charset =~ m/^utf-?8$/i) }); |
|
329 |
my $dbh = SL::DBConnect->connect($dsn, $params{superuser}, $params{superuser_password}, { pg_enable_utf8 => 1 }); |
|
335 | 330 |
|
336 | 331 |
if (!$dbh) { |
337 | 332 |
$main::form->error($main::locale->text('The connection to the template database failed:') . "\n" . $DBI::errstr); |
338 | 333 |
} |
339 | 334 |
|
340 |
my $query = qq|CREATE DATABASE "$cfg->{db}" OWNER "$cfg->{user}" TEMPLATE "$params{template}" ENCODING '$encoding'|;
|
|
335 |
my $query = qq|CREATE DATABASE "$cfg->{db}" OWNER "$cfg->{user}" TEMPLATE "$params{template}" ENCODING 'UNICODE'|;
|
|
341 | 336 |
|
342 | 337 |
$main::lxdebug->message(LXDebug->DEBUG1(), "Auth::create_database query: $query"); |
343 | 338 |
|
... | ... | |
349 | 344 |
$query = qq|SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'template0'|; |
350 | 345 |
my ($cluster_encoding) = $dbh->selectrow_array($query); |
351 | 346 |
|
352 |
if ($cluster_encoding && ($cluster_encoding =~ m/^(?:UTF-?8|UNICODE)$/i) && ($encoding !~ m/^(?:UTF-?8|UNICODE)$/i)) {
|
|
353 |
$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.');
|
|
347 |
if ($cluster_encoding && ($cluster_encoding !~ m/^(?:UTF-?8|UNICODE)$/i)) { |
|
348 |
$error = $::locale->text('Your PostgreSQL installationen does not use Unicode as its encoding. This is not supported anymore.');
|
|
354 | 349 |
} |
355 | 350 |
|
356 | 351 |
$dbh->disconnect(); |
... | ... | |
369 | 364 |
my $self = shift; |
370 | 365 |
my $dbh = $self->dbconnect(); |
371 | 366 |
|
372 |
my $charset = $::lx_office_conf{system}->{dbcharset}; |
|
373 |
$charset ||= Common::DEFAULT_CHARSET; |
|
374 |
|
|
375 | 367 |
$dbh->rollback(); |
376 |
SL::DBUpgrade2->new(form => $::form)->process_query($dbh, 'sql/auth_db.sql', undef, $charset);
|
|
368 |
SL::DBUpgrade2->new(form => $::form)->process_query($dbh, 'sql/auth_db.sql'); |
|
377 | 369 |
|
378 | 370 |
$main::lxdebug->leave_sub(); |
379 | 371 |
} |
SL/BackgroundJob/SelfTest.pm | ||
---|---|---|
124 | 124 |
|
125 | 125 |
my ($output, $content_type) = $self->_prepare_report; |
126 | 126 |
|
127 |
my $mail = Mailer->new(charset => $::locale->is_utf8 ? 'UTF-8' : Common->DEFAULT_CHARSET );
|
|
127 |
my $mail = Mailer->new; |
|
128 | 128 |
$mail->{from} = $self->config->{email_from}; |
129 | 129 |
$mail->{to} = $email; |
130 | 130 |
$mail->{subject} = $self->config->{email_subject}; |
SL/Common.pm | ||
---|---|---|
17 | 17 |
|
18 | 18 |
use SL::DBUtils; |
19 | 19 |
|
20 |
use vars qw(@db_encodings %db_encoding_to_charset %charset_to_db_encoding); |
|
21 |
|
|
22 |
@db_encodings = ( |
|
23 |
{ "label" => "ASCII", "dbencoding" => "SQL_ASCII", "charset" => "ASCII" }, |
|
24 |
{ "label" => "UTF-8 Unicode", "dbencoding" => "UNICODE", "charset" => "UTF-8" }, |
|
25 |
{ "label" => "ISO 8859-1", "dbencoding" => "LATIN1", "charset" => "ISO-8859-1" }, |
|
26 |
{ "label" => "ISO 8859-2", "dbencoding" => "LATIN2", "charset" => "ISO-8859-2" }, |
|
27 |
{ "label" => "ISO 8859-3", "dbencoding" => "LATIN3", "charset" => "ISO-8859-3" }, |
|
28 |
{ "label" => "ISO 8859-4", "dbencoding" => "LATIN4", "charset" => "ISO-8859-4" }, |
|
29 |
{ "label" => "ISO 8859-5", "dbencoding" => "LATIN5", "charset" => "ISO-8859-5" }, |
|
30 |
{ "label" => "ISO 8859-15", "dbencoding" => "LATIN9", "charset" => "ISO-8859-15" }, |
|
31 |
{ "label" => "KOI8-R", "dbencoding" => "KOI8", "charset" => "KOI8-R" }, |
|
32 |
{ "label" => "Windows CP1251", "dbencoding" => "WIN", "charset" => "CP1251" }, |
|
33 |
{ "label" => "Windows CP866", "dbencoding" => "ALT", "charset" => "CP866" }, |
|
34 |
); |
|
35 |
|
|
36 |
%db_encoding_to_charset = map { $_->{dbencoding}, $_->{charset} } @db_encodings; |
|
37 |
%charset_to_db_encoding = map { $_->{charset}, $_->{dbencoding} } @db_encodings; |
|
38 |
|
|
39 |
use constant DEFAULT_CHARSET => 'ISO-8859-15'; |
|
40 |
|
|
41 | 20 |
sub unique_id { |
42 | 21 |
my ($a, $b) = gettimeofday(); |
43 | 22 |
return "${a}-${b}-${$}"; |
SL/Controller/Base.pm | ||
---|---|---|
116 | 116 |
: 'application/json'; |
117 | 117 |
|
118 | 118 |
print $::form->create_http_response(content_type => $content_type, |
119 |
charset => $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET());
|
|
119 |
charset => 'UTF-8');
|
|
120 | 120 |
} |
121 | 121 |
} |
122 | 122 |
|
SL/DB.pm | ||
---|---|---|
42 | 42 |
driver => 'Pg', |
43 | 43 |
european_dates => ((SL::DBConnect->get_datestyle || '') =~ m/european/i) ? 1 : 0, |
44 | 44 |
connect_options => { |
45 |
pg_enable_utf8 => $::locale && $::locale->is_utf8,
|
|
45 |
pg_enable_utf8 => 1,
|
|
46 | 46 |
}, |
47 | 47 |
); |
48 | 48 |
|
SL/DBConnect.pm | ||
---|---|---|
72 | 72 |
sub get_options { |
73 | 73 |
my $self = shift; |
74 | 74 |
my $options = { |
75 |
pg_enable_utf8 => $::locale->is_utf8,
|
|
75 |
pg_enable_utf8 => 1,
|
|
76 | 76 |
@_ |
77 | 77 |
}; |
78 | 78 |
|
SL/DBUpgrade2.pm | ||
---|---|---|
82 | 82 |
next if ($control->{ignore}); |
83 | 83 |
|
84 | 84 |
$control->{charset} = 'UTF-8' if $file =~ m/\.pl$/; |
85 |
$control->{charset} = $control->{charset} || $control->{encoding} || Common::DEFAULT_CHARSET;
|
|
85 |
$control->{charset} = $control->{charset} || $control->{encoding} || 'UTF-8';
|
|
86 | 86 |
|
87 | 87 |
if (!$control->{"tag"}) { |
88 | 88 |
_control_error($form, $file_name, $locale->text("Missing 'tag' field.")) ; |
... | ... | |
133 | 133 |
sub process_query { |
134 | 134 |
$::lxdebug->enter_sub(); |
135 | 135 |
|
136 |
my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
|
|
136 |
my ($self, $dbh, $filename, $version_or_control) = @_; |
|
137 | 137 |
|
138 | 138 |
my $form = $self->{form}; |
139 | 139 |
my $fh = IO::File->new($filename, "r") or $form->error("$filename : $!\n"); |
... | ... | |
141 | 141 |
my $sth; |
142 | 142 |
my @quote_chars; |
143 | 143 |
|
144 |
my $file_charset = Common::DEFAULT_CHARSET;
|
|
144 |
my $file_charset = 'UTF-8';
|
|
145 | 145 |
while (<$fh>) { |
146 | 146 |
last if !/^--/; |
147 | 147 |
next if !/^--\s*\@(?:charset|encoding):\s*(.+)/; |
... | ... | |
150 | 150 |
} |
151 | 151 |
$fh->seek(0, SEEK_SET); |
152 | 152 |
|
153 |
$db_charset ||= Common::DEFAULT_CHARSET; |
|
154 |
|
|
155 | 153 |
$dbh->begin_work(); |
156 | 154 |
|
157 | 155 |
while (<$fh>) { |
158 |
$_ = SL::Iconv::convert($file_charset, $db_charset, $_);
|
|
156 |
$_ = SL::Iconv::convert($file_charset, 'UTF-8', $_);
|
|
159 | 157 |
|
160 | 158 |
# Remove DOS and Unix style line endings. |
161 | 159 |
chomp; |
... | ... | |
241 | 239 |
sub process_perl_script { |
242 | 240 |
$::lxdebug->enter_sub(); |
243 | 241 |
|
244 |
my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
|
|
242 |
my ($self, $dbh, $filename, $version_or_control) = @_; |
|
245 | 243 |
|
246 | 244 |
my %form_values = map { $_ => $::form->{$_} } qw(dbconnect dbdefault dbhost dbmbkiviunstable dbname dboptions dbpasswd dbport dbupdate dbuser login template_object version); |
247 | 245 |
|
... | ... | |
288 | 286 |
} |
289 | 287 |
|
290 | 288 |
sub process_file { |
291 |
my ($self, $dbh, $filename, $version_or_control, $db_charset) = @_;
|
|
289 |
my ($self, $dbh, $filename, $version_or_control) = @_; |
|
292 | 290 |
|
293 | 291 |
if ($filename =~ m/sql$/) { |
294 |
$self->process_query($dbh, $filename, $version_or_control, $db_charset);
|
|
292 |
$self->process_query($dbh, $filename, $version_or_control); |
|
295 | 293 |
} else { |
296 |
$self->process_perl_script($dbh, $filename, $version_or_control, $db_charset);
|
|
294 |
$self->process_perl_script($dbh, $filename, $version_or_control); |
|
297 | 295 |
} |
298 | 296 |
} |
299 | 297 |
|
... | ... | |
357 | 355 |
|
358 | 356 |
return 0 if !@unapplied_scripts; |
359 | 357 |
|
360 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
361 | 358 |
$self->{form}->{login} ||= 'admin'; |
362 | 359 |
|
363 |
map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $self->{all_controls} };
|
|
360 |
map { $_->{description} = SL::Iconv::convert($_->{charset}, 'UTF-8', $_->{description}) } values %{ $self->{all_controls} };
|
|
364 | 361 |
|
365 | 362 |
if ($called_from_admin) { |
366 | 363 |
$self->{form}->{title} = $::locale->text('Dataset upgrade'); |
... | ... | |
373 | 370 |
$::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}"); |
374 | 371 |
print $self->{form}->parse_html_template("dbupgrade/upgrade_message2", $control); |
375 | 372 |
|
376 |
$self->process_file($dbh, "sql/Pg-upgrade2-auth/$control->{file}", $control, $db_charset);
|
|
373 |
$self->process_file($dbh, "sql/Pg-upgrade2-auth/$control->{file}", $control); |
|
377 | 374 |
} |
378 | 375 |
|
379 | 376 |
print $self->{form}->parse_html_template("dbupgrade/footer", { is_admin => 1 }) if $called_from_admin; |
... | ... | |
617 | 614 |
found). Sets C<$Self->{all_controls}> to the list of database |
618 | 615 |
scripts. |
619 | 616 |
|
620 |
=item C<process_file $dbh, $filename, $version_or_control, $db_charset>
|
|
617 |
=item C<process_file $dbh, $filename, $version_or_control> |
|
621 | 618 |
|
622 | 619 |
Applies a single database upgrade file. Calls L<process_perl_script> |
623 | 620 |
for Perl update files and C<process_query> for SQL update |
624 | 621 |
files. Requires an open database handle(C<$dbh>), the file name |
625 |
(C<$filename>), a hash structure of the file's control fields as |
|
626 |
produced by L<parse_dbupdate_controls> (C<$version_or_control>) and |
|
627 |
the database charset (for on-the-fly charset recoding of the script if |
|
628 |
required, C<$db_charset>). |
|
622 |
(C<$filename>) and a hash structure of the file's control fields as |
|
623 |
produced by L<parse_dbupdate_controls> (C<$version_or_control>). |
|
629 | 624 |
|
630 | 625 |
Returns the result of the actual function called. |
631 | 626 |
|
632 |
=item C<process_perl_script $dbh, $filename, $version_or_control, $db_charset>
|
|
627 |
=item C<process_perl_script $dbh, $filename, $version_or_control> |
|
633 | 628 |
|
634 | 629 |
Applies a single Perl database upgrade file. Requires an open database |
635 |
handle(C<$dbh>), the file name (C<$filename>), a hash structure of the |
|
636 |
file's control fields as produced by L<parse_dbupdate_controls> |
|
637 |
(C<$version_or_control>) and the database charset (for on-the-fly |
|
638 |
charset recoding of the script if required, C<$db_charset>). |
|
630 |
handle(C<$dbh>), the file name (C<$filename>) and a hash structure of |
|
631 |
the file's control fields as produced by L<parse_dbupdate_controls> |
|
632 |
(C<$version_or_control>). |
|
639 | 633 |
|
640 | 634 |
Perl scripts are executed via L<eval>. If L<eval> returns falsish then |
641 | 635 |
an error is expected. There are two special return values: If the |
... | ... | |
675 | 669 |
} |
676 | 670 |
} |
677 | 671 |
|
678 |
=item C<process_query $dbh, $filename, $version_or_control, $db_charset>
|
|
672 |
=item C<process_query $dbh, $filename, $version_or_control> |
|
679 | 673 |
|
680 | 674 |
Applies a single SQL database upgrade file. Requires an open database |
681 |
handle(C<$dbh>), the file name (C<$filename>), a hash structure of the |
|
682 |
ofile's control fields as produced by L<parse_dbupdate_controls> |
|
683 |
(C<$version_or_control>) and the database charset (for on-the-fly |
|
684 |
charset recoding of the script if required, C<$db_charset>). |
|
675 |
handle(C<$dbh>), the file name (C<$filename>), and a hash structure of |
|
676 |
the file's control fields as produced by L<parse_dbupdate_controls> |
|
677 |
(C<$version_or_control>). |
|
685 | 678 |
|
686 | 679 |
=item C<sort_dbupdate_controls> |
687 | 680 |
|
SL/DBUpgrade2/Base.pm | ||
---|---|---|
59 | 59 |
|
60 | 60 |
my $error = $handle ? $handle->errstr : $self->dbh->errstr; |
61 | 61 |
|
62 |
return $::locale->is_utf8 ? Encode::decode('utf-8', $error) : $error;
|
|
62 |
return Encode::decode('utf-8', $error);
|
|
63 | 63 |
} |
64 | 64 |
|
65 | 65 |
sub check_coa { |
SL/DN.pm | ||
---|---|---|
369 | 369 |
|
370 | 370 |
my $template = SL::Template::create(type => 'PlainText', form => $form, myconfig => $myconfig); |
371 | 371 |
my $mail = Mailer->new(); |
372 |
$mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
373 | 372 |
$mail->{from} = $myconfig->{email}; |
374 | 373 |
$mail->{to} = $ref->{recipient}; |
375 | 374 |
$mail->{subject} = $template->parse_block($ref->{email_subject}); |
SL/FCGIFixes.pm | ||
---|---|---|
25 | 25 |
|
26 | 26 |
sub fix_print_and_internal_encoding_after_0_68 { |
27 | 27 |
return if version->new("$FCGI::VERSION")->numify <= version->new("0.68")->numify; |
28 |
return if lc($::lx_office_conf{system}->{dbcharset}) !~ m/^(?:utf-?8|unicode)$/; |
|
29 | 28 |
|
30 | 29 |
my $encoder = Encode::find_encoding('UTF-8'); |
31 | 30 |
my $original_fcgi_print = \&FCGI::Stream::PRINT; |
SL/Form.pm | ||
---|---|---|
447 | 447 |
$::lxdebug->enter_sub; |
448 | 448 |
|
449 | 449 |
my ($self, %params) = @_; |
450 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
451 | 450 |
my @header; |
452 | 451 |
|
453 | 452 |
$::lxdebug->leave_sub and return if !$ENV{HTTP_USER_AGENT} || $self->{header}++; |
... | ... | |
499 | 498 |
); |
500 | 499 |
|
501 | 500 |
# output |
502 |
print $self->create_http_response(content_type => 'text/html', charset => $db_charset);
|
|
501 |
print $self->create_http_response(content_type => 'text/html', charset => 'UTF-8');
|
|
503 | 502 |
print $doctypes{$params{doctype} || 'transitional'}, $/; |
504 | 503 |
print <<EOT; |
505 | 504 |
<html> |
506 | 505 |
<head> |
507 |
<meta http-equiv="Content-Type" content="text/html; charset=$db_charset">
|
|
506 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
508 | 507 |
<title>$self->{titlebar}</title> |
509 | 508 |
EOT |
510 | 509 |
print " $_\n" for @header; |
... | ... | |
543 | 542 |
|
544 | 543 |
my ($self) = @_; |
545 | 544 |
|
546 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
547 |
my $output = $::request->{cgi}->header('-charset' => $db_charset); |
|
545 |
my $output = $::request->{cgi}->header('-charset' => 'UTF-8'); |
|
548 | 546 |
|
549 | 547 |
$main::lxdebug->leave_sub(); |
550 | 548 |
|
... | ... | |
616 | 614 |
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig; |
617 | 615 |
} |
618 | 616 |
|
619 |
$additional_params->{"conf_dbcharset"} = $::lx_office_conf{system}->{dbcharset}; |
|
620 | 617 |
$additional_params->{"conf_webdav"} = $::lx_office_conf{features}->{webdav}; |
621 | 618 |
$additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex}; |
622 | 619 |
$additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument}; |
... | ... | |
1100 | 1097 |
|
1101 | 1098 |
map { $mail->{$_} = $self->{$_} } |
1102 | 1099 |
qw(cc bcc subject message version format); |
1103 |
$mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
1104 | 1100 |
$mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email}; |
1105 | 1101 |
$mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|; |
1106 | 1102 |
$mail->{fileid} = time() . '.' . $$ . '.'; |
SL/Iconv.pm | ||
---|---|---|
33 | 33 |
|
34 | 34 |
my ($from_charset, $to_charset, $text) = @_; |
35 | 35 |
|
36 |
$from_charset ||= Common::DEFAULT_CHARSET;
|
|
37 |
$to_charset ||= Common::DEFAULT_CHARSET;
|
|
36 |
$from_charset ||= 'UTF-8';
|
|
37 |
$to_charset ||= 'UTF-8';
|
|
38 | 38 |
|
39 | 39 |
my $converter = _get_converter($from_charset, $to_charset); |
40 | 40 |
$text = $converter->convert($text); |
SL/Locale.pm | ||
---|---|---|
77 | 77 |
my $self = shift; |
78 | 78 |
my $country = shift; |
79 | 79 |
|
80 |
$self->{charset} = Common::DEFAULT_CHARSET; |
|
81 | 80 |
$self->{countrycode} = $country; |
82 | 81 |
|
83 | 82 |
if ($country && -d "locale/$country") { |
... | ... | |
87 | 86 |
eval($code); |
88 | 87 |
close(IN); |
89 | 88 |
} |
90 |
|
|
91 |
if (open IN, "<", "locale/$country/charset") { |
|
92 |
$self->{charset} = <IN>; |
|
93 |
close IN; |
|
94 |
|
|
95 |
chomp $self->{charset}; |
|
96 |
} |
|
97 | 89 |
} |
98 | 90 |
|
99 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
100 |
$self->{is_utf8} = (any { lc($::lx_office_conf{system}->{dbcharset} || '') eq $_ } qw(utf8 utf-8 unicode)) ? 1 : 0; |
|
101 |
|
|
102 |
if ($self->{is_utf8}) { |
|
103 |
binmode STDOUT, ":utf8"; |
|
104 |
binmode STDERR, ":utf8"; |
|
105 |
} |
|
91 |
binmode STDOUT, ":utf8"; |
|
92 |
binmode STDERR, ":utf8"; |
|
106 | 93 |
|
107 |
$self->{iconv} = SL::Iconv->new($self->{charset}, $db_charset);
|
|
108 |
$self->{iconv_reverse} = SL::Iconv->new($db_charset, $self->{charset});
|
|
109 |
$self->{iconv_english} = SL::Iconv->new('ASCII', $db_charset);
|
|
110 |
$self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', $db_charset);
|
|
111 |
$self->{iconv_to_iso8859} = SL::Iconv->new($db_charset, 'ISO-8859-15');
|
|
112 |
$self->{iconv_utf8} = SL::Iconv->new('UTF-8', $db_charset);
|
|
94 |
$self->{iconv} = SL::Iconv->new('UTF-8', 'UTF-8');
|
|
95 |
$self->{iconv_reverse} = SL::Iconv->new('UTF-8', 'UTF-8');
|
|
96 |
$self->{iconv_english} = SL::Iconv->new('ASCII', 'UTF-8');
|
|
97 |
$self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', 'UTF-8');
|
|
98 |
$self->{iconv_to_iso8859} = SL::Iconv->new('UTF-8', 'ISO-8859-15');
|
|
99 |
$self->{iconv_utf8} = SL::Iconv->new('UTF-8', 'UTF-8');
|
|
113 | 100 |
|
114 | 101 |
$self->_read_special_chars_file($country); |
115 | 102 |
|
... | ... | |
121 | 108 |
(qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)); |
122 | 109 |
} |
123 | 110 |
|
124 |
sub is_utf8 { |
|
125 |
my $self = shift; |
|
126 |
my $handle = shift; |
|
127 |
return $self->{is_utf8} && (!$handle || $handle->is_utf8); |
|
128 |
} |
|
129 |
|
|
130 | 111 |
sub _handle_markup { |
131 | 112 |
my $self = shift; |
132 | 113 |
my $str = shift; |
... | ... | |
514 | 495 |
$self->{raw_io_active} = 1; |
515 | 496 |
binmode $fh, ":raw"; |
516 | 497 |
$code->(); |
517 |
binmode $fh, ":utf8" if $self->is_utf8;
|
|
498 |
binmode $fh, ":utf8"; |
|
518 | 499 |
$self->{raw_io_active} = 0; |
519 | 500 |
} |
520 | 501 |
|
... | ... | |
623 | 604 |
|
624 | 605 |
TODO: Describe get_local_time_zone |
625 | 606 |
|
626 |
=item C<is_utf8> |
|
627 |
|
|
628 |
TODO: Describe is_utf8 |
|
629 |
|
|
630 | 607 |
=item C<lang_to_locale> |
631 | 608 |
|
632 | 609 |
TODO: Describe lang_to_locale |
SL/Mailer.pm | ||
---|---|---|
190 | 190 |
} |
191 | 191 |
|
192 | 192 |
# Set defaults & headers |
193 |
$self->{charset} ||= Common::DEFAULT_CHARSET;
|
|
193 |
$self->{charset} = 'UTF-8';
|
|
194 | 194 |
$self->{contenttype} ||= "text/plain"; |
195 | 195 |
$self->{headers} = [ |
196 | 196 |
Subject => $self->{subject}, |
SL/Mailer/Sendmail.pm | ||
---|---|---|
18 | 18 |
|
19 | 19 |
Rose::Object::init(@_); |
20 | 20 |
|
21 |
my $email = $::locale->is_utf8 ? Encode::encode('utf-8', $self->myconfig->{email}) : $self->myconfig->{email};
|
|
21 |
my $email = Encode::encode('utf-8', $self->myconfig->{email});
|
|
22 | 22 |
$email =~ s/[^\w\.\-\+=@]//ig; |
23 | 23 |
|
24 | 24 |
my %temp_form = ( %{ $self->form }, myconfig_email => $email ); |
... | ... | |
27 | 27 |
$sendmail = $template->parse_block($sendmail); |
28 | 28 |
|
29 | 29 |
$self->{sendmail} = IO::File->new("|$sendmail") || die "sendmail($sendmail): $!"; |
30 |
$self->{sendmail}->binmode(':utf8') if $::locale->is_utf8;
|
|
30 |
$self->{sendmail}->binmode(':utf8'); |
|
31 | 31 |
} |
32 | 32 |
|
33 | 33 |
sub start_mail { |
SL/MoreCommon.pm | ||
---|---|---|
155 | 155 |
sub uri_encode { |
156 | 156 |
my ($str) = @_; |
157 | 157 |
|
158 |
$str = Encode::encode('utf-8-strict', $str) if $::locale->is_utf8;
|
|
158 |
$str = Encode::encode('utf-8-strict', $str); |
|
159 | 159 |
$str =~ s/([^a-zA-Z0-9_.:-])/sprintf("%%%02x", ord($1))/ge; |
160 | 160 |
|
161 | 161 |
return $str; |
... | ... | |
168 | 168 |
$str =~ s/\\$//; |
169 | 169 |
|
170 | 170 |
$str =~ s/%([0-9a-fA-Z]{2})/pack("C",hex($1))/eg; |
171 |
$str = Encode::decode('utf-8-strict', $str) if $::locale->is_utf8;
|
|
171 |
$str = Encode::decode('utf-8-strict', $str); |
|
172 | 172 |
|
173 | 173 |
return $str; |
174 | 174 |
} |
SL/Presenter.pm | ||
---|---|---|
251 | 251 |
|
252 | 252 |
=item * C<LXCONFIG> -- all parameters from C<config/kivitendo.conf> |
253 | 253 |
with the same name they appear in the file (first level is the |
254 |
section, second the actual variable, e.g. C<system.dbcharset>,
|
|
254 |
section, second the actual variable, e.g. C<system.language>,
|
|
255 | 255 |
C<features.webdav> etc) |
256 | 256 |
|
257 | 257 |
=item * C<LXDEBUG> -- C<$::lxdebug> |
SL/ReportGenerator.pm | ||
---|---|---|
441 | 441 |
my $num_columns = scalar @visible_columns; |
442 | 442 |
my $num_header_rows = 1; |
443 | 443 |
|
444 |
my $font_encoding = $::lx_office_conf{system}->{dbcharset} || 'ISO-8859-15';
|
|
444 |
my $font_encoding = 'UTF-8';
|
|
445 | 445 |
|
446 | 446 |
foreach my $name (@visible_columns) { |
447 | 447 |
push @column_props, { 'justify' => $self->{columns}->{$name}->{align} eq 'right' ? 'right' : 'left' }; |
... | ... | |
703 | 703 |
my ($self, $text, $do_unquote) = @_; |
704 | 704 |
|
705 | 705 |
$text = $main::locale->unquote_special_chars('HTML', $text) if $do_unquote; |
706 |
$text = Encode::encode('UTF-8', $text) if $::locale->is_utf8;
|
|
706 |
$text = Encode::encode('UTF-8', $text); |
|
707 | 707 |
|
708 | 708 |
return $text; |
709 | 709 |
} |
SL/Request.pm | ||
---|---|---|
126 | 126 |
$content_type = "text/plain"; |
127 | 127 |
$boundary_found = 1; |
128 | 128 |
$need_cr = 0; |
129 |
$encoding = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
|
|
129 |
$encoding = 'UTF-8';
|
|
130 | 130 |
$transfer_encoding = undef; |
131 | 131 |
last if $last_boundary; |
132 | 132 |
next; |
... | ... | |
255 | 255 |
$::lxdebug->enter_sub; |
256 | 256 |
|
257 | 257 |
my ($target) = @_; |
258 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
259 | 258 |
|
260 | 259 |
# yes i know, copying all those values around isn't terribly efficient, but |
261 | 260 |
# the old version of dumping everything into form and then launching a |
... | ... | |
284 | 283 |
} |
285 | 284 |
} |
286 | 285 |
|
287 |
my $encoding = delete $temp_target->{INPUT_ENCODING} || $db_charset;
|
|
286 |
my $encoding = delete $temp_target->{INPUT_ENCODING} || 'UTF-8';
|
|
288 | 287 |
|
289 |
_recode_recursively(SL::Iconv->new($encoding, $db_charset), $temp_target => $target) if keys %$target;
|
|
288 |
_recode_recursively(SL::Iconv->new($encoding, 'UTF-8'), $temp_target => $target) if keys %$target;
|
|
290 | 289 |
|
291 | 290 |
if ($target->{RESTORE_FORM_FROM_SESSION_ID}) { |
292 | 291 |
my %temp_form; |
SL/Template/LaTeX.pm | ||
---|---|---|
338 | 338 |
$self->{"error"} = "$form->{templates}/$form->{IN}: $!"; |
339 | 339 |
return 0; |
340 | 340 |
} |
341 |
binmode IN, ":utf8" if $::locale->is_utf8;
|
|
341 |
binmode IN, ":utf8"; |
|
342 | 342 |
my @lines = <IN>; |
343 | 343 |
close(IN); |
344 | 344 |
|
... | ... | |
374 | 374 |
return 0; |
375 | 375 |
} |
376 | 376 |
|
377 |
if ($::locale->is_utf8) { |
|
378 |
binmode OUT, ":utf8"; |
|
379 |
print OUT Unicode::Normalize::normalize('C', $new_contents); |
|
380 |
|
|
381 |
} else { |
|
382 |
print OUT $new_contents; |
|
383 |
} |
|
377 |
binmode OUT, ":utf8"; |
|
378 |
print OUT Unicode::Normalize::normalize('C', $new_contents); |
|
384 | 379 |
|
385 | 380 |
if ($form->{"format"} =~ /postscript/i) { |
386 | 381 |
return $self->convert_to_postscript(); |
SL/Template/OpenDocument.pm | ||
---|---|---|
22 | 22 |
my $self = $type->SUPER::new(@_); |
23 | 23 |
|
24 | 24 |
$self->{"rnd"} = int(rand(1000000)); |
25 |
$self->{"iconv"} = SL::Iconv->new($::lx_office_conf{system}->{dbcharset}, "UTF-8"); |
|
26 | 25 |
|
27 | 26 |
$self->set_tag_style('<%', '%>'); |
28 | 27 |
$self->{quot_re} = '"'; |
... | ... | |
575 | 574 |
sub format_string { |
576 | 575 |
my ($self, $variable) = @_; |
577 | 576 |
my $form = $self->{"form"}; |
578 |
my $iconv = $self->{"iconv"}; |
|
579 | 577 |
|
580 | 578 |
$variable = $main::locale->quote_special_chars('Template/OpenDocument', $variable); |
581 | 579 |
|
... | ... | |
591 | 589 |
$variable =~ s|\</${key}\>|</text:span>|gi; |
592 | 590 |
} |
593 | 591 |
|
594 |
return $iconv->convert($variable);
|
|
592 |
return $variable;
|
|
595 | 593 |
} |
596 | 594 |
|
597 | 595 |
sub get_mime_type() { |
SL/Template/Plugin/HTMLFixes.pm | ||
---|---|---|
21 | 21 |
sub url { |
22 | 22 |
my ($self, $text) = @_; |
23 | 23 |
return undef unless defined $text; |
24 |
$text = Encode::encode('utf-8-strict', $text) if $::locale && $::locale->is_utf8;
|
|
24 |
$text = Encode::encode('utf-8-strict', $text); |
|
25 | 25 |
$text =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; |
26 | 26 |
return $text; |
27 | 27 |
} |
SL/User.pm | ||
---|---|---|
258 | 258 |
$dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options) |
259 | 259 |
or $form->dberror; |
260 | 260 |
|
261 |
my $db_charset = $Common::db_encoding_to_charset{$form->{encoding}}; |
|
262 |
$db_charset ||= Common::DEFAULT_CHARSET; |
|
263 |
|
|
264 | 261 |
my $dbupdater = SL::DBUpgrade2->new(form => $form); |
265 | 262 |
# create the tables |
266 |
$dbupdater->process_query($dbh, "sql/lx-office.sql", undef, $db_charset);
|
|
263 |
$dbupdater->process_query($dbh, "sql/lx-office.sql"); |
|
267 | 264 |
|
268 | 265 |
# load chart of accounts |
269 |
$dbupdater->process_query($dbh, "sql/$form->{chart}-chart.sql", undef, $db_charset);
|
|
266 |
$dbupdater->process_query($dbh, "sql/$form->{chart}-chart.sql"); |
|
270 | 267 |
|
271 | 268 |
my $query = qq|UPDATE defaults SET coa = ?, accounting_method = ?, profit_determination = ?, inventory_system = ?, curr = ?|; |
272 | 269 |
do_query($form, $dbh, $query, map { $form->{$_} } qw(chart accounting_method profit_determination inventory_system defaultcurrency)); |
... | ... | |
399 | 396 |
closedir(SQLDIR); |
400 | 397 |
} |
401 | 398 |
|
402 |
my $db_charset = $::lx_office_conf{system}->{dbcharset}; |
|
403 |
$db_charset ||= Common::DEFAULT_CHARSET; |
|
404 |
|
|
405 | 399 |
my $dbupdater = SL::DBUpgrade2->new(form => $form); |
406 | 400 |
|
407 | 401 |
foreach my $db (split(/ /, $form->{dbupdate})) { |
... | ... | |
441 | 435 |
|
442 | 436 |
# apply upgrade |
443 | 437 |
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $upgradescript"); |
444 |
$dbupdater->process_file($dbh, "sql/Pg-upgrade/$upgradescript", $str_maxdb, $db_charset);
|
|
438 |
$dbupdater->process_file($dbh, "sql/Pg-upgrade/$upgradescript", $str_maxdb); |
|
445 | 439 |
|
446 | 440 |
$version = $maxdb; |
447 | 441 |
|
... | ... | |
466 | 460 |
my $dbupdater = $params{updater}; |
467 | 461 |
my $db = $params{database}; |
468 | 462 |
my $rc = -2; |
469 |
my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; |
|
470 | 463 |
|
471 |
map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $dbupdater->{all_controls} };
|
|
464 |
map { $_->{description} = SL::Iconv::convert($_->{charset}, 'UTF-8', $_->{description}) } values %{ $dbupdater->{all_controls} };
|
|
472 | 465 |
|
473 | 466 |
&dbconnect_vars($form, $db); |
474 | 467 |
|
... | ... | |
487 | 480 |
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}"); |
488 | 481 |
print $form->parse_html_template("dbupgrade/upgrade_message2", $control); |
489 | 482 |
|
490 |
$dbupdater->process_file($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset);
|
|
483 |
$dbupdater->process_file($dbh, "sql/Pg-upgrade2/$control->{file}", $control); |
|
491 | 484 |
} |
492 | 485 |
|
493 | 486 |
$rc = 0; |
bin/mozilla/sepa.pl | ||
---|---|---|
489 | 489 |
|
490 | 490 |
my $sepa_xml = SL::SEPA::XML->new('company' => $defaults->company, |
491 | 491 |
'creditor_id' => $defaults->sepa_creditor_id, |
492 |
'src_charset' => $::lx_office_conf{system}->{dbcharset} || 'ISO-8859-15',
|
|
492 |
'src_charset' => 'UTF-8',
|
|
493 | 493 |
'message_id' => $message_id, |
494 | 494 |
'grouped' => 1, |
495 | 495 |
'collection' => $vc eq 'customer', |
bin/mozilla/ustva.pl | ||
---|---|---|
903 | 903 |
|
904 | 904 |
$form->{attachment_filename} =~ s|.*/||; |
905 | 905 |
|
906 |
# TODO: set Output to UTF-8 or system Preference |
|
907 |
#$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8"); |
|
908 |
#my $iconv = $self->{"iconv"}; |
|
909 |
#$iconv->convert($variable); |
|
910 | 906 |
if ($form->{period} =~ /^[4]\d$/ ){ |
911 | 907 |
my %periods = ( # Lx => taxbird |
912 | 908 |
'41' => '12', |
config/kivitendo.conf.default | ||
---|---|---|
65 | 65 |
# and "en" (English, not perfect) are available. |
66 | 66 |
language = de |
67 | 67 |
|
68 |
# The database charset. Must match the encoding of the database cluster you want to |
|
69 |
# connect to. (Used on the shell command to create a database "pg_createcluster". Option "-e <encoding>".) |
|
70 |
dbcharset = UTF-8 |
|
71 |
|
|
72 | 68 |
[features] |
73 | 69 |
# Activate certain optional features and modules. |
74 | 70 |
webdav = 0 |
doc/UPGRADE | ||
---|---|---|
18 | 18 |
|
19 | 19 |
* Perl v5.10.1 oder neuer wird zwingend vorausgesetzt. |
20 | 20 |
|
21 |
* Die Datenbank muss zwingend Unicode als Encoding nutzen. Daher wird |
|
22 |
auch die Konfigurationsvariable "system.dbcharset" nicht mehr |
|
23 |
unterstützt. |
|
24 |
|
|
21 | 25 |
* Einführung von Mandanten. Früher war die Konfiguration der |
22 | 26 |
Datenbanken für jeden Benutzer getrennt vorzunehmen. Mit diesem |
23 | 27 |
Release wurden Mandanten eingeführt: ein Mandant bekommt einen Namen |
doc/changelog | ||
---|---|---|
67 | 67 |
Die alte URL wird weiterhin funktionieren und lediglich auf die neue |
68 | 68 |
URL umleiten. |
69 | 69 |
|
70 |
- Datenbanken, die nicht Unicode als Encoding nutzen, werden nicht |
|
71 |
mehr unterstützt. Die Konfigurationsvariable "system.dbcharset" |
|
72 |
wurde entfernt. |
|
73 |
|
|
70 | 74 |
- Upgrades von alten SQL-Ledger-Versionen im Allgemeinen sowie |
71 | 75 |
Upgrades von alten kivitendo-Versionen, die Benutzer noch über die |
72 | 76 |
Datei "users/members" verwaltet haben, werden nicht mehr |
doc/dokumentation.xml | ||
---|---|---|
381 | 381 |
port = 5432 |
382 | 382 |
db = kivitendo_auth |
383 | 383 |
user = postgres |
384 |
password = |
|
385 |
|
|
386 |
[system] |
|
387 |
dbcharset = UTF-8</programlisting> |
|
384 |
password =</programlisting> |
|
388 | 385 |
|
389 | 386 |
<para>Nutzt man wiederkehrende Rechnungen, kann man unter |
390 | 387 |
<varname>[periodic_invoices]</varname> den Login eines Benutzers |
... | ... | |
428 | 425 |
<para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para> |
429 | 426 |
|
430 | 427 |
<sect2 id="Zeichensätze-die-Verwendung-von-UTF-8"> |
431 |
<title>Zeichensätze/die Verwendung von UTF-8</title> |
|
428 |
<title>Zeichensätze/die Verwendung von Unicode/UTF-8</title>
|
|
432 | 429 |
|
433 |
<para>Bei aktuellen Serverinstallationen braucht man hier meist nicht
|
|
434 |
eingreifen</para>
|
|
430 |
<para>kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen
|
|
431 |
braucht man hier meist nicht einzugreifen.</para>
|
|
435 | 432 |
|
436 |
<para>Dieses kann überprüft werden: ist das Encoding der Datenbank |
|
437 |
“template1” “UTF8”, so braucht man nichts weiteres diesbezüglich |
|
438 |
unternehmen. Zum Testen: |
|
433 |
<para>Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so |
|
434 |
braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:</para> |
|
439 | 435 |
|
440 | 436 |
<programlisting>su postgres |
441 | 437 |
echo '\l' | psql |
442 | 438 |
exit </programlisting> |
443 | 439 |
|
444 |
Andernfalls ist es notwendig, einen neuen Datenbankcluster mit |
|
445 |
UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
|
|
440 |
<para>Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
|
|
441 |
Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
|
|
446 | 442 |
Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl |
447 | 443 |
getan werden:</para> |
448 | 444 |
|
... | ... | |
453 | 449 |
|
454 | 450 |
<para>Unter anderen Distributionen gibt es ähnliche Methoden.</para> |
455 | 451 |
|
456 |
<para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und |
|
457 |
ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann |
|
458 |
kivitendo mit ISO-8859-15 als Encoding betrieben werden.</para> |
|
459 |
|
|
460 | 452 |
<para>Das Encoding einer Datenbank kann in <command>psql</command> mit |
461 | 453 |
<literal>\l</literal> geprüft werden.</para> |
462 | 454 |
</sect2> |
... | ... | |
1243 | 1235 |
<para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für |
1244 | 1236 |
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren |
1245 | 1237 |
Beispielen ist dies ‘<literal>kivitendo</literal>’).</para> |
1246 |
|
|
1247 |
<para>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen |
|
1248 |
wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <filename>config/kivitendo.conf</filename> die Variable |
|
1249 |
<literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf den Wert ‘<literal>ISO-8859-15</literal>’ setzen.</para> |
|
1250 |
|
|
1251 |
<para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz |
|
1252 |
verwenden müssen, da diese Einstellungen momentan global in kivitendo |
|
1253 |
vorgenommen wird und nicht nach Datenbank unterschieden werden kann. |
|
1254 |
Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz |
|
1255 |
angelegt worden sein.</para> |
|
1256 | 1238 |
</sect2> |
1257 | 1239 |
|
1258 | 1240 |
<sect2 id="Gruppen-anlegen"> |
... | ... | |
1681 | 1663 |
<literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen. |
1682 | 1664 |
Dieses ist die Standardeinstellung.</para> |
1683 | 1665 |
|
1684 |
<para>Weiterhin muss in der Datei |
|
1685 |
<filename>config/kivitendo.conf</filename> die Variable |
|
1686 |
<literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf |
|
1687 |
die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der |
|
1688 |
Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen |
|
1689 |
"UTF-8".</para> |
|
1690 |
|
|
1691 | 1666 |
<para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei |
1692 | 1667 |
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF |
1693 | 1668 |
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss |
... | ... | |
5474 | 5449 |
<para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in |
5475 | 5450 |
den kritischen Pfaden, unter 0,15 sonst.</para> |
5476 | 5451 |
</sect2> |
5477 |
|
|
5478 |
<sect2 id="devel.fcgi.known-issues"> |
|
5479 |
<title>Bekannte Probleme</title> |
|
5480 |
|
|
5481 |
<sect3 id="devel.fcgi.known-issues.encoding"> |
|
5482 |
<title>Encoding Awareness</title> |
|
5483 |
|
|
5484 |
<para>UTF-8 kodierte Installationen sind sehr anfällig gegen |
|
5485 |
fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln |
|
5486 |
falsch kodierte Zeichen eher unwissend, und geben sie einfach |
|
5487 |
weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand |
|
5488 |
das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu |
|
5489 |
beseitigen.</para> |
|
5490 |
</sect3> |
|
5491 |
</sect2> |
|
5492 | 5452 |
</sect1> |
5493 | 5453 |
|
5494 | 5454 |
<sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien"> |
... | ... | |
5781 | 5741 |
point.</para> |
5782 | 5742 |
</sect2> |
5783 | 5743 |
|
5744 |
<sect2 id="translations-languages.character-set" |
|
5745 |
xreflabel="Character set"> |
|
5746 |
<title>Character set</title> |
|
5747 |
|
|
5748 |
<para>All files included in a language pack must use UTF-8 as their encoding.</para> |
|
5749 |
</sect2> |
|
5750 |
|
|
5784 | 5751 |
<sect2 id="translations-languages.file-structure" |
5785 | 5752 |
xreflabel="File structure"> |
5786 | 5753 |
<title>File structure</title> |
... | ... | |
5817 | 5784 |
</listitem> |
5818 | 5785 |
</varlistentry> |
5819 | 5786 |
|
5820 |
<varlistentry> |
|
5821 |
<term>charset</term> |
|
5822 |
|
|
5823 |
<listitem> |
|
5824 |
<para>This file should be present.</para> |
|
5825 |
|
|
5826 |
<para>The <filename>charset</filename> file describes which |
|
5827 |
charset a language package is written in and applies to all |
|
5828 |
other language files in the package. It is possible to write |
|
5829 |
some language packages without an explicit charset, but it is |
|
5830 |
still strongly recommended. You'll never know in what |
|
5831 |
environment your language package will be used, and neither |
|
5832 |
UTF-8 nor Latin1 are guaranteed.</para> |
|
5833 |
|
|
5834 |
<para>The whole content of this file is a string that can be |
|
5835 |
recognized as a valid charset encoding. Example:</para> |
|
5836 |
|
|
5837 |
<programlisting>UTF-8</programlisting> |
|
5838 |
</listitem> |
|
5839 |
</varlistentry> |
|
5840 |
|
|
5841 | 5787 |
<varlistentry> |
5842 | 5788 |
<term>all</term> |
5843 | 5789 |
|
doc/html/ch02s04.html | ||
---|---|---|
52 | 52 |
port = 5432 |
53 | 53 |
db = kivitendo_auth |
54 | 54 |
user = postgres |
55 |
password = |
|
56 |
|
|
57 |
[system] |
|
58 |
dbcharset = UTF-8</pre><p>Nutzt man wiederkehrende Rechnungen, kann man unter |
|
55 |
password =</pre><p>Nutzt man wiederkehrende Rechnungen, kann man unter |
|
59 | 56 |
<code class="varname">[periodic_invoices]</code> den Login eines Benutzers |
60 | 57 |
angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail |
61 | 58 |
mit Informationen über die erstellten Rechnungen bekommt.</p><p>kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den <a class="link" href="ch02s07.html" title="2.7. Der Task-Server">Taskserver</a>. Er wird u.a. für Features wie die <a class="link" href="ch03.html#features.periodic-invoices" title="3.1. Wiederkehrende Rechnungen">wiederkehrenden Rechnungen</a> benötigt, erledigt aber auch andere erforderliche Aufgaben |
doc/html/ch02s05.html | ||
---|---|---|
1 | 1 |
<html><head> |
2 | 2 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
3 |
<title>2.5. Anpassung der PostgreSQL-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s04.html" title="2.4. kivitendo-Konfigurationsdatei"><link rel="next" href="ch02s06.html" title="2.6. Webserver-Konfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.5. Anpassung der PostgreSQL-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s04.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s06.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.5. Anpassung der PostgreSQL-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Anpassung-der-PostgreSQL-Konfiguration"></a>2.5. Anpassung der PostgreSQL-Konfiguration</h2></div></div></div><p>PostgreSQL muss auf verschiedene Weisen angepasst werden.</p><div class="sect2" title="2.5.1. Zeichensätze/die Verwendung von UTF-8"><div class="titlepage"><div><div><h3 class="title"><a name="Zeichens%C3%A4tze-die-Verwendung-von-UTF-8"></a>2.5.1. Zeichensätze/die Verwendung von UTF-8</h3></div></div></div><p>Bei aktuellen Serverinstallationen braucht man hier meist nicht |
|
4 |
eingreifen</p><p>Dieses kann überprüft werden: ist das Encoding der Datenbank |
|
5 |
“template1” “UTF8”, so braucht man nichts weiteres diesbezüglich |
|
6 |
unternehmen. Zum Testen: |
|
7 |
|
|
8 |
</p><pre class="programlisting">su postgres |
|
3 |
<title>2.5. Anpassung der PostgreSQL-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s04.html" title="2.4. kivitendo-Konfigurationsdatei"><link rel="next" href="ch02s06.html" title="2.6. Webserver-Konfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.5. Anpassung der PostgreSQL-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s04.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s06.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.5. Anpassung der PostgreSQL-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Anpassung-der-PostgreSQL-Konfiguration"></a>2.5. Anpassung der PostgreSQL-Konfiguration</h2></div></div></div><p>PostgreSQL muss auf verschiedene Weisen angepasst werden.</p><div class="sect2" title="2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8"><div class="titlepage"><div><div><h3 class="title"><a name="Zeichens%C3%A4tze-die-Verwendung-von-UTF-8"></a>2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</h3></div></div></div><p>kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen |
|
4 |
braucht man hier meist nicht einzugreifen.</p><p>Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so |
|
5 |
braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:</p><pre class="programlisting">su postgres |
|
9 | 6 |
echo '\l' | psql |
10 |
exit </pre><p> |
|
11 |
|
|
12 |
Andernfalls ist es notwendig, einen neuen Datenbankcluster mit |
|
13 |
UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und |
|
7 |
exit </pre><p>Andernfalls ist es notwendig, einen neuen Datenbankcluster mit |
|
8 |
Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und |
|
14 | 9 |
Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl |
15 | 10 |
getan werden:</p><pre class="programlisting">pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</pre><p>Die Datenbankversionsnummer muss an die tatsächlich verwendete |
16 |
Versionsnummer angepasst werden.</p><p>Unter anderen Distributionen gibt es ähnliche Methoden.</p><p>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und |
|
17 |
ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann |
|
18 |
kivitendo mit ISO-8859-15 als Encoding betrieben werden.</p><p>Das Encoding einer Datenbank kann in <span class="command"><strong>psql</strong></span> mit |
|
11 |
Versionsnummer angepasst werden.</p><p>Unter anderen Distributionen gibt es ähnliche Methoden.</p><p>Das Encoding einer Datenbank kann in <span class="command"><strong>psql</strong></span> mit |
|
19 | 12 |
<code class="literal">\l</code> geprüft werden.</p></div><div class="sect2" title="2.5.2. Änderungen an Konfigurationsdateien"><div class="titlepage"><div><div><h3 class="title"><a name="%C3%84nderungen-an-Konfigurationsdateien"></a>2.5.2. Änderungen an Konfigurationsdateien</h3></div></div></div><p>In der Datei <code class="filename">postgresql.conf</code>, die je nach |
20 | 13 |
Distribution in verschiedenen Verzeichnissen liegen kann (z.B. |
21 | 14 |
<code class="filename">/var/lib/pgsql/data/</code> oder |
doc/html/ch02s06.html | ||
---|---|---|
1 | 1 |
<html><head> |
2 | 2 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
3 |
<title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e690"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
|
|
3 |
<title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e689"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
|
|
4 | 4 |
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt |
5 | 5 |
<a class="xref" href="ch02s06.html#Apache-Konfiguration.FCGI" title="2.6.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache |
6 | 6 |
Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt |
doc/html/ch02s07.html | ||
---|---|---|
29 | 29 |
Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess |
30 | 30 |
einzubinden. Da das bei neueren Linux-Distributionen aber nicht |
31 | 31 |
zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die |
32 |
anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e888"></a>2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
|
|
32 |
anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e887"></a>2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
|
|
33 | 33 |
<code class="filename">scripts/boot/system-v/kivitendo-server</code> |
34 | 34 |
nach <code class="filename">/etc/init.d/kivitendo-server</code>. Passen |
35 | 35 |
Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile |
... | ... | |
37 | 37 |
Boot-Prozess ein. Dies ist distributionsabhängig:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian-basierende Systeme:</p><pre class="programlisting">update-rc.d kivitendo-task-server defaults |
38 | 38 |
# Nur bei Debian Squeeze und neuer: |
39 | 39 |
insserv kivitendo-task-server</pre></li><li class="listitem"><p>Ältere OpenSUSE und ältere Fedora Core:</p><pre class="programlisting">chkconfig --add kivitendo-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet |
40 |
werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e917"></a>2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
|
|
40 |
werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e916"></a>2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
|
|
41 | 41 |
<code class="filename">scripts/boot/upstart/kivitendo-task-server.conf</code> |
42 | 42 |
nach <code class="filename">/etc/init/kivitendo-task-server.conf</code>. |
43 | 43 |
Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile |
44 | 44 |
<code class="literal">exec ....</code>).</p><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet |
45 |
werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e935"></a>2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
|
|
45 |
werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e934"></a>2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
|
|
46 | 46 |
<code class="filename">/etc/systemd/system/</code>. Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile |
47 | 47 |
<code class="literal">ExecStart=....</code> und <code class="literal">ExecStop=...</code>). Binden Sie das Script in den Boot-Prozess ein. |
48 | 48 |
</p><p>Alle hierzu benötigten Befehle sehen so aus:</p><pre class="programlisting">cd /var/www/kivitendo-erp/scripts/boot/systemd |
doc/html/ch02s09.html | ||
---|---|---|
30 | 30 |
allen denjenigen Gruppen, die zum Einen dem Mandanten zugeordnet sind und in denen der Benutzer zum Anderen Mitglied ist, </p><p>Die Reihenfolge, in der Datenbanken, Mandanten, Gruppen und Benutzer angelegt werden, kann im Prinzip beliebig gewählt |
31 | 31 |
werden. Die folgende Reihenfolge beinhaltet die wenigsten Arbeitsschritte:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Datenbank anlegen</p></li><li class="listitem"><p>Gruppen anlegen</p></li><li class="listitem"><p>Benutzer anlegen und Gruppen als Mitglied zuordnen</p></li><li class="listitem"><p>Mandanten anlegen und Gruppen sowie Benutzer zuweisen</p></li></ol></div></div><div class="sect2" title="2.9.3. Datenbanken anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Datenbanken-anlegen"></a>2.9.3. Datenbanken anlegen</h3></div></div></div><p>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für |
32 | 32 |
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren |
33 |
Beispielen ist dies ‘<code class="literal">kivitendo</code>’).</p><p>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen |
|
34 |
wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <code class="filename">config/kivitendo.conf</code> die Variable |
|
35 |
<code class="literal">dbcharset</code> im Abschnitt <code class="literal">system</code> auf den Wert ‘<code class="literal">ISO-8859-15</code>’ setzen.</p><p>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz |
|
36 |
verwenden müssen, da diese Einstellungen momentan global in kivitendo |
|
37 |
vorgenommen wird und nicht nach Datenbank unterschieden werden kann. |
|
38 |
Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz |
|
39 |
angelegt worden sein.</p></div><div class="sect2" title="2.9.4. Gruppen anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Gruppen-anlegen"></a>2.9.4. Gruppen anlegen</h3></div></div></div><p>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein |
|
33 |
Beispielen ist dies ‘<code class="literal">kivitendo</code>’).</p></div><div class="sect2" title="2.9.4. Gruppen anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Gruppen-anlegen"></a>2.9.4. Gruppen anlegen</h3></div></div></div><p>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein |
|
40 | 34 |
Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem |
41 | 35 |
Anlegen können Sie die verschiedenen Bereiche wählen, auf die |
42 | 36 |
Mitglieder dieser Gruppe Zugriff haben sollen.</p><p>Benutzergruppen werden zwar in der Authentifizierungsdatenbank gespeichert, gelten aber nicht automatisch für alle |
doc/html/ch02s12.html | ||
---|---|---|
8 | 8 |
<code class="filename">config/kivitendo.conf</code> die Variable |
9 | 9 |
<code class="literal">opendocument</code> im Abschnitt |
10 | 10 |
<code class="literal">print_templates</code> auf ‘<code class="literal">1</code>’ stehen. |
11 |
Dieses ist die Standardeinstellung.</p><p>Weiterhin muss in der Datei |
|
12 |
<code class="filename">config/kivitendo.conf</code> die Variable |
|
13 |
<code class="literal">dbcharset</code> im Abschnitt <code class="literal">system</code> auf |
|
14 |
die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der |
|
15 |
Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen |
|
16 |
"UTF-8".</p><p>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei |
|
11 |
Dieses ist die Standardeinstellung.</p><p>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei |
|
17 | 12 |
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF |
18 | 13 |
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss |
19 | 14 |
neben OpenOffice.org ab Version 2 auch der “X virtual frame buffer” |
doc/html/ch03s02.html | ||
---|---|---|
560 | 560 |
<code class="varname">invdate</code> |
561 | 561 |
</span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term"> |
562 | 562 |
<code class="varname">invnumber</code> |
563 |
</span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4674"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
|
|
563 |
</span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4646"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
|
|
564 | 564 |
Rechnung. Allerdings heißen die Variablen, die mit |
565 | 565 |
<code class="varname">inv</code> beginnen, jetzt anders. Bei den Angeboten |
566 | 566 |
fangen sie mit <code class="varname">quo</code> für "quotation" an: |
doc/html/ch04.html | ||
---|---|---|
1 | 1 |
<html><head> |
2 | 2 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
3 |
<title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5281"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5287"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
|
|
3 |
<title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5253"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5259"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
|
|
4 | 4 |
"main", der von überall erreichbar ist. Darüber hinaus sind bareword |
5 | 5 |
globs global und die meisten speziellen Variablen sind... |
6 | 6 |
speziell.</p><p>Daraus ergeben sich folgende Formen:</p><div class="variablelist"><dl><dt><span class="term"> |
... | ... | |
25 | 25 |
<code class="varname">$PACKAGE::form</code>.</p></dd><dt><span class="term"> |
26 | 26 |
<code class="literal">local $form</code> |
27 | 27 |
</span></dt><dd><p>Alle Änderungen an <code class="varname">$form</code> werden am Ende |
28 |
des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5388"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
|
|
28 |
des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5360"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
|
|
29 | 29 |
<span class="productname">SQL-Ledger</span>™ hat fast alles im globalen |
30 | 30 |
namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist. |
31 | 31 |
Unter <span class="productname">FCGI</span>™ müssen diese Sachen aber wieder |
... | ... | |
39 | 39 |
dies hat, seit der Einführung, u.a. schon so manche langwierige |
40 | 40 |
Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package |
41 | 41 |
angegeben werden, werden die nicht geprüft, und somit kann sich |
42 |
schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5421"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
|
|
42 |
schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5393"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
|
|
43 | 43 |
globale Variablen, die kanonisch sind, d.h. sie haben bestimmte |
44 | 44 |
vorgegebenen Eigenschaften, und alles andere sollte anderweitig |
45 | 45 |
umhergereicht werden.</p><p>Diese Variablen sind im Moment die folgenden neun:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> |
... | ... | |
62 | 62 |
<code class="varname">$::request</code> |
63 | 63 |
</p></li></ul></div><p>Damit diese nicht erneut als Müllhalde missbraucht werden, im |
64 | 64 |
Folgenden eine kurze Erläuterung der bestimmten vorgegebenen |
65 |
Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5485"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
|
|
65 |
Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5457"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
|
|
66 | 66 |
"<code class="classname">Form</code>"</p></li><li class="listitem"><p>Wird nach jedem Request gelöscht</p></li><li class="listitem"><p>Muss auch in Tests und Konsolenscripts vorhanden |
67 | 67 |
sein.</p></li><li class="listitem"><p>Enthält am Anfang eines Requests die Requestparameter vom |
68 | 68 |
User</p></li><li class="listitem"><p>Kann zwar intern über Requestgrenzen ein Datenbankhandle |
... | ... | |
110 | 110 |
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"}; |
111 | 111 |
push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"}; |
112 | 112 |
# ... |
113 |
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5569"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
|
|
113 |
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5541"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
|
|
114 | 114 |
zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enthält die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder |
115 | 115 |
extern serialisiert werden, weil da auch der Datenbankzugriff |
116 | 116 |
für diesen user drinsteht.</p></li><li class="listitem"><p>Enthält unter anderem Listenbegrenzung vclimit, |
... | ... | |
122 | 122 |
überwiegend die Daten, die sich unter <span class="guimenu">Programm</span> |
123 | 123 |
-> <span class="guimenuitem">Einstellungen</span> befinden, bzw. die |
124 | 124 |
Informationen über den Benutzer die über die |
125 |
Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5608"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
|
|
125 |
Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5580"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
|
|
126 | 126 |
sein.</p></li><li class="listitem"><p>Cached intern über Requestgrenzen hinweg benutzte |
127 | 127 |
Locales</p></li></ul></div><p>Lokalisierung für den aktuellen User. Alle Übersetzungen, |
128 |
Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5626"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
|
|
128 |
Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5598"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
|
|
129 | 129 |
Funktionen</p></li></ul></div><p> |
130 | 130 |
<code class="varname">$::lxdebug</code> stellt Debuggingfunktionen |
131 | 131 |
bereit, wie "<code class="function">enter_sub</code>" und |
... | ... | |
135 | 135 |
"<code class="function">message</code>" und "<code class="function">dump</code>" mit |
136 | 136 |
denen man flott Informationen ins Log (tmp/kivitendo-debug.log) |
137 | 137 |
packen kann.</p><p>Beispielsweise so:</p><pre class="programlisting">$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig)); |
138 |
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5663"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
|
|
138 |
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5635"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
|
|
139 | 139 |
<code class="varname">$::auth</code> stellt Funktionen bereit um die |
140 | 140 |
Rechte des aktuellen Users abzufragen. Obwohl diese Informationen |
141 | 141 |
vom aktuellen User abhängen wird das Objekt aus |
142 | 142 |
Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem |
143 | 143 |
Request kurz resettet.</p><p>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über |
144 | 144 |
<code class="literal">$::auth->client</code> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle |
145 |
<code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5692"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
145 |
<code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5664"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
146 | 146 |
"<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repräsentation der |
147 | 147 |
<code class="filename">config/kivitendo.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen |
148 | 148 |
und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass |
... | ... | |
152 | 152 |
file = /tmp/kivitendo-debug.log</pre><p>ist der Key <code class="varname">file</code> im Programm als |
153 | 153 |
<code class="varname">$::lx_office_conf->{debug}{file}</code> |
154 | 154 |
erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment über |
155 |
Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5728"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
155 |
Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5700"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
156 | 156 |
"<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>, |
157 | 157 |
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz |
158 | 158 |
ist hier eine Mandantendatenbank. Beispielsweise überprüft |
159 | 159 |
</p><pre class="programlisting">$::instance_conf->get_inventory_system eq 'perpetual'</pre><p> |
160 |
ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5749"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
160 |
ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5721"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
|
161 | 161 |
"<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enthält Informationen über die technische Verbindung zum |
162 | 162 |
Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt |
163 | 163 |
global gespeichert wird. Wird vermutlich irgendwann in einem anderen |
164 |
Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5767"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
|
|
164 |
Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5739"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
|
|
165 | 165 |
<code class="varname">$::request</code> ist ein generischer Platz um |
166 | 166 |
Daten "für den aktuellen Request" abzulegen. Sollte nicht für action |
167 | 167 |
at a distance benutzt werden, sondern um lokales memoizing zu |
... | ... | |
174 | 174 |
<code class="varname">$::request</code> |
175 | 175 |
</p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf |
176 | 176 |
zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff über |
177 |
Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5809"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
|
|
178 |
entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5814"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
|
|
177 |
Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5781"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
|
|
178 |
entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5786"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
|
|
179 | 179 |
Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im |
180 | 180 |
Klassennamespace gehalten wird und über Requestgrenzen |
181 | 181 |
leaked</p></li><li class="listitem"><p>liegt jetzt unter |
182 | 182 |
<code class="varname">$::request->{cgi}</code> |
183 |
</p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5830"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
|
|
183 |
</p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5802"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
|
|
184 | 184 |
ein paar hundert mal pro Request eine Liste der Einheiten |
185 | 185 |
brauchen, und de als Parameter durch einen Riesenstack von |
186 | 186 |
Funktionen geschleift werden müssten.</p></li><li class="listitem"><p>Liegt jetzt unter |
187 | 187 |
<code class="varname">$::request->{cache}{all_units}</code> |
188 | 188 |
</p></li><li class="listitem"><p>Wird nur in |
189 | 189 |
<code class="function">AM->retrieve_all_units()</code> gesetzt oder |
190 |
gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5849"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
|
|
190 |
gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5821"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
|
|
191 | 191 |
abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der |
192 | 192 |
möglichen Rekursioenen darstellt, und da nie welche |
193 | 193 |
auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html> |
doc/html/ch04s02.html | ||
---|---|---|
34 | 34 |
4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0 |
35 | 35 |
sind es je nach Menge der definierten Variablen 1-2s. Ab der |
36 | 36 |
Moose/Rose::DB Version sind es 5-6s.</p><p>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in |
37 |
den kritischen Pfaden, unter 0,15 sonst.</p></div><div class="sect2" title="4.2.5. Bekannte Probleme"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.known-issues"></a>4.2.5. Bekannte Probleme</h3></div></div></div><div class="sect3" title="4.2.5.1. Encoding Awareness"><div class="titlepage"><div><div><h4 class="title"><a name="devel.fcgi.known-issues.encoding"></a>4.2.5.1. Encoding Awareness</h4></div></div></div><p>UTF-8 kodierte Installationen sind sehr anfällig gegen |
|
38 |
fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln |
|
39 |
falsch kodierte Zeichen eher unwissend, und geben sie einfach |
|
40 |
weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand |
|
41 |
das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu |
|
42 |
beseitigen.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.3. SQL-Upgradedateien</td></tr></table></div></body></html> |
|
37 |
den kritischen Pfaden, unter 0,15 sonst.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.3. SQL-Upgradedateien</td></tr></table></div></body></html> |
doc/html/ch04s04.html | ||
---|---|---|
5 | 5 |
are built. Currently the only language fully supported is German, and |
6 | 6 |
since most of the internal messages are held in English the English |
7 | 7 |
version is usable too.</p><p>A stub version of French is included but not functunal at this |
8 |
point.</p></div><div class="sect2" title="4.4.2. File structure"><div class="titlepage"><div><div><h3 class="title"><a name="translations-languages.file-structure"></a>4.4.2. File structure</h3></div></div></div><p>The structure of locales in kivitendo is:</p><pre class="programlisting">kivitendo/locale/<langcode>/</pre><p>where <langcode> stands for an abbreviation of the
|
|
8 |
point.</p></div><div class="sect2" title="4.4.2. Character set"><div class="titlepage"><div><div><h3 class="title"><a name="translations-languages.character-set"></a>4.4.2. Character set</h3></div></div></div><p>All files included in a language pack must use UTF-8 as their encoding.</p></div><div class="sect2" title="4.4.3. File structure"><div class="titlepage"><div><div><h3 class="title"><a name="translations-languages.file-structure"></a>4.4.3. File structure</h3></div></div></div><p>The structure of locales in kivitendo is:</p><pre class="programlisting">kivitendo/locale/<langcode>/</pre><p>where <langcode> stands for an abbreviation of the
|
|
9 | 9 |
language package. The builtin packages use two letter <a class="ulink" href="http://en.wikipedia.org/wiki/ISO_639-1" target="_top">ISO 639-1</a> codes, |
10 | 10 |
but the actual name is not relevant for the program and can easily be |
11 | 11 |
extended to <a class="ulink" href="http://en.wikipedia.org/wiki/IETF_language_tag" target="_top">IETF language |
... | ... | |
14 | 14 |
recognized:</p><div class="variablelist"><dl><dt><span class="term">LANGUAGE</span></dt><dd><p>This file is mandatory.</p><p>The <code class="filename">LANGUAGE</code> file contains the self |
15 | 15 |
descripted name of the language. It should contain a native |
16 | 16 |
representation first, and in parenthesis an english translation |
17 |
after that. Example:</p><pre class="programlisting">Deutsch (German)</pre></dd><dt><span class="term">charset</span></dt><dd><p>This file should be present.</p><p>The <code class="filename">charset</code> file describes which |
|
18 |
charset a language package is written in and applies to all |
|
19 |
other language files in the package. It is possible to write |
|
20 |
some language packages without an explicit charset, but it is |
|
21 |
still strongly recommended. You'll never know in what |
|
22 |
environment your language package will be used, and neither |
|
23 |
UTF-8 nor Latin1 are guaranteed.</p><p>The whole content of this file is a string that can be |
|
24 |
recognized as a valid charset encoding. Example:</p><pre class="programlisting">UTF-8</pre></dd><dt><span class="term">all</span></dt><dd><p>This file is mandatory.</p><p>The central translation file. It is essentially an inline |
|
17 |
after that. Example:</p><pre class="programlisting">Deutsch (German)</pre></dd><dt><span class="term">all</span></dt><dd><p>This file is mandatory.</p><p>The central translation file. It is essentially an inline |
|
25 | 18 |
Perl script autogenerated by <span class="command"><strong>locales.pl</strong></span>. To |
26 | 19 |
generate it, generate the directory and the two files mentioned |
27 | 20 |
above, and execute the following command:</p><pre class="programlisting">scripts/locales.pl <langcode></pre><p>Otherwise you can simply copy one of the other languages. |
doc/html/index.html | ||
---|---|---|
1 | 1 |
<html><head> |
2 | 2 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
3 |
<title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e690">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.sendmail">2.10.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.smtp">2.10.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#Vorlagenverzeichnis-anlegen">2.11.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-Standard">2.11.2. Standard</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#f-tex">2.11.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-RB">2.11.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#allgemeine-hinweise-zu-latex">2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s13.html">2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
|
|
3 |
<title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e689">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.sendmail">2.10.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.smtp">2.10.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#Vorlagenverzeichnis-anlegen">2.11.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-Standard">2.11.2. Standard</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#f-tex">2.11.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-RB">2.11.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#allgemeine-hinweise-zu-latex">2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s13.html">2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
|
|
4 | 4 |
EUR</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s13.html#config.eur.introduction">2.13.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.parameters">2.13.2. Konfigurationsparameter</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.setting-parameters">2.13.3. Festlegen der Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.inventory-system-perpetual">2.13.4. Bemerkungen zu Bestandsmethode</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.knonw-issues">2.13.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s14.html">2.14. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s14.html#config.skr04-update-3804.introduction">2.14.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.skr04-update-3804.create-chart">2.14.2. Konto 3804 manuell anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s15.html">2.15. Einstellungen pro Mandant</a></span></dt><dt><span class="sect1"><a href="ch02s16.html">2.16. kivitendo ERP verwenden</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Features und Funktionen</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#features.periodic-invoices">3.1. Wiederkehrende Rechnungen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.introduction">3.1.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.configuration">3.1.2. Konfiguration</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.variables">3.1.3. Spezielle Variablen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.reports">3.1.4. Auflisten</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.task-server">3.1.5. Erzeugung der eigentlichen Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.create-for-current-month">3.1.6. Erste Rechnung für aktuellen Monat erstellen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s02.html">3.2. Dokumentenvorlagen und verfügbare Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.einf%C3%BChrung">3.2.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.variablen-ausgeben">3.2.2. Variablen ausgeben</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">3.2.3. Verwendung in Druckbefehlen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.tag-style">3.2.4. Anfang und Ende der Tags verändern</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen">3.2.5. Zuordnung von den Dateinamen zu den Funktionen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dateinamen-erweitert">3.2.6. Sprache, Drucker und E-Mail</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.allgemeine-variablen">3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden |
5 | 5 |
sind</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.invoice">3.2.8. Variablen in Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dunning">3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.andere-vorlagen">3.2.10. Variablen in anderen Vorlagen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.bloecke">3.2.11. Blöcke, bedingte Anweisungen und Schleifen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.markup">3.2.12. Markup-Code zur Textformatierung innerhalb von |
6 |
Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5287">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5388">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5421">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5809">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.known-issues">4.2.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.2. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3.
|
|
6 |
Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5259">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5360">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5393">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5781">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.character-set">4.4.2. Character set</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.3. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3.
|
|
7 | 7 |
Existierende Tests ausführen |
8 | 8 |
</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.meaning_of_scripts">4.5.4. |
9 | 9 |
Bedeutung der verschiedenen Test-Scripte |
locale/de/all | ||
---|---|---|
1 | 1 |
#!/usr/bin/perl |
2 | 2 |
# -*- coding: utf-8; -*- |
3 |
# vim: fenc=UTF-8
|
|
3 |
# vim: fenc=utf-8
|
|
4 | 4 |
|
5 | 5 |
use utf8; |
6 | 6 |
|
... | ... | |
2457 | 2457 |
'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.', |
2458 | 2458 |
'You\'re not editing a file.' => 'Sie bearbeiten momentan keine Datei.', |
2459 | 2459 |
'You\'ve already chosen the following limitations:' => 'Sie haben bereits die folgenden Einschränkungen vorgenommen:', |
2460 |
'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.',
|
|
2460 |
'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.',
|
|
2461 | 2461 |
'Your TODO list' => 'Ihre Aufgabenliste', |
2462 | 2462 |
'Your account number' => 'Ihre Kontonummer', |
2463 | 2463 |
'Your bank' => 'Der Name Ihrer Bank', |
locale/de/charset | ||
---|---|---|
1 |
UTF-8 |
locale/en/charset | ||
---|---|---|
1 |
UTF-8 |
scripts/dbupgrade2_tool.pl | ||
---|---|---|
349 | 349 |
exit 0; |
350 | 350 |
} |
351 | 351 |
|
352 |
my $db_charset = $::lx_office_conf{system}->{dbcharset}; |
|
353 |
$db_charset ||= Common::DEFAULT_CHARSET(); |
|
354 |
|
|
355 | 352 |
foreach my $control (@upgradescripts) { |
356 | 353 |
$control->{file} =~ /\.(sql|pl)$/; |
357 | 354 |
my $file_type = $1; |
... | ... | |
360 | 357 |
print "Applying upgrade $control->{file}\n"; |
361 | 358 |
|
362 | 359 |
if ($file_type eq "sql") { |
363 |
$dbupgrader->process_query($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset);
|
|
360 |
$dbupgrader->process_query($dbh, "sql/Pg-upgrade2/$control->{file}", $control); |
|
364 | 361 |
} else { |
365 |
$dbupgrader->process_perl_script($dbh, "sql/Pg-upgrade2/$control->{file}", $control, $db_charset);
|
|
362 |
$dbupgrader->process_perl_script($dbh, "sql/Pg-upgrade2/$control->{file}", $control); |
|
366 | 363 |
} |
367 | 364 |
} |
368 | 365 |
|
scripts/locales.pl | ||
---|---|---|
120 | 120 |
unlink "$locales_dir/lost"; |
121 | 121 |
} |
122 | 122 |
|
123 |
my $charset = slurp("$locales_dir/charset") || 'utf-8'; |
|
124 |
chomp $charset; |
|
125 |
|
|
126 | 123 |
my %old_texts = %{ $self->{texts} || {} }; |
127 | 124 |
|
128 | 125 |
handle_file(@{ $_ }) for @progfiles; |
... | ... | |
717 | 714 |
|
718 | 715 |
open my $fh, '>:encoding(utf8)', $file or die "$! : $file"; |
719 | 716 |
|
720 |
$charset =~ s/\r?\n//g; |
|
721 |
my $emacs_charset = lc $charset; |
|
722 |
|
|
723 |
print $fh "#!/usr/bin/perl\n# -*- coding: $emacs_charset; -*-\n# vim: fenc=$charset\n\nuse utf8;\n\n"; |
|
717 |
print $fh "#!/usr/bin/perl\n# -*- coding: utf-8; -*-\n# vim: fenc=utf-8\n\nuse utf8;\n\n"; |
|
724 | 718 |
print $fh $header, "\n" if $header; |
725 | 719 |
print $fh "$data_name = $delim[0]\n" if $data_name; |
726 | 720 |
|
Auch abrufbar als: Unified diff
Unterstützung für andere Datenbankencodings als Unicode/UTF-8 entfernt