vendor/rawafed/user-bundle/Entity/User.php line 35

Open in your IDE?
  1. <?php
  2. namespace Rawafed\UserBundle\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use FOS\UserBundle\Model\User as BaseUser;
  6. use Symfony\Component\Validator\Constraints as Assert;
  7. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  8. use Symfony\Component\HttpFoundation\File\File;
  9. use Rawafed\CommonsBundle\Model\UserModelInterface;
  10. use Rawafed\CommonsBundle\Model\UserProfileModelInterface;
  11. use Rawafed\CommonsBundle\Model\HWIUserExtraFieldsModelInterface;
  12. use Rawafed\CommonsBundle\Entity\Traits\HasPublicIdTrait as HasPublicId;
  13. use Rawafed\CommonsBundle\Entity\UserProfile;
  14. use Rawafed\EnhancedUploaderBundle\Mapping\Annotation as Uploader;
  15. use Rawafed\SecurityBundle\Entity\Role;
  16. /**
  17.  *
  18.  * @ORM\Table(name="cms_users",
  19.        uniqueConstraints={@ORM\UniqueConstraint(name="inx_public_id", columns={"public_id"})},
  20.        indexes={@ORM\Index(name="idx_created_at", columns={"created_at"})}
  21.    )
  22.  *
  23.  * @ORM\Entity(repositoryClass="Rawafed\UserBundle\Entity\Repository\UserRepository")
  24.  * @ORM\EntityListeners({"Rawafed\UserBundle\Listener\UserListener"})
  25.  * @UniqueEntity(fields="email", groups={"UserManagement","Registration","Profile"})
  26.  * @UniqueEntity(fields="username", groups={"UserManagement","Registration","Profile"})
  27.  * @ORM\HasLifecycleCallbacks()
  28.  *
  29.  * @Uploader\Uploadable
  30.  *
  31.  */
  32. class User extends BaseUser implements UserModelInterfaceInterfaceUserReportingAware
  33. {
  34.     use HasPublicId;
  35.     /**
  36.      * @ORM\Id
  37.      * @ORM\Column(type="integer")
  38.      * @ORM\GeneratedValue(strategy="AUTO")
  39.      */
  40.     protected $id;
  41.     /**
  42.      * @var UserProfileModelInterface userProfile
  43.      *
  44.      * @Assert\Valid()
  45.      */
  46.     protected $userProfile;
  47.     /**
  48.      * @ORM\OneToMany(targetEntity="\Rawafed\CommonsBundle\Model\HWIUserExtraFieldsModelInterface", mappedBy="user" ,cascade={"persist"} )
  49.      * @ORM\OrderBy({"id" = "DESC"})
  50.      * @var ArrayCollection UserProfileModelInterface HWIUserExtraFields
  51.      *
  52.      * @Assert\Valid()
  53.      */
  54.     protected $userHWIUserExtraFields;
  55.     /**
  56.      * @ORM\Column(name="real_name", type="string", length=255, nullable=true)
  57.      * @Assert\NotBlank(groups={"Registration","Profile","UserManagement"})
  58.      */
  59.     protected $realName;
  60.     /**
  61.      * @ORM\ManyToMany(targetEntity="Rawafed\UserBundle\Entity\Group", inversedBy="users", cascade={"persist"})
  62.      * @ORM\JoinTable(name="cms_users_groups",
  63.      *   joinColumns={
  64.      *     @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
  65.      *   },
  66.      *   inverseJoinColumns={
  67.      *     @ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")
  68.      *   }
  69.      * )
  70.      *
  71.      * @ORM\OrderBy({"title" = "ASC"})
  72.      * @var ArrayCollection groups
  73.      *
  74.      */
  75.     protected $groups;
  76.     // @ ORM\Column(name="email", type="string", length=255, unique=false) */
  77.     //protected $email;
  78.     /**
  79.      * @ORM\Column(name="updated_at", type="datetime", length=255, unique=false, nullable=true)
  80.      * @var \DateTime
  81.      */
  82.     protected $updatedAt;
  83.     /**
  84.      * @ORM\Column(name="created_at", type="datetime", length=255, unique=false, nullable=true)
  85.      * @var \DateTime
  86.      */
  87.     protected $createdAt;
  88.     /**
  89.      * @Uploader\UploadableField(mapping="rawafed_upload", fileNameProperty="imageName", uploadsDirName="users")
  90.      * @Assert\File(
  91.      *     maxSize="1M",
  92.      *     mimeTypes={"image/png", "image/jpeg", "image/gif"},
  93.      *     groups={"Registration","Profile","UserManagement"}
  94.      * )
  95.      *
  96.      * @var File $imageFile
  97.      */
  98.     protected $imageFile;
  99.     /**
  100.      * @ORM\Column(type="string", length=255, name="image_name", nullable=true)
  101.      *
  102.      * @var string $imageName
  103.      */
  104.     protected $imageName;
  105.     /**
  106.      * @var integer
  107.      *
  108.      * @ORM\Column(name="reporting_reference_id", type="integer", nullable=true)
  109.      */
  110.     private $reportingReferenceId;
  111.     /**
  112.      * @var integer
  113.      *
  114.      * @ORM\Column(name="reporting_banned", type="boolean", options={"default" = false})
  115.      */
  116.     private $reportingBanned false;
  117.     /**
  118.      * @var integer
  119.      *
  120.      * @ORM\Column(name="reporting_immuned", type="boolean", options={"default" = false})
  121.      */
  122.     private $reportingImmune false;
  123.     /**
  124.      * @var bool
  125.      *
  126.      * @ORM\Column(type="boolean", options={"default" = false})
  127.      */
  128.     private $is_system false;
  129.     public function __construct()
  130.     {
  131.         $this->groups = new ArrayCollection();
  132.         $this->userHWIUserExtraFields = new ArrayCollection();
  133.         parent::__construct();
  134.     }
  135.     /**
  136.      * @return string $username
  137.      */
  138.     public function __toString()
  139.     {
  140.         return $this->getUsername();
  141.     }
  142.     /**
  143.      * @param string $default OPTIONAL default value to be returned in case that no real name defined.
  144.      * @return string $realName
  145.      */
  146.     public function getRealName($default null)
  147.     {
  148.         return !empty($this->realName) ? $this->realName $default;
  149.     }
  150.     /**
  151.      * @param string $realName
  152.      * @return User $this
  153.      */
  154.     public function setRealName($realName)
  155.     {
  156.         $this->realName $realName;
  157.         return $this;
  158.     }
  159.     /**
  160.      *
  161.      * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $imageFile
  162.      * @return \Rawafed\UserBundle\Entity\User
  163.      *
  164.      */
  165.     public function setImageFile(File $imageFile null)
  166.     {
  167.         $this->imageFile $imageFile;
  168.         if ($imageFile) {
  169.             // It is required that at least one field changes if you are using doctrine
  170.             // otherwise the event listeners won't be called and the file is lost
  171.             if($this->getId())  $this->updatedAt = new \DateTime('now');
  172.             else                $this->createdAt = new \DateTime('now');
  173.         }
  174.         return $this;
  175.     }
  176.     /**
  177.      *
  178.      * @return \Symfony\Component\HttpFoundation\File\File
  179.      */
  180.     public function getImageFile()
  181.     {
  182.         return $this->imageFile//new File($this->image, false);
  183.     }
  184.     /**
  185.      *
  186.      * @return string
  187.      */
  188.     public function getImageName()
  189.     {
  190.         return $this->imageName;
  191.     }
  192.     /**
  193.      *
  194.      * @param string $imageName
  195.      * @return \Rawafed\UserBundle\Entity\User
  196.      */
  197.     public function setImageName($imageName)
  198.     {
  199.         $this->imageName $imageName;
  200.         return $this;
  201.     }
  202.     /**
  203.      *
  204.      * overridden to be able to get array of all user tree nested roles
  205.      * to use it in isGranted action which will show or hide view actions (add, edit, .....)
  206.      *
  207.      * Returns the user roles
  208.      *
  209.      * @return array The roles
  210.      */
  211.     public function getRoles()
  212.     {
  213.         $roles $this->roles;
  214.         foreach($this->getGroups() as $group) {
  215.             foreach( $group->getCustomRoles() as $role ){
  216.                 $roles[] = $role->getRole();
  217.                 $roles array_merge$roles$this->getRoleChilds($role) );
  218.             }
  219.         }
  220.         $roles[] = static::ROLE_DEFAULT;
  221.         return array_unique($roles);
  222.     }
  223.     /**
  224.      *
  225.      * @param string|Role $role
  226.      * @return string[]|Role[]
  227.      */
  228.     private function getRoleChilds($role)
  229.     {
  230.         $roles = array();
  231.         foreach($role->getChildren() as $childRole) {
  232.             $roles[] = $childRole->getRole();
  233.             if($role->getChildren()) {
  234.                 $roles array_merge($roles$this->getRoleChilds($childRole));
  235.             }
  236.         }
  237.         return $roles;
  238.     }
  239.     /**
  240.      * @return UserProfile|UserProfileModelInterface
  241.      */
  242.     public function getUserProfile()
  243.     {
  244.         return $this->userProfile;
  245.     }
  246.     /**
  247.      * @param UserProfileModelInterface $userProfile
  248.      * @return $this
  249.      */
  250.     public function setUserProfile(UserProfileModelInterface $userProfile)
  251.     {
  252.         $this->userProfile $userProfile;
  253.         $userProfile->setUser($this);
  254.         return $this;
  255.     }
  256.     /**
  257.      * @return ArrayCollection
  258.      */
  259.     public function getUserHWIUserExtraFields()
  260.     {
  261.         return $this->userHWIUserExtraFields ;
  262.     }
  263.     /**
  264.      * @param ArrayCollection $userHWIUserExtraFields
  265.      * @return $this
  266.      */
  267.     public function setUserHWIUserExtraFields(ArrayCollection $userHWIUserExtraFields)
  268.     {
  269.         $this->userHWIUserExtraFields $userHWIUserExtraFields;
  270.         return $this;
  271.     }
  272.     /**
  273.      * @param HWIUserExtraFieldsModelInterface $userHWIUserExtraField
  274.      * @return $this
  275.      */
  276.     public function addUserHWIUserExtraField(HWIUserExtraFieldsModelInterface $userHWIUserExtraField)
  277.     {
  278.         $userHWIUserExtraField->setUser($this);
  279.         $this->userHWIUserExtraFields->add($userHWIUserExtraField);
  280.         return $this;
  281.     }
  282.     /**
  283.      * @param HWIUserExtraFieldsModelInterface $userHWIUserExtraField
  284.      * @return $this
  285.      */
  286.     public function removeUserHWIUserExtraField(HWIUserExtraFieldsModelInterface $userHWIUserExtraField)
  287.     {
  288.         //$this->getUserHWIUserExtraFields()->matching($criteria);
  289.         if($this->getUserHWIUserExtraFields()->contains($userHWIUserExtraField))
  290.             $this->userHWIUserExtraFields->removeElement($userHWIUserExtraField);
  291.         return $this;
  292.     }
  293.     /**
  294.      * @param array $fields
  295.      * @return null|HWIUserExtraFieldsModelInterface
  296.      */
  297.     public function findUserHWIUserExtraFieldsBy($fields = array())
  298.     {
  299.         $item $this->getUserHWIUserExtraFields()->filter(
  300.                 function($entry) use ($fields) {
  301.                     $match false;
  302.                     foreach ($fields as $key => $value){
  303.                         $fieldGetter "get".ucfirst($key);
  304.                         if($entry->$fieldGetter() == $value){
  305.                             $match true;
  306.                         }
  307.                     }
  308.                     if($match) return $entry;
  309.                  })->first();
  310.         return ($item instanceof HWIUserExtraFieldsModelInterface) ? $item NULL;
  311.     }
  312.     /**
  313.      *
  314.      * @param \DateTime $createdAt
  315.      * @return User
  316.      */
  317.     public function setCreatedAt(\DateTime $createdAt)
  318.     {
  319.         $this->createdAt $createdAt;
  320.         return $this;
  321.     }
  322.     /**
  323.      * @return \DateTime
  324.      */
  325.     public function getCreatedAt()
  326.     {
  327.         return $this->createdAt;
  328.     }
  329.     /**
  330.      *
  331.      * @param \DateTime $updatedAt
  332.      * @return User
  333.      */
  334.     public function setUpdatedAt(\DateTime $updatedAt)
  335.     {
  336.         $this->updatedAt $updatedAt;
  337.         return $this;
  338.     }
  339.     /**
  340.      * @return \DateTime
  341.      */
  342.     public function getUpdatedAt()
  343.     {
  344.         return $this->updatedAt;
  345.     }
  346.     /** @ORM\PrePersist() */
  347.     public function prePersist()
  348.     {
  349.         if(is_null($this->getCreatedAt()))
  350.             $this->setCreatedAt(new \DateTime());
  351.     }
  352.     /** @ORM\PreUpdate() */
  353.     public function preUpdate()
  354.     {
  355.         $this->setUpdatedAt(new \DateTime());
  356.     }
  357.     public function getReportedContent()
  358.     {
  359.         return $this->getUsername()." (".$this->getRealName().")";
  360.     }
  361.     public function getReportingBanned()
  362.     {
  363.         return $this->reportingBanned;
  364.     }
  365.     public function getReportingImmuned()
  366.     {
  367.         return $this->reportingImmune;
  368.     }
  369.     public function getReportingReferenceId()
  370.     {
  371.         return $this->reportingReferenceId;
  372.     }
  373.     public function getReportingTypeName()
  374.     {
  375.         return 'user.titles.user';
  376.     }
  377.     public function setReportingBanned($reportingBanned)
  378.     {
  379.         $this->reportingBanned $reportingBanned;
  380.         return $this;
  381.     }
  382.     public function setReportingImmuned($reportingImmune)
  383.     {
  384.         $this->reportingImmune $reportingImmune;
  385.         return $this;
  386.     }
  387.     public function setReportingReferenceId($reportingReferenceId)
  388.     {
  389.         $this->reportingReferenceId $reportingReferenceId;
  390.         return $this;
  391.     }
  392.     /**
  393.      * @return bool
  394.      */
  395.     public function isSystem()
  396.     {
  397.         return $this->is_system;
  398.     }
  399.     /**
  400.      * @param bool $is_system
  401.      * @return User
  402.      */
  403.     public function setIsSystem($is_system)
  404.     {
  405.         $this->is_system $is_system;
  406.         return $this;
  407.     }
  408. }