File "Utils.class.php"
Full path: /home/dora/public_html/wp-content/plugins/woocommerce-bsalev2/lib/Utils.class.php
File size: 62.41 KB
MIME-type: --
Charset: utf-8
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
require_once dirname(__FILE__) . '/Autoload.php';
/**
* Description of Utils
*
* @author angelorum
*/
class Utils
{
/**
* deveulve listado de estados para pedidos de woocommerce
* @param type $skip_prefix: si es tru, va a devolver sin el 'wc-' al inicio
* @return type
*/
public function woocommerce_get_order_statuses($skip_prefix = false)
{
$order_statuses = wc_get_order_statuses();
// $order_statuses = get_terms('shop_order_status', array( 'hide_empty' => false ));
$statuses = array();
foreach( $order_statuses as $slug => $name )
{
//excluyo draft
if( strcasecmp($name, 'draft') == 0 )
{
continue;
}
if( $skip_prefix )
{
$slug = str_replace('wc-', '', $slug);
}
$statuses[$slug] = $name;
}
return $statuses;
}
/**
* devuelve ip remota del cliente
* @return type
*/
public function get_remote_ip()
{
//whether ip is from share internet
if( !empty($_SERVER['HTTP_CLIENT_IP']) )
{
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
}
//whether ip is from proxy
elseif( !empty($_SERVER['HTTP_X_FORWARDED_FOR']) )
{
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
//whether ip is from remote address
else
{
$ip_address = $_SERVER['REMOTE_ADDR'];
}
return $ip_address;
}
/**
* devuelve array con información de la ip del cliente
* @return type
*/
public function get_remote_ip_arr()
{
$arr_info = array();
$arr_info['HTTP_CLIENT_IP'] = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : '';
$arr_info['HTTP_X_FORWARDED_FOR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
$arr_info['REMOTE_ADDR'] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
return $arr_info;
}
public function remove_emoji($string)
{
// Match Emoticons
$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $string);
// Match Miscellaneous Symbols and Pictographs
$regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clear_string = preg_replace($regex_symbols, '', $clear_string);
// Match Transport And Map Symbols
$regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
$clear_string = preg_replace($regex_transport, '', $clear_string);
// Match Miscellaneous Symbols
$regex_misc = '/[\x{2600}-\x{26FF}]/u';
$clear_string = preg_replace($regex_misc, '', $clear_string);
// Match Dingbats
$regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
$clear_string = preg_replace($regex_dingbats, '', $clear_string);
return $clear_string;
}
/**
* devuelve el modo de pago Bsal para cada medio de pago de WP
* se pueden sobreescribir los valores en utils, par ano afectar WpBsale
* @param type $order_id
* @param type $tipo_pago
* @param type $gmt_date
* @param type $tipo_docto
* * @param type $total_neto_calculado no se usa
* @return type
*/
public function get_modo_pago_wp($order_id, $tipo_pago, $gmt_date, $tipo_docto, $total_productos_ml = 0)
{
$order = wc_get_order($order_id);
$order_total = $order->get_total(); //con impuesto
//no inlcuir shipping in dte?
if( !Funciones::is_add_shipping_in_dte() )
{
//shipping
$costo_envio = $order->get_total_shipping();
$impuesto_envio = $order->get_shipping_tax();
//en la realidad, este es el precio cvon impuesto
$neto_envio = $costo_envio - $impuesto_envio;
//resto shipping
$order_total -= $neto_envio;
}
//SI EXISTE MEDIO DE PAGO GLOBAL
if( $tipo_docto === 'b' && defined('WC_MEDIO_PAGO_BOLETA') && WC_MEDIO_PAGO_BOLETA > 0 )
{
$modo_pago_id = WC_MEDIO_PAGO_BOLETA;
}
else if( $tipo_docto === 'f' && defined('WC_MEDIO_PAGO_FACTURA') && WC_MEDIO_PAGO_FACTURA > 0 )
{
$modo_pago_id = WC_MEDIO_PAGO_FACTURA;
}
else
{
$arr_pagos = $this->get_array_medios_pago();
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($arr_pagos, "Utils->get_modo_pago_wp($order_id, $tipo_pago, $gmt_date, $tipo_docto), pagos arr");
}
if( isset($arr_pagos[$tipo_pago]) )
{
$modo_pago_id = $arr_pagos[$tipo_pago];
}
else
{
//busco default
$default = isset($arr_pagos['default']) ? $arr_pagos['default'] : 10; //bsale webpay
$modo_pago_id = $default;
}
}
//mercado libroe, boletas deben ser por subtotal
if( $total_productos_ml > 0 )
{
$order_total = $total_productos_ml;
}
$arr_pagos_bsale = array();
$arr_pagos_bsale[] = array(
'paymentTypeId' => $modo_pago_id,
'amount' => $order_total,
'recordDate' => $gmt_date );
return $arr_pagos_bsale;
}
/**
* devuelve array[id pago wc]=>id pago bsale asociado
*/
public function get_array_medios_pago()
{
$pagos_arr = Funciones::get_wc_pagos_bsale();
if( empty($pagos_arr) )
{
return array();
}
//separo en lineas
$lineas_arr = explode("\n", $pagos_arr);
if( isset($_REQUEST['test_dte']) )
{
//Funciones::print_r_html($lineas_arr, "Utils->get_array_medios_pago(), arr:");
}
$pagos_arr_formatted = array();
//separo en clave=valor
foreach( $lineas_arr as $l )
{
$arraux = explode('=', $l);
//solo se permite: id=id
if( count($arraux) != 2 )
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("Utils->get_array_medios_pago(),linea '$l' tienemas de dos xx=yyy, se omite ");
}
continue;
}
//wc id es string
$wc_pago_id = trim($arraux[0]);
//bsale id es int
$bsale_pago_id = (int) trim($arraux[1]);
if( $bsale_pago_id <= 0 )
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($pagos_arr, "Utils->get_array_medios_pago(), bsale pago id " . $arraux[1] .
" es menor a cero: $bsale_pago_id, se omite ");
}
continue;
}
if( isset($_REQUEST['test_dte']) )
{
//Funciones::print_r_html($pagos_arr_formatted, "Utils->get_array_medios_pago(), agrego [$wc_pago_id] = $bsale_pago_id");
}
$pagos_arr_formatted[$wc_pago_id] = $bsale_pago_id;
}
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($pagos_arr_formatted, "Utils->get_array_medios_pago(), resultado");
}
return $pagos_arr_formatted;
}
/**
* devuelve array[titulo shipping wc]=>id sucursal bsale asociada
* param: $tienda_retiro solo devuelve esta tienda
*/
public function get_array_medios_envio($tienda_retiro = null)
{
//solo si esta funcion está activada
/* if( !Funciones::is_enabled_shipping_filter_stock() )
{
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("Utils->get_array_medios_envio() !Funciones::is_enabled_shipping_filter_stock() es false, devuelve array vacio");
}
return array();
} */
$pagos_arr = Funciones::get_wc_shipping_bsale();
if( empty($pagos_arr) )
{
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("Utils->get_array_medios_envio() no hay medios de enviko asociados a sucursales, devuelve array vacio");
}
return array();
}
//separo en lineas
$lineas_arr = explode("\n", $pagos_arr);
if( isset($_REQUEST['test_dte']) )
{
//Funciones::print_r_html($lineas_arr, "Utils->get_array_medios_envio(), arr:");
}
$pagos_arr_formatted = array();
//separo en clave=valor
foreach( $lineas_arr as $l )
{
$arraux = explode('=', $l);
//solo se permite: id=id
if( count($arraux) != 2 )
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("Utils->get_array_medios_envio(),linea '$l' tienemas de dos xx=yyy, se omite ");
}
continue;
}
//wc id es string
$wc_pago_id = trim($arraux[0]);
$wc_pago_id = $this->filter_chars($wc_pago_id);
$wc_pago_id = strtolower($wc_pago_id);
//bsale id es int
$bsale_pago_id = (int) trim($arraux[1]);
if( $bsale_pago_id <= 0 )
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($pagos_arr, "Utils->get_array_medios_envio(), bsale pago id " . $arraux[1] .
" es menor a cero: $bsale_pago_id, se omite ");
}
continue;
}
if( isset($_REQUEST['test_dte']) )
{
//Funciones::print_r_html($pagos_arr_formatted, "Utils->get_array_medios_envio(), agrego [$wc_pago_id] = $bsale_pago_id");
}
//si se indicó tienda, solo agrego esta tienda al array
if( !empty($tienda_retiro) )
{
if( $tienda_retiro === $wc_pago_id )
{
$pagos_arr_formatted[$wc_pago_id] = $bsale_pago_id;
break;
}
else
{
continue;
}
}
$pagos_arr_formatted[$wc_pago_id] = $bsale_pago_id;
}
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($pagos_arr_formatted, "Utils->get_array_medios_envio(), resultado");
}
return $pagos_arr_formatted;
}
public function get_sucursal_retiro_tienda($order_id, $shipping_name)
{
$retiro_tienda_name = defined('RETIRO_TIENDA_STRING') ? trim(RETIRO_TIENDA_STRING) : '';
$retiro_tienda_name = $this->filter_chars($retiro_tienda_name);
$retiro_tienda_name = strtolower($retiro_tienda_name);
if( empty($retiro_tienda_name) )
{
return -1;
}
//saco el $0
$retiro_tienda_name = str_replace('$0', '', $retiro_tienda_name);
$shipping_name = str_replace('$0', '', $shipping_name);
$shipping_name = trim($shipping_name);
$retiro_tienda_name = trim($retiro_tienda_name);
//si este pedido no tiene envio
if( empty($shipping_name) )
{
return -1;
}
//solo medios de envio que se llamen asçi
if( strpos($retiro_tienda_name, $shipping_name) === false )
{
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("get_sucursal_retiro_tienda('$shipping_name'), no es '$retiro_tienda_name', se omite."
. "Resultado comparación= " . strpos($retiro_tienda_name, $shipping_name));
}
return -1;
}
else
{
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("get_sucursal_retiro_tienda('$shipping_name'), sí es '$retiro_tienda_name");
}
}
$tienda_retiro = get_post_meta($order_id, '_shipping_pickup_stores', true);
if( empty($tienda_retiro) )
{
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("get_sucursal_retiro_tienda($shipping_name), tienda de retiro '$tienda_retiro' vacía, se omite");
return -1;
}
}
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html("get_sucursal_retiro_tienda($shipping_name), SÍ es 'retiro en tienda: $0', busco tienda asociada: '$tienda_retiro'");
}
$tienda_retiro = $this->filter_chars($tienda_retiro);
$tienda_retiro = strtolower($tienda_retiro);
//ahora que tengo la tienda de retiro, busco sucursal Bsale asociada
return $tienda_retiro;
}
/**
* implode un array multidimensional
* @param type $delim
* @param type $array_multi
*/
public function implode_array($array_multi, $delim_indices = ',', $delim_rows = "\n")
{
$str = '';
foreach( $array_multi as $arr )
{
if( is_array($arr) )
{
$str .= implode($delim_indices, $arr) . "$delim_rows";
}
else
{
$str .= $arr . "$delim_rows";
}
}
return $str;
}
/**
* string to slug
* @param type $string
* @return type
*/
public function slugify($string)
{
return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string), '-'));
}
public function get_perfume_genero($perfume)
{
//genero por default
$genero = '';
//es de hombre?
$findme = '(H)';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$genero = 'Hombre';
return $genero;
}
//es de mujer
$findme = '(M)';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$genero = 'Mujer';
return $genero;
}
//es unisex
$findme = '(U)';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$genero = 'Unisex';
return $genero;
}
return $genero;
}
public function get_perfume_tipo($perfume)
{
//tipo por default
$tipo = '';
$tipo_arr = array();
$findme = 'Tester';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Tester ';
}
$findme = 'Body Mist';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Splash ';
}
$findme = 'Splash';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Splash ';
}
$findme = 'Set';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Set ';
}
$findme = '+';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Set ';
}
$findme = 'estuche';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Set ';
}
$findme = 'miniaturas';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Set ';
}
$findme = 'Crema';
$pos = stripos($perfume, $findme);
if( $pos !== false )
{
$tipo_arr[] = 'Crema ';
}
//remuevo duplicados
$tipo_arr_unique = array_unique($tipo_arr);
//a string
$tipo = implode(', ', $tipo_arr_unique);
return $tipo;
}
/**
* saca tildes y eñes
* @param type $string
*/
public function filter_chars($cadena)
{
if(empty($cadena))
{
return $cadena;
}
//Reemplazamos la A y a
$cadena = str_replace(
array( 'Á', 'À', 'Â', 'Ä', 'á', 'à', 'ä', 'â', 'ª' ), array( 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a' ), $cadena
);
//Reemplazamos la E y e
$cadena = str_replace(
array( 'É', 'È', 'Ê', 'Ë', 'é', 'è', 'ë', 'ê' ), array( 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e' ), $cadena);
//Reemplazamos la I y i
$cadena = str_replace(
array( 'Í', 'Ì', 'Ï', 'Î', 'í', 'ì', 'ï', 'î' ), array( 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i' ), $cadena);
//Reemplazamos la O y o
$cadena = str_replace(
array( 'Ó', 'Ò', 'Ö', 'Ô', 'ó', 'ò', 'ö', 'ô' ), array( 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o' ), $cadena);
//Reemplazamos la U y u
$cadena = str_replace(
array( 'Ú', 'Ù', 'Û', 'Ü', 'ú', 'ù', 'ü', 'û' ), array( 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u' ), $cadena);
//Reemplazamos la N, n, C y c
$cadena = str_replace(
array( 'Ñ', 'ñ', 'Ç', 'ç', '\'', "’" ), array( 'N', 'n', 'C', 'c', '', '' ), $cadena
);
return $cadena;
}
/**
* crea un csv y lo guarda en el file indicado
* @param type $array_datos
*/
public function csv_crear($array_datos, $file_output)
{
unset($array_datos['proveedor_items']);
Funciones::print_r_html($array_datos, "csv_crear en '$file_output'");
//"2.- csv, debo confirmar con el proveedor que va en el campo centro de costo.
//por ahora pon el nombre y teléfono de quien hace el pedido mas los comentarios del pedido."
$centro_costo = 0; //siempre cero
//direccion del comprador
$direcion = $array_datos['client']['address'];
$rut = $array_datos['client']['code'];
$nombre_cliente = substr($array_datos['client']['firstName'] . ' '
. $array_datos['client']['lastName'], 0, 40);
$direccion2 = substr($direcion, 0, 125);
$comuna = substr($array_datos['client']['municipality'], 0, 18);
$ciudad = substr($array_datos['client']['city'], 0, 18);
$fono = substr($array_datos['client']['phone'], 0, 13);
//creo array para el csv
$array_csv = array();
//rut super facil, 3 cols by line
// $linea = array( CSV_RUT_EMPRESA );
//$array_csv[] = $linea;
//centro de costo
//$linea = array( $centro_costo );
// $array_csv[] = $linea;
//direccion de superfacil
// $linea = array( $this->filter_chars(CSV_DIRECCION_EMPRESA) );
// $array_csv[] = $linea;
//hora
//$linea = array( date('H:i:s') );
// $array_csv[] = $linea;
//marca y //datos del cliente
//Nombre (40chrs), Dirección (125chrs), comuna (18chrs), ciudad (18chrs), telefono (13chrs)
$linea = array( $rut, $nombre_cliente, $direccion2, $comuna, $ciudad, $fono );
$array_csv[] = $linea;
//Listado de productos
foreach( $array_datos['items'] as $p )
{
$sku = $p['code'];
$precio_neto = $p['netUnitValue'];
$qty = $p['quantity'];
$costo_unitario = $p['costo_unitario'];
//add costo unitario a csv de respaldo, 14-09-2020
$linea = array( $sku, $qty, $precio_neto, $costo_unitario );
$array_csv[] = $linea;
}
//ahora, creo el csv
$fp = fopen($file_output, 'w');
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html($array_csv, "Utils->csv_crea() para file '$file_output', test dte no escriber archivo");
return false;
}
foreach( $array_csv as $campos )
{
$campos2 = str_replace(',', ' ', $campos);
$linea = implode(',', $campos2) . "\n";
fwrite($fp, $linea);
//fputcsv($fp, $campos);
}
fclose($fp);
return true;
}
/**
* crea un csv por proveedor y lo guarda en el file indicado
* @param type $array_datos
*/
public function csv_crear_proveedor($array_datos, $file_output)
{
$utils = new Utils();
$arr_config = $utils->config_read();
unset($array_datos['items']);
Funciones::print_r_html($array_datos, "csv_crear_proveedor() en '$file_output'");
//Listado de productos
foreach( $array_datos['proveedor_items'] as $proveedor => $proveedor_items )
{
//detecto tipo de proveedor
$is_proveedor_drop = $this->is_proveedor_drop($proveedor, $arr_config);
$is_proveedor_no_drop = $this->is_proveedor_no_drop($proveedor, $arr_config);
if( $is_proveedor_drop )
{
Funciones::print_r_html($proveedor_items, "csv_crear_proveedor() proveedor '$proveedor' es proveedor drop");
$this->crear_file_proveedor_drop($array_datos, $proveedor, $file_output);
}
if( $is_proveedor_no_drop )
{
Funciones::print_r_html($proveedor_items, "csv_crear_proveedor() proveedor '$proveedor' es proveedor NO drop");
$this->crear_file_proveedor_no_drop($array_datos, $proveedor, $file_output);
}
if( !$is_proveedor_drop && !$is_proveedor_no_drop )
{
Funciones::print_r_html($array_datos, "csv_crear_proveedor() proveedor '$proveedor' NO ES PROVEEDOR DROP NI 'NO DROP', se omite");
continue;
}
}
return true;
}
/**
* crear archivo para proveedor drop
* @param type $array_datos
* @param type $proveedor
* @param type $proveedor_items
* @return boolean
*/
public function crear_file_proveedor_drop($array_datos, $proveedor, $file_output)
{
$utils = new Utils();
$arr_config = $utils->config_read();
$proveedor_items = isset($array_datos['proveedor_items'][$proveedor]) ? $array_datos['proveedor_items'][$proveedor] : null;
if( empty($proveedor_items) )
{
Funciones::print_r_html($proveedor_items, "crear_file_proveedor_drop() para proveedor '$proveedor', no items, no se hace nada");
return false;
}
Funciones::print_r_html("crear_file_proveedor_drop() para proveedor '$proveedor'...");
//direccion del comprador
$direcion = $array_datos['client']['address'];
$rut = $array_datos['client']['code'];
$nombre_cliente = substr($array_datos['client']['firstName'] . ' '
. $array_datos['client']['lastName'], 0, 40);
$direccion2 = substr($direcion, 0, 125);
$comuna = substr($array_datos['client']['municipality'], 0, 18);
$ciudad = substr($array_datos['client']['city'], 0, 18);
$fono = substr($array_datos['client']['phone'], 0, 13);
//creo array para el csv
$array_csv = array();
$linea = array( $rut, $nombre_cliente, $direccion2, $comuna, $ciudad, $fono );
$array_csv[] = $linea;
$array_csv_proveedor = array();
$file_output_p = $file_output;
//recorro por proveedor
foreach( $proveedor_items as $p )
{
$sku = $p['code'];
$precio_neto = $p['netUnitValue'];
$qty = $p['quantity'];
//$proveedor = $p['proveedor'];
$costo_unitario = $p['costo_unitario'];
//sku, cant, costo uitario (no precio)
$linea = array( $sku, $qty, $costo_unitario );
$array_csv_proveedor[] = $linea;
}
//lineas para el csv por proveedor
$array_proveedor_full = array_merge($array_csv, $array_csv_proveedor);
$folder_provedores = isset($arr_config['carpeta_proveedores']) ? $arr_config['carpeta_proveedores'] : dirname(__FILE__) . '/../../proveedores';
//creo folder de proveedores, si este no existe
//14-09-2020 add subfolder /pedidos/
$folder_provedores = "$folder_provedores/$proveedor/pedidos/";
if( !is_dir($folder_provedores) )
{
mkdir($folder_provedores, 0755, true);
}
$file_output_p = $folder_provedores . $file_output_p;
$res = $this->crear_file_write_csv($file_output_p, $array_proveedor_full);
return true;
}
/**
* crear archivo para proveedor no drop
* @param type $array_datos
* @param type $proveedor
* @param type $proveedor_items
* @return boolean
*/
public function crear_file_proveedor_no_drop($array_datos, $proveedor, $file_output)
{
$utils = new Utils();
$arr_config = $utils->config_read();
$proveedor_items = isset($array_datos['proveedor_items'][$proveedor]) ? $array_datos['proveedor_items'][$proveedor] : null;
if( empty($proveedor_items) )
{
Funciones::print_r_html($proveedor_items, "crear_file_proveedor_no_drop() para proveedor '$proveedor', no items, no se hace nada");
return false;
}
//linea byr
$byr_linea = isset($arr_config['byr']) ? $arr_config['byr'] : '';
//linea byr
$byr_arr = explode(',', $byr_linea);
Funciones::print_r_html("crear_file_proveedor_no_drop() para proveedor '$proveedor'...");
//direccion del comprador
$direcion = $array_datos['client']['address'];
$rut = $array_datos['client']['code'];
$nombre_cliente = substr($array_datos['client']['firstName'] . ' '
. $array_datos['client']['lastName'], 0, 40);
$direccion2 = substr($direcion, 0, 125);
$comuna = substr($array_datos['client']['municipality'], 0, 18);
$ciudad = substr($array_datos['client']['city'], 0, 18);
$fono = substr($array_datos['client']['phone'], 0, 13);
//creo array para el csv
$array_csv = array();
$linea = array( $rut, $nombre_cliente, $direccion2, $comuna, $ciudad, $fono );
$array_csv[] = $linea;
$array_csv_proveedor = array();
//lleva byr/sku, cant, costo unitario
$array_csv_centro_distribucion = array();
if( !empty($byr_arr) )
{
$array_csv_centro_distribucion[] = $byr_arr;
}
$file_output_p = $file_output;
//recorro por proveedor
foreach( $proveedor_items as $p )
{
$sku = $p['code'];
$precio_neto = $p['netUnitValue'];
$qty = $p['quantity'];
//$proveedor = $p['proveedor'];
$costo_unitario = $p['costo_unitario'];
//sku, cant, precio (no costo uitario)
$linea = array( $sku, $qty, $precio_neto );
//para centro dictribucion
$linea_cu = array( $sku, $qty, $costo_unitario );
$array_csv_proveedor[] = $linea;
$array_csv_centro_distribucion[] = $linea_cu;
}
//lineas para el csv por proveedor
$array_proveedor_full = array_merge($array_csv, $array_csv_proveedor);
$array_centro_distrib_full = array_merge($array_csv, $array_csv_centro_distribucion);
$folder_provedores = isset($arr_config['carpeta_proveedores']) ? $arr_config['carpeta_proveedores'] : dirname(__FILE__) . '/../../proveedores';
//proveedor, pedidos
$folder_provedores_aux = "$folder_provedores/$proveedor/pedidos/";
if( !is_dir($folder_provedores_aux) )
{
mkdir($folder_provedores_aux, 0755, true);
}
$file_output_paux = $folder_provedores_aux . $file_output_p;
Funciones::print_r_html($array_centro_distrib_full, "crear_file_proveedor_no_drop() para proveedor '$proveedor' a carpeta '/nombre proveedor/pedidos/': BYR/ sku, cant, costo uitario en file: '$file_output_paux'");
$res = $this->crear_file_write_csv($file_output_paux, $array_centro_distrib_full);
return true;
}
/**
* crear archivo de /pedidos/ y /ordenesdecompra/
* BYR/SKU, CANT, COSTO UNITARIO
* @param type $array_datos
* @param type $proveedor
* @param type $file_output
* @return boolean
*/
public function crear_file_centro_dist($array_datos, $file_output)
{
unset($array_datos['items']);
Funciones::print_r_html($array_datos, "crear_file_centro_distrubicion() en '$file_output'");
$utils = new Utils();
$arr_config = $utils->config_read();
//linea byr
$byr_linea = isset($arr_config['byr']) ? $arr_config['byr'] : '';
//linea byr
$byr_arr = explode(',', $byr_linea);
//direccion del comprador
$direcion = $array_datos['client']['address'];
$rut = $array_datos['client']['code'];
$nombre_cliente = substr($array_datos['client']['firstName'] . ' '
. $array_datos['client']['lastName'], 0, 40);
$direccion2 = substr($direcion, 0, 125);
$comuna = substr($array_datos['client']['municipality'], 0, 18);
$ciudad = substr($array_datos['client']['city'], 0, 18);
$fono = substr($array_datos['client']['phone'], 0, 13);
//creo array para el csv
$array_csv = array();
$linea = array( $rut, $nombre_cliente, $direccion2, $comuna, $ciudad, $fono );
$array_csv[] = $linea;
//lleva byr/sku, cant, costo unitario
$array_csv_centro_distribucion = array();
if( !empty($byr_arr) )
{
$array_csv_centro_distribucion[] = $byr_arr;
}
$file_output_p = $file_output;
//Listado de productos
foreach( $array_datos['proveedor_items'] as $proveedor => $proveedor_items )
{
$is_proveedor_no_drop = $this->is_proveedor_no_drop($proveedor, $arr_config);
if( !$is_proveedor_no_drop )
{
Funciones::print_r_html("crear_file_centro_dist(), proveedor '$proveedor' se omite");
continue;
}
Funciones::print_r_html("crear_file_centro_dist(), proveedor '$proveedor' sí es no drop, se agregan sus productos a csv");
foreach( $proveedor_items as $p )
{
$sku = $p['code'];
$precio_neto = $p['netUnitValue'];
$qty = $p['quantity'];
//$proveedor = $p['proveedor'];
$costo_unitario = $p['costo_unitario'];
//sku, cant, precio (no costo uitario)
$linea = array( $sku, $qty, $precio_neto );
//para centro dictribucion
$linea_cu = array( $sku, $qty, $costo_unitario );
$array_csv_proveedor[] = $linea;
$array_csv_centro_distribucion[] = $linea_cu;
}
}
//lineas para el csv por proveedor
$array_proveedor_full = array_merge($array_csv, $array_csv_proveedor);
$array_centro_distrib_full = array_merge($array_csv, $array_csv_centro_distribucion);
//sin datos del cliente
$array_centro_distrib_ordenesdecompra = $array_csv_centro_distribucion;
$folder_provedores = isset($arr_config['carpeta_proveedores']) ? $arr_config['carpeta_proveedores'] : dirname(__FILE__) . '/../../proveedores';
$centro_distrib_name = isset($arr_config['centro_distribucion']) ? $arr_config['centro_distribucion'] : '';
$centro_distrib_name = trim($centro_distrib_name);
//agrego csv en caprtea /prilogoc/pedidos/
if( !empty($centro_distrib_name) )
{
$folder_provedores_aux = "$folder_provedores/$centro_distrib_name/pedidos/";
if( !is_dir($folder_provedores_aux) )
{
mkdir($folder_provedores_aux, 0755, true);
}
$file_output_paux = $folder_provedores_aux . $file_output_p;
Funciones::print_r_html($array_proveedor_full, "crear_file_proveedor_no_drop() para proveedor '$proveedor' a carpeta '/$centro_distrib_name/pedidos/': sku, cantt, precio (sin byr) en file: '$file_output_paux'");
$res = $this->crear_file_write_csv($file_output_paux, $array_proveedor_full);
}
//creo files para centro de distribuc
//ordenes de compra
$folder_provedores_aux = "$folder_provedores/$centro_distrib_name/ordenesdecompra/";
if( !is_dir($folder_provedores_aux) )
{
mkdir($folder_provedores_aux, 0755, true);
}
$file_output_paux = $folder_provedores_aux . $file_output_p;
Funciones::print_r_html($array_centro_distrib_full, "crear_file_proveedor_no_drop() para proveedor '$proveedor' a carpeta '/$centro_distrib_name/ordenesdecompra/': BYR/ sku, cant, costo uitario en file: '$file_output_paux'");
$res = $this->crear_file_write_csv($file_output_paux, $array_centro_distrib_ordenesdecompra);
return true;
}
/**
* escriboe cvs en file indicado
*/
public function crear_file_write_csv($file_output_p, $array_proveedor_full)
{
//saco // duplicados
$file_output_p = preg_replace('#/+#', '/', $file_output_p);
Funciones::print_r_html($array_proveedor_full, "Utils->crear_file_write_csv() para file '$file_output_p'");
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("Utils->crear_file_write_csv()request test dte, no se escribe file");
return true;
}
//ahora, creo el csv
$fp = fopen($file_output_p, 'w');
foreach( $array_proveedor_full as $campos )
{
$campos2 = str_replace(',', ' ', $campos);
$linea = implode(',', $campos2) . "\n";
fwrite($fp, $linea);
//fputcsv($fp, $campos);
}
fclose($fp);
return true;
}
/**
* devuelve true si el proveedor es dropshipping
* @param type $proveedor_str
* @param type $arr_config
*/
public function is_proveedor_drop($proveedor_str, $arr_config = null)
{
if( $arr_config == null )
{
$arr_config = $this->config_read();
}
$proveedores_line = isset($arr_config['proveedores_drop']) ? trim($arr_config['proveedores_drop']) : '';
if( empty($proveedores_line) )
{
return false;
}
//paso a array
$proveedores_arr = explode(',', $proveedores_line);
//busco proveedor
foreach( $proveedores_arr as $p )
{
$p = trim($p);
if( strcasecmp($proveedor_str, $p) == 0 )
{
return true;
}
}
return false;
}
/**
* devuelve true si el proveedor NO es dropshipping
* @param type $proveedor_str
* @param type $arr_config
*/
public function is_proveedor_no_drop($proveedor_str, $arr_config = null)
{
if( $arr_config == null )
{
$arr_config = $this->config_read();
}
$proveedores_line = isset($arr_config['proveedores_no_drop']) ? trim($arr_config['proveedores_no_drop']) : '';
if( empty($proveedores_line) )
{
return false;
}
//paso a array
$proveedores_arr = explode(',', $proveedores_line);
//busco proveedor
foreach( $proveedores_arr as $p )
{
$p = trim($p);
if( strcasecmp($proveedor_str, $p) == 0 )
{
return true;
}
}
return false;
}
public function config_set_defaults()
{
$folder = realpath(dirname(__FILE__) . '/../csv/');
$arr = array( 'carpeta_ftp' => $folder, 'correlativo' => 1 );
$this->config_save($arr);
}
/**
* abre archivo de config y devuelve todo o al valor de la $key indicada
* @param type $key
*/
public function config_read($key = null)
{
$file = CONFIG_FILE;
if( !file_exists($file) )
{
return null;
}
$json = file_get_contents($file);
$json = trim($json);
if( strlen($json) <= 1 )
{
return null;
}
$arr = json_decode($json, true);
if( $key )
{
return isset($arr[$key]) ? trim($arr[$key]) : '';
}
else
{
return $arr;
}
}
public function config_set($key, $value)
{
$arr = $this->config_read();
$arr[$key] = trim($value);
$this->config_save($arr);
}
public function config_save($arr)
{
$json = json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
$file = CONFIG_FILE;
file_put_contents($file, $json);
}
/**
* incrementa el correlativo en $add_value
* @param type $add_value
*/
public function config_increment($add_value = 1, $key = 'correlativo')
{
$arr = $this->config_read();
$old = isset($arr[$key]) ? (int) $arr[$key] : 0;
//incremento correlativo
$new = $old + (int) $add_value;
$arr[$key] = (int) $new;
$this->config_save($arr);
}
public function normalize($string)
{
$table = array(
'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'd' => 'dj', 'Ž' => 'Z', 'ž' => 'z', 'C' => 'C', 'c' => 'c', 'C' => 'C', 'c' => 'c',
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'E',
'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
'ÿ' => 'y', 'R' => 'R', 'r' => 'r', "'" => ''
);
return strtr($string, $table);
}
public function get_tipo_docto_nombre($tipo_docto)
{
switch( $tipo_docto )
{
case 'b':
$tipo_docto_nombre = 'Boleta';
break;
case 'f':
$tipo_docto_nombre = 'Factura';
break;
case 'nv':
$tipo_docto_nombre = 'Nota de venta';
break;
case 'gd':
$tipo_docto_nombre = 'Guia de despacho';
break;
case 'nc':
$tipo_docto_nombre = 'Nota de credito';
break;
case 'nd':
$tipo_docto_nombre = 'Nota de debito';
break;
case 'gp':
$tipo_docto_nombre = 'Guia de salida';
break;
default:
$tipo_docto_nombre = 'DTE';
break;
}
return $tipo_docto_nombre;
}
// check if string ends with specific sub-string
public function has_file_extension($filename, $ext)
{
$length = strlen($ext);
if( $length == 0 )
{
return true;
}
return (substr($filename, -$length) === $ext);
}
/**
* lee los logs de /webhooks/logs
* y los convierte en archivos json separados
*/
public function logs_webhook_to_json()
{
$folder_path = dirname(__FILE__) . '/../webhooks/logs/';
$folder_dest = dirname(__FILE__) . '/../webhooks/notificaciones/';
$array_ext = array( 'log' );
//leo archivos log
// Open the directory
$handle = opendir($folder_path);
if( $handle === false )
{
Funciones::print_r_html("logs_webhook_to_json('$folder_path'), no se pudo abrir directorio");
return;
}
$path = $folder_path;
// Loop through the directory
while( false !== ($file = readdir($handle)) )
{
// Check the file we're doing is actually a file
if( is_file($path . $file) )
{
$content = file_get_contents($path . $file);
if( empty($content) )
{
continue;
}
//creo archivos json y los dejo en carpeta notificaciones
$this->create_json($content, $folder_dest);
}
}
}
public function create_json($content, $folder_dest)
{
$array_lines = explode("\n", $content);
$i = 0;
foreach( $array_lines as $l )
{
//si empieza con "{", es json
if( substr($l, 0, 1) !== "{" )
{
continue;
}
//es linea con json
$linea = trim($l);
//guardo como archivo en folder dest
$hoy = date("YmdHis");
$filename = $folder_dest . "json_{$hoy}_{$i}.json";
Funciones::print_r_html($linea, "json a file '$filename'");
file_put_contents($filename, $linea);
$i++;
}
}
public function filter_client_bsale($client_array)
{
$arr = $client_array;
//pais, para saber si debo validar o no
$pais = Funciones::get_pais();
//VALIDO RUT
if( $pais === 'CL' )
{
$arr['code'] = $this->get_rut_formatted($client_array['code']);
//si rut no válido
$has_rut_valido = $this->valida_rut($arr['code']);
$extranjero_pe = false;
}
elseif( $pais === 'PE' )
{
//en el caso de perú, si viene companyOrPerson=1, entonces el campo code es RUC,
$companyOrPerson = $client_array['companyOrPerson'];
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("filter cliente bsale: Perú");
}
//solo peru
$extranjero_pe = false;
//restricciones de perú: DNI=8 digitos
//carnet de extranjería, 9 dígitos
//perú, el dni siempre es válido
$dni_pe = trim($client_array['code']);
//saco puntos
$dni_pe = str_replace('.', '', $dni_pe);
//solo numeros
if( !is_numeric($dni_pe) )
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("DNI/RUC no valido: '$dni_pe' (es empresa: $companyOrPerson)");
}
$has_rut_valido = false;
}
//si es empresa
elseif( $companyOrPerson == 1 )
{
$has_rut_valido = true;
}
else
{
$len = strlen($dni_pe);
//DNI
if( $len == 8 )
{
$has_rut_valido = true;
$arr['code'] = $dni_pe;
}
//carnet de extranjeria
elseif( $len == 9 )
{
$has_rut_valido = false;
$arr['code'] = $dni_pe;
$extranjero_pe = true;
}
//no es dni ni carnet de extranjeria
else
{
if( isset($_REQUEST['test_dte']) )
{
Funciones::print_r_html("DNI no valido, no tiene 8 ni 9 digitos: '$dni_pe' ");
}
$has_rut_valido = false;
$arr['code'] = $dni_pe;
}
}
}
//algun otro pais, por agregar
else
{
$has_rut_valido = false;
}
//si estoy usando rut de pruebas, en fase de prueba
/* if( defined('SET_RUT_PRUEBAS_DTE') && SET_RUT_PRUEBAS_DTE == true )
{
$arr['code'] = RUT_PRUEBAS_DTE;
$has_rut_valido = true;
} */
//si es persona, no tiene giro
if( $arr['companyOrPerson'] == 0 || $arr['companyOrPerson'] === '0' )
{
$arr['activity'] = '';
}
//si es empresa con rut no válido, no sirve enviar el del extranjero
if( !$has_rut_valido &&
($arr['companyOrPerson'] == 1 || $arr['companyOrPerson'] === '1') )
{
//saco el rut, para que no se emita factura
unset($arr['code']);
unset($arr['email']);
unset($arr['isForeigner']);
}
elseif( !$has_rut_valido && $extranjero_pe )
{
//dejo el codigo, pero lo marco como extranjero
$arr['isForeigner'] = 1;
}
elseif( !$has_rut_valido )
{
//no envío rut, solo el isForeigner
unset($arr['code']);
$arr['isForeigner'] = 1;
}
return $arr;
}
public function filter_client_bsale_test($client_array)
{
$arr = $client_array;
//si estoy usando rut de pruebas, en fase de prueba
/* if( defined('SET_RUT_PRUEBAS_DTE') && SET_RUT_PRUEBAS_DTE == true )
{
$client_array['code'] = RUT_PRUEBAS_DTE;
} */
//VALIDO RUT
$arr['code'] = $this->get_rut_formatted($client_array['code']);
//si rut no válido
$has_rut_valido = $this->valida_rut($arr['code']);
//si es persona, no tiene giro
if( $arr['companyOrPerson'] == 0 || $arr['companyOrPerson'] === '0' )
{
$arr['activity'] = '';
}
//si es empresa con rut no válido, no sirve enviar el del extranjero
if( !$has_rut_valido &&
($arr['companyOrPerson'] == 1 || $arr['companyOrPerson'] === '1') )
{
//saco el rut, para que no se emita factura
unset($arr['code']);
unset($arr['email']);
unset($arr['isForeigner']);
}
elseif( !$has_rut_valido )
{
//no envío rut, solo el isForeigner
unset($arr['code']);
$arr['isForeigner'] = 1;
}
return $arr;
}
/**
* recibe un rut con o sin puntos y guin y lo devuelve sin puntos con guion
* @param type $rut
* @param type $separador_miles
* @param type $separador_dv
*/
public function get_rut_formatted($rut, $set_separador_dv = true)
{
if( empty($rut) )
{
return $rut;
}
if( defined('VALIDAR_RUT') && VALIDAR_RUT == false )
{
return $rut;
}
//saco separador de miles
$rut = str_replace('.', '', $rut);
//saco guion
$rut = str_replace('-', '', $rut);
//coloc guion para dv
//tamaño del rut
$len = strlen($rut);
//extraigo substring para colocar guion y dv
$rut_number = substr($rut, 0, $len - 1);
$rut_dv = substr($rut, -1);
/* if(isset($_REQUEST['param']) && $_REQUEST['param'] ==='yes')
{
Funciones::print_r_html("nuevo rut: '$rut_number-$rut_dv'");
} */
//tamaño minimo del rut: 12223335
if( $len < 7 )
{
return $rut;
}
//viene con xxx-dv?
$arrauxrut = explode('-', $rut);
//coloco el -antes del ultimo caracter
$rut_nro = substr($rut, 0, $len - 1);
$dv = substr($rut, -1);
$rut_nro = (int) $rut_nro;
//debo devolver el rut con guin o no?
if( $set_separador_dv )
{
$new_rut = $rut_nro . '-' . $dv;
}
else
{
$new_rut = $rut_nro . $dv;
}
return $new_rut;
}
public function valida_rut($rut)
{
if( defined('VALIDAR_RUT') && VALIDAR_RUT == false )
{
return $rut;
}
$rut = preg_replace('/[^k0-9]/i', '', $rut);
$dv = substr($rut, -1);
$numero = substr($rut, 0, strlen($rut) - 1);
if( strlen($numero) < 6 )
{
return false;
}
$i = 2;
$suma = 0;
foreach( array_reverse(str_split($numero)) as $v )
{
if( $i == 8 )
{
$i = 2;
}
$suma += $v * $i;
++$i;
}
$dvr = 11 - ($suma % 11);
if( $dvr == 11 )
{
$dvr = 0;
}
if( $dvr == 10 )
{
$dvr = 'K';
}
$dv = strtoupper($dv);
$dvr = (string) $dvr;
$dv = (string) $dv;
if( $dvr === $dv )
{
return true;
}
else
{
return false;
}
}
/**
* borrar acrchivos .log dejados por la integración
* borra rows de tabla db con historial de actualización de stock/precio de productos
*/
public function delete_old_logs()
{
//borro rows de historial sync productos
$log_obj = new LogSincronizacionBsale();
$log_obj->delete_historial();
//logs de hostorial de dte de pedidos
$log_dte = new LogDTEBsale();
$log_dte->delete_historial();
//giftcards: borro logs table
/* $gift = new GiftFolios();
$days_older = defined('DELETE_DAYS_OLDER') ? (int) DELETE_DAYS_OLDER : 60;
$gift->clear_logs($days_older); */
$hoy = (int) date('d');
//listado de folders que contienen logs
$array_folders = array(
//logs de la raiz (webhooks de shopify, jumpseller, etc)
dirname(__FILE__) . '/../logs/',
//logs del webhook
dirname(__FILE__) . '/../webhooks/logs/',
//json procesados desde el webhook
dirname(__FILE__) . '/../webhooks/notificaciones/',
dirname(__FILE__) . '/../webhooks/procesados/',
//product created
dirname(__FILE__) . '/../webhooks/shop_products_fallidos/',
dirname(__FILE__) . '/../webhooks/shop_products_pendientes/',
dirname(__FILE__) . '/../webhooks/shop_products_procesados/',
//orders de shopify
dirname(__FILE__) . '/../webhooks/shop_gd_procesadas/',
dirname(__FILE__) . '/../webhooks/shopify_gd_orders/',
dirname(__FILE__) . '/../webhooks/shopify_orders/',
dirname(__FILE__) . '/../webhooks/shop_orders_cancelled_procesadas/',
dirname(__FILE__) . '/../webhooks/shop_nv_procesadas/',
dirname(__FILE__) . '/../webhooks/shop_boletas_procesadas/',
dirname(__FILE__) . '/../webhooks/shop_boletas_fallidas/',
dirname(__FILE__) . '/../webhooks/js_orders_cancelled_procesadas/',
//linio
dirname(__FILE__) . '/../webhooks/linio_prods_pendientes/',
dirname(__FILE__) . '/../webhooks/linio_prods_procesados/',
dirname(__FILE__) . '/../webhooks/linio_orders_pendientes/',
dirname(__FILE__) . '/../webhooks/linio_orders_procesadas/',
dirname(__FILE__) . '/../webhooks/linio_orders_fallidas/',
dirname(__FILE__) . '/../webhooks/linio_orders/',
//logs del lib (boletas emitidas, logs de conexiones a las tiendas)
dirname(__FILE__) . '/logs/',
);
$array_ext = array( 'log', 'json' );
$days_older = Funciones::get_days_delete_logs(); //
if( isset($_REQUEST['param']) )
{
Funciones::print_r_html(__METHOD__ . " borro archivo con más de $days_older días de antiguedad");
}
//borro logs viejos
foreach( $array_folders as $f )
{
$this->delete_files_older_than($f, $array_ext, $days_older);
}
}
public function delete_files_older_than($folder_path, $array_ext, $days_older)
{
$days = $days_older;
$path = $folder_path; //'./logs/';
$filetypes_to_delete = $array_ext;
$i = 0;
if( !file_exists($path) )
{
return;
}
// Open the directory
$handle = opendir($path);
if( $handle === false )
{
//Funciones::print_r_html("delete_files_older_than('$folder_path'), no se pudo abrir directorio");
return;
}
// Loop through the directory
while( false !== ($file = readdir($handle)) )
{
// Check the file we're doing is actually a file
if( is_file($path . $file) )
{
$file_info = pathinfo($path . $file);
if( isset($file_info['extension']) && in_array(strtolower($file_info['extension']), $filetypes_to_delete) )
{
// Check if the file is older than X days old
if( filemtime($path . $file) < ( time() - ( $days * 24 * 60 * 60 ) ) )
{
//Funciones::print_r_html("borro archivo '{$path}{$file}'...");
// Do the deletion
unlink($path . $file);
$i++;
}
}
}
}
if( isset($_REQUEST['param']) && $i > 0 )
{
Funciones::print_r_html("delete_files_older_than( desde folder '$folder_path') total de archivos borrados: $i");
}
}
function print_r_reverse($in)
{
$lines = explode("\n", trim($in));
if( trim($lines[0]) != 'Array' )
{
// bottomed out to something that isn't an array
return $in;
}
else
{
// this is an array, lets parse it
if( preg_match("/(\s{5,})\(/", $lines[1], $match) )
{
// this is a tested array/recursive call to this function
// take a set of spaces off the beginning
$spaces = $match[1];
$spaces_length = strlen($spaces);
$lines_total = count($lines);
for( $i = 0; $i < $lines_total; $i++ )
{
if( substr($lines[$i], 0, $spaces_length) == $spaces )
{
$lines[$i] = substr($lines[$i], $spaces_length);
}
}
}
array_shift($lines); // Array
array_shift($lines); // (
array_pop($lines); // )
$in = implode("\n", $lines);
// make sure we only match stuff with 4 preceding spaces (stuff for this array and not a nested one)
preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $in, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
$pos = array();
$previous_key = '';
$in_length = strlen($in);
// store the following in $pos:
// array with key = key of the parsed array's item
// value = array(start position in $in, $end position in $in)
foreach( $matches as $match )
{
$key = $match[1][0];
$start = $match[0][1] + strlen($match[0][0]);
$pos[$key] = array( $start, $in_length );
if( $previous_key != '' )
$pos[$previous_key][1] = $match[0][1] - 1;
$previous_key = $key;
}
$ret = array();
foreach( $pos as $key => $where )
{
// recursively see if the parsed out value is an array too
$ret[$key] = $this->print_r_reverse(substr($in, $where[0], $where[1] - $where[0]));
}
return $ret;
}
}
public function do_offset($level)
{
$offset = ""; // offset for subarry
for( $i = 1; $i < $level; $i++ )
{
$offset = $offset . "<td></td>";
}
return $offset;
}
public function show_array($array, $level, $sub)
{
if( is_array($array) == 1 )
{ // check if input is an array
foreach( $array as $key_val => $value )
{
$offset = "";
if( is_array($value) == 1 )
{ // array is multidimensional
if( is_numeric($key_val) )
echo "<tr style='font-weight:bold;background-color:#EEEEEE;'>";
else
echo "<tr>";
$offset = $this->do_offset($level);
/* if ( is_numeric( $key_val ) )
echo $offset . "<td style='font-weight:bold;background-color:#EEEEEE;'>" . $key_val . "</td>";
else */
echo $offset . "<td style='font-weight:bold;background-color:#EEEEEE;'>" . $key_val . "</td>";
$this->show_array($value, $level + 1, 1);
}
elseif( is_object($value) )
{
echo('<pre>');
print_r($value);
echo('</pre>');
}
else
{ // (sub)array is not multidim
if( $sub != 1 )
{ // first entry for subarray
echo "<tr nosub>";
$offset = $this->do_offset($level);
}
$sub = 0;
echo $offset . "<td main " . $sub . " width=\"120\">" . $key_val .
"</td><td width=\"120\">" . $value . "</td>";
echo "</tr>\n";
}
} //foreach $array
}
else
{ // argument $array is not an array
return;
}
}
public function html_show_array($array)
{
echo "\n<table cellspacing=\"0\" border=\"2\">\n";
$this->show_array($array, 1, 0);
echo "\n</table>\n";
}
public function sendEmail($to_email = null, $subject = null, $message = null, $cc_email = null)
{
if( empty($to_email) )
{
return;
}
//si es que se puede enviar correo o no
$f = dirname(__FILE__) . "/PHPMailer/PHPMailerAutoload.php";
if( !class_exists('PHPMailer') && file_exists($f) )
{
require_once $f;
}
else
{
echo("sendEmail: class PHPMailer not found in '$f'");
return false;
}
//valido email
/* if( empty($to_email) || !filter_var($to_email, FILTER_VALIDATE_EMAIL) )
{
$emailErr = $to_email;
$to_email = EMAIL_ERROR;
$subject = "$subject";
$message = "<p>Se intenta enviar boleta a email no valido: '$emailErr'</p>\n"
. "$message";
return false;
} */
if( !defined('EMAIL_USER') || EMAIL_USER === '' )
{
echo('sendEmail: falta EMAIL_USER');
return;
}
$mail = new PHPMailer();
//$mail->CharSet = 'iso-8859-1';
$from_name = 'Integracion Bsale';
$from_email = EMAIL_USER;
$mail->IsSMTP(); //ok
$mail->SMTPAuth = true; //ok
$mail->Username = EMAIL_USER; //ok
$mail->Password = EMAIL_PASS; //ok
$mail->SMTPSecure = EMAIL_SMTP_SECURE; //ok
/* Set the SMTPSecure value, if set to none, leave this blank */
/* if ( $swpsmtp_options['smtp_settings']['type_encryption'] !== 'none' )
{
$mail->SMTPSecure = $swpsmtp_options['smtp_settings']['type_encryption'];
} */
/* Set the other options */
$mail->Host = EMAIL_SERVER; //ok
$mail->Port = EMAIL_SMTP_PORT; //ok
$mail->SetFrom($from_email, $from_name); //ok
$mail->isHTML(true); //ok
$mail->Subject = $subject; //ok
$mail->MsgHTML($message);
$mail->addAddress($to_email); //ok
if( defined('EMAIL_MESSAGES') && EMAIL_MESSAGES !== '' )
{
$mail->addAddress(EMAIL_MESSAGES);
}
$mail->SMTPDebug = EMAIL_SMTP_DEBUG;
if( defined('EMAIL_TEST_CC') && EMAIL_TEST_CC !== '' )
{
$mail->addCC(EMAIL_TEST_CC); //para ver si llegan las boletas, luego lo saco
}
if( !empty($cc_email) )
{
$mail->addCC($cc_email);
}
/* $mail->addReplyTo('','');
$mail->addBCC(''); */
/* Send mail and return result */
if( !$mail->Send() )
{
$errors = $mail->ErrorInfo;
}
$mail->ClearAddresses();
$mail->ClearAllRecipients();
if( !empty($errors) )
{
//Funciones::print_r_html($errors, "sendEmail: error en envio de email");
return $errors;
}
else
{
return true;
}
}
}