src/AppBundle/Entity/Componente.php line 18
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Componente.
*
* @ORM\Table(name="componente")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ComponenteRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Componente
{
const VISIBILIDAD_TODOS = '1';
const VISIBILIDAD_LOGEADO = '2';
const VISIBILIDAD_NO_LOGEADO = '3';
const VISIBILIDAD_NINGUNO = '4';
const IMAGENES = [
'materias_primas' => '/images/icons/componentes/materias_primas.svg',
'fluidos_sanitarios' => '/images/icons/componentes/fluidos_sanitarios.svg',
'fluidos_industriales' => '/images/icons/componentes/fluidos_industriales.svg',
'consumibles_industriales' => '/images/icons/componentes/consumibles_industriales.svg',
'ferreteria' => '/images/icons/componentes/ferreteria.svg',
'arquitectura' => '/images/icons/componentes/arquitectura_construccion.svg'
];
/**
* @var int
*
* @ORM\Column(name="id", type="string", length=2, options={"fixed" = true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="descripcion", type="string", length=255)
* @Assert\NotBlank
*/
protected $descripcion;
/**
* @ORM\Column(name="tipo_id", type="integer")
*/
protected $tipoId;
/**
* @ORM\ManyToOne(targetEntity="ComponenteTipo", inversedBy="componentes")
* @ORM\JoinColumn(name="tipo_id", referencedColumnName="id")
*/
protected $tipo;
/**
* @var int
*
* @ORM\Column(name="orden", type="integer")
*/
protected $orden;
/**
* @var int
*
* @ORM\Column(name="visibilidad", type="integer")
*/
protected $visibilidad;
/**
* @var string
*
* @ORM\Column(name="configuracion", type="string")
*/
protected $configuracion;
/**
* @var boolean
*
* @ORM\Column(name="fullWidth", type="boolean")
*/
protected $fullWidth = 0;
public $formulario;
/**
* Solo para los tipoId = 3 (bloque banner)
*/
protected $idBloqueBanner;
/**
* @var boolean
*
* @ORM\Column(name="is_mobile", type="boolean")
*/
protected $isMobile;
protected $data = null;
/**
* @ORM\OneToMany(targetEntity="ComponentePais", mappedBy="componente", cascade={"all"}, orphanRemoval=true, fetch="EAGER"))
*/
protected $paises;
public function __construct()
{
$this->formulario = array();
}
/**
* Get the value of id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of id
*
* @param int $id
*
* @return self
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get the value of orden
*
* @return int
*/
public function getOrden()
{
return $this->orden;
}
/**
* Set the value of orden
*
* @param int $orden
*
* @return self
*/
public function setOrden($orden)
{
$this->orden = $orden;
return $this;
}
/**
* Get the value of visibilidad
*
* @return int
*/
public function getVisibilidad()
{
return $this->visibilidad;
}
/**
* Set the value of visibilidad
*
* @param int $visibilidad
*
* @return self
*/
public function setVisibilidad($visibilidad)
{
$this->visibilidad = $visibilidad;
return $this;
}
/**
* Get the value of configuracion
*
* @return string
*/
public function getConfiguracion()
{
return $this->configuracion;
}
/**
* Set the value of configuracion
*
* @param string $configuracion
*
* @return self
*/
public function setConfiguracion($configuracion)
{
$this->configuracion = $configuracion;
return $this;
}
/**
* Get the value of tipo
*/
public function getTipo()
{
return $this->tipo;
}
/**
* Set the value of tipo
*
* @return self
*/
public function setTipo($tipo)
{
$this->tipo = $tipo;
return $this;
}
/**
* Get the value of descripcion
*
* @return string
*/
public function getDescripcion()
{
return $this->descripcion;
}
/**
* Set the value of descripcion
*
* @param string $descripcion
*
* @return self
*/
public function setDescripcion($descripcion)
{
$this->descripcion = $descripcion;
return $this;
}
/**
* Get the value of tipoId
*/
public function getTipoId()
{
return $this->tipoId;
}
/**
* Set the value of tipoId
*
* @return self
*/
public function setTipoId($tipoId)
{
$this->tipoId = $tipoId;
return $this;
}
/**
* Get the value of idBloqueBanner
*/
public function getIdBloqueBanner()
{
return $this->idBloqueBanner;
}
/**
* Set the value of idBloqueBanner
*
* @return self
*/
public function setIdBloqueBanner($idBloqueBanner)
{
$this->idBloqueBanner = $idBloqueBanner;
return $this;
}
public function mutar($clase)
{
switch ($clase) {
case 'ComponenteCarouselType':
return $this->_toComponenteCarousel();
case 'ComponenteCatalogoType':
return $this->_toComponenteCatalogo();
case 'ComponenteBannerType':
return $this->_toComponenteBloqueBanner();
case 'ComponenteCrossSellingType':
return $this->_toComponenteCrossSelling();
default:
return $this;
}
}
public function _toComponenteCarousel()
{
$componente = new ComponenteCarousel();
$configuracion = json_decode($this->configuracion);
$componente
->setId($this->id)
->setOrden($this->orden)
->setVisibilidad($this->visibilidad)
->setFullWidth($this->fullWidth)
->setDescripcion($this->descripcion)
->setTipoId(ComponenteTipo::OPTIONS['carousel']['id'])
->setTipo($this->tipo)
->setTitulo($configuracion->titulo??'')
->setConfiguracion(json_encode($configuracion))
// ->setPaises($this->paises)
;
if(!empty($configuracion->items)){
foreach($configuracion->items as $item) {
$componenteImagen = new ComponenteItem();
$componenteImagen->setFechaDesde(new \DateTime($item->fecha_desde));
$componenteImagen->setFechaHasta(new \DateTime($item->fecha_hasta));
$componenteImagen->setNombreImagen(basename($item->imagen));
$componenteImagen->setUrl($item->url);
$componenteImagen->setTextoAnalitycs($item->textoAnalitycs ?? '');
$componente->addItem($componenteImagen);
}
}
return $componente;
}
public function _toComponenteCatalogo()
{
$componente = new ComponenteCatalogo();
$configuracion = json_decode($this->configuracion);
$nodos = null;
if(!empty($configuracion->nodos)){
$nodos = $configuracion->nodos;
}
$componente
->setId($this->id)
->setOrden($this->orden)
->setVisibilidad($this->visibilidad)
->setFullWidth($this->fullWidth)
->setDescripcion($this->descripcion)
->setTipoId(ComponenteTipo::OPTIONS['categorias']['id'])
->setTipo($this->tipo)
->setTitulo($configuracion->titulo??null)
->setImagenIcono($configuracion->imagen??null)
->setNodos($nodos);
return $componente;
}
public function _toComponenteBloqueBanner()
{
$componente = new ComponenteBanner();
$configuracion = json_decode($this->configuracion);
$bloqueBannerId = null;
if(!empty($configuracion->bloqueBannerId)){
$bloqueBannerId = $configuracion->bloqueBannerId;
}
$componente
->setId($this->id)
->setOrden($this->orden)
->setVisibilidad($this->visibilidad)
->setFullWidth($this->fullWidth)
->setDescripcion($this->descripcion)
->setTipoId(ComponenteTipo::OPTIONS['banner']['id'])
->setTipo($this->tipo)
->setTitulo($configuracion->titulo??null)
->setBloqueBannerId($bloqueBannerId)
;
return $componente;
}
public function _toComponenteCrossSelling()
{
$componente = new ComponenteCrossSelling();
$configuracion = json_decode($this->configuracion);
$componente
->setId($this->id)
->setOrden($this->orden)
->setVisibilidad($this->visibilidad)
->setFullWidth($this->fullWidth)
->setDescripcion($this->descripcion)
->setTipoId(ComponenteTipo::OPTIONS['cross-selling']['id'])
->setTipo($this->tipo)
->setTitulo($configuracion->titulo??null)
;
return $componente;
}
/**
* Get the value of fullWidth
*
* @return boolean
*/
public function getFullWidth()
{
return $this->fullWidth;
}
/**
* Set the value of fullWidth
*
* @param boolean $fullWidth
*
* @return self
*/
public function setFullWidth($fullWidth)
{
$this->fullWidth = $fullWidth;
return $this;
}
/**
* Get the value of isMobile
*
* @return boolean
*/
public function isMobile()
{
return $this->isMobile;
}
/**
* Set the value of isMobile
*
* @param boolean $isMobile
*
* @return self
*/
public function setMobile($isMobile)
{
$this->isMobile = $isMobile;
return $this;
}
/**
* Get the value of paises
*/
public function getPaises()
{
return $this->paises;
}
/**
* Set the value of paises
*
* @return self
*/
public function setPaises($paises)
{
$this->paises = $paises;
return $this;
}
/**
* * De vuelve la data del Componente.
* @return array
*/
public function getData(): array
{
return $this->data;
}
/**
* * Guarda la data del Componente.
* @param ?array $valor
* @return self
*/
public function setData(?array $valor): self
{
$this->data = $valor;
return $this;
}
/**
* * De vuelve la entidad en formato array.
* @return array
*/
public function _toArray(): array
{
$response = [
//
];
$response['data'] = $this->getData();
$response['fullWidth'] = $this->getFullWidth();
$response['id'] = $this->getId();
$response['isMobile'] = $this->isMobile();
$response['tipo'] = $this->getTipo()->_toArray();
return $response;
}
}