From b1038667ee7ed6996794efef2f4acd10920cac21 Mon Sep 17 00:00:00 2001 From: djmaze Date: Mon, 1 Nov 2021 22:59:04 +0100 Subject: [PATCH] Added ACL response class for #157 --- .../libraries/MailSo/Imap/Commands/ACL.php | 16 ++++--- .../MailSo/Imap/Enumerations/FolderACL.php | 6 +++ .../libraries/MailSo/Imap/Responses/ACL.php | 48 +++++++++++++++++++ 3 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 snappymail/v/0.0.0/app/libraries/MailSo/Imap/Responses/ACL.php diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php index 9f0992248..cd74716d3 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php @@ -11,6 +11,8 @@ namespace MailSo\Imap\Commands; +use \MailSo\Imap\Responses\ACL as ACLResponse; + /** * @category MailSo * @package Imap @@ -48,13 +50,13 @@ trait ACL && $sFolderName === $oResponse->ResponseList[2] ) { - $aResult[$oResponse->ResponseList[3]] = static::aclRightsToArray(\array_slice($oResponse->ResponseList, 4)); + $aResult[$oResponse->ResponseList[3]] = static::aclRightsToClass(\array_slice($oResponse->ResponseList, 4)); } } return $aResult; } - public function FolderListRights(string $sFolderName, string $sIdentifier) : ?array + public function FolderListRights(string $sFolderName, string $sIdentifier) : ?ACLResponse { // if ($this->IsSupported('ACL')) { $oResponses = $this->SendRequestGetResponse('LISTRIGHTS', array( @@ -69,13 +71,13 @@ trait ACL && $sIdentifier === $oResponse->ResponseList[3] ) { - return static::aclRightsToArray(\array_slice($oResponse->ResponseList, 4)); + return static::aclRightsToClass(\array_slice($oResponse->ResponseList, 4)); } } return null; } - public function FolderMyRights(string $sFolderName) : ?array + public function FolderMyRights(string $sFolderName) : ?ACLResponse { // if ($this->IsSupported('ACL')) { $oResponses = $this->SendRequestGetResponse('MYRIGHTS', array($this->EscapeString($sFolderName))); @@ -86,19 +88,19 @@ trait ACL && $sFolderName === $oResponse->ResponseList[2] ) { - return static::aclRightsToArray(\array_slice($oResponse->ResponseList, 3)); + return static::aclRightsToClass(\array_slice($oResponse->ResponseList, 3)); } } return null; } - private static function aclRightsToArray(array $rules) : array + private static function aclRightsToClass(array $rules) : ACLResponse { $result = array(); foreach ($rules as $rule) { $result = \array_merge($result, \str_split($rule)); } - return \array_unique($result); + return new ACLResponse(\array_unique($result)); } } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php index d0f7ea163..ccacd424d 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php @@ -19,6 +19,12 @@ namespace MailSo\Imap\Enumerations; * @package Imap * @subpackage Enumerations */ +/** + * PHP 8.1 +enum FolderACL: string { + case ADMINISTER = 'a'; +} +*/ abstract class FolderACL { const diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Responses/ACL.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Responses/ACL.php new file mode 100644 index 000000000..a00f5c771 --- /dev/null +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Responses/ACL.php @@ -0,0 +1,48 @@ +rights = $rights; + } + + /** PHP 8.1 + public function hasRight(string|\MailSo\Imap\Enumerations\FolderACL $right) + { + if ($right instanceof \BackedEnum) { + return \in_array($right->value, $this->rights); + } + */ + public function hasRight(string $right) + { + $const = '\\MailSo\\Imap\\Enumerations\\FolderACL::' . \strtoupper($right); + if (\defined($const)) { + $right = \constant($const); + } + return \in_array($right, $this->rights); + } + + public function jsonSerialize() + { + return $this->rights; + } + +}