File Coverage

blib/lib/Search/Circa/Annuaire.pm
Criterion Covered Total %
statement 12 151 7.9
branch 0 76 0.0
condition 0 38 0.0
subroutine 4 11 36.3
pod 6 7 85.7
total 22 283 7.7


line stmt bran cond sub pod time code
1             package Search::Circa::Annuaire;
2              
3             # module Search::Circa::Annuaire : See Search::Circa
4             # Copyright 2000 A.Barbet alian@alianwebserver.com. All rights reserved.
5              
6             # $Log: Annuaire.pm,v $
7             # Revision 1.7 2002/08/19 10:17:13 alian
8             # Correct bug in previous version: @l = ... || return undef
9             #
10             # Revision 1.6 2002/08/17 18:19:02 alian
11             # - Minor changes to all code suite to tests
12             #
13             # Revision 1.5 2001/10/28 16:28:46 alian
14             # - Add some debug info on level 3
15             #
16             # Revision 1.4 2001/10/28 12:23:23 alian
17             # - Correction d'un warning sur l'affichage du titre de la categorie racine
18             #
19             # Revision 1.3 2001/08/26 23:12:10 alian
20             # - Add POD documentation
21             # - Add CreateDirectory method
22              
23 2     2   66369 use strict;
  2         6  
  2         84  
24 2     2   5865 use DBI;
  2         92807  
  2         295  
25 2     2   2447 use Search::Circa;
  2         10  
  2         214  
26 2     2   15 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
  2         5  
  2         7260  
27             require Exporter;
28              
29             @ISA = qw(Exporter Search::Circa);
30             @EXPORT = qw();
31             $VERSION = ('$Revision: 1.7 $ ' =~ /(\d+\.\d+)/)[0];
32              
33             # Default display of item link
34             $Circa::Annuaire::Ts =
35             '"
  •   ".($indiceG+1)." - $titre
  • 36             $description
    37             Url: $url
    38             Last update: $last_update
    39             \n"';
    40              
    41             # default display of category link
    42             $Circa::Annuaire::Tc='"

    $nom_complet

    \n"';
    43              
    44              
    45             #------------------------------------------------------------------------------
    46             # new
    47             #------------------------------------------------------------------------------
    48             sub new
    49             {
    50 0     0 0   my $class = shift;
    51 0           my $self = $class->SUPER::new;
    52 0           bless $self, $class;
    53 0           $self->{nbResultPerPage} = 10;
    54 0   0       $self->{SCRIPT_NAME} = $ENV{'SCRIPT_NAME'} || "search.cgi";
    55 0           return $self;
    56             }
    57              
    58             #------------------------------------------------------------------------------
    59             # create_annuaire
    60             #------------------------------------------------------------------------------
    61             sub create_annuaire
    62             {
    63 0     0 1   my ($self, $idr, $masque, $path)=@_;
    64             # On previent que on genere des pages statiques
    65 0           $self->{_create} = 1;
    66             # racine des fichiers crees
    67 0           my $orig = $path."/".$idr.'/';
    68             # On charge la liste des categories
    69 0           my $rt = $self->categorie->loadAll($idr);
    70             # Pour chaque categorie, on cree la page correspondante
    71 0           foreach my $categorie (keys %$rt)
    72             {
    73 0           my $f;
    74 0 0         if ($categorie != 0)
    75             {
    76 0           my $parent = $categorie;
    77 0           while ($$rt{$parent}[1])
    78             {
    79 0 0         if ($f) { $f = $$rt{$parent}[1]."/".$f; }
      0            
      0            
    80             else {$f = $$rt{$parent}[1]; }
    81 0           $parent = $$rt{$parent}[1];
    82             }
    83             # Creation du repertoire (recursif)
    84 0 0         if ($f) { $f = $orig.$f; }
      0            
    85 0           else { $f=$orig; }
    86 0           my @l = split(/\//, $f);
    87 0           push(@l,$categorie);
    88 0           $self->CreateDirectory(@l);
    89            
    90             # Creation du fichier
    91 0           $f .= '/'.$categorie.'/index.html';
    92             }
    93 0           else { $f= $orig.'/index.html'; }
    94 0           print "Create $f ($$rt{$categorie}[0])\n";
    95 0 0         open(FILE, ">$f") || die "Can't create $f:$!\n";
    96 0           print FILE $self->GetContentOf($masque, $idr, $categorie);
    97 0           close(FILE);
    98             }
    99 0           $self->{_create} = 0;
    100             }
    101              
    102             #------------------------------------------------------------------------------
    103             # CreateDirectory
    104             #------------------------------------------------------------------------------
    105             sub CreateDirectory {
    106 0     0 1   my ($self, @l) = @_;
    107 0           my $o;
    108 0           foreach (@l) {
    109 0 0         if ($_) {
    110 0           $o.='/'.$_;
    111 0 0         if (!-e $o) {
    112 0           print "Creation de $o\n";
    113 0           mkdir($o, 0755);
    114             }
    115             }
    116             }
    117             }
    118              
    119              
    120             #------------------------------------------------------------------------------
    121             # GetContentOf
    122             #------------------------------------------------------------------------------
    123             sub GetContentOf
    124             {
    125 0     0 1   my ($self, $masqueOrig, $id, $categorie,$templateS,$templateC,$first)=@_;
    126 0 0         if (!$categorie) {$categorie=0;}
      0            
    127 0 0         if (!$id) {$id=1;}
      0            
    128 0 0         if (!$templateC) { $templateC = $Circa::Annuaire::Tc; }
      0            
    129 0 0         if (!$templateS) { $templateS = $Circa::Annuaire::Ts; }
      0            
    130 0           $self->trace(3,"Search::Circa::Search->GetContentOf $id $categorie");
    131 0   0       my ($masque) = $self->categorie->get_masque($id,$categorie) || $masqueOrig;
    132 0 0 0       $masque = $masqueOrig if ((!$masque || !-r $masque) && $masqueOrig);
          0        
    133 0 0 0       $masque = $CircaConf::TemplateDir."/circa.htm"
    134             if (!$masque or !-r $masque);
    135 0           my @catess = $self->GetCategoriesOf($categorie,$id);
    136 0 0         return undef if (!@catess);
    137 0           my $titre = shift @catess;
    138 0 0         if (!$titre) { $titre='';}
      0            
    139 0           $self->trace(3,"Search::Circa::Search->GetContentOf $categorie => $titre");
    140 0           my ($sites,$liens)
    141             = $self->GetSitesOf($categorie,$id,$templateS,$first);
    142 0 0 0       return undef if (!$sites and !$liens);
    143             # Substitution dans le template
    144 0           my ($c1,$c2);
    145 0 0         if (@catess) {
    146 0   0       $c1 = join(' ',@catess[0..$#catess/2]) || ' ';
    147 0   0       $c2 = join(' ',@catess[($#catess/2)+1..$#catess]) || ' ';
    148             }
    149 0           else { ($c1,$c2)=(' ',' '); }
    150              
    151 0   0       my %vars =
          0        
          0        
          0        
    152             ('resultat' => $sites || ' ',
    153             'categories1' => $c1,
    154             'categories2' => $c2,
    155             'titre' => '

    Annuaire

    '
    156             .'

    '.($titre || ' ').'

    ',
    157             'listeLiensSuivPrec'=> $liens || ' ',
    158             'words' => ' ',
    159             'categorie' => $categorie || 0,
    160             'id' => $id,
    161             'nb' => 0);
    162             # Affichage du resultat
    163 0           return $self->fill_template($masque,\%vars);
    164             }
    165              
    166              
    167             #------------------------------------------------------------------------------
    168             # GetCategoriesOf
    169             #------------------------------------------------------------------------------
    170             sub GetCategoriesOf {
    171 0     0 1   my ($self,$id,$idr,$template)=@_;
    172 0           $self->trace(3,"Search::Circa::Search->GetCategoriesOf $id $idr");
    173 0 0         $idr=1 if !$idr;
    174 0 0         $id=0 if !$id;
    175 0 0         $template = $Circa::Annuaire::Tc if !$template;
    176 0           my (@buf,%tab,$titre);
    177             # On charge toutes les categories
    178 0           my $ref = $self->categorie->loadAll($idr);;
    179 0 0         if (ref($ref)) { %tab = %$ref;}
      0            
    180             else {
    181 0           $self->trace(1,"Search::Circa::Search->GetCategoriesOf after".
    182             " loadAll $idr");
    183 0           return undef;
    184             }
    185 0           foreach my $key (keys %tab)
    186             {
    187 0           my $nom_complet;
    188 0           my ($nom,$parent)=($tab{$key}[0],$tab{$key}[1]);
    189 0           $nom_complet=$self->categorie->getParent($key,%tab);
    190 0           my $links;
    191             # Le lien des categorie est != dans le cas de la generation
    192             # et quand c'est fait a la volee
    193 0 0         if ($self->{_create}) { $links = $key; }
      0            
    194 0           else { $links = $self->get_link_categorie($key, $idr, 0);}
    195 0 0 0       if ( ($parent==$id) and ($key != 0))
      0            
    196             {push(@buf,eval $template);}
    197             }
    198 0 0         if ($#buf==-1) {$buf[0]="

    Plus de catégorie

    ";}
      0            
    199 0           my $nom_complet=$self->categorie->getParent($tab{$id}[1],%tab);
    200 0 0         if ($self->{_create})
    201 0           { $titre = "$nom_complet"; }
    202             else
    203             {
    204 0           $titre = "
    205             .$self->get_link_categorie($tab{$id}[1], $idr, 0)
    206             ."\">$nom_complet";
    207             }
    208 0           unshift(@buf,$titre);
    209 0           $self->trace(3,"Search::Circa::Search->GetCategoriesOf End: $id=> $buf[0]");
    210 0           return @buf;
    211             }
    212              
    213             #------------------------------------------------------------------------------
    214             # GetSitesOf
    215             #------------------------------------------------------------------------------
    216             sub GetSitesOf
    217             {
    218 0     0 1   my ($self,$id,$idr,$template,$first)=@_;
    219 0           $self->trace(3,"Search::Circa::Search->GetSitesOf $id $idr");
    220 0 0         if (!$idr) {$idr=1;}
      0            
    221 0 0         if (!$id) {$id=0;}
      0            
    222 0 0         if (!$template) {$template=$Circa::Annuaire::Ts;}
      0            
    223 0           my ($buf,$buf_l);
    224 0           my $requete = "
    225             select url,titre,description,langue,last_update
    226             from ".$self->{PREFIX_TABLE}.$idr."links
    227             where categorie=$id and browse_categorie='1' and parse='1'";
    228 0           my $sth = $self->{DBH}->prepare($requete);
    229 0 0         if (!$sth->execute()) {
    230 0           $self->trace(1,"Search::Circa::Search-> GetSitesOf ".
    231             "Erreur $requete:$DBI::errstr\n");
    232 0           return undef;
    233             }
    234 0           my ($facteur,$indiceG)=(100,0);
    235 0           while (my ($url,$titre,$description,$langue,$last_update)
    236             = $sth->fetchrow_array) {
    237 0           $indiceG++;
    238 0 0         if ($last_update eq '0000-00-00 00:00:00') {$last_update='?';}
      0            
    239 0 0         if (defined($first)) {
    240 0 0 0       if ($indiceG>$first and ($indiceG<($first+$self->{nbResultPerPage}))){
    241 0           $buf.= eval $template;
    242             }
    243 0 0         if (!(($indiceG-1)%$self->{nbResultPerPage})) {
    244 0 0         if (($indiceG-1)==$first) {
    245 0           $buf_l.=((($indiceG-1)/$self->{nbResultPerPage})+1).' -';}
    246             else {
    247 0           $buf_l .= ' 248             .$self->get_link_categorie($id,$idr,$indiceG-1).'">'
    249             .((($indiceG-1)/$self->{nbResultPerPage})+1).'-';}
    250             }
    251             }
    252 0           else { $buf.= eval $template;}
    253             }
    254 0 0 0       if ($indiceG>$self->{nbResultPerPage} and defined($first))
      0            
    255 0           {chop($buf_l);$buf_l='

    <'.$buf_l.'>

    ';}
    256 0 0         if (!$buf)
      0            
    257             {$buf="

    Pas de pages dans cette catégorie

    ";}
    258 0 0         if (wantarray()) {return ($buf,$buf_l);}
      0            
      0            
    259             else {return $buf;}
    260             }
    261              
    262              
    263              
    264             #------------------------------------------------------------------------------
    265             # get_link_categorie
    266             #------------------------------------------------------------------------------
    267             sub get_link_categorie
    268             {
    269 0     0 1   my ($self,$no_categorie,$id,$first) = @_;
    270 0 0         if (!defined($first)) { $first = 0; }
      0            
    271 0 0         if (defined($no_categorie))
      0            
    272 0           {return $self->{SCRIPT_NAME}."?categorie=$no_categorie&id=$id&first=$first";}
    273             else {return $self->{SCRIPT_NAME}."?id=$id&first=$first";}
    274             }
    275              
    276              
    277             #------------------------------------------------------------------------------
    278             # POD DOCUMENTATION
    279             #------------------------------------------------------------------------------
    280              
    281             =head1 NAME
    282              
    283             Circa::Annuaire - Create html pages for annuaire
    284              
    285             =head1 SYNOPSIS
    286              
    287             # Create Search::Circa::Annuaire object
    288             my $annuaire = new Search::Circa::Annuaire;
    289              
    290             # Connect appli
    291             if (!$annuaire->connect($user,$pass,$db,"localhost"))
    292             {die "Erreur à la connection MySQL:$DBI::errstr\n";}
    293              
    294             # Create all page in /tmp/annuaire directory for
    295             # account 1 with defaut file $masque
    296             $annuaire->create_annuaire(1, $masque, "/tmp/annuaire");
    297              
    298             # Disconnect appli
    299             $annuaire->close;
    300              
    301              
    302             =head1 DESCRIPTION
    303              
    304              
    305              
    306             =head1 VERSION
    307              
    308             $Revision: 1.7 $
    309              
    310             =head1 Public Class Interface
    311              
    312             =over
    313              
    314             =item create_annuaire
    315              
    316             =item GetContentOf
    317              
    318             =item GetCategoriesOf
    319              
    320             =item GetSitesOf
    321              
    322             =back
    323              
    324             =head1 Private Class Interface
    325              
    326             =over
    327              
    328             =item get_link_categorie
    329              
    330             =item CreateDirectory
    331              
    332             =back
    333              
    334             =head1 AUTHOR
    335              
    336             Alain BARBET alian@alianwebserver.com
    337              
    338             =cut