package LinuxFocus::SDB; use strict; use vars qw ( $VERSION @ISA @EXPORT_OK $doc $article $lang $articleid %dbs @dbids ); use LinuxFocus::DB; BEGIN { require LinuxFocus::DB; $VERSION = '0.2'; # 19-08-2000 @ISA = qw( Exporter ); @EXPORT_OK = qw( &load ); return 1; } sub new { my ($class, %args) = @_; %dbs = (); @dbids = (); return bless {}, $class; } sub load { my ($class, $file, @dummy) = @_; my $db = LinuxFocus::DB->new(); $db->load($file); my $dblang = $db->getDBLang(); $db->setLang($dblang); $dbs{$dblang} = $db; push (@dbids, $dblang); } sub setLang { (my $class, $lang) = @_; } sub getCurrentMonthID { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); # first db is considered up to date my $result = "May2000"; my $resultcode = "200005"; foreach my $dbid (@dbids) { #print STDERR "Checking current month in $dbid$/"; my ($temp, $tempcode) = ($dbs{$dbid})->getCurrentMonthID(); if ($tempcode > $resultcode) { $result = $temp; $resultcode = $tempcode; }; } return $result; } sub getMonthIDs { my ($class, %args) = @_; my ($sort, $limit); if (%args) { $sort = $args{"sort"} || "asc"; $limit = $args{"limit"}; } die "No databases loaded!$/" if (scalar @dbids == 0); my @result = (); foreach my $dbid (@dbids) { push(@result, ($dbs{$dbid})->getMonthIDs(%args, raw => "yes")); } # sort the stuff if (defined $sort) { @result = sort @result; if ($sort eq "asc") { } else { # assume descending order @result = reverse @result; } } else { # assume random order is oke } # uniq and limit the stuff my $counter = 0; my $previd = "-1"; my @final = (); foreach my $monthid (@result) { my ($sorter, $value) = split('{', $monthid); if ($previd ne $value) { $counter++; if ((!defined $limit) || $counter <= $limit) { push(@final, $value); } $previd = $value; } } return @final; } sub getPersonIDs { my ($class, %args) = @_; my $limit; if (%args) { $limit = $args{"limit"}; }; my $sort = $args{"sort"} || "no"; die "No databases loaded!$/" if (scalar @dbids == 0); my @result = (); foreach my $dbid (@dbids) { push(@result, ($dbs{$dbid})->getPersonIDs(%args, raw => "yes")); } # sort the stuff if (defined $sort) { @result = sort @result; if ($sort eq "asc") { } else { # assume descending order @result = reverse @result; } } else { # assume random order is oke } # uniq and limit the stuff my $counter = 0; my $previd = "-1"; my @final = (); foreach my $id (@result) { my ($sorter, $value) = split('{', $id); if ($previd ne $value) { $counter++; if ((!defined $limit) || $counter <= $limit) { push(@final, $value); } $previd = $value; } } return @final; } sub getArticleIDs { my ($class, %args) = @_; my ($limit, $month, $translated, $to, $from); if (%args) { # Use month => "" to get IDs of article in a certain month $month = $args{"month"}; # Use translated => "yes" with either/both to => "" or/and # from => "" to select tranlated articles $translated = $args{"translated"}; $to = $args{"to"}; $from = $args{"from"}; # general variables $limit = $args{"limit"}; } my $sort = $args{"sort"} || "no"; my $published = $args{"published"} || "no"; my $cover = $args{"coverpages"} || "no"; my $raw = $args{"raw"} || "no"; die "No databases loaded!$/" if (scalar @dbids == 0); my @articleIDs = (); foreach my $dbid (@dbids) { push(@articleIDs, ($dbs{$dbid})->getArticleIDs()); } @articleIDs = reverse sort @articleIDs; my @temp = (); my $previd = ""; foreach my $id (@articleIDs) { if ($id ne $previd) { push (@temp, $id); } $previd = $id; } @articleIDs = @temp; my %temp = (); if (defined $month) { foreach my $id (@articleIDs) { selectArticle($class, $id); #print "selecting $id... "; #print getArticleMonthID($class) . " (=? $month)"; if (getArticleMonthID($class) eq $month) { #print " ... selected!$/"; $temp{$id} = $id; #print " temp size: " . scalar(keys %temp) . "$/"; } else { #print "$/"; } } } elsif (defined $translated && (defined $to || defined $from)) { foreach my $id (@articleIDs) { selectArticle($class, $id); my $date = ""; if (defined $to || !defined $from) { $date = getArticleTranslationDate($class, to => "$to") || ""; } elsif (defined $from) { $date = getArticleTranslationDate($class, from => "$from") || ""; } else { $date = getArticleTranslationDate($class, from => "$from", to => "$to") || ""; } if ($date ne "") { $temp{"$date$id"} = $id; } } } else { foreach my $id (@articleIDs) { $temp{"$id"} = $id; } } # sort the stuff my @result = (); my @keys = keys %temp; #print "temp size: " . scalar(@keys) . "$/"; if ($sort ne "no") { #print "temp size: " . scalar(@keys) . "$/"; @keys = sort @keys; #print "temp size: " . scalar(@keys) . "$/"; if ($sort eq "desc") { #print "temp size: " . scalar(@keys) . "$/"; @result = reverse @keys; } #print "temp size: " . scalar(@keys) . "$/"; } else { @result = @keys; } #print "temp size: " . scalar(@result) . "$/"; # uniq and limit the stuff my $counter = 0; $previd = "-1"; my @final = (); #print "Making final selection:$/"; foreach my $id (@result) { #print "cheking key=$id$/"; if ($previd ne $id) { $counter++; if ((!defined $limit) || $counter <= $limit) { push(@final, $temp{$id}); } $previd = $id; } } return @final; } sub selectArticle { my ($class, $artid) = @_; die "No article ID given!$/" if (!defined $artid); die "No databases loaded!$/" if (scalar @dbids == 0); $class->{articleid} = $artid; foreach my $dbid (@dbids) { ($dbs{$dbid})->selectArticle($artid); } } sub articleIsPublished { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = 0; foreach my $dbid (reverse @dbids) { if (!$result) { $result = ($dbs{$dbid})->articleIsPublished(); } } return $result; } sub articleIsCover { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = 0; foreach my $dbid (reverse @dbids) { if (!$result) { $result = ($dbs{$dbid})->articleIsCover(); } } return $result; } sub getArticleMonthID { my ($class, $olang) = @_; $olang = $lang if (!defined $olang); die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleMonthID($olang); if ($value && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getArticleMonth { my ($class, $olang) = @_; $olang = $lang if (!defined $olang); die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleMonth($olang); if ($value ne "" && $result eq "") { $result = $value; return $result if ($olang eq $dbs{$dbid}->getDBLang()); }; } return $result; } sub getArticleTitle { my ($class, $olang) = @_; my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTitle($olang); if ($value ne "") { $result = $value; }; } return $result; } sub getIssueRL { my ($class, $id, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getIssueRL($id, $olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getArticleRL { my ($class, $olang, %args) = @_; $olang = $lang if (!defined $olang); my $meta = $args{meta}; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleRL($olang, %args); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } if ($result eq "") { my $langdir = ""; my $issuerl = ""; my $monthid = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleMonthID($olang); if ($value ne "" && $monthid eq "") { $monthid = $value; } } foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getLanguageDir($olang); if ($value ne "" && ($langdir eq "" || $lang eq $olang)) { $langdir = $value; } $value = ($dbs{$dbid})->getIssueRL($monthid); if ($value ne "" && ($issuerl eq "" || $lang eq $olang)) { $issuerl = $value; } } if ($meta) { $result = "$langdir/$issuerl/article" . $class->{articleid} . ".meta.shtml"; } else { $result = "$langdir/$issuerl/article" . $class->{articleid} . ".shtml"; } } return $result; } sub getArticleThemeID { my ($class, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleThemeID($olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getArticleTheme { my ($class, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTheme($olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getArticleOriginalLanguage { my ($class, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleOriginalLanguage($olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getArticleTranslationDate { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationDate(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationPerson { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationPerson(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationPersonID { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationPersonID(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationPersonEmail { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationPersonEmail(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationReservationDate { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationReservationDate(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationProofreadDate { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationProofreadDate(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationProofreadPerson { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationProofreadPerson(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationProofreadPersonID { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationProofreadPersonID(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleTranslationProofreadPersonEmail { my ($class, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleTranslationProofreadPersonEmail(%args); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleAuthor { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleAuthor(); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleAuthorID { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleAuthorID(); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleAbstract { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleAbstract(); if ($value ne "") { $result = $value; }; } return $result; } sub getArticleAuthorEmail { my ($class) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getArticleAuthorEmail(); if ($value ne "") { $result = $value; }; } return $result; } sub getTheme { my ($class, $themeid, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getTheme($themeid, $olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub getMonthName { my ($class, $id, $olang) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getMonthName($id, $olang); if ($value ne "" && ($result eq "" || $lang eq $olang)) { $result = $value; }; } return $result; } sub issueIsPublished { my ($class, $id) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = 0; foreach my $dbid (reverse @dbids) { if (!$result) { $result = ($dbs{$dbid})->issueIsPublished($id); } #print STDERR "DEBUG: isPublished: $dbid -> $result$/"; } return $result; } sub getPersonEmail { my ($class, $id) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getPersonEmail($id); if ($value ne "" && $result eq "") { $result = $value; }; } return $result; } sub getPersonName { my ($class, $id) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getPersonName($id); if ($value ne "" && $result eq "") { $result = $value; }; } return $result; } sub getPersonNickname { my ($class, $id) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getPersonNickname($id); if ($value ne "" && $result eq "") { $result = $value; }; } return $result; } sub getPersonDescription { my ($class, $id) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my $result = ""; foreach my $dbid (reverse @dbids) { my $value = ($dbs{$dbid})->getPersonDescription($id); if ($value ne "") { $result = $value; }; } return $result; } sub getPersonStats { my ($class, $id, %args) = @_; die "No databases loaded!$/" if (scalar @dbids == 0); my %result = (); my $translated = 0; my $proofread = 0; my $written = 0; foreach my $dbid (reverse @dbids) { my %value = ($dbs{$dbid})->getPersonStats($id, %args); $translated += $value{translated}; $proofread += $value{proofread}; $written += $value{written}; } $result{written} = $written; $result{translated} = $translated; $result{proofread} = $proofread; return %result; } sub getLanguageDir { my ($olang) = @_; my $result = "English"; if ($olang eq "nl") { $result = "Nederlands"; } elsif ($olang eq "de") { $result = "Deutsch"; } elsif ($olang eq "es") { $result = "Castellano"; } elsif ($olang eq "fr") { $result = "Francais"; } return $result; } 1;