marc_subfield_structure
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 2 Apr 2012 15:25:55 +0000 (17:25 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 30 May 2012 20:28:09 +0000 (22:28 +0200)
C4/Items.pm
Koha/Persistant.pm

index abdce96..24874d1 100644 (file)
@@ -745,17 +745,7 @@ sub GetItemStatus {
     my ( $tag, $subfield ) =
       GetMarcFromKohaField( "items.notforloan", $fwk );
     if ( $tag and $subfield ) {
-        my $sth =
-          $dbh->prepare(
-            "SELECT authorised_value
-            FROM marc_subfield_structure
-            WHERE tagfield=?
-                AND tagsubfield=?
-                AND frameworkcode=?
-            "
-          );
-        $sth->execute( $tag, $subfield, $fwk );
-        if ( my ($authorisedvaluecat) = $sth->fetchrow ) {
+        if ( my $authorisedvaluecat = marc_subfield_structure( tagfield => $tag, tagsubfield => $subfield, frameworkcode => $fwk ) ) {
             my $authvalsth =
               $dbh->prepare(
                 "SELECT authorised_value,lib
@@ -833,16 +823,7 @@ sub GetItemLocation {
     my ( $tag, $subfield ) =
       GetMarcFromKohaField( "items.location", $fwk );
     if ( $tag and $subfield ) {
-        my $sth =
-          $dbh->prepare(
-            "SELECT authorised_value
-            FROM marc_subfield_structure 
-            WHERE tagfield=? 
-                AND tagsubfield=? 
-                AND frameworkcode=?"
-          );
-        $sth->execute( $tag, $subfield, $fwk );
-        if ( my ($authorisedvaluecat) = $sth->fetchrow ) {
+        if ( my $authorisedvaluecat = marc_subfield_structure( tagfield => $tag, tagsubfield => $subfield, frameworkcode => $fwk ) ) {
             my $authvalsth =
               $dbh->prepare(
                 "SELECT authorised_value,lib
@@ -1249,45 +1230,31 @@ sub GetItemsInfo {
         }
         $data->{'datedue'}        = $datedue;
 
-        # get notforloan complete status if applicable
-        my $sthnflstatus = $dbh->prepare(
-            'SELECT authorised_value
-            FROM   marc_subfield_structure
-            WHERE  kohafield="items.notforloan"
-        '
-        );
+use Data::Dump qw(dump);
+warn "XXX data = ",dump($data);
 
-        $sthnflstatus->execute;
-        my ($authorised_valuecode) = $sthnflstatus->fetchrow;
-        if ($authorised_valuecode) {
-            $data->{notforloanvalue} = authorised_value( category => $authorised_valuecode, $data->{itemnotforloan} )->{lib};
+        # get notforloan complete status if applicable
+        if ( my $category = marc_subfield_structure( kohafield => 'items.notforloan', frameworkcode => $data->{frameworkcode} ) ) {
+            $data->{notforloanvalue} = authorised_value( category => $category, $data->{itemnotforloan} )->{lib};
         }
 
         # get restricted status and description if applicable
-       my $items_restricted = sql_cache("
-            SELECT authorised_value
-            FROM   marc_subfield_structure
-            WHERE  kohafield='items.restricted'
-        ");
-
-        if ( $items_restricted->{authorised_value} ) {
-            if ( my $rstdata = authorised_value( $items_restricted->{authorised_value}, $data->{restricted} ) ) {
+        if ( $data->{restricted} ) { # FIXME -- why do I get undef?
+            my $category = marc_subfield_structure( kohafield => 'items.restricted', frameworkcode => $data->{frameworkcode} );
+            if ( my $rstdata = authorised_value( $category, $data->{restricted} ) ) {
                 $data->{restricted} = $rstdata->{'lib'};
                 $data->{restrictedopac} = $rstdata->{'lib_opac'};
             }
         }
 
         # my stack procedures
-        my $items_stack = sql_cache("
-             SELECT authorised_value
-             FROM   marc_subfield_structure
-             WHERE  kohafield='items.stack' -- key:items.stack
-        ");
-        if ( $items_stack->{authorised_value} ) {
-            if ( my $row = authorised_value( $items_stack->{authorised_value}, $data->{stack} ) ) {
+        if ( $data->{stack} ) { # FIXME -- why do I get undef?
+            my $category = marc_subfield_structure( kohafield => 'items.stack', frameworkcode => $data->{frameworkcode} );
+            if ( my $row = authorised_value( $category, $data->{stack} ) ) {
                 $data->{stack} = $row->{lib};
             }
         }
+
         # Find the last 3 people who borrowed this item.
         my $sth2 = $dbh->prepare("SELECT * FROM old_issues,borrowers
                                     WHERE itemnumber = ?
index ea8cc1a..00709ad 100644 (file)
@@ -27,7 +27,7 @@ use base 'Exporter';
 use version; our $VERSION = qv('1.0.0');
 
 our @EXPORT = (
-    qw( sql_cache authorised_value )
+    qw( sql_cache authorised_value marc_subfield_structure )
 );
 
 our $debug = $ENV{DEBUG} || 0;
@@ -71,6 +71,8 @@ sub sql_cache {
        my $sql = shift;
        my @var = @_;
 
+       confess "no variables" unless @var;
+
        my $cache;
 
        my $key = $sql;
@@ -93,7 +95,7 @@ sub sql_cache {
                $cache = $_sql_cache;
        }
 
-       confess "key is undef" unless defined $key;
+       confess "key is undef $sql ",dump(@var) unless defined $key;
 
        if ( exists $cache->{$key} ) {
                warn "## _sql_cache HIT $key\n" if $debug >= 2;
@@ -129,4 +131,39 @@ sub authorised_value {
        return $row;
 }
 
+=head2 marc_subfield_structure
+
+  my $authorised_value = marc_subfield_structure( kohafield => 'items.notforloan', frameworkcode => 'LIB' );
+  my $authorised_value = marc_subfield_structure( tagfield => $tag, tagsubfield => $subfield, frameworkcode => 'LIB' );
+
+=cut
+
+sub marc_subfield_structure {
+       my $args = {@_};
+       my $row;
+       if ( exists $args->{kohafield} && exists $args->{frameworkcode} ) {
+               $row = sql_cache("
+                               SELECT authorised_value
+                               FROM   marc_subfield_structure
+                               WHERE  kohafield=?
+                                       AND frameworkcode=?
+                               -- key:mss_kf_fwc
+                       ", $args->{kohafield}, $args->{frameworkcode});
+       } elsif ( exists $args->{tagfield} && exists $args->{tagsubfield} && exists $args->{frameworkcode} ) {
+               $row = sql_cache("
+                               SELECT authorised_value
+                               FROM   marc_subfield_structure
+                               WHERE tagfield=?
+                                       AND tagsubfield=?
+                                       AND frameworkcode=?
+                               -- key:mss_tf_tsf_fwc
+                       ", $args->{tagfield}, $args->{tagsubfield}, $args->{frameworkcode});
+       } else {
+               confess "called with unknown options ",dump($args)
+       }
+
+       warn "## marc_subfield_structure ",dump($args)," = ",dump $row;
+       return $row->{authorised_value};
+}
+
 1;