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