<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use App\Entity\Address;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\VarDumper\VarDumper;
/**
* User
*
* @ORM\Table(name="user_user")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks()
*/
class User extends BaseUser
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="user")
* @ORM\OrderBy({"title" = "ASC"})
*/
private $addresses;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime")
*/
private $updatedAt;
/**
* @ORM\Column(name="wishlist", type="array")
*/
private $wishlist;
///**
// * @ORM\OneToMany(targetEntity="App\Entity\Token", mappedBy="user")
// */
//private $tokens;
/**
* User constructor.
*/
public function __construct()
{
parent::__construct();
//$this->tokens = new ArrayCollection();
$this->addresses = new ArrayCollection();
$this->wishlist = array();
}
/**
* Add Token
*
* @param Token $category
* @return User
*/
public function addToken(Token $token)
{
$this->tokens[] = $token;
return $this;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
public function addProductToWishList($p)
{
$this->wishlist[] = $p;
}
public function checkProductInWishlist($pid)
{
return array_search($pid, $this->wishlist) !== false;
}
public function removeProductFromWishList($p)
{
$pos = array_search($p, $this->wishlist);
unset($this->wishlist[$pos]);
}
/**
* @return mixed
*/
public function getWishlist()
{
return $this->wishlist;
}
/**
* @param mixed $wishlist
*/
public function setWishlist($wishlist)
{
$this->wishlist = $wishlist;
}
/**
* @param Address $address
* @return User
*/
public function addAdress(Address $address)
{
$this->addresses[] = $address;
return $this;
}
/**
* @param mixed $addresses
*/
public function setAddresses($addresses)
{
$this->addresses = $addresses;
}
/**
* @param Address $address
* @return User
*/
public function removeAddress(Address $address)
{
$this->addresses->removeElement($address);
return $this;
}
/**
* @return ArrayCollection
*
*/
public function getAddresses()
{
return $this->addresses;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return User
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
*
* @return User
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpdate()
{
if (null == $this->createdAt) {
$this->createdAt = new \DateTime();
}
$this->updatedAt = new \DateTime();
}
public static function getSessionId(Request $request)
{
$session = $request->getSession();
$session_id = $session->getId();
$currentSession = $session->get('customerSession');
if (empty($currentSession)) {
$session->set('customerSession', $session_id);
} else {
$session_id = $session->get('customerSession');
}
return $session_id;
}
public static function regenerateAllSessions($request)
{
/** @var Session $sessions */
$sessions = $request->getSession();
$sessions->clear();
return 1;
}
public function getFullName()
{
return $this->getLastname() . ' ' . $this->getFirstname() . ' ('.$this->username . ')';
}
public function getLastname()
{
return $this->getAddresses()[0] ? $this->getAddresses()[0]->getShippingLastname() : '';
}
public function getFirstname()
{
return $this->getAddresses()[0] ? $this->getAddresses()[0]->getShippingFirstname() : '';
}
}