kivitendo/SL/MoreCommon.pm @ 17b87579
6b293028 | Moritz Bunkus | package SL::MoreCommon;
|
||
require Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
4f82ce00 | Moritz Bunkus | @EXPORT = qw(save_form restore_form compare_numbers any);
|
||
6b293028 | Moritz Bunkus | |||
use YAML;
|
||||
8c7e4493 | Moritz Bunkus | use SL::AM;
|
||
6b293028 | Moritz Bunkus | sub save_form {
|
||
$main::lxdebug->enter_sub();
|
||||
8c7e4493 | Moritz Bunkus | my @dont_dump_keys = @_;
|
||
my %not_dumped_values;
|
||||
foreach my $key (@dont_dump_keys) {
|
||||
$not_dumped_values{$key} = $main::form->{$key};
|
||||
delete $main::form->{$key};
|
||||
}
|
||||
6b293028 | Moritz Bunkus | my $old_form = YAML::Dump($main::form);
|
||
20515902 | Moritz Bunkus | $old_form =~ s|!|!:|g;
|
||
6b293028 | Moritz Bunkus | $old_form =~ s|\n|!n|g;
|
||
$old_form =~ s|\r|!r|g;
|
||||
8c7e4493 | Moritz Bunkus | map { $main::form->{$_} = $not_dumped_values{$_} } keys %not_dumped_values;
|
||
6b293028 | Moritz Bunkus | $main::lxdebug->leave_sub();
|
||
return $old_form;
|
||||
}
|
||||
sub restore_form {
|
||||
$main::lxdebug->enter_sub();
|
||||
8c7e4493 | Moritz Bunkus | my ($old_form, $no_delete, @keep_vars) = @_;
|
||
6b293028 | Moritz Bunkus | |||
8c7e4493 | Moritz Bunkus | my $form = $main::form;
|
||
my %keep_vars_map = map { $_ => 1 } @keep_vars;
|
||||
6b293028 | Moritz Bunkus | |||
8c7e4493 | Moritz Bunkus | map { delete $form->{$_} if (!$keep_vars_map{$_}); } keys %{$form} unless ($no_delete);
|
||
6b293028 | Moritz Bunkus | |||
$old_form =~ s|!r|\r|g;
|
||||
$old_form =~ s|!n|\n|g;
|
||||
805bd930 | Moritz Bunkus | $old_form =~ s|![!:]|!|g;
|
||
6b293028 | Moritz Bunkus | |||
my $new_form = YAML::Load($old_form);
|
||||
8c7e4493 | Moritz Bunkus | map { $form->{$_} = $new_form->{$_} if (!$keep_vars_map{$_}) } keys %{ $new_form };
|
||
6b293028 | Moritz Bunkus | |||
$main::lxdebug->leave_sub();
|
||||
}
|
||||
8c7e4493 | Moritz Bunkus | sub compare_numbers {
|
||
$main::lxdebug->enter_sub();
|
||||
my $a = shift;
|
||||
my $a_unit = shift;
|
||||
my $b = shift;
|
||||
my $b_unit = shift;
|
||||
$main::all_units ||= AM->retrieve_units(\%main::myconfig, $main::form);
|
||||
my $units = $main::all_units;
|
||||
if (!$units->{$a_unit} || !$units->{$b_unit} || ($units->{$a_unit}->{base_unit} ne $units->{$b_unit}->{base_unit})) {
|
||||
$main::lxdebug->leave_sub();
|
||||
return undef;
|
||||
}
|
||||
$a *= $units->{$a_unit}->{factor};
|
||||
$b *= $units->{$b_unit}->{factor};
|
||||
$main::lxdebug->leave_sub();
|
||||
return $a <=> $b;
|
||||
}
|
||||
4f82ce00 | Moritz Bunkus | sub any (&@) {
|
||
my $f = shift;
|
||||
return if ! @_;
|
||||
for (@_) {
|
||||
return 1 if $f->();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
8c7e4493 | Moritz Bunkus | |||
6b293028 | Moritz Bunkus | 1;
|