src/App/Entity/System/SocialAccount.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Entity\System;
  3. use Cms\TenantBundle\Entity\TenantedEntity;
  4. use DateTime;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Reinder83\BinaryFlags\Bits;
  7. use Symfony\Component\Serializer\Annotation\Groups;
  8. /**
  9.  * Class SocialAccount
  10.  * @package App\Entity\System
  11.  *
  12.  * @ORM\Entity(
  13.  *     repositoryClass = "App\Doctrine\Repository\System\SocialAccountRepository",
  14.  * )
  15.  * @ORM\InheritanceType("SINGLE_TABLE")
  16.  * @ORM\DiscriminatorColumn(
  17.  *     name = "_discr",
  18.  *     type = "string",
  19.  * )
  20.  * @ORM\DiscriminatorMap(self::DISCRS)
  21.  * @ORM\Table(
  22.  *      name = "sys__social_account",
  23.  *      uniqueConstraints = {
  24.  *          @ORM\UniqueConstraint(
  25.  *              name = "uidx__unique__facebook",
  26.  *              columns = {
  27.  *                  "tenant",
  28.  *                  "facebookPageId",
  29.  *              },
  30.  *          ),
  31.  *          @ORM\UniqueConstraint(
  32.  *              name = "uidx__unique__twitter",
  33.  *              columns = {
  34.  *                  "tenant",
  35.  *                  "twitterUserId",
  36.  *              },
  37.  *          ),
  38.  *      },
  39.  * )
  40.  */
  41. abstract class SocialAccount extends TenantedEntity
  42. {
  43.     const DISCRS = [
  44.         SocialAccounts\FacebookSocialAccount::DISCR => SocialAccounts\FacebookSocialAccount::class,
  45.         SocialAccounts\TwitterSocialAccount::DISCR => SocialAccounts\TwitterSocialAccount::class,
  46.         SocialAccounts\InstagramSocialAccount::DISCR => SocialAccounts\InstagramSocialAccount::class,
  47.     ];
  48.     const DISCR null;
  49.     const STATUSES__UNKNOWN 0;
  50.     const STATUSES__OK Bits::BIT_1;
  51.     const STATUSES__ERROR = ~Bits::BIT_1;
  52.     const USES = [
  53.         'notifications' => self::USES__NOTIFICATIONS,
  54.         'social_media_manager' => self::USES__SOCIAL_MEDIA_MANAGER,
  55.     ];
  56.     const USES__NONE 0;
  57.     const USES__NOTIFICATIONS Bits::BIT_1;
  58.     const USES__SOCIAL_MEDIA_MANAGER Bits::BIT_2;
  59.     /**
  60.      * @var string|null
  61.      *
  62.      * @ORM\Column(
  63.      *     type = "string",
  64.      *     nullable = false,
  65.      * )
  66.      *
  67.      * @Groups({"message_details", "template_details"})
  68.      */
  69.     protected ?string $name null;
  70.     protected ?DateTime $checkedOn null;
  71.     protected ?DateTime $refreshedOn null;
  72.     protected int $status self::STATUSES__UNKNOWN;
  73.     /**
  74.      * @var int
  75.      *
  76.      * @ORM\Column(
  77.      *     type = "bigint",
  78.      *     nullable = false,
  79.      *     options = {
  80.      *         "default" = self::USES__NONE,
  81.      *         "unsigned" = true,
  82.      *     },
  83.      * )
  84.      */
  85.     protected int $uses self::USES__NONE;
  86.     /**
  87.      * @return string
  88.      */
  89.     public function discr(): string
  90.     {
  91.         return static::DISCR;
  92.     }
  93.     /**
  94.      * @return string|null
  95.      *
  96.      * @Groups({"message_details", "template_details"})
  97.      */
  98.     public function getDiscr(): ?string
  99.     {
  100.         return $this->discr();
  101.     }
  102.     /**
  103.      * @return string|null
  104.      */
  105.     public function getName(): ?string
  106.     {
  107.         return $this->name;
  108.     }
  109.     /**
  110.      * @param string $name
  111.      * @return $this
  112.      */
  113.     public function setName(string $name): self
  114.     {
  115.         $this->name $name;
  116.         return $this;
  117.     }
  118.     /**
  119.      * @return int
  120.      */
  121.     public function getUses(): int
  122.     {
  123.         return $this->uses;
  124.     }
  125.     /**
  126.      * @return array|int[]
  127.      */
  128.     public function getUsesAsBitmasks(): array
  129.     {
  130.         $result = [];
  131.         if ($this->uses != 0) {
  132.             foreach (self::USES as $bitmask) {
  133.                 if ($this->hasUses($bitmask)) {
  134.                     $result[] = $bitmask;
  135.                 }
  136.             }
  137.         }
  138.         return $result;
  139.     }
  140.     /**
  141.      * @return array|string[]
  142.      */
  143.     public function getUsesAsNames(): array
  144.     {
  145.         $result = [];
  146.         if ($this->uses != 0) {
  147.             foreach (self::USES as $name => $bitmask) {
  148.                 if ($this->hasUses($bitmask)) {
  149.                     $result[] = $name;
  150.                 }
  151.             }
  152.         }
  153.         return $result;
  154.     }
  155.     /**
  156.      * @return array
  157.      */
  158.     public function getUsesAsToggles(): array
  159.     {
  160.         $result = [];
  161.         foreach (self::USES as $name => $bitmask) {
  162.             $result[$name] = $this->hasUses($bitmask);
  163.         }
  164.         return $result;
  165.     }
  166.     /**
  167.      * @param int $uses
  168.      * @return $this
  169.      */
  170.     public function setUses(int $uses): self
  171.     {
  172.         $this->uses $uses;
  173.         return $this;
  174.     }
  175.     /**
  176.      * @param int $uses
  177.      * @return bool
  178.      */
  179.     public function hasUses(int $uses): bool
  180.     {
  181.         return (($this->uses $uses) == $uses);
  182.     }
  183.     /**
  184.      * @param int $uses
  185.      * @return bool
  186.      */
  187.     public function anyUses(int $uses): bool
  188.     {
  189.         return (($this->uses $uses) != 0);
  190.     }
  191.     /**
  192.      * @param int $uses
  193.      * @return $this
  194.      */
  195.     public function flagUses(int $uses): self
  196.     {
  197.         $this->uses |= $uses;
  198.         return $this;
  199.     }
  200.     /**
  201.      * @param int $uses
  202.      * @return $this
  203.      */
  204.     public function unflagUses(int $uses): self
  205.     {
  206.         $this->uses &= ~$uses;
  207.         return $this;
  208.     }
  209.     /**
  210.      * @param int $uses
  211.      * @param bool $flag
  212.      * @return $this
  213.      */
  214.     public function toggleUses(int $usesbool $flag): self
  215.     {
  216.         return ($flag) ? $this->flagUses($uses) : $this->unflagUses($uses);
  217.     }
  218.     /**
  219.      * @return string
  220.      */
  221.     abstract public function __toString();
  222.     /**
  223.      * @return string|null
  224.      */
  225.     abstract public function getIdentifier(): ?string;
  226. }