src/Service/Subscription/Voter/SubscriptionVoter.php line 8

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\Subscription\Voter;
  3. use Harmonizely\Model\UserInterface;
  4. use Harmonizely\Service\Panel\AccessVoters\AbstractVoter;
  5. class SubscriptionVoter extends AbstractVoter
  6. {
  7.     const RESOURCE_NAME 'subscription';
  8.     const CUSTOM_DOMAIN 'custom_domain';
  9.     const CHANGE_TEMPLATE 'change_template';
  10.     const WHITE_LABEL 'white_label';
  11.     const ORGANIZATION 'organization';
  12.     const SMS 'sms';
  13.     const SMTP 'smtp';
  14.     const FLEXIBLE_DURATION 'flexible_duration';
  15.     const SBPAY_PRO 'sbpay_pro';
  16.     const MULTIPLE_MEETING 'multiple_meeting';
  17.     const MULTIPLE_EMAIL 'multiple_email';
  18.     const EVENT_TYPE_TAG 'event_type_tag';
  19.     const API 'api';
  20.     const USER_RELATION 'user_relation';
  21.     const ROUTING_FORM 'routing_form';
  22.     /**
  23.      * @return string
  24.      */
  25.     function getResourceName(): string
  26.     {
  27.         return self::RESOURCE_NAME;
  28.     }
  29.     /**
  30.      * @return string[]
  31.      */
  32.     function getResourceAttributes(): array
  33.     {
  34.         return [
  35.             self::CUSTOM_DOMAIN,
  36.             self::WHITE_LABEL,
  37.             self::CHANGE_TEMPLATE,
  38.             self::ORGANIZATION,
  39.             self::SMS,
  40.             self::SMTP,
  41.             self::FLEXIBLE_DURATION,
  42.             self::SBPAY_PRO,
  43.             self::MULTIPLE_MEETING,
  44.             self::MULTIPLE_EMAIL,
  45.             self::EVENT_TYPE_TAG,
  46.             self::API,
  47.             self::USER_RELATION,
  48.             self::ROUTING_FORM,
  49.         ];
  50.     }
  51.     /**
  52.      * @param UserInterface $user
  53.      * @param $subject
  54.      * @return array|string[]
  55.      */
  56.     function getAllowedAttributes(UserInterface $user$subject): array
  57.     {
  58.         if ($user->hasPaidSubscription(true)) {
  59.             return $this->getResourceAttributes();
  60.         }
  61.         if ($user->hasPaidSubscription()) {
  62.             return [
  63.                 self::CUSTOM_DOMAIN,
  64.                 self::WHITE_LABEL,
  65.                 self::ORGANIZATION,
  66.                 self::SMS,
  67.                 self::SMTP,
  68.                 self::FLEXIBLE_DURATION,
  69.                 self::SBPAY_PRO,
  70.                 self::MULTIPLE_MEETING,
  71.                 self::MULTIPLE_EMAIL,
  72.                 self::EVENT_TYPE_TAG,
  73.                 self::API,
  74.                 self::USER_RELATION,
  75.                 self::ROUTING_FORM,
  76.             ];
  77.         }
  78.         if ($user->hasCurrentSubscription()) {
  79.             return [
  80.                 self::API,
  81.             ];
  82.         }
  83.         return [
  84.         ];
  85.     }
  86.     /**
  87.      * @param string $attribute
  88.      * @param mixed $subject
  89.      * @return bool
  90.      */
  91.     protected function supports($attribute$subject): bool
  92.     {
  93.         if (!in_array($attribute$this->getResourceAttributes())) {
  94.             return false;
  95.         }
  96.         return true;
  97.     }
  98.     /**
  99.      * @param string $attribute
  100.      * @param UserInterface $user
  101.      * @return bool
  102.      */
  103.     public static function staticVoteOnAttribute(string $attributeUserInterface $user): bool
  104.     {
  105.         $instance = new self();
  106.         if (!in_array($attribute$instance->getResourceAttributes())) {
  107.             return false;
  108.         }
  109.         return in_array($attribute$instance->getAllowedAttributes($usernull));
  110.     }
  111. }