ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
UploadPolicyResolver.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
25{
29 protected const MB_TO_BYTES = 1_000 * 1_000;
30
34 public function __construct(
35 protected ilRbacReview $rbac_review,
36 protected ilObjUser $current_user,
37 protected array $upload_policies,
38 ) {
39 }
40
46 {
47 $largest_limit_in_bytes = null;
48 foreach ($this->upload_policies as $policy) {
49 if (!$this->isPolicyActiveAndValid($policy)) {
50 continue;
51 }
52
53 $policy_limit_in_bytes = ($policy->getUploadLimitInMB() * self::MB_TO_BYTES);
54
55 if (UploadPolicy::AUDIENCE_TYPE_ALL_USERS === $policy->getAudienceType() &&
56 (null === $largest_limit_in_bytes || $policy_limit_in_bytes > $largest_limit_in_bytes)
57 ) {
58 $largest_limit_in_bytes = $policy_limit_in_bytes;
59 continue;
60 }
61
62 if (UploadPolicy::AUDIENCE_TYPE_GLOBAL_ROLE === $policy->getAudienceType() &&
63 $this->rbac_review->isAssignedToAtLeastOneGivenRole(
64 $this->current_user->getId(),
65 array_map(
66 'intval',
67 array_merge(
68 $policy->getAudience()['global_roles'] ?? [],
69 $policy->getAudience()['local_roles'] ?? []
70 )
71 )
72 ) &&
73 (null === $largest_limit_in_bytes || $policy_limit_in_bytes > $largest_limit_in_bytes)
74 ) {
75 $largest_limit_in_bytes = $policy_limit_in_bytes;
76 }
77 }
78
79 return $largest_limit_in_bytes;
80 }
81
82 protected function isPolicyActiveAndValid(UploadPolicy $policy): bool
83 {
84 $valid_from = $policy->getValidFrom();
85 $valid_until = $policy->getValidUntil();
86
87 if (null === $valid_from && null === $valid_until) {
88 return $policy->isActive();
89 }
90
91 $today = new \DateTimeImmutable('today midnight');
92
93 if (null !== $valid_from && null !== $valid_until) {
94 return $policy->isActive() && $valid_from >= $today && $today < $valid_until;
95 }
96
97 if (null !== $valid_until && null === $valid_from) {
98 return $policy->isActive() && $today <= $valid_until;
99 }
100
101 if (null !== $valid_from && null === $valid_until) {
102 return $policy->isActive() && $today >= $valid_from;
103 }
104
105 return false;
106 }
107}
const MB_TO_BYTES
Multiply for MB to Bytes, divide for Bytes to MB.
getUserUploadSizeLimitInBytes()
Returns the upload-size limit of the current user if customized by any upload policy.
__construct(protected ilRbacReview $rbac_review, protected ilObjUser $current_user, protected array $upload_policies,)
isPolicyActiveAndValid(UploadPolicy $policy)
const AUDIENCE_TYPE_GLOBAL_ROLE
const AUDIENCE_TYPE_ALL_USERS
User class.
class ilRbacReview Contains Review functions of core Rbac.