Files
xstore/inc/Hura8/Components/Product/AdminController/AProductAttributeController.php

166 lines
5.8 KiB
PHP
Raw Normal View History

2025-10-04 11:46:59 +07:00
<?php
namespace Hura8\Components\Product\AdminController;
use Hura8\System\Controller\aAdminEntityBaseController;
use Hura8\Components\Product\Model\ProductAttributeLanguageModel;
use Hura8\Components\Product\Model\ProductAttributeModel;
use Hura8\Components\Product\Model\ProductAttributeValueModel;
use Hura8\System\Security\DataClean;
use Hura8\System\Security\DataType;
class AProductAttributeController extends aAdminEntityBaseController
{
/* @var ProductAttributeModel $objProductAttributeModel */
protected $objProductAttributeModel;
/* @var ProductAttributeLanguageModel $objProductAttributeLanguageModel */
protected $objProductAttributeLanguageModel;
protected $view_language = LANGUAGE;
public function __construct()
{
$this->objProductAttributeModel = new ProductAttributeModel();
if(!$this->isDefaultLanguage()) {
$this->objProductAttributeLanguageModel = new ProductAttributeLanguageModel($this->view_language);
//$this->objProductAttributeLanguageModel->createTableLang();
parent::__construct($this->objProductAttributeModel, $this->objProductAttributeLanguageModel);
}else{
parent::__construct($this->objProductAttributeModel);
}
}
public function getProductAttributes($product_id) {
$objProductAttributeValueModel = new ProductAttributeValueModel(0);
$result = [];
foreach ($objProductAttributeValueModel->getProductAttributes($product_id) as $info) {
$result[$info['attr_id']][] = $info['attr_value_id'];
}
return $result;
}
public function updateProductAttributes($product_id, array $current_value, array $new_value) {
/*
$current_value => Array
(
// attribute_id => [value1, value2]
[2] => Array
(
[0] => 2
[1] => 3
)
[1] => Array
(
[0] => 1
)
)
$new_value => Array
(
// attribute_id => new_str_values by lines
[2] => asdas
[1] => asda
)
* */
// list of values for product
$product_value_ids = [];
// use current values
foreach ($current_value as $_attr_id => $_value_ids) {
$product_value_ids = array_merge($product_value_ids, $_value_ids);
}
// create new values for attributes
foreach ($new_value as $_attr_id => $_value_text) {
$new_value_texts = array_filter(explode("\n", $_value_text));
foreach ($new_value_texts as $new_value) {
// if exist
$check_exist = $this->getValueByTitle($_attr_id, $new_value);
if($check_exist) {
$product_value_ids[] = $check_exist['id'];
}else{
$try_create_id = $this->addValue($_attr_id, ['title' => $new_value]);
if($try_create_id) $product_value_ids[] = $try_create_id;
}
}
}
$objProductAttributeValueModel = new ProductAttributeValueModel(0);
return $objProductAttributeValueModel->updateProductAttributes($product_id, $product_value_ids);
}
public function updateAttributeInSpecGroup($group_id, $attr_id, array $info) {
$this->objProductAttributeModel->updateAttributeInSpecGroup($group_id, $attr_id, $info);
}
public function removeAttributeFromSpecGroup($group_id, $attr_id) {
$this->objProductAttributeModel->removeAttributeFromSpecGroup($group_id, $attr_id);
}
public function addAttributeToSpecGroup($group_id, $attr_id, $ordering) {
$this->objProductAttributeModel->addAttributeToSpecGroup($group_id, $attr_id, $ordering);
}
public function updateAttributeInCategory($cat_id, $attr_id, array $info) {
$this->objProductAttributeModel->updateAttributeInCategory($cat_id, $attr_id, $info);
}
public function removeAttributeFromCategory($cat_id, $attr_id) {
$this->objProductAttributeModel->removeAttributeFromCategory($cat_id, $attr_id);
}
public function addAttributeToCategory($cat_id, $attr_id, $ordering) {
$this->objProductAttributeModel->addAttributeToCategory($cat_id, $attr_id, $ordering);
}
public function getAllAtributes() {
return $this->objProductAttributeModel->getList(["numPerPage" => 2000]);
}
public function deleteValue($attr_id, $value_id) {
$objProductAttributeValueModel = new ProductAttributeValueModel($attr_id);
return $objProductAttributeValueModel->delete($value_id);
}
public function updateValue($attr_id, $value_id, array $info) {
$objProductAttributeValueModel = new ProductAttributeValueModel($attr_id);
return $objProductAttributeValueModel->updateFields($value_id, $info);
}
public function getValueByTitle($attr_id, $value_title) {
$objProductAttributeValueModel = new ProductAttributeValueModel($attr_id);
$filter_code = DataClean::makeInputSafe($value_title, DataType::ID);
return $objProductAttributeValueModel->getInfoByCode($filter_code);
}
public function addValue($attr_id, array $info) {
$objProductAttributeValueModel = new ProductAttributeValueModel($attr_id);
return $objProductAttributeValueModel->create($info);
}
public function getListAttributeValues($attr_id) {
$objProductAttributeValueModel = new ProductAttributeValueModel($attr_id);
return $objProductAttributeValueModel->getList(['numPerPage' => 200]);
}
protected function deleteFileBeforeDeleteItem($item_id): bool
{
return true;
}
}