FuncionesImaxAddCatbyFeature.php
3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
class FuncionesImaxAddCatbyFeature {
private $modulo;
public function __construct($modulo) {
$this->modulo = $modulo;
}
/**
* Agrega al producto las categorias pasadas.
* @param Product $producto
* @param int[] $categorias
*/
public function agregarCategorias($producto, $categorias) {
$categoriasActuales = $producto->getCategories();
$nuevasCategorias = array_diff($categorias, $categoriasActuales);
foreach($nuevasCategorias as $categoria) {
$this->guardarMovimiento($producto->id, $categoria);
}
$producto->addToCategories($nuevasCategorias);
}
/**
* Anota una nueva categoria de producto.
* @param int $id_product
* @param int $id_category
* @return boolean
*/
private function guardarMovimiento($id_product, $id_category) {
$id_product = (int)$id_product;
$id_category = (int)$id_category;
return Db::getInstance()->execute('INSERT IGNORE INTO `'._DB_PREFIX_.$this->modulo->sufijo."movimiento` (id_product, id_category) VALUES ('$id_product', '$id_category')");
}
/**
* Devuelve los ids de categoria a los que el producto fue agregado.
* @param int $id_product
* @return int[]
*/
private function cargarMovimientos($id_product) {
$id_product = (int)$id_product;
$movimientos = Db::getInstance()->executeS('SELECT id_category FROM `'._DB_PREFIX_.$this->modulo->sufijo."movimiento` WHERE id_product = '$id_product'");
return array_column($movimientos, 'id_category');
}
/**
* Elimina los movimientos de un producto.
* @param int $id_product
* @return boolean
*/
private function eliminarMovimientos($id_product) {
$id_product = (int)$id_product;
return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.$this->modulo->sufijo."movimiento` WHERE id_product = '$id_product'");
}
/**
* Quita al producto las categorias agregadas.
* @param Product $producto
*/
public function deshacerMovimientos($producto) {
$idsCategoria = $this->cargarMovimientos($producto->id);
$num = count($idsCategoria);
foreach($idsCategoria as $clave => $idCategoria) {
$producto->deleteCategory($idCategoria, ($clave == $num - 1));
}
$this->eliminarMovimientos($producto->id);
}
/**
* Monta una lista de categorias recursivamente.
* @param array $categoria
* @param string $html
* @param int[] $categoriasSeleccionada
*/
public function getHijosLista($categoria, &$html, $categoriasSeleccionada) {
$categoriasHijos = Category::getChildren($categoria['id_category'], $this->modulo->idLang);
if (count($categoriasHijos)) {
$html .= '<ul>';
foreach ($categoriasHijos AS $categoriaHijo) {
if (in_array($categoriaHijo['id_category'], $categoriasSeleccionada)) {
$seleccionada = 'class="selected"';
}
else {
$seleccionada = '';
}
$html .= "<li id='{$categoriaHijo['id_category']}' $seleccionada>{$categoriaHijo['name']}";
$this->getHijosLista($categoriaHijo, $html, $categoriasSeleccionada);
$html .= '</li>';
}
$html .= '</ul>';
}
}
}