Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
DocMdpPolicy
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 keys
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 get
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3declare(strict_types=1);
4/**
5 * SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
6 * SPDX-License-Identifier: AGPL-3.0-or-later
7 */
8
9namespace OCA\Libresign\Service\Policy\Provider\DocMdp;
10
11use OCA\Libresign\Enum\DocMdpLevel;
12use OCA\Libresign\Service\Policy\Contract\IPolicyDefinition;
13use OCA\Libresign\Service\Policy\Contract\IPolicyDefinitionProvider;
14use OCA\Libresign\Service\Policy\Model\PolicySpec;
15use OCA\Libresign\Service\Policy\Provider\Helper\PolicyKeyNormalizer;
16
17final class DocMdpPolicy implements IPolicyDefinitionProvider {
18    public const KEY = 'docmdp';
19    public const SYSTEM_APP_CONFIG_KEY = 'docmdp_level';
20
21    #[\Override]
22    public function keys(): array {
23        return [
24            self::KEY,
25        ];
26    }
27
28    #[\Override]
29    public function get(string|\BackedEnum $policyKey): IPolicyDefinition {
30        return match (PolicyKeyNormalizer::normalize($policyKey)) {
31            self::KEY => new PolicySpec(
32                key: self::KEY,
33                defaultSystemValue: DocMdpLevel::NOT_CERTIFIED->value,
34                allowedValues: [
35                    DocMdpLevel::NOT_CERTIFIED->value,
36                    DocMdpLevel::CERTIFIED_NO_CHANGES_ALLOWED->value,
37                    DocMdpLevel::CERTIFIED_FORM_FILLING->value,
38                    DocMdpLevel::CERTIFIED_FORM_FILLING_AND_ANNOTATIONS->value,
39                ],
40                normalizer: static function (mixed $rawValue): mixed {
41                    if ($rawValue instanceof DocMdpLevel) {
42                        return $rawValue->value;
43                    }
44
45                    if (is_int($rawValue)) {
46                        return $rawValue;
47                    }
48
49                    if (is_numeric($rawValue)) {
50                        return (int)$rawValue;
51                    }
52
53                    return $rawValue;
54                },
55                appConfigKey: self::SYSTEM_APP_CONFIG_KEY,
56                supportsRequestOverride: true,
57                requestLifecycle: PolicySpec::LIFECYCLE_REQUEST_SNAPSHOT,
58            ),
59            default => throw new \InvalidArgumentException('Unknown policy key: ' . PolicyKeyNormalizer::normalize($policyKey)),
60        };
61    }
62}