
| Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Cursor/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Cursor/obj.pm |
package Cursor::obj;
use strict;
use Cursor::buffered_cursor;
use Time::ParseDate;
use vars qw(@ISA);
use Digest::MD5;
@ISA = qw(Cursor::buffered_cursor);
sub new {
my $class = shift;
my $self = {};
$self->{'CURSOR'} = shift;
$self->{'DATE'} = shift;
$self->{'QUERY'} = shift;
$self->{'PARAMETER'} = shift;
if (ref($self->{'QUERY'}) ne "ARRAY") {
$self->{'QUERY'} = [$self->{'QUERY'}];
}
bless($self,$class);
return($self);
}
#*************************************************************************
# Ein obj-Cursor-Objekt ist ein Hash, das seine eigene Serialisierung
# im Feld '___' haelt. Es kann sich auch um ein anonymes Array
# von solchen Objekten handeln.
sub next1 {
my $self = shift;
my $entry = shift;
if (!$entry) {
$self->{'ZAEHLER'} = 0;
while (0 == 0) {
$entry = $self->{'CURSOR'}->next();
return(undef) if (!$entry);
$entry = $self->next1($entry);
if (ref($entry)) {
return($entry);
}
}
}
my $o; my $o1; my $o2; my $o3; my $o11; my $o12;
if (ref($entry) eq "ARRAY") {
$o3 = [];
foreach $o (@$entry) {
$o2 = $self->next1($o);
$self->{'ZAEHLER'} = $self->{'ZAEHLER'} + 1;
if ($o2 eq "___FAILED___FAILED___") {
$self->{'ZAEHLER'} = 0;
return("");
}
push(@$o3,$o2);
}
$self->{'ZAEHLER'} = 0;
return($o3);
}
if (ref($entry) eq "HASH") {
return($entry);
}
my $entry0 = $entry;
$entry =~ s/\:0 /01.01.1970\:/g;
$entry =~ s/ 9\:/01.01.9999\:/g;
if (!(ref($entry))) { # if $entry is a textvariable
while (0 == 0) {
last if (!($self->{'DATE'}));
last if ($entry !~ s/(\d\d?\.\d\d?\.\d\d\d?\d?)\: *(.*?) *(\d\d?\.\d\d?\.\d\d\d?\d?)\:/---TEMP---/s);
$o = $2;
$o1 = $1;
$o2 = $3;
$o11 = Time::ParseDate::parsedate($o1,UK=>1);
if ($o2 eq "01.01.9999") {
$o12 = 99999999999;
} else {
$o12 = Time::ParseDate::parsedate($o2,UK=>1);
}
if ($o12 < $o11) {
$entry =~ s/---TEMP---/$o $o2\:/;
}
elsif ($self->{'DATE'} > $o12) {
$entry =~ s/---TEMP---/$o2\:/;
}
elsif ($self->{'DATE'} < $o11) {
$entry =~ s/---TEMP---/$o1\:/;
}
else {
$entry =~ s/---TEMP---/$o $o2\:/;
}
}
$entry =~ s/ *(\d\d?\.\d\d?\.\d\d\d?\d?\:)//;
while (0 == 0) {
last if (!($self->{'PARAMETER'}));
last if ($entry !~ s/ *([a-z0-9,\-]+)\: +(.*?) +([a-z0-9,\-]+\:)/---TEMP---/s);
$o = $2;
$o1 = $1;
$o2 = $3;
if ($o2 eq "-:") {
$o2 = "";
}
else {
$o2 = " " . $o2;
}
$o11 = "," . $o1 . ",";
$o12 = "," . $self->{'PARAMETER'} . ",";
if ($o11 !~ /$o12/ and $o11 !~ /,x,/) {
$o = "";
}
elsif ($o2) {
$o2 = " xx:";
}
$entry =~ s/---TEMP---/$o$o2/;
}
}
$o = 1;
foreach $o1 (split(/~/,$self->{'QUERY'}->[$self->{'ZAEHLER'}])) {
$o = 1;
foreach $o2 (split(/,/,$o1)) {
next if ($entry =~ /$o2/);
$o = 0;
last;
}
last if ($o);
}
# do { print "ZZZ: $entry $o --- $self->{'ZAEHLER'}\n"; sleep 3 } if ($entry =~ /Cheung/);
return("___FAILED___FAILED___") if (!$o);
if ($entry =~ /\=\>/) {
$o2 = {};
eval("\$o2 = \{$entry\n\}"); print $@;
if ($@ and $entry !~ /___PLEASE_CORRECT___/) {
$o2->{'___'} = $@."___PLEASE_CORRECT___\n" . $entry0;
} else {
$o2->{'___'} = $entry0;
}
$o2->{'___ACT___'} = $entry;
return($o2);
}
if ($entry !~ /\:\:(.*)\:\:/s) {
return({"___" => $entry0, "___ACT___" => $entry});
}
# if $entry is a free database field:
my $q = {};
$q->{'___'} = $entry0;
$q->{'___ACT___'} = $entry;
$entry = $entry . "::";
while ($entry =~ s/::([A-Za-z0-9]+):: *(.*?) *(\n?)::/::/s) {
$o = $1;
$o1 = $2;
$q->{lc($o)} = $o1;
while ($o1 =~ s/([A-Za-z0-9\.\-]*)\: *(.*?) *([A-Za-z0-9\.\-]*\:|$)/$3/) {
$o2 = $1;
$o3 = $2;
$o2 =~ s/[\.\-]//g;
$o3 =~ /^ *(.*?)[, ]*$/;
$o3 = $1;
$q->{lc($o."-".$o2)} = $o3;
}
$q->{lc($o."-rest")} = $o1;
}
return($q);
}
#****************************************************************
1;