| blib/lib/Search/Circa/Categorie.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 9 | 120 | 7.5 |
| branch | 0 | 36 | 0.0 |
| condition | 0 | 24 | 0.0 |
| subroutine | 3 | 19 | 15.7 |
| pod | 14 | 16 | 87.5 |
| total | 26 | 215 | 12.0 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package Search::Circa::Categorie; | ||||||
| 2 | |||||||
| 3 | # module Circa::Categorie : See Circa::Indexer | ||||||
| 4 | # Copyright 2000 A.Barbet alian@alianwebserver.com. All rights reserved. | ||||||
| 5 | |||||||
| 6 | # $Log: Categorie.pm,v $ | ||||||
| 7 | # Revision 1.13 2002/08/17 18:19:02 alian | ||||||
| 8 | # - Minor changes to all code suite to tests | ||||||
| 9 | # | ||||||
| 10 | # Revision 1.12 2002/08/15 23:10:11 alian | ||||||
| 11 | # Minor changes to all code suite to tests. Try to adopt generic return | ||||||
| 12 | # code for all method: undef on error, 0 on no result, ... | ||||||
| 13 | # | ||||||
| 14 | # Revision 1.11 2001/10/28 12:22:37 alian | ||||||
| 15 | # - Ajout de la methode move_categorie | ||||||
| 16 | # | ||||||
| 17 | # Revision 1.10 2001/08/29 16:23:47 alian | ||||||
| 18 | # - Add get_liste_categorie_fils routine | ||||||
| 19 | # - Update POD documentation for new namespace | ||||||
| 20 | # | ||||||
| 21 | |||||||
| 22 | 12 | 12 | 5868 | use strict; | |||
| 12 | 33 | ||||||
| 12 | 450 | ||||||
| 23 | 12 | 12 | 2188 | use DBI; | |||
| 12 | 17342 | ||||||
| 12 | 554 | ||||||
| 24 | 12 | 12 | 87 | use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); | |||
| 12 | 29 | ||||||
| 12 | 32781 | ||||||
| 25 | require Exporter; | ||||||
| 26 | |||||||
| 27 | @ISA = qw(Exporter); | ||||||
| 28 | @EXPORT = qw(); | ||||||
| 29 | $VERSION = ('$Revision: 1.13 $ ' =~ /(\d+\.\d+)/)[0]; | ||||||
| 30 | |||||||
| 31 | #------------------------------------------------------------------------------ | ||||||
| 32 | # new | ||||||
| 33 | #------------------------------------------------------------------------------ | ||||||
| 34 | sub new { | ||||||
| 35 | 0 | 0 | 1 | my $class = shift; | |||
| 36 | 0 | my $self = {}; | |||||
| 37 | 0 | my $indexer = shift; | |||||
| 38 | 0 | bless $self, $class; | |||||
| 39 | 0 | $self->{INDEXER} = $indexer; | |||||
| 40 | 0 | $self->{DBH} = $indexer->{DBH}; | |||||
| 41 | 0 | return $self; | |||||
| 42 | } | ||||||
| 43 | |||||||
| 44 | #------------------------------------------------------------------------------ | ||||||
| 45 | # set_masque | ||||||
| 46 | #------------------------------------------------------------------------------ | ||||||
| 47 | sub set_masque { | ||||||
| 48 | 0 | 0 | 1 | my ($this,$compte,$id,$file)=@_; | |||
| 49 | 0 | my $r = $this->{DBH}->do("update ".$this->{INDEXER}->pre_tbl.$compte. | |||||
| 50 | "categorie set masque='$file' where id = $id"); | ||||||
| 51 | 0 | 0 | 0 | return ((!$r or $r eq '0E0') ? 0 : 1); | |||
| 52 | } | ||||||
| 53 | |||||||
| 54 | #------------------------------------------------------------------------------ | ||||||
| 55 | # get_masque | ||||||
| 56 | #------------------------------------------------------------------------------ | ||||||
| 57 | sub get_masque { | ||||||
| 58 | 0 | 0 | 1 | my ($this,$compte,$id)=@_; | |||
| 59 | 0 | 0 | return 0 if (!$id); | ||||
| 60 | 0 | my ($m) = $this->{INDEXER}->fetch_first | |||||
| 61 | ("select masque from ".$this->{INDEXER}->pre_tbl.$compte."categorie ". | ||||||
| 62 | "where id = $id"); | ||||||
| 63 | 0 | return $m; | |||||
| 64 | } | ||||||
| 65 | |||||||
| 66 | #------------------------------------------------------------------------------ | ||||||
| 67 | # delete | ||||||
| 68 | #------------------------------------------------------------------------------ | ||||||
| 69 | sub delete { | ||||||
| 70 | 0 | 0 | 1 | my ($self,$compte,$id)=@_; | |||
| 71 | 0 | my $pre = $self->{INDEXER}->pre_tbl.$compte; | |||||
| 72 | 0 | my $sth = $self->{DBH}->prepare("select id from ".$pre."links ". | |||||
| 73 | "where categorie=$id"); | ||||||
| 74 | 0 | 0 | if ($sth->execute) { | ||||
| 75 | # Pour chaque categorie | ||||||
| 76 | 0 | while (my @row = $sth->fetchrow_array) { | |||||
| 77 | 0 | $self->{DBH}->do("delete from ".$pre."relation where id_site = $row[0]"); | |||||
| 78 | } | ||||||
| 79 | 0 | $sth->finish; | |||||
| 80 | 0 | $self->{DBH}->do("delete from ".$pre."links where categorie = $id"); | |||||
| 81 | 0 | my $r = $self->{DBH}->do("delete from ".$pre."categorie where id = $id"); | |||||
| 82 | 0 | 0 | 0 | return ((!$r or $r eq '0E0') ? 0 : 1); | |||
| 83 | } else { | ||||||
| 84 | 0 | $self->{INDEXER}->trace(1,"Erreur:delete_categorie:$DBI::errstr "); |
|||||
| 85 | 0 | return undef; | |||||
| 86 | } | ||||||
| 87 | } | ||||||
| 88 | |||||||
| 89 | #------------------------------------------------------------------------------ | ||||||
| 90 | # rename | ||||||
| 91 | #------------------------------------------------------------------------------ | ||||||
| 92 | sub rename { | ||||||
| 93 | 0 | 0 | 1 | my ($this,$compte,$id,$nom)=@_; | |||
| 94 | 0 | $nom=~s/'/\\'/g; | |||||
| 95 | 0 | 0 | my $r = $this->{DBH}->do("update ".$this->{INDEXER}->pre_tbl.$compte. | ||||
| 96 | "categorie set nom='$nom' where id = $id") | ||||||
| 97 | || return undef; | ||||||
| 98 | 0 | 0 | 0 | return ((!$r or $r eq '0E0') ? 0 : 1); | |||
| 99 | } | ||||||
| 100 | |||||||
| 101 | #------------------------------------------------------------------------------ | ||||||
| 102 | # move | ||||||
| 103 | #------------------------------------------------------------------------------ | ||||||
| 104 | sub move | ||||||
| 105 | { | ||||||
| 106 | 0 | 0 | 1 | my ($this,$compte,$id1,$id2)=@_; | |||
| 107 | 0 | 0 | $this->{DBH}->do("update ".$this->{INDEXER}->pre_tbl.$compte."links ". | ||||
| 108 | "set categorie=$id2 where categorie = $id1") | ||||||
| 109 | || print STDERR "Erreur:$DBI::errstr \n"; |
||||||
| 110 | } | ||||||
| 111 | |||||||
| 112 | #------------------------------------------------------------------------------ | ||||||
| 113 | # move_categorie | ||||||
| 114 | #------------------------------------------------------------------------------ | ||||||
| 115 | sub move_categorie | ||||||
| 116 | { | ||||||
| 117 | 0 | 0 | 1 | my ($this,$compte,$id1,$id2)=@_; | |||
| 118 | 0 | 0 | $this->{DBH}->do("update ".$this->{INDEXER}->pre_tbl.$compte."categorie ". | ||||
| 119 | "set parent=$id2 where parent = $id1") | ||||||
| 120 | || print STDERR "Erreur:$DBI::errstr \n"; |
||||||
| 121 | } | ||||||
| 122 | |||||||
| 123 | #------------------------------------------------------------------------------ | ||||||
| 124 | # get_liste | ||||||
| 125 | #------------------------------------------------------------------------------ | ||||||
| 126 | sub get_liste | ||||||
| 127 | { | ||||||
| 128 | 0 | 0 | 1 | my ($self,$id,$cgi)=@_; | |||
| 129 | 0 | my (%tab,$tab2,$erreur); | |||||
| 130 | 0 | $tab2 = $self->loadAll($id); | |||||
| 131 | 0 | my $sth = $self->{DBH}->prepare("select count(1),categorie from ". | |||||
| 132 | $self->{INDEXER}->pre_tbl.$id."links ". | ||||||
| 133 | "group by categorie"); | ||||||
| 134 | 0 | 0 | $sth->execute() || return; | ||||
| 135 | 0 | while (my @row=$sth->fetchrow_array) {$tab{$row[1]}=$row[0];} | |||||
| 0 | |||||||
| 136 | 0 | $sth->finish; | |||||
| 137 | 0 | 0 | if (!$$tab2{0}) {$$tab2{0}[0]='Racine';$$tab2{0}[1]=0;} | ||||
| 0 | |||||||
| 0 | |||||||
| 138 | 0 | 0 | foreach (keys %$tab2) | ||||
| 0 | |||||||
| 139 | {$tab{$_}= $self->getParent($_,%$tab2)." (".($tab{$_}||0).")";} | ||||||
| 140 | 0 | my @l =sort { $tab{$a} cmp $tab{$b} } keys %tab; | |||||
| 0 | |||||||
| 141 | 0 | return (\@l,\%tab); | |||||
| 142 | } | ||||||
| 143 | |||||||
| 144 | #------------------------------------------------------------------------------ | ||||||
| 145 | # get | ||||||
| 146 | #------------------------------------------------------------------------------ | ||||||
| 147 | sub get | ||||||
| 148 | { | ||||||
| 149 | 0 | 0 | 1 | my ($self,$rep,$responsable) = @_; | |||
| 150 | 0 | my $ori = $self->{INDEXER}->host_indexed; | |||||
| 151 | 0 | $rep=~s/$ori//g; | |||||
| 152 | 0 | my @l = split(/\//,$rep); | |||||
| 153 | 0 | my $parent=0; | |||||
| 154 | 0 | my $regexp = qr/\.(htm|html|txt|java)$/; | |||||
| 155 | 0 | foreach (@l) | |||||
| 156 | { | ||||||
| 157 | 0 | 0 | 0 | if (($_) && ($_ !~ $regexp)) | |||
| 0 | |||||||
| 158 | {$parent = $self->create($_,$parent,$responsable);} | ||||||
| 159 | } | ||||||
| 160 | 0 | return $parent; | |||||
| 161 | } | ||||||
| 162 | |||||||
| 163 | #------------------------------------------------------------------------------ | ||||||
| 164 | # create | ||||||
| 165 | #------------------------------------------------------------------------------ | ||||||
| 166 | sub create { | ||||||
| 167 | 0 | 0 | 1 | my ($self,$nom,$parent,$responsable)=@_; | |||
| 168 | 0 | $nom=ucfirst($nom); | |||||
| 169 | 0 | $nom=~s/_/ /g; | |||||
| 170 | 0 | $nom=~s/'/\\'/g; | |||||
| 171 | 0 | my $id; | |||||
| 172 | 0 | 0 | if ($nom) { | ||||
| 173 | 0 | ($id) = $self->{INDEXER}->fetch_first | |||||
| 174 | ("select id from ".$self->{INDEXER}->pre_tbl.$responsable."categorie ". | ||||||
| 175 | "where nom='$nom' and parent=$parent"); | ||||||
| 176 | } | ||||||
| 177 | 0 | 0 | 0 | if ((!$id) && (defined $parent)) { | |||
| 178 | 0 | my $sth = $self->{DBH}->prepare("insert into ". | |||||
| 179 | $self->{INDEXER}->pre_tbl.$responsable. | ||||||
| 180 | "categorie(nom,parent) ". | ||||||
| 181 | "values('$nom',$parent)"); | ||||||
| 182 | 0 | 0 | if ($sth->execute) { | ||||
| 183 | 0 | $sth->finish; | |||||
| 184 | 0 | $id = $sth->{'mysql_insertid'}; | |||||
| 185 | } | ||||||
| 186 | 0 | else { return undef; } | |||||
| 187 | } | ||||||
| 188 | 0 | 0 | return $id || 0; | ||||
| 189 | } | ||||||
| 190 | |||||||
| 191 | #------------------------------------------------------------------------------ | ||||||
| 192 | # auto | ||||||
| 193 | #------------------------------------------------------------------------------ | ||||||
| 194 | sub auto | ||||||
| 195 | { | ||||||
| 196 | 0 | 0 | 1 | my ($self,$idp) = @_; | |||
| 197 | 0 | my @tab = $self->{INDEXER}->fetch_first | |||||
| 198 | ("select categorieAuto from ".$self->{INDEXER}->pre_tbl."responsable ". | ||||||
| 199 | "where id=$idp"); | ||||||
| 200 | 0 | return $tab[0]; | |||||
| 201 | } | ||||||
| 202 | |||||||
| 203 | #------------------------------------------------------------------------------ | ||||||
| 204 | # loadAll | ||||||
| 205 | #------------------------------------------------------------------------------ | ||||||
| 206 | sub loadAll { | ||||||
| 207 | 0 | 0 | 1 | my ($self,$idr)=@_; | |||
| 208 | 0 | my %tab; | |||||
| 209 | 0 | my $sth = $self->{DBH}->prepare | |||||
| 210 | ("select id,nom,parent from ".$self->{INDEXER}->pre_tbl.$idr."categorie"); | ||||||
| 211 | #print "requete:$requete\n"; | ||||||
| 212 | 0 | 0 | if ($sth->execute()) { | ||||
| 213 | 0 | while (my ($id,$nom,$parent)=$sth->fetchrow_array) { | |||||
| 214 | 0 | $tab{$id}[0]=$nom; | |||||
| 215 | 0 | $tab{$id}[1]=$parent; | |||||
| 216 | } | ||||||
| 217 | 0 | $tab{0}[1] = 0 ; | |||||
| 218 | 0 | $tab{0}[0] = "Racine du site"; | |||||
| 219 | 0 | return \%tab; | |||||
| 220 | } else { | ||||||
| 221 | 0 | $self->{INDEXER}->trace(1,"Circa::Categorie->loadAll $DBI::errstr\n"); | |||||
| 222 | 0 | return undef; | |||||
| 223 | } | ||||||
| 224 | } | ||||||
| 225 | |||||||
| 226 | #------------------------------------------------------------------------------ | ||||||
| 227 | # getParent | ||||||
| 228 | #------------------------------------------------------------------------------ | ||||||
| 229 | sub getParent | ||||||
| 230 | { | ||||||
| 231 | 0 | 0 | 1 | my ($self,$id,%tab)=@_; | |||
| 232 | 0 | my $parent; | |||||
| 233 | 0 | 0 | 0 | if ($tab{$id}[1] and $tab{$id}[0]) | |||
| 0 | |||||||
| 234 | {$parent = $self->getParent($tab{$id}[1],%tab);} | ||||||
| 235 | 0 | 0 | if (!$tab{$id}[0]) {$tab{$id}[0]='Home';} | ||||
| 0 | |||||||
| 236 | 0 | $parent.=">$tab{$id}[0]"; | |||||
| 237 | 0 | return $parent; | |||||
| 238 | } | ||||||
| 239 | |||||||
| 240 | |||||||
| 241 | #------------------------------------------------------------------------------ | ||||||
| 242 | # get_liste_categorie_fils | ||||||
| 243 | #------------------------------------------------------------------------------ | ||||||
| 244 | sub get_liste_categorie_fils | ||||||
| 245 | { | ||||||
| 246 | 0 | 0 | 1 | my ($self,$id,$idr)=@_; | |||
| 247 | sub get_liste_categorie_fils_inner | ||||||
| 248 | { | ||||||
| 249 | 0 | 0 | 0 | my ($id,%tab)=@_; | |||
| 250 | 0 | my (@l,@l2); | |||||
| 251 | 0 | 0 | foreach my $key (keys %tab) {push (@l,$key) if ($tab{$key}[1]==$id);} | ||||
| 0 | |||||||
| 252 | 0 | foreach (@l) {push(@l2,get_liste_categorie_fils_inner($_,%tab));} | |||||
| 0 | |||||||
| 253 | 0 | return (@l,@l2); | |||||
| 254 | } | ||||||
| 255 | 0 | my $tab = $self->loadAll($idr); | |||||
| 256 | 0 | return get_liste_categorie_fils_inner($id,%$tab); | |||||
| 257 | } | ||||||
| 258 | |||||||
| 259 | #------------------------------------------------------------------------------ | ||||||
| 260 | # get_link | ||||||
| 261 | #------------------------------------------------------------------------------ | ||||||
| 262 | sub get_link | ||||||
| 263 | { | ||||||
| 264 | 0 | 0 | 0 | my ($self,$script_name,$no_categorie,$id,$first) = @_; | |||
| 265 | 0 | 0 | if (defined($first)) | ||||
| 0 | |||||||
| 266 | 0 | {return $script_name."?categorie=$no_categorie&id=$id&first=$first";} | |||||
| 267 | else {return $script_name."?categorie=$no_categorie&id=$id";} | ||||||
| 268 | } | ||||||
| 269 | |||||||
| 270 | #------------------------------------------------------------------------------ | ||||||
| 271 | # POD DOCUMENTATION | ||||||
| 272 | #------------------------------------------------------------------------------ | ||||||
| 273 | |||||||
| 274 | =head1 NAME | ||||||
| 275 | |||||||
| 276 | Search::Circa::Categorie - provide functions to manage categorie of Circa | ||||||
| 277 | |||||||
| 278 | =head1 SYNOPSIS | ||||||
| 279 | |||||||
| 280 | my $indexer = new Search::Circa::Indexer; | ||||||
| 281 | # ... | ||||||
| 282 | # Delete categorie 2 for account 1 | ||||||
| 283 | $indexer->categorie->delete(1,2); | ||||||
| 284 | ... | ||||||
| 285 | |||||||
| 286 | =head1 DESCRIPTION | ||||||
| 287 | |||||||
| 288 | This module provide several function to manage categorie of Circa. | ||||||
| 289 | |||||||
| 290 | =head1 VERSION | ||||||
| 291 | |||||||
| 292 | $Revision: 1.13 $ | ||||||
| 293 | |||||||
| 294 | =head1 Public Class Interface | ||||||
| 295 | |||||||
| 296 | =over | ||||||
| 297 | |||||||
| 298 | =item new($indexer_instance) | ||||||
| 299 | |||||||
| 300 | Create a new Search::Circa::Categorie object with indexer instance properties | ||||||
| 301 | |||||||
| 302 | =item set_masque($compte,$id,$file) | ||||||
| 303 | |||||||
| 304 | Set a different masque ($file) for browse this categorie $id for account | ||||||
| 305 | |||||||
| 306 | =item get_masque($compte,$id) | ||||||
| 307 | |||||||
| 308 | Return path of masque for this categorie for account | ||||||
| 309 | |||||||
| 310 | =item delete($compte,$id) | ||||||
| 311 | |||||||
| 312 | Drop categorie $id for account $compte. (All url and words for this account) | ||||||
| 313 | |||||||
| 314 | Supprime la categorie $id pour le compte de responsable $compte et | ||||||
| 315 | tous les liens et relation qui sont dans cette categorie | ||||||
| 316 | |||||||
| 317 | =item rename($compte,$id,$nom) | ||||||
| 318 | |||||||
| 319 | Rename category $id for account $compte in $name | ||||||
| 320 | |||||||
| 321 | Renomme la categorie $id pour le compte $compte en $nom | ||||||
| 322 | |||||||
| 323 | =item move($compte,$id1,$id2) | ||||||
| 324 | |||||||
| 325 | Move url for account $compte from one categorie $id1 to another $id2 | ||||||
| 326 | |||||||
| 327 | =item move_categorie($compte,$id1,$id2) | ||||||
| 328 | |||||||
| 329 | Move categories for account $compte from one categorie $id1 to another $id2 | ||||||
| 330 | |||||||
| 331 | =item get_liste($id,$cgi) | ||||||
| 332 | |||||||
| 333 | Return two references to a list and a hash. | ||||||
| 334 | The hash have name of categorie as key, and number of site in this categorie | ||||||
| 335 | as value. The list is ordered keys of hash. | ||||||
| 336 | |||||||
| 337 | =item get($rep,$responsable) | ||||||
| 338 | |||||||
| 339 | Return id of directory $rep. If directory didn't exist, function create it. | ||||||
| 340 | |||||||
| 341 | =item create($nom,$parent,$responsable) | ||||||
| 342 | |||||||
| 343 | Create categorie $nom with parent $parent for account $responsable | ||||||
| 344 | |||||||
| 345 | =item auto($idp) | ||||||
| 346 | |||||||
| 347 | Return 1 if account $idp want auto categorie. 0 else. | ||||||
| 348 | |||||||
| 349 | =item loadAll($account) | ||||||
| 350 | |||||||
| 351 | Return reference to hash with all categorie for account $account. | ||||||
| 352 | Hash use id as key, and array as value. Array has two field, first | ||||||
| 353 | name of categorie, second id of father categorie | ||||||
| 354 | |||||||
| 355 | =item get_liste_categorie_fils($id,$idr) | ||||||
| 356 | |||||||
| 357 | $id : Id de la categorie parent | ||||||
| 358 | $idr : Site selectionne | ||||||
| 359 | |||||||
| 360 | Retourne la liste des categories fils de $id dans le site $idr | ||||||
| 361 | |||||||
| 362 | =back | ||||||
| 363 | |||||||
| 364 | =head1 Private Class Interface | ||||||
| 365 | |||||||
| 366 | =over | ||||||
| 367 | |||||||
| 368 | =item getParent($id,%tab) | ||||||
| 369 | |||||||
| 370 | Rend la chaine correspondante à la catégorie $id avec ses rubriques parentes | ||||||
| 371 | |||||||
| 372 | =back | ||||||
| 373 | |||||||
| 374 | =head1 AUTHOR | ||||||
| 375 | |||||||
| 376 | Alain BARBET alian@alianwebserver.com | ||||||
| 377 | |||||||
| 378 | =cut |