* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) */ namespace PrestaShop\Module\ProductComment\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Validate; /** * @ORM\Table() * @ORM\Entity() */ class ProductCommentCriterion { const NAME_MAX_LENGTH = 64; const ENTIRE_CATALOG_TYPE = 1; const CATEGORIES_TYPE = 2; const PRODUCTS_TYPE = 3; /** * @var int * * @ORM\Id * @ORM\Column(name="id_product_comment_criterion", type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var int * * @ORM\Column(name="id_product_comment_criterion_type", type="integer") */ private $type; /** * @var bool * * @ORM\Column(name="active", type="boolean") */ private $active = false; /** * @var array * * @deprecated 7.0.0 - use criterionLangs instead */ private $names; /** * @ORM\OneToMany(targetEntity="PrestaShop\Module\ProductComment\Entity\ProductCommentCriterionLang", cascade={"persist", "remove"}, mappedBy="productcommentcriterion") */ private $criterionLangs; /** * @var array * * @todo implement as ORM\OneToMany in the future */ private $categories; /** * @var array * * @todo implement as ORM\OneToMany in the future */ private $products; public function __construct() { $this->criterionLangs = new ArrayCollection(); } /** * @return ArrayCollection */ public function getCriterionLangs() { return $this->criterionLangs; } /** * @return ProductCommentCriterionLang|null */ public function getCriterionLangByLangId(int $langId) { foreach ($this->criterionLangs as $criterionLang) { if ($langId === $criterionLang->getLang()->getId()) { return $criterionLang; } } return null; } public function addCriterionLang(ProductCommentCriterionLang $criterionLang): self { $criterionLang->setProductCommentCriterion($this); $this->criterionLangs->add($criterionLang); return $this; } public function getCriterionName(): string { if ($this->criterionLangs->count() <= 0) { return ''; } $criterionLang = $this->criterionLangs->first(); return $criterionLang->getName(); } /** * @return array * * @deprecated 7.0.0 - migrated to Form\ProductCommentCriterionFormDataProvider */ public function getNames() { return $this->names; } /** * @param array $langNames * * @return ProductCommentCriterion * * @deprecated 7.0.0 */ public function setNames($langNames) { $this->names = $langNames; return $this; } /** * @return array */ public function getCategories() { return $this->categories; } /** * @param array $selectedCategories */ public function setCategories($selectedCategories): self { $this->categories = $selectedCategories; return $this; } /** * @return array */ public function getProducts() { return $this->products; } /** * @param array $selectedProducts */ public function setProducts($selectedProducts): self { $this->products = $selectedProducts; return $this; } public function getId(): int { return $this->id; } public function getType(): int { return $this->type; } public function setType(int $type): self { $this->type = $type; return $this; } public function isActive(): bool { return $this->active; } public function setActive(bool $active): self { $this->active = $active; return $this; } public function isValid(): bool { foreach ($this->criterionLangs as $criterionLang) { if (!Validate::isGenericName($criterionLang->getName())) { return false; } } return true; } }