Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
AvailabilityStatusManager
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
56
0.00% covered (danger)
0.00%
0 / 1
 createAvailabilityStatus
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 combine
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3/**
4 * Availability Status Manager
5 *
6 * PHP version 8
7 *
8 * Copyright (C) Hebis Verbundzentrale 2024.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2,
12 * as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22 *
23 * @category VuFind
24 * @package  ILS_Logic
25 * @author   Thomas Wagener <wagener@hebis.uni-frankfurt.de>
26 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
27 * @link     https://vufind.org/wiki/development Wiki
28 */
29
30namespace VuFind\ILS\Logic;
31
32/**
33 * Availability Status Manager
34 *
35 * @category VuFind
36 * @package  ILS_Logic
37 * @author   Thomas Wagener <wagener@hebis.uni-frankfurt.de>
38 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
39 * @link     https://vufind.org/wiki/development Wiki
40 */
41class AvailabilityStatusManager
42{
43    /**
44     * Create a new Availability Status
45     *
46     * @param int|bool $availability Availability
47     *
48     * @return AvailabilityStatusInterface
49     */
50    public function createAvailabilityStatus(int|bool $availability): AvailabilityStatusInterface
51    {
52        return new AvailabilityStatus($availability);
53    }
54
55    /**
56     * Get combined item info of multiple item info arrays.
57     *
58     * @param array $items Array of items
59     *
60     * @return array
61     */
62    public function combine(array $items): array
63    {
64        if (empty($items)) {
65            return ['availability' => new AvailabilityStatus(false)];
66        }
67        usort($items, function ($a, $b) {
68            $availabilityA = $a['availability'] ?? null;
69            $availabilityB = $b['availability'] ?? null;
70            if ($availabilityA === null && $availabilityB === null) {
71                return 0;
72            }
73            if ($availabilityA === null) {
74                return 1;
75            }
76            if ($availabilityB === null) {
77                return -1;
78            }
79            return $availabilityA->compareTo($availabilityB);
80        });
81        return $items[0];
82    }
83}