name = 'imaxaddcatbyfeature'; $this->tab = 'administration'; $this->version = '1.1'; $this->author = 'Informax'; $this->need_instance = 0; $this->idManual = ''; $this->forceCheck = 0; $this->sufijo = self::prefijo; parent::__construct(); $this->displayName = $this->l('Informax add to category by feature'); $this->description = $this->l('Informax add to category by feature'); if (version_compare(_PS_VERSION_, '1.7.0.0 ', '>=')) { $this->versionPS = 17; $context = Context::getContext(); $this->idShop = $context->shop->id; $this->idLang = $context->language->id; } elseif (version_compare(_PS_VERSION_, '1.6.0.0 ', '>=')) { $this->versionPS = 16; $context = Context::getContext(); $this->idShop = $context->shop->id; $this->idLang = $context->language->id; } elseif (version_compare(_PS_VERSION_, '1.5.0.0 ', '>=')) { $this->versionPS = 15; $context = Context::getContext(); $this->idShop = $context->shop->id; $this->idLang = $context->language->id; } else { $this->_html .= $this->l("La version minima de funcionamiento para nuestros modulos es la 1.5"); } } public function install() { $directorioAdmin = getcwd(); if (is_file(dirname(__FILE__) . '/' . $this->name . '_cron.php') && !@copy(dirname(__FILE__) . '/imaxaddcatbyfeature_cron.php', $directorioAdmin . '/imaxaddcatbyfeature_cron.php')) { $this->_errors[] = $this->l('Ha fallado al copiar el fichero de cron'); return false; } if (is_file(dirname(__FILE__) . '/' . $this->name . '_cron.php.imax') && !@copy(dirname(__FILE__) . '/imaxaddcatbyfeature_cron.php.imax', $directorioAdmin . '/imaxaddcatbyfeature_cron.php.imax')) { $this->_errors[] = $this->l('Ha fallado al copiar el fichero de cron ofuscado'); return false; } include(dirname(__FILE__) . '/configuration.php'); foreach ($configuracion AS $indice => $valor) { if (!Configuration::updateGlobalValue($indice, $valor)) { return false; } } if (!parent::install()) return false; foreach ($hooks as $hook) { if (!$this->registerHook($hook)) { $this->_errors[] = $this->l('Ha fallado la instalacion del hook:') . ' ' . $hook; return false; } } include(dirname(__FILE__) . '/sql-install.php'); foreach ($sql as $s) { if (!Db::getInstance()->execute($s)) { $this->_errors[] = $this->l("Error al ejecutar") . $s; return false; } } if (!$this->installTab()) { $this->_errors[] = $this->l('Error al instalar el tab'); return false; } return true; } public function uninstall() { if (!parent::uninstall()) { return false; } include(dirname(__FILE__) . '/sql-unninstall.php'); foreach ($sql as $s) { if (!Db::getInstance()->execute($s)) { $this->_errors[] = $this->l("Error al ejecutar") . $s; return false; } } $directorioAdmin = getcwd(); if (!unlink($directorioAdmin . '/imaxaddcatbyfeature_cron.php')) { $this->_errors[] = $this->l('Error al borrar el fichero de Cron'); return false; } if (!$this->uninstallTab()) { $this->_errors[] = $this->l('Error al eliminar el tab'); return false; } include(dirname(__FILE__) . '/configuration.php'); foreach ($configuracion AS $indice => $valor) { if (Configuration::getGlobalValue($indice) !== FALSE) { if (!Configuration::deleteByName($indice)) { return false; } } } return true; } public function getContent() { $this->getTxtFiles(); $this->addCSS('css.css'); //$this->addJS('jquery.dynatree.min.js'); $this->addJS('functions.js'); $this->addCSS('../skin/ui.dynatree.css'); $this->addCSS('publi.css'); $this->_html .= $this->createHelpHeader(); if (!empty($_POST)) $this->_html .= $this->_postProcess(); $this->_displayForm(); $this->_html .= $this->getModuleFooter(); return $this->_html; } private function _postProcess() { $accion = Tools::getValue("accion"); $this->idTab = Tools::getValue("idTab"); $html = ""; switch ($accion) { case 'gestionLicencia': $this->forceCheck = 1; if (Configuration::updateGlobalValue(self::prefijo . 'LICENCIA', trim(Tools::getValue('licencia')))) { $html .= $this->displayConfirmation($this->l('Licencia guardada correctamente.')); } else { $html .= $this->displayError($this->l('Ha ocurrido un error al guardar la licencia.')); } break; case 'configuracion': if (Configuration::updateGlobalValue(self::prefijo . 'DIAS_NOVEDAD', trim(Tools::getValue('diasNovedad', 7))) && Configuration::updateGlobalValue(self::prefijo . 'CATS_NOVEDAD', serialize(explode(',', Tools::getValue('catList'))))) { $html .= $this->displayConfirmation($this->l('Configuracion guardada correctamente.')); } else { $html .= $this->displayError($this->l('Ha ocurrido un error al guardar la configuracion.')); } break; default: break; } return $html; } public function _displayForm() { return $this->displayFormTrait(array('_configuracion' => $this->l('Configuracion'), '_mostrarLicencia' => $this->l('Licencia')), ''); } private function _mostrarLicencia() { return $this->mostrarLicenciaTrait(2); } private function _configuracion() { include_once(dirname(__FILE__) . '/functionsForm.php'); include_once(dirname(__FILE__) . '/imaxAcordeon.php'); $diasNovedad = Configuration::getGlobalValue(self::prefijo . 'DIAS_NOVEDAD'); $catsNovedad = unserialize(Configuration::getGlobalValue(self::prefijo . 'CATS_NOVEDAD')); $token = Configuration::getGlobalValue(self::prefijo . 'TOKEN'); $arbol = ''; // $acordeon = new imaxAcordeon($this->_path); $form = new imaxForm($this, $this->_path); $form->createHidden("accion", "configuracion"); $form->createHidden("idTab", "1"); $form->createHidden("catList", ""); $form->addToForm($this->l('Buscador:') .$this->crearSelectCategorias()); $form->createSubmitButton('opcionesConfiguracion', $this->l('Guardar')); $html = $acordeon->renderAcordeon($this->l('Configuracion'), $form->renderForm()); unset($form); $form = new imaxForm($this, $this->_path); $form->createHidden("accion", "generar_token"); $form->createHidden("idTab", "1"); $text = '' . $this->l('ATENCION:') . ' ' . $this->l('Si cambia el token, tiene que cambiarlo tambien en las tareas de cron'); $form->createFormInfomationText($text); $urlTienda = self::getUrlAdmin(); $form->createFormInfomationText($this->l('Debe enviar por get a la url de servicio, ya sea con curl o wget el que soporte su servidor, con esta opción se cambian todos los productos independientemente de si usa o no un actualizador de productos')); $url = '' . $urlTienda . $this->name . '_cron.php?token=' . $token . ''; $form->createFormInfomationText($url); $form->createSubmitButton('opcionesConfiguracion', $this->l('Regenerar Token')); $html .= $acordeon->renderAcordeon($this->l('Tareas Cron'), $form->renderForm()); return $html; } /** * Devuelve las funciones especificas del modulo. * @return FuncionesImaxNovedades */ public function getFunciones() { if (!self::$funciones) { self::$funciones = new FuncionesImaxAddCatbyFeature($this); } return self::$funciones; } public function hookActionObjectProductAddAfter($params) { //Si el producto es nuevo le agregamos categorias $cats = unserialize(Configuration::getGlobalValue(self::prefijo . 'CATS_NOVEDAD')); die(); /* if($cats && time() - strtotime($params['object']->date_add) <= Configuration::getGlobalValue(self::prefijo.'DIAS_NOVEDAD') * 3600) { $this->getFunciones()->agregarCategorias($params['object'], $cats); } */ } /** * Elimina las categorias agregadas a los productos que ya no son novedad. * @return int La cantidad de productos procesados. */ /* public function procesar() { $dias = (int)Configuration::getGlobalValue(self::prefijo.'DIAS_NOVEDAD'); $productos = Db::getInstance()->executeS(' SELECT DISTINCT m.id_product FROM `'._DB_PREFIX_.self::prefijo.'movimiento` m INNER JOIN `'._DB_PREFIX_."product` p ON m.id_product = p.id_product WHERE DATEDIFF(NOW(), date_add) > $dias"); foreach($productos as $producto) { $this->getFunciones()->deshacerMovimientos(new Product($producto['id_product'])); } return count($productos); } */ public function procesar() { if (!function_exists('procesar_')) { $function = $this->getFunction(); eval(gzuncompress(base64_decode($function))); } if (function_exists('procesar_')) { return procesar_($this); } echo $this->l('Este modulo no tiene una licencia valida: ') . $this->name; echo '
'; echo $this->l('Contacte con nosotros para obtener una licencia valida'); die(); } public function l($msg, $modulo = '', $locale = null) { if ($modulo == '') { $modulo = 'traducciones' . strtolower($this->name); } return parent::l($msg, $modulo, $locale); } /** * Devuelve el formulario para los criterios de desactivacion. * @param int $idTab * @return imaxForm */ public function getFormCriteriosNovedades($idTab) { //Datos para js $caracteristicas = Feature::getFeatures($this->idLang); $caracteristicasFormateadas = array(0 => $this->modulo->l('- Seleccione uno -')); $valoresCaracteristicaFormateados = array(); foreach ($caracteristicas as $caracteristica) { $caracteristicasFormateadas[$caracteristica['id_feature']] = $caracteristica['name']; $valoresCaracteristica = FeatureValue::getFeatureValuesWithLang($this->idLang, $caracteristica['id_feature']); if ($valoresCaracteristica) { foreach ($valoresCaracteristica as $valorCaracteristica) { if (!isset($valoresCaracteristicaFormateados[$caracteristica['id_feature']])) { $valoresCaracteristicaFormateados[$caracteristica['id_feature']] = array(0 => $this->modulo->l('- Seleccione uno -')); } $valoresCaracteristicaFormateados[$caracteristica['id_feature']][$valorCaracteristica['id_feature_value']] = $valorCaracteristica['value']; } } else { $valoresCaracteristicaFormateados[$caracteristica['id_feature']] = array(0 => $this->modulo->l('- Seleccione uno -')); } } $cats = $form = new imaxForm($this, $this->modulo->getPathUri()); $form->createHidden("accion", "configurarCriteriosNovedad"); $form->createHidden("idTab", $idTab); $form->createFormTextGroup('numDiasNovedad', $numDiasNovedad, $this->modulo->l('Numero de dias a restar para los productos no nuevos')); // $form->addToForm($this->crearSelectCategorias()); /* $form->addToForm('
' . $this->modulo->l('Caracteristica') . '' . $this->modulo->l('Valor caracteristica') . '' . $this->modulo->l('Accion') . '
'); */ $form->createButton('agregarCriterioNovedad', $this->modulo->l('Nuevo')); $form->createSubmitButton('save', $this->modulo->l('Guardar')); return $form; } /** * Devuelve el html de las option de categorias. * @return string */ public function crearSelectCategorias() { $html = ''; //$html .= ''; $num = 0; $categorias = $this->getHomeCategories($this->idLang); foreach ($categorias AS $categoria) { $html .= ''; $this->getHijos($categoria, $html, $this->idLang, $num); } return $html; } private function getHijos($categoria, &$html, $id_lang = 1, &$num) { $numInterno = $num; $sqlHijos = "SELECT DISTINCT c.id_category, c.id_parent, cl.name FROM " . _DB_PREFIX_ . "category AS c INNER JOIN " . _DB_PREFIX_ . "category_lang AS cl ON cl.id_category = c.id_category AND cl.id_lang = " . $this->idLang . " AND cl.id_shop = c.id_shop_default WHERE c.id_parent=" . $categoria['id_category'] . " AND c.id_shop_default = " . $this->idShop; $categoriasHijos = Db::getInstance()->executeS($sqlHijos); $num++; foreach ($categoriasHijos AS $categoriaHijo) { $html .= "'; $objRespueta = $this->getHijos($categoriaHijo, $html, $id_lang, $num); } $num = $numInterno; } public function getHomeCategories($id_lang, $id_shop = false, $active = true) { if (!Validate::isBool($active)) die(Tools::displayError()); $query = 'SELECT ' . ' c.`id_category`, cl.`name`, cl.`link_rewrite`, cs.`id_shop` ' . ' FROM ' . ' `' . _DB_PREFIX_ . 'category` c ' . ' LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ' . ' ON (c.`id_category` = cl.`id_category`) ' . ' INNER JOIN `' . _DB_PREFIX_ . 'category_shop` cs ' . ' ON (cs.`id_category` = c.`id_category` ) ' . ' WHERE ' . ' `id_lang` = ' . $id_lang . ' ' . ($id_shop ? ' AND cs.id_shop=' . $id_shop : ' ') . ' AND c.`is_root_category` = 1 ' . ' AND `active` = ' . $active . ' GROUP BY c.`id_category` ' . ' ORDER BY cs.`position` ASC '; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); return $result; } }