return $self->lib_opac() || $self->lib();
}
+=head3 to_api_mapping
+
+This method returns the mapping for representing a Koha::AuthorisedValue object
+on the API.
+
+=cut
+
+sub to_api_mapping {
+ return {
+ id => 'authorised_value_id',
+ category => 'category_name',
+ authorised_value => 'value',
+ lib => 'description',
+ lib_opac => 'opac_description',
+ imageurl => 'image_url',
+ };
+}
+
=head2 Internal methods
=head3 _type
--- /dev/null
+package Koha::REST::V1::AuthorisedValues;
+
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Mojo::Base 'Mojolicious::Controller';
+
+use Koha::AuthorisedValues;
+use Koha::AuthorisedValueCategories;
+
+use Try::Tiny;
+
+=head1 API
+
+=head2 Methods
+
+=head3 list
+
+=cut
+
+sub list_av_from_category {
+ my $c = shift->openapi->valid_input or return;
+
+ my $category_name = $c->validation->param('authorised_value_category_name');
+
+ my $category = Koha::AuthorisedValueCategories->find($category_name);
+
+ unless ($category) {
+ return $c->render(
+ status => 404,
+ openapi => { error => "Category not found" }
+ );
+ }
+
+ return try {
+ my $av_set = Koha::AuthorisedValues->search( { category => $category_name } )->search_with_library_limits;
+ my $avs = $c->objects->search($av_set);
+ return $c->render( status => 200, openapi => $avs );
+ } catch {
+ $c->unhandled_exception($_);
+ };
+
+}
+
+1;
--- /dev/null
+---
+type: object
+properties:
+ authorised_value_id:
+ type: integer
+ description: internally assigned authorised value identifier
+ readOnly: true
+ category_name:
+ description: the category of this authorised value
+ type: string
+ value:
+ description: The code for this authorised value
+ type: string
+ description:
+ description: The staff interface description for this authorised value
+ type: string
+ opac_description:
+ description: The public interface description of this authorised value, if set"
+ type:
+ - string
+ - "null"
+ image_url:
+ description: The url of the image associated with this authorised value, if any
+ type:
+ - string
+ - "null"
+
+additionalProperties: false
+required:
+ - category_name
+ - value
+ - description
--- /dev/null
+---
+"/authorised_value_categories/{authorised_value_category_name}/values":
+ get:
+ x-mojo-to: AuthorisedValues#list_av_from_category
+ operationId: listAuthorisedValues
+ tags:
+ - authorised_values
+ summary: List authorised values for a given category
+ produces:
+ - application/json
+ parameters:
+ - description: category name
+ in: path
+ name: authorised_value_category_name
+ required: true
+ type: string
+ - description: Case insensitive search on authorised value id
+ in: query
+ name: authorised_value_id
+ required: false
+ type: integer
+ - description: Case insensitive search on authorised value category name
+ in: query
+ name: category_name
+ required: false
+ type: string
+ - description: Case insensitive search on value
+ in: query
+ name: value
+ required: false
+ type: string
+ - description: Case insensitive search on description
+ in: query
+ name: description
+ required: false
+ type: string
+ - description: Case insensitive search on opac description
+ in: query
+ name: opac_description
+ required: false
+ type: string
+ - description: Case insensitive search on image url
+ in: query
+ name: image_url
+ required: false
+ type: string
+ - $ref: "../swagger.yaml#/parameters/match"
+ - $ref: "../swagger.yaml#/parameters/order_by"
+ - $ref: "../swagger.yaml#/parameters/page"
+ - $ref: "../swagger.yaml#/parameters/per_page"
+ - $ref: "../swagger.yaml#/parameters/q_param"
+ - $ref: "../swagger.yaml#/parameters/q_body"
+ - $ref: "../swagger.yaml#/parameters/q_header"
+ responses:
+ 200:
+ description: A list of authorised values
+ schema:
+ items:
+ $ref: "../swagger.yaml#/definitions/authorised_value"
+ type: array
+ 400:
+ description: Bad request
+ schema:
+ $ref: "../swagger.yaml#/definitions/error"
+ 403:
+ description: Access forbidden
+ schema:
+ $ref: "../swagger.yaml#/definitions/error"
+ 404:
+ description: Ressource not found
+ schema:
+ $ref: "../swagger.yaml#/definitions/error"
+ 500:
+ description: |-
+ Internal server error. Possible `error_code` attribute values:
+ * `internal_server_error`
+ schema:
+ $ref: "../swagger.yaml#/definitions/error"
+ 503:
+ description: Under maintenance
+ schema:
+ $ref: "../swagger.yaml#/definitions/error"
+ x-koha-authorization:
+ permissions:
+ catalogue: 1
$ref: ./definitions/advancededitormacro.yaml
allows_renewal:
$ref: ./definitions/allows_renewal.yaml
+ authorised_value:
+ $ref: ./definitions/authorised_value.yaml
identity_provider:
"$ref": ./definitions/identity_provider.yaml
identity_provider_domain:
$ref: paths/auth.yaml#/~1auth~1identity_providers~1{identity_provider_id}~1domains
"/auth/identity_providers/{identity_provider_id}/domains/{identity_provider_domain_id}":
$ref: paths/auth.yaml#/~1auth~1identity_providers~1{identity_provider_id}~1domains~1{identity_provider_domain_id}
+ "/authorised_value_categories/{authorised_value_category_name}/values":
+ $ref: "./paths/authorised_values.yaml#/~1authorised_value_categories~1{authorised_value_category_name}~1values"
"/biblios/{biblio_id}":
$ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}"
"/biblios/{biblio_id}/checkouts":
name: agreement_period_id
required: true
type: integer
+ authorised_value_id_pp:
+ description: Authorised value internal identifier
+ in: path
+ name: authorised_value_id
+ required: true
+ type: integer
identity_provider_id_pp:
description: Authentication provider internal identifier
in: path
--- /dev/null
+#!/usr/bin/env perl
+
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Test::More tests => 1;
+use Test::Mojo;
+
+use t::lib::TestBuilder;
+use t::lib::Mocks;
+
+use Koha::AuthorisedValues;
+use Koha::Database;
+
+my $schema = Koha::Database->new->schema;
+my $builder = t::lib::TestBuilder->new;
+
+my $t = Test::Mojo->new('Koha::REST::V1');
+t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
+
+subtest 'list_av_from_category() tests' => sub {
+
+ plan tests => 11;
+
+ $schema->storage->txn_begin;
+
+ my $librarian = $builder->build_object(
+ {
+ class => 'Koha::Patrons',
+ value => { flags => 2 ** 2 } # catalogue flag = 2
+ }
+ );
+ my $password = 'thePassword123';
+ $librarian->set_password( { password => $password, skip_validation => 1 } );
+ my $userid = $librarian->userid;
+
+ my $patron = $builder->build_object(
+ {
+ class => 'Koha::Patrons',
+ value => { flags => 0 }
+ }
+ );
+
+ $patron->set_password( { password => $password, skip_validation => 1 } );
+ my $unauth_userid = $patron->userid;
+
+ ## Authorized user tests
+ # No category, 404 expected
+ $t->get_ok("//$userid:$password@/api/v1/authorised_value_categories/NON_EXISTS/values")
+ ->status_is(404)
+ ->json_is( '/error' => 'Category not found' );
+
+ my $av_cat = $builder->build_object({ class => 'Koha::AuthorisedValueCategories' })->category_name;
+
+ # No AVs, so empty array should be returned
+ $t->get_ok("//$userid:$password@/api/v1/authorised_value_categories/$av_cat/values")
+ ->status_is(200)
+ ->json_is( [] );
+
+ my $av = $builder->build_object(
+ { class => 'Koha::AuthorisedValues', value => { category => $av_cat } } );
+
+ # One av created, should get returned
+ $t->get_ok("//$userid:$password@/api/v1/authorised_value_categories/$av_cat/values")
+ ->status_is(200)
+ ->json_is( [$av->to_api] );
+
+ # Unauthorized access
+ $t->get_ok("//$unauth_userid:$password@/api/v1/authorised_value_categories/$av_cat/values")
+ ->status_is(403);
+
+ $schema->storage->txn_rollback;
+};