Bug 8315 - remove use C4::* version
[koha.git] / C4 / Koha.pm
index 06b2ec5..4f386e4 100644 (file)
@@ -22,16 +22,18 @@ package C4::Koha;
 
 use strict;
 #use warnings; FIXME - Bug 2505
+
 use C4::Context;
-use C4::Output;
-use URI::Split qw(uri_split);
+
 use Memoize;
-use Business::ISBN;
+use DateTime;
+use DateTime::Format::MySQL;
+use autouse 'Data::Dumper' => qw(Dumper);
 
-use vars qw($VERSION @ISA @EXPORT $DEBUG);
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $DEBUG);
 
 BEGIN {
-       $VERSION = 3.01;
+    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
@@ -70,6 +72,7 @@ BEGIN {
                $DEBUG
        );
        $DEBUG = 0;
+@EXPORT_OK = qw( GetDailyQuote );
 }
 
 # expensive functions
@@ -455,7 +458,7 @@ sub getitemtypeimagedir {
        if ($src eq 'intranet') {
                return C4::Context->config('intrahtdocs') . '/' .C4::Context->preference('template') . '/img/itemtypeimg';
        } else {
-               return C4::Context->config('opachtdocs') . '/' . C4::Context->preference('template') . '/itemtypeimg';
+               return C4::Context->config('opachtdocs') . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg';
        }
 }
 
@@ -464,7 +467,7 @@ sub getitemtypeimagesrc {
        if ($src eq 'intranet') {
                return '/intranet-tmpl' . '/' . C4::Context->preference('template') . '/img/itemtypeimg';
        } else {
-               return '/opac-tmpl' . '/' . C4::Context->preference('template') . '/itemtypeimg';
+               return '/opac-tmpl' . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg';
        }
 }
 
@@ -472,8 +475,9 @@ sub getitemtypeimagelocation($$) {
        my ( $src, $image ) = @_;
 
        return '' if ( !$image );
+    require URI::Split;
 
-       my $scheme = ( uri_split( $image ) )[0];
+       my $scheme = ( URI::Split::uri_split( $image ) )[0];
 
        return $image if ( $scheme );
 
@@ -573,9 +577,8 @@ sub getImageSets {
 
     my @imagesets = (); # list of hasrefs of image set data to pass to template
     my @subdirectories = _getSubdirectoryNames( $paths->{'staff'}{'filesystem'} );
-warn $paths->{'staff'}{'filesystem'};
     foreach my $imagesubdir ( @subdirectories ) {
-       warn $imagesubdir;
+    warn $imagesubdir if $DEBUG;
         my @imagelist     = (); # hashrefs of image info
         my @imagenames = _getImagesFromDirectory( File::Spec->catfile( $paths->{'staff'}{'filesystem'}, $imagesubdir ) );
         my $imagesetactive = 0;
@@ -681,95 +684,95 @@ sub getFacets {
     if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) {
         $facets = [
             {
-                link_value  => 'su-to',
-                label_value => 'Topics',
-                tags        =>
-                  [ '600', '601', '602', '603', '604', '605', '606', '610' ],
-                subfield => 'a',
+                idx   => 'su-to',
+                label => 'Topics',
+                tags  => [ qw/ 600a 601a 602a 603a 604a 605a 606ax 610a/ ],
+                sep   => ' - ',
             },
             {
-                link_value  => 'su-geo',
-                label_value => 'Places',
-                tags        => ['651'],
-                subfield    => 'a',
+                idx   => 'su-geo',
+                label => 'Places',
+                tags  => [ qw/ 651a / ],
+                sep   => ' - ',
             },
             {
-                link_value  => 'su-ut',
-                label_value => 'Titles',
-                tags        => [ '500', '501', '502', '503', '504', ],
-                subfield    => 'a',
+                idx   => 'su-ut',
+                label => 'Titles',
+                tags  => [ qw/ 500a 501a 502a 503a 504a / ],
+                sep   => ', ',
             },
             {
-                link_value  => 'au',
-                label_value => 'Authors',
-                tags        => [ '700', '701', '702', ],
-                subfield    => 'a',
+                idx   => 'au',
+                label => 'Authors',
+                tags  => [ qw/ 700ab 701ab 702ab / ],
+                sep   => ', ',
             },
             {
-                link_value  => 'se',
-                label_value => 'Series',
-                tags        => ['225'],
-                subfield    => 'a',
+                idx   => 'se',
+                label => 'Series',
+                tags  => [ qw/ 225a / ],
+                sep   => ', ',
             },
-            ];
-
-            my $library_facet;
-
-            $library_facet = {
-                link_value  => 'branch',
-                label_value => 'Libraries',
-                tags        => [ '995', ],
-                subfield    => 'b',
-                expanded    => '1',
-            };
-            push @$facets, $library_facet unless C4::Context->preference("singleBranchMode");
+        ];
+        my $library_facet = {
+            idx   => 'branch',
+            label => 'Libraries',
+            tags  => [ qw/ 995b / ],
+            expanded => '1',
+        };
+        push @$facets, $library_facet unless C4::Context->preference("singleBranchMode");
     }
     else {
         $facets = [
             {
-                link_value  => 'su-to',
-                label_value => 'Topics',
-                tags        => ['650'],
-                subfield    => 'a',
+                idx   => 'su-to',
+                label => 'Topics',
+                tags  => [ qw/ 650a / ],
+                sep   => '--',
             },
-
             #        {
-            #        link_value => 'su-na',
-            #        label_value => 'People and Organizations',
-            #        tags => ['600', '610', '611'],
-            #        subfield => 'a',
+            #        idx   => 'su-na',
+            #        label => 'People and Organizations',
+            #        tags  => [ qw/ 600a 610a 611a / ],
+            #        sep   => 'a',
             #        },
             {
-                link_value  => 'su-geo',
-                label_value => 'Places',
-                tags        => ['651'],
-                subfield    => 'a',
+                idx   => 'su-geo',
+                label => 'Places',
+                tags  => [ qw/ 651a / ],
+                sep   => '--',
+            },
+            {
+                idx   => 'su-ut',
+                label => 'Titles',
+                tags  => [ qw/ 630a / ],
+                sep   => '--',
             },
             {
-                link_value  => 'su-ut',
-                label_value => 'Titles',
-                tags        => ['630'],
-                subfield    => 'a',
+                idx   => 'au',
+                label => 'Authors',
+                tags  => [ qw/ 100a 110a 700a / ],
+                sep   => ', ',
             },
             {
-                link_value  => 'au',
-                label_value => 'Authors',
-                tags        => [ '100', '110', '700', ],
-                subfield    => 'a',
+                idx   => 'se',
+                label => 'Series',
+                tags  => [ qw/ 440a 490a / ],
+                sep   => ', ',
             },
             {
-                link_value  => 'se',
-                label_value => 'Series',
-                tags        => [ '440', '490', ],
-                subfield    => 'a',
+                idx   => 'itype',
+                label => 'ItemTypes',
+                tags  => [ qw/ 952y 942c / ],
+                sep   => ', ',
             },
             ];
             my $library_facet;
             $library_facet = {
-                link_value  => 'branch',
-                label_value => 'Libraries',
-                tags        => [ '952', ],
-                subfield    => 'b',
+                idx   => 'branch',
+                label => 'Libraries',
+                tags  => [ qw/ 952b / ],
+                sep   => ', ',
                 expanded    => '1',
             };
             push @$facets, $library_facet unless C4::Context->preference("singleBranchMode");
@@ -1017,22 +1020,25 @@ C<$opac> If set to a true value, displays OPAC descriptions rather than normal o
 
 sub GetAuthorisedValues {
     my ($category,$selected,$opac) = @_;
-       my @results;
+    my @results;
     my $dbh      = C4::Context->dbh;
     my $query    = "SELECT * FROM authorised_values";
     $query .= " WHERE category = '" . $category . "'" if $category;
     $query .= " ORDER BY category, lib, lib_opac";
     my $sth = $dbh->prepare($query);
     $sth->execute;
-       while (my $data=$sth->fetchrow_hashref) {
-           if ($selected && $selected eq $data->{'authorised_value'} ) {
-                   $data->{'selected'} = 1;
-           }
-           if ($opac && $data->{'lib_opac'}) {
-               $data->{'lib'} = $data->{'lib_opac'};
-           }
-           push @results, $data;
-       }
+    while (my $data=$sth->fetchrow_hashref) {
+        if ( (defined($selected)) && ($selected eq $data->{'authorised_value'}) ) {
+            $data->{'selected'} = 1;
+        }
+        else {
+            $data->{'selected'} = 0;
+        }
+        if ($opac && $data->{'lib_opac'}) {
+            $data->{'lib'} = $data->{'lib_opac'};
+        }
+        push @results, $data;
+    }
     #my $data = $sth->fetchall_arrayref({});
     return \@results; #$data;
 }
@@ -1307,6 +1313,78 @@ sub GetNormalizedOCLCNumber {
     }
 }
 
+=head2 GetDailyQuote($opts)
+
+Takes a hashref of options
+
+Currently supported options are:
+
+'id'        An exact quote id
+'random'    Select a random quote
+noop        When no option is passed in, this sub will return the quote timestamped for the current day
+
+The function returns an anonymous hash following this format:
+
+        {
+          'source' => 'source-of-quote',
+          'timestamp' => 'timestamp-value',
+          'text' => 'text-of-quote',
+          'id' => 'quote-id'
+        };
+
+=cut
+
+# This is definitely a candidate for some sort of caching once we finally settle caching/persistence issues...
+# at least for default option
+
+sub GetDailyQuote {
+    my %opts = @_;
+    my $dbh = C4::Context->dbh;
+    my $query = '';
+    my $sth = undef;
+    my $quote = undef;
+    if ($opts{'id'}) {
+        $query = 'SELECT * FROM quotes WHERE id = ?';
+        $sth = $dbh->prepare($query);
+        $sth->execute($opts{'id'});
+        $quote = $sth->fetchrow_hashref();
+    }
+    elsif ($opts{'random'}) {
+        # Fall through... we also return a random quote as a catch-all if all else fails
+    }
+    else {
+        $query = 'SELECT * FROM quotes WHERE timestamp LIKE CONCAT(CURRENT_DATE,\'%\') ORDER BY timestamp DESC LIMIT 0,1';
+        $sth = $dbh->prepare($query);
+        $sth->execute();
+        $quote = $sth->fetchrow_hashref();
+    }
+    unless ($quote) {        # if there are not matches, choose a random quote
+        # get a list of all available quote ids
+        $sth = C4::Context->dbh->prepare('SELECT count(*) FROM quotes;');
+        $sth->execute;
+        my $range = ($sth->fetchrow_array)[0];
+        if ($range > 1) {
+            # chose a random id within that range if there is more than one quote
+            my $id = int(rand($range));
+            # grab it
+            $query = 'SELECT * FROM quotes WHERE id = ?;';
+            $sth = C4::Context->dbh->prepare($query);
+            $sth->execute($id);
+        }
+        else {
+            $query = 'SELECT * FROM quotes;';
+            $sth = C4::Context->dbh->prepare($query);
+            $sth->execute();
+        }
+        $quote = $sth->fetchrow_hashref();
+        # update the timestamp for that quote
+        $query = 'UPDATE quotes SET timestamp = ? WHERE id = ?';
+        $sth = C4::Context->dbh->prepare($query);
+        $sth->execute(DateTime::Format::MySQL->format_datetime(DateTime->now), $quote->{'id'});
+    }
+    return $quote;
+}
+
 sub _normalize_match_point {
     my $match_point = shift;
     (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
@@ -1316,6 +1394,7 @@ sub _normalize_match_point {
 }
 
 sub _isbn_cleanup {
+    require Business::ISBN;
     my $isbn = Business::ISBN->new( $_[0] );
     if ( $isbn ) {
         $isbn = $isbn->as_isbn10 if $isbn->type eq 'ISBN13';