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 .= '