Bug 32336: (QA follow-up) Use $metadata->schema
[srvgit] / Koha / AuthorisedValue.pm
index 910b3da..da25d5e 100644 (file)
@@ -4,26 +4,27 @@ package Koha::AuthorisedValue;
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 3 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
 
-use Carp;
-
+use Koha::Caches;
 use Koha::Database;
 
-use base qw(Koha::Object);
+use base qw(Koha::Object Koha::Object::Limit::Library);
+
+my $cache = Koha::Caches->get_instance();
 
 =head1 NAME
 
@@ -31,111 +32,60 @@ Koha::AuthorisedValue - Koha Authorised value Object class
 
 =head1 API
 
-=head2 Class Methods
+=head2 Class methods
 
 =cut
 
-=head3 branch_limitations
-
-my $limitations = $av->branch_limitations();
+=head3 store
 
-$av->branch_limitations( \@branchcodes );
+AuthorisedValue specific store to ensure relevant caches are flushed on change
 
 =cut
 
-sub branch_limitations {
-    my ( $self, $branchcodes ) = @_;
-
-    if ($branchcodes) {
-        return $self->replace_branch_limitations($branchcodes);
-    }
-    else {
-        return $self->get_branch_limitations();
-    }
-
-}
-
-=head3 get_branch_limitations
-
-my $limitations = $av->get_branch_limitations();
-
-=cut
-
-sub get_branch_limitations {
+sub store {
     my ($self) = @_;
 
-    my @branchcodes =
-      $self->_avb_resultset->search( { av_id => $self->id() } )
-      ->get_column('branchcode')->all();
-
-    return \@branchcodes;
-}
-
-=head3 add_branch_limitation
-
-$av->add_branch_limitation( $branchcode );
-
-=cut
-
-sub add_branch_limitation {
-    my ( $self, $branchcode ) = @_;
-
-    croak("No branchcode passed in!") unless $branchcode;
-
-    my $limitation = $self->_avb_resultset->update_or_create(
-        { av_id => $self->id(), branchcode => $branchcode } );
+    my $flush = 0;
 
-    return $limitation ? 1 : undef;
-}
-
-=head3 del_branch_limitation
-
-$av->del_branch_limitation( $branchcode );
-
-=cut
-
-sub del_branch_limitation {
-    my ( $self, $branchcode ) = @_;
+    if ( !$self->in_storage ) {
+        $flush = 1;
+    }
+    else {
+        my %updated_columns = $self->_result->get_dirty_columns;
 
-    croak("No branchcode passed in!") unless $branchcode;
+        if (   exists $updated_columns{lib}
+            or exists $updated_columns{lib_opac} )
+        {
+            $flush = 1;
+        }
+    }
 
-    my $limitation =
-      $self->_avb_resultset->find(
-        { av_id => $self->id(), branchcode => $branchcode } );
+    $self = $self->SUPER::store;
 
-    unless ($limitation) {
-        my $id = $self->id();
-        carp(
-"No branch limit for branch $branchcode found for av_id $id to delete!"
-        );
-        return;
+    if ($flush) {
+        my $key = "AV_descriptions:".$self->category;
+        $cache->clear_from_cache($key);
     }
 
-    return $limitation->delete();
+    return $self;
 }
 
-=head3 replace_branch_limitations
+=head2 delete
 
-$av->replace_branch_limitations( \@branchcodes );
+AuthorisedValue specific C<delete> to clear relevant caches on delete.
 
 =cut
 
-sub replace_branch_limitations {
-    my ( $self, $branchcodes ) = @_;
-
-    $self->_avb_resultset->search( { av_id => $self->id() } )->delete();
-
-    my @return_values =
-      map { $self->add_branch_limitation($_) } @$branchcodes;
-
-    return \@return_values;
+sub delete {
+    my $self = shift @_;
+    my $key = "AV_descriptions:".$self->category;
+    $cache->clear_from_cache($key);
+    $self->SUPER::delete(@_);
 }
 
-=head3 lib_opac
-
-my $description = $av->lib_opac();
+=head3 opac_description
 
-$av->lib_opac( $description );
+my $description = $av->opac_description();
 
 =cut
 
@@ -145,22 +95,27 @@ sub opac_description {
     return $self->lib_opac() || $self->lib();
 }
 
-=head3 Koha::Objects->_avb_resultset
+=head3 to_api_mapping
 
-Returns the internal resultset or creates it if undefined
+This method returns the mapping for representing a Koha::AuthorisedValue object
+on the API.
 
 =cut
 
-sub _avb_resultset {
-    my ($self) = @_;
-
-    $self->{_avb_resultset} ||=
-      Koha::Database->new()->schema()->resultset('AuthorisedValuesBranch');
-
-    $self->{_avb_resultset};
+sub to_api_mapping {
+    return {
+        id               => 'authorised_value_id',
+        category         => 'category_name',
+        authorised_value => 'value',
+        lib              => 'description',
+        lib_opac         => 'opac_description',
+        imageurl         => 'image_url',
+    };
 }
 
-=head3 type
+=head2 Internal methods
+
+=head3 _type
 
 =cut
 
@@ -168,6 +123,18 @@ sub _type {
     return 'AuthorisedValue';
 }
 
+=head3 _library_limits
+
+=cut
+
+sub _library_limits {
+    return {
+        class   => 'AuthorisedValuesBranch',
+        id      => 'av_id',
+        library => 'branchcode'
+    };
+}
+
 =head1 AUTHOR
 
 Kyle M Hall <kyle@bywatersolutions.com>