Migrating an OSC Store, I get a problem with a shipping custom module (lenoir.php).
The old-store is working OK - w/o problems from few years ago: MySQL 4.1.12-standard and PHP 4.3.3.
New server: MySQL 5.0.32-Debian and PHP/5.2.0-8+etch13
In Admin > Modules > Shipping, I get the error as below:
Fatal error: Cannot access empty property in /var/www/vhosts/domain.com/httpdocs/includes/modules/shipping/lenoir.php on line 34
The page http://domain.com/admin/modules.php?select...mp;set=shipping is not displayed properly. The same message error is displayed when a customer tries to close the purchase.
I'm revised the code once, twice, ... but error persist.
<?php
/*
$Id: table.php,v 1.27 2003/02/05 22:41:52 hpdl Exp $
osCommerce, Open Source E-Commerce Solutions
[url="http://www.oscommerce.com"]http://www.oscommerce.com[/url]
Copyright © 2003 osCommerce
Released under the GNU General Public License
*/
class lenoir {
var $code, $title, $description, $icon, $enabled, $selected_zone;
// class constructor
function lenoir() {
global $order;
$this->code = 'lenoir';
$this->title = MODULE_SHIPPING_LENOIR_TABLE_TEXT_TITLE;
$this->description = MODULE_SHIPPING_LENOIR_TABLE_TEXT_DESCRIPTION;
$this->sort_order = MODULE_SHIPPING_LENOIR_TABLE_SORT_ORDER;
$this->icon = '';
$this->tax_class = MODULE_SHIPPING_LENOIR_TABLE_TAX_CLASS;
$this->enabled = ((MODULE_SHIPPING_LENOIR_TABLE_STATUS == 'True') ? true : false);
if ($this->enabled){
for ($i=1; $i<5; $i+=1) {
$check_flag = $this->module_enabled($i);
if ($check_flag == True) {
$this->$selected_zone = $i;
break;
}
}
if ($check_flag == false) {
$this->$selected_zone = 4;
//$this->enabled = false;
}
}
}
// class methods
// verifica si se aplica la forma de envio
function module_enabled($dest_zone){
global $order;
//echo "MODULE_SHIPPING_LENOIR_TABLE_ZONE_".$dest_zone;
$zone = constant("MODULE_SHIPPING_LENOIR_TABLE_ZONE_".$dest_zone);
//echo "select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . $zone . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id" . "<br>";
if ( ($this->enabled == true) && ((int)$zone > 0) ) {
$check_flag = false;
$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . $zone . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
while ($check = tep_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
} elseif ($check['zone_id'] == $order->delivery['zone_id']) {
$check_flag = true;
break;
}
}
return($check_flag);
}
}
function quote($method = '') {
global $order, $cart, $shipping_weight, $shipping_num_boxes;
global $contrareembolso_enabled, $tarjeta_enabled, $dias_entrega;
if ($this->enabled) {
$aux = constant('MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_' . $this->$selected_zone);
$zones_courier = split("[:,]" , $aux);
$dias_courier = constant('MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_' . $this->$selected_zone);
$aux = constant('MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_' . $this->$selected_zone);
$zones_certificado = split("[:,]" , $aux);
$dias_certificado = constant('MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_' . $this->$selected_zone);
$order_total = $cart->show_total();
//print_r($zones_courier);
//print_r($dias_courier);
// vemos el importe de courier
$size = sizeof($zones_courier);
for ($i=0; $i<$size; $i+=2) {
if ($order_total <= $zones_courier[$i]) {
$shipping = $zones_courier[$i+1];
$shipping_method = 'Enviar A' . ' ' . $dest_country . ' : ' . $shipping_weight . ' kg(s)';
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$shipping_method = 'No se han podido calcular los gastos de envio para courier';
} else {
$shipping_cost = ($shipping * $shipping_num_boxes);// + constant('MODULE_SHIPPING_ZONES_HANDLING_' . $dest_zone);
}
// ahora vemos el importe de certificado
$size = sizeof($zones_certificado);
for ($i=0; $i<$size; $i+=2) {
if ($order_total <= $zones_certificado[$i]) {
$shipping_cert = $zones_certificado[$i+1];
$shipping_method_cert = 'Enviar A' . ' ' . $dest_country . ' : ' . $shipping_weight . ' kg(s)';
break;
}
}
if ($shipping_cert == -1) {
$shipping_cost_cert = 0;
$shipping_method_cert = 'No se han podido calcular los gastos de envio para certificado';
} else {
$shipping_cost_cert = ($shipping * $shipping_num_boxes);// + constant('MODULE_SHIPPING_ZONES_HANDLING_' . $dest_zone);
}
if (strlen($method) == 0){
$this->quotes = array('id' => $this->code,
'module' => MODULE_SHIPPING_LENOIR_TABLE_TEXT_TITLE,
'methods' => array(array('id' => "1",
'title' => 'Urgente / Prioritario ('.$dias_courier.' días aprox.)',
'cost' => $shipping), // + MODULE_SHIPPING_LENOIR_TABLE_HANDLING),
array('id' => "2",
'title' => 'Normal / Econ&mico ('.$dias_certificado.' días aprox.)',
'cost' => $shipping_cert), //+ MODULE_SHIPPING_LENOIR_TABLE_HANDLING),
)
);
} // de if isset($method)
else{ // por aqui pasa una vez que se ha seleccionado la forma de pago
if (!tep_session_is_registered('contrareembolso_enabled'))tep_session_register('contrareembolso_enabled');
if (!tep_session_is_registered('tarjeta_enabled')) tep_session_register('tarjeta_enabled');
if (!tep_session_is_registered('dias_entrega')) tep_session_register('dias_entrega');
if ($method == '1'){ //courier
// courier & contrareembolso -> solo en zonas 1 y 2
$contrareembolso_enabled = (($this->$selected_zone == 1) || ($this->$selected_zone == 2));
// courier & tarjeta -> en todas las zonas
$tarjeta_enabled = true;
$dias_entrega = $dias_courier;
$this->quotes = array('id' => $this->code,
'module' => MODULE_SHIPPING_LENOIR_TABLE_TEXT_TITLE,
'methods' => array(array('id' => "1",
'title' => 'Urgente / Prioritario '.$dias_courier.' días aprox.',
'cost' => $shipping)));
}
elseif ($method == '2'){ //certificado
// certificado & contrareembolso -> solo en zonas 1 y 2
$contrareembolso_enabled = (($this->$selected_zone == 1) || ($this->$selected_zone == 2));
// certificado & tarjeta -> solo en zonas 3 y 4
$tarjeta_enabled = (($this->$selected_zone == 3) || ($this->$selected_zone == 4));
$dias_entrega = $dias_certificado;
$this->quotes = array('id' => $this->code,
'module' => MODULE_SHIPPING_LENOIR_TABLE_TEXT_TITLE,
'methods' => array(array('id' => "2",
'title' => 'Normal / Económico '.$dias_certificado.' días aprox.',
'cost' => $shipping_cert)));
}
}
}
if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);
if ($this->tax_class > 0)
{
$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
}
return $this->quotes;
}
function check() {
if (!isset($this->_check)) {
$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_LENOIR_TABLE_STATUS'");
$this->_check = tep_db_num_rows($check_query);
}
return $this->_check;
}
function install() {
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table Method', 'MODULE_SHIPPING_LENOIR_TABLE_STATUS', 'True', 'Do you want to offer table rate shipping?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
// zona 1
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('--------- Zona 1 ---------', 'MODULE_SHIPPING_LENOIR_TABLE_ZONE_1', '0', 'Seleccione zona 1', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Courier zona 1', 'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_1', '25:8.50,50:5.50,10000:0.00', 'Ejemplo: 25:8.50,50:5.50,etc.. Más de 25 8.50, desde 25 a 50 5.50 de cargo, etc', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Courier zona 1', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_1', '2', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Certificado zona 1', 'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_1', '25:3.50,50:1.50,10000:0.00', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Certificado zona 1', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_1', '7', '', '6', '0', now())");
// zona 2
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('--------- Zona 2 ---------', 'MODULE_SHIPPING_LENOIR_TABLE_ZONE_2', '0', 'Seleccione zona 2', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Courier zona 2', 'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_2', '25:8.50,50:5.50,10000:0.00', 'Ejemplo: 25:8.50,50:5.50,etc.. Más de 25 8.50, desde 25 a 50 5.50 de cargo, etc', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Courier zona 2', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_2', '', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Certificado zona 2', 'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_2', '25:8.50,50:5.50,10000:0.00', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Certificado zona 2', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_2', '', '', '6', '0', now())");
// zona 3
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('--------- Zona 3 ---------', 'MODULE_SHIPPING_LENOIR_TABLE_ZONE_3', '0', 'Seleccione zona 3', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Courier zona 3', 'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_3', '25:8.50,50:5.50,10000:0.00', 'Ejemplo: 25:8.50,50:5.50,etc.. Más de 25 8.50, desde 25 a 50 5.50 de cargo, etc', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Courier zona 3', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_3', '', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Certificado zona 3', 'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_3', '25:8.50,50:5.50,10000:0.00', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Certificado zona 3', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_3', '', '', '6', '0', now())");
// zona 4
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('--------- Zona 4 ---------', 'MODULE_SHIPPING_LENOIR_TABLE_ZONE_4', '0', 'Seleccione zona 4', '6', '0', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Courier zona 4', 'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_4', '25:8.50,50:5.50,10000:0.00', 'Ejemplo: 25:8.50,50:5.50,etc.. Más de 25 8.50, desde 25 a 50 5.50 de cargo, etc', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Courier zona 4', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_4', '', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tarifa Certificado zona 4', 'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_4', '25:8.50,50:5.50,10000:0.00', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Tiempo envio Certificado zona 4', 'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_4', '', '', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_LENOIR_TABLE_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_LENOIR_TABLE_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
}
function remove() {
tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}
function keys() {
return array('MODULE_SHIPPING_LENOIR_TABLE_STATUS',
'MODULE_SHIPPING_LENOIR_TABLE_ZONE_1',
'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_1',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_1',
'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_1',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_1',
'MODULE_SHIPPING_LENOIR_TABLE_ZONE_2',
'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_2',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_2',
'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_2',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_2',
'MODULE_SHIPPING_LENOIR_TABLE_ZONE_3',
'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_3',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_3',
'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_3',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_3',
'MODULE_SHIPPING_LENOIR_TABLE_ZONE_4',
'MODULE_SHIPPING_LENOIR_TABLE_COST_COURIER_4',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_COURIER_4',
'MODULE_SHIPPING_LENOIR_TABLE_COST_CERTIFICADO_4',
'MODULE_SHIPPING_LENOIR_TABLE_DIAS_CERTIFICADO_4',
'MODULE_SHIPPING_LENOIR_TABLE_TAX_CLASS',
'MODULE_SHIPPING_LENOIR_TABLE_SORT_ORDER');
}
}
?>
Thanks for your help.
Jose Manuel - jmanuel [at] lenoir.es