View | Details | Raw Unified | Return to bug 35797
Collapse All | Expand All

(-)a/Koha/REST/V1/Patrons/Image.pm (+78 lines)
Line 0 Link Here
1
package Koha::REST::V1::Patrons::Image;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Mojo::Base 'Mojolicious::Controller';
21
22
use Koha::Patrons;
23
24
use Try::Tiny qw( catch try );
25
26
use MIME::Base64 qw( encode_base64 );
27
28
=head1 NAME
29
30
Koha::REST::V1::Patrons::Image
31
32
=head1 API
33
34
=head2 Methods
35
36
=head3 get
37
38
Controller method that gets a patron's image
39
40
=cut
41
42
sub get {
43
44
    my $c = shift->openapi->valid_input or return;
45
46
    my $patron = Koha::Patrons->find( $c->param('patron_id') );
47
48
    unless ($patron) {
49
        return $c->render(
50
            status  => 404,
51
            openapi => { error => "Patron not found." }
52
        );
53
    }
54
55
    return try {
56
        my $image = $patron->image;
57
58
        unless ($image) {
59
            return $c->render(
60
                status => 404,
61
                openapi => { error => "Patron image not found." }
62
            );
63
        }
64
65
        return $c->render(
66
            status => 200,
67
            openapi => {
68
                patron_id => $image->borrowernumber,
69
                mimetype => $image->mimetype,
70
                imagefile => encode_base64($image->imagefile)
71
            }
72
        );
73
    } catch {
74
        $c->unhandled_exception($_);
75
    };
76
}
77
78
1;
(-)a/api/v1/swagger/definitions/patron_image.yaml (+14 lines)
Line 0 Link Here
1
---
2
type: object
3
properties:
4
  patron_id:
5
    type: integer
6
    description: Internal patron identifier
7
  mimetype:
8
    type: string
9
    description: Patron image mimetype
10
  imagefile:
11
    type: string
12
    description: Patron image raw data
13
required:
14
  - patron_id
(-)a/api/v1/swagger/paths/patrons_image.yaml (+43 lines)
Line 0 Link Here
1
---
2
"/patrons/{patron_id}/image":
3
  get:
4
    x-mojo-to: Patrons::Image#get
5
    operationId: getPatronImage
6
    tags:
7
      - patrons
8
    summary: Get image of a patron
9
    parameters:
10
      - $ref: "../swagger.yaml#/parameters/patron_id_pp"
11
    produces:
12
      - application/json
13
    responses:
14
      "200":
15
        description: Patron's image
16
        schema:
17
          $ref: "../swagger.yaml#/definitions/patron_image"
18
      "401":
19
        description: Authentication required
20
        schema:
21
          $ref: "../swagger.yaml#/definitions/error"
22
      "403":
23
        description: Access forbidden
24
        schema:
25
          $ref: "../swagger.yaml#/definitions/error"
26
      "404":
27
        description: Patron not found
28
        schema:
29
          $ref: "../swagger.yaml#/definitions/error"
30
      "500":
31
        description: |
32
          Internal server error. Possible `error_code` attribute values:
33
34
          * `internal_server_error`
35
        schema:
36
          $ref: "../swagger.yaml#/definitions/error"
37
      "503":
38
        description: Under maintenance
39
        schema:
40
          $ref: "../swagger.yaml#/definitions/error"
41
    x-koha-authorization:
42
      permissions:
43
        borrowers: edit_borrowers
(-)a/api/v1/swagger/swagger.yaml (-1 / +4 lines)
Lines 130-135 definitions: Link Here
130
    $ref: ./definitions/patron_balance.yaml
130
    $ref: ./definitions/patron_balance.yaml
131
  patron_extended_attribute:
131
  patron_extended_attribute:
132
    $ref: ./definitions/patron_extended_attribute.yaml
132
    $ref: ./definitions/patron_extended_attribute.yaml
133
  patron_image:
134
    $ref: ./definitions/patron_image.yaml
133
  preservation_config:
135
  preservation_config:
134
    $ref: ./definitions/preservation_config.yaml
136
    $ref: ./definitions/preservation_config.yaml
135
  preservation_train:
137
  preservation_train:
Lines 423-428 paths: Link Here
423
    $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
425
    $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
424
  "/patrons/{patron_id}/holds":
426
  "/patrons/{patron_id}/holds":
425
    $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
427
    $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
428
  "/patrons/{patron_id}/image":
429
    $ref: "./paths/patrons_image.yaml#/~1patrons~1{patron_id}~1image"
426
  "/patrons/{patron_id}/password":
430
  "/patrons/{patron_id}/password":
427
    $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
431
    $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
428
  "/patrons/{patron_id}/password/expiration_date":
432
  "/patrons/{patron_id}/password/expiration_date":
429
- 

Return to bug 35797