Ignore:
Timestamp:
1999-09-08T12:27:29+12:00 (25 years ago)
Author:
sjboddie
Message:

changed sorting slightly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/perllib/classify/List.pm

    r537 r545  
    2727# options are:
    2828# metadata=Metaname -- (optional) all documents with Metaname metadata
    29 #                      will be included in list, list will be sorted
    30 #                      by this element. if not included all documents
    31 #                      will be included in list in build (random) order
     29#                      will be included in list. if not included all documents
     30#                      will be included in list.
     31# sort=Meta         -- (optional) sort documents in list alphabetically by
     32#                      Meta. by default it will sort by Metaname, if neither
     33#                      are set documents will be in build (random) order.
     34#                      Meta may be Filename to sort by original filename or
     35#                      nosort to force not to sort
    3236# title=Title       -- (optional) the title field for this classification.
    3337#                      if not included title field will be Metaname.
     
    4246
    4347    my $list = [];
    44     my ($metaname, $title);
     48    my ($metaname, $title, $sortname);
    4549
    4650    foreach $option (@options) {
     
    5054    } elsif ($option =~ /^title=(.*)$/i) {
    5155        $title = $1;
     56    } elsif ($option =~ /^sort=(.*)$/i) {
     57        $sortname = $1;
    5258    }
    5359    }
     
    6167    }
    6268
     69    if (defined $sortname && $sortname =~ /^nosort$/i) {
     70    $sortname = undef;
     71    } elsif (!defined $sortname && defined $metaname) {
     72    $sortname = $metaname;
     73    }
     74
    6375    return bless {
    6476    'list'=>$list,
    6577    'metaname' => $metaname,
    66     'title' => $title
     78    'title' => $title,
     79    'sortname' => $sortname
    6780    }, $class;
    6881}
     
    7184    my $self = shift (@_);
    7285
    73     if (defined $self->{'metaname'}) {
     86    if (defined $self->{'sortname'}) {
    7487    $self->{'list'} = {};
    7588    } else {
     
    8497    my $doc_OID = $doc_obj->get_OID();
    8598
    86     if (defined $self->{'metaname'}) {
    87     my $metavalue = $doc_obj->get_metadata_element ($doc_obj->get_top_section(),
    88                              $self->{'metaname'});
    89     if (defined $metavalue) {
    90         if ($self->{'metaname'} eq 'Creator') {
    91         &sorttools::format_string_name_english (\$metavalue);
     99    my $sortmeta = "";
     100    if (defined $self->{'sortname'}) {
     101    if ($self->{'sortname'} =~ /^filename$/i) {
     102        $sortmeta = $doc_obj->get_source_filename();
     103    } else {
     104        $sortmeta = $doc_obj->get_metadata_element($doc_obj->get_top_section(),
     105                               $self->{'sortname'});
     106        if ($self->{'sortname'} eq "Creator") {
     107        &sorttools::format_string_name_english (\$sortmeta);
    92108        } else {
    93         &sorttools::format_string_english (\$metavalue);
     109        &sorttools::format_string_english (\$sortmeta);
    94110        }
     111    }
     112    $sortmeta = "" unless defined $sortmeta;
     113
     114    if (defined $self->{'metaname'}) {
     115        my $metavalue = $doc_obj->get_metadata_element ($doc_obj->get_top_section(),
     116                                $self->{'metaname'});
     117        if (defined $metavalue) {
     118        if (defined $self->{'list'}->{$doc_OID}) {
     119            print STDERR "WARNING: List::classify called multiple times for $doc_OID\n";
     120        }
     121        $self->{'list'}->{$doc_OID} = $sortmeta;
     122        }
     123    } else {
    95124        if (defined $self->{'list'}->{$doc_OID}) {
    96         print STDERR "metavalue: $metavalue\n";
    97         print STDERR "title: $self->{'title'}\n";
    98125        print STDERR "WARNING: List::classify called multiple times for $doc_OID\n";
    99126        }
    100         $self->{'list'}->{$doc_OID} = $metavalue;
     127        $self->{'list'}->{$doc_OID} = $sortmeta;
    101128    }
    102129    } else {
    103     push (@{$self->{'list'}}, $doc_OID);
     130    if (defined $self->{'metaname'}) {
     131        my $metavalue = $doc_obj->get_metadata_element ($doc_obj->get_top_section(),
     132                                $self->{'metaname'});
     133        if (defined $metavalue) {
     134        push (@{$self->{'list'}}, $doc_OID);
     135        }
     136    } else {
     137        push (@{$self->{'list'}}, $doc_OID);
     138    }               
    104139    }
    105140}
     
    108143    my $self = shift (@_);
    109144
    110     my $contains = "";
    111145    my @list = ();
    112     if (defined $self->{'metaname'}) {
     146    if (defined $self->{'sortname'}) {
    113147    if (keys %{$self->{'list'}}) {
    114148        @list = sort {$self->{'list'}->{$a}
Note: See TracChangeset for help on using the changeset viewer.