shop-old/core/customer.class.php
Thomas Bartelt 0a669704ea Dev-Umgebung: Kompatibilität für PHP 8.3 + Smarty 4.5.6
- Smarty 4.1.1 → 4.5.6 (behebt dynamic property deprecations)
- Core-Klassen: #[\AllowDynamicProperties] für Admin_role, base, Config,
  Customer, Customer_group, CustomerGroups, Item, Structure, website
- website.class.php: counts[parent_id] initialisieren vor ++ (PHP 8.1)
- layout.class.php: HTTP_ACCEPT_LANGUAGE mit isset-Guard
- website_init.php: session_status()-Check vor session_start
- .htaccess: HTTPS-Redirect via X-Forwarded-Proto (statt SERVER_PORT)
- themes/easyshop_advanced/media/: Parent-Theme-Assets nachgezogen
- .gitignore: smarty.4.1.1.bak ausschließen
2026-04-20 01:19:01 +02:00

1658 lines
41 KiB
PHP

<?php
/*
* @version $Id: index.php 10381 2008-06-01 03:35:53Z $
* @package Carteasy
* @copyright Copyright (C) 2005 - 2011 Wlanium
* @license proprietary
* @author Thomas Bartelt
* Carteasy is a web shop system
*/
include_once './core/database.class.php';
include_once './core/honorific.class.php';
include_once './core/country.class.php';
include_once './core/money.class.php';
include_once './core/cs_ticket.class.php';
include_once './core/customergroups.class.php';
include_once './core/main.class.php';
#[\AllowDynamicProperties]
class Customer extends Main {
protected $base_object;
public $list_table_config = array (
'title' => 'Kunden',
'db_table' => 'customers',
'list_fields' => array(
array(
'db_field' => 'number',
'name' => 'K-Nummer',
'sortable' => 1
),
array(
'db_field' => 'honorific',
'name' => 'Anrede',
'rewrite_function' => 'salutation_values',
'sortable' => 1
),
array(
'db_field' => 'firstname',
'name' => 'Vorname',
'sortable' => 1
),
array(
'db_field' => 'surname',
'name' => 'Nachname',
'sortable' => 1
),
array(
'db_field' => 'company',
'name' => 'Firma',
'sortable' => 1
),
array(
'db_field' => 'email',
'name' => 'E-Mail',
'sortable' => 1
),
array(
'db_field' => 'country',
'ref_db_table' => 'customer_addresses',
'ref_db1_field' => 'default_address',
'ref_db2_field' => 'id',
'name' => 'Land',
'rewrite_function' => 'country_values',
'sortable' => 1
),
array(
'db_field' => 'group_id',
'name' => 'Kundengruppe',
'rewrite_function' => 'customer_group_name',
'sortable' => 1
),
array(
'db_field' => 'locked',
'name' => 'Status',
'rewrite_function' => 'customer_state_text',
'sortable' => 1
)
),
'default_sort_item' => 'number',
'default_sort_direction' => 'up',
'search_fields' => array('customers.number','customers.firstname', 'customers.surname', 'customers.company', 'customers.email'),
'db_id_field' => 'id',
'edit_link' => 'index.php?admin_modul=admin_customer_editor&id=',
'toolbar' => array(
'delete' => 1,
'new' => 'index.php?admin_modul=admin_customer_editor',
'copy' => 0,
'select_all' => 1,
'edit' => 0,
'actions' => 0,
'csv_export' => 1,
'filter' => 1,
'search' => 1
),
'list_filter' => array(
array (
'db_field' => 'group_id',
'relational_operator' => '=',
'name' => 'Kundengruppe',
'values' => 'customer_group_name'
),
array (
'db_field' => 'customers.honorific',
'relational_operator' => '=',
'name' => 'Anrede',
'values' => 'salutation_values'
),
array (
'db_field' => 'customer_addresses.country',
'relational_operator' => '=',
'name' => 'Land',
'values' => 'country_values'
),
array (
'db_field' => 'locked',
'relational_operator' => '=',
'name' => 'Status',
'values' => 'customer_state_text'
),
array (
'db_field' => 'registration_date',
'relational_operator' => '>=',
'name' => 'Letzte Registrierungen bis vor',
'values' => 'registration_date_filter_values'
)
),
'edit_title' => 'Kunden',
'edit_fields' => array (
array(
'name' => 'Stammdaten',
'type' => 'form_title'
),
array(
'db_field' => 'number',
'name' => 'Kundennummer',
'type' => 'text'
),
array(
'db_field' => 'locked',
'name' => 'Freigabe',
'values' => 'active_values',
'type' => 'int'
),
array(
'db_field' => 'group_id',
'name' => 'Kundengruppe',
'values' => 'customer_group_values',
'type' => 'int'
),
array(
'db_field' => 'admin_role_id',
'name' => 'Rolle (Admin-Berechtigung)',
'values' => 'admin_role_values',
'type' => 'int'
),
array(
'name' => 'Kontaktdaten',
'type' => 'form_title'
),
array(
'db_field' => 'honorific',
'name' => 'Anrede',
'values' => 'salutation_values',
'type' => 'int'
),
array(
'db_field' => 'company',
'name' => 'Firma',
'type' => 'text'
),
array(
'db_field' => 'firstname',
'name' => 'Vorname',
'type' => 'text'
),
array(
'db_field' => 'surname',
'name' => 'Nachname',
'type' => 'text'
),
array(
'db_field' => 'phone',
'name' => 'Telefon',
'type' => 'text'
),
array(
'db_field' => 'mobile',
'name' => 'Handy',
'type' => 'text'
),
array(
'db_field' => 'fax',
'name' => 'Fax',
'type' => 'text'
),
array(
'db_field' => 'email',
'name' => 'E-Mail',
'type' => 'text'
),
array(
'db_field' => 'website',
'name' => 'Homepage',
'type' => 'text'
),
array(
'name' => 'Adressen',
'type' => 'form_title'
),
array(
'name' => 'Angaben für die Steuer',
'type' => 'form_title'
),
array(
'db_field' => 'tax_number',
'name' => 'Steuernummer',
'type' => 'text'
),
array(
'db_field' => 'tax_id',
'name' => 'Ust-ID',
'type' => 'text'
),
array(
'db_field' => 'eu_business',
'name' => 'EU-Geschäfte',
'values' => 'on_off_values',
'type' => 'int'
),
array(
'name' => 'Bankverbindung',
'type' => 'form_title'
),
array(
'db_field' => 'account_holder',
'name' => 'Kontoinhaber',
'type' => 'text'
),
array(
'db_field' => 'account_number',
'name' => 'Kontonummer',
'type' => 'text'
),
array(
'db_field' => 'bank',
'name' => 'Geldinstitut',
'type' => 'text'
),
array(
'db_field' => 'bank_number',
'name' => 'BLZ',
'type' => 'text'
),
array(
'db_field' => 'iban',
'name' => 'IBAN',
'type' => 'text'
),
array(
'db_field' => 'swift_bic',
'name' => 'SWIFT/BIC',
'type' => 'text'
),
array(
'name' => 'Zahlungsmethoden',
'type' => 'form_title'
),
array(
'db_field' => 'direct_debit_active',
'name' => 'Bankeinzug',
'values' => 'on_off_values',
'type' => 'int'
),
array(
'db_field' => 'rechnung_active',
'name' => 'Rechnung',
'values' => 'on_off_values',
'type' => 'int'
),
array(
'db_field' => 'skonto',
'name' => 'Skonto %',
'values' => 'skonto_values',
'type' => 'int'
),
array(
'name' => 'Weitere Kundendaten',
'type' => 'form_title'
),
array(
'db_field' => 'burth_date',
'name' => 'Geburtsdatum',
'type' => 'date'
),
array(
'db_field' => 'freetextfield1',
'name' => 'Freitextfeld 1',
'type' => 'text'
),
array(
'db_field' => 'freetextfield2',
'name' => 'Freitextfeld 2',
'type' => 'text'
),
array(
'db_field' => 'freetextfield3',
'name' => 'Freitextfeld 3',
'type' => 'text'
),
array(
'db_field' => 'freetextfield4',
'name' => 'Freitextfeld 4',
'type' => 'text'
),
array(
'db_field' => 'freetextfield4',
'name' => 'Freitextfeld 5',
'type' => 'text'
),
array(
'db_field' => 'freetextfield6',
'name' => 'Freitextfeld 6',
'type' => 'text'
),
array(
'db_field' => 'newsletter_sub',
'name' => 'Newsletter',
'values' => 'on_off_values',
'type' => 'int'
),
array(
'db_field' => 'has_item_export',
'name' => 'Artikel Export',
'values' => 'on_off_values',
'type' => 'int'
),
array(
'db_field' => 'info',
'name' => 'Notiz',
'type' => 'multitext'
),
array(
'name' => 'Passwort',
'type' => 'form_title'
),
array(
'db_field' => 'pass1',
'name' => 'Neues Passwort',
'type' => 'password'
),
array(
'db_field' => 'pass2',
'name' => 'Passwort wiederholen',
'type' => 'password'
),
),
'edit_pre_action' => array('manage_form_data'),
'edit_post_action' => array('customer_edit_action'),
'edit_mandatory_fields' => array('name'),
'edit_js_file' => 'admin_customer_edit.js',
'edit_toolbar' => array(
'close' => 'index.php?admin_modul=admin_object_edit&object=Customer',
'copy' => 0,
'undo' => 0,
'redo' => 0,
'save' => 1,
'new_password' => 1,
'first_activation' => 1,
'delete' => 1
)
);
private $customer_fields = array(
'number' => 'text',
'group_id' => 'integer',
'registration_date' => 'date',
'admin_settings' => 'text',
'honorific' => 'integer',
'company' => 'text',
'firstname' => 'text',
'surname' => 'text',
'burth_date' => 'date',
'default_address' => 'integer',
'phone' => 'text',
'fax' => 'text',
'mobile' => 'text',
'email' => 'text',
'website' => 'text',
'account_holder' => 'text',
'account_number' => 'text',
'bank' => 'text',
'bank_number' => 'text',
'iban' => 'text',
'swift_bic' => 'text',
'pass' => 'password',
'locked' => 'integer',
'tax_id' => 'text',
'tax_number' => 'text',
'admin_role_id' => 'integer',
'freetextfield1' => 'text',
'freetextfield2' => 'text',
'freetextfield3' => 'text',
'freetextfield4' => 'text',
'freetextfield5' => 'text',
'freetextfield6' => 'text',
'street' => 'text', // not in customer database
'house_number' => 'text', // not in customer database
'zip_code' => 'text', // not in customer database
'city' => 'text', // not in customer database
'country' => 'text', // not in customer database
'eu_business' => 'integer',
'skonto' => 'integer',
'newsletter_sub' => 'integer'
);
private $verification_types = array(
'regular_verification',
'regular_no_email_verification',
'company_verification',
'company_no_email_verification'
);
var $customer_id = 0;
var $language = 'de';// evt konfigurierbare standard sprache!!
// default rabattgruppe
var $rabattgruppe = 1;
// standard price group
var $preisgruppe = 1;
var $haendler = 0;
private $discount = array();
private $config;
private $_error;
private $validation_errors;
private $customergroups_object;
public function __construct($base_object) {
$this->config_object = $base_object->config;
$this->db = $base_object->db;
$this->base_object = $base_object;
$this->customergroups_object = new CustomerGroups($base_object);
$this->_error = '';
$this->validation_errors = array();
$begin = 32;
for ($i=1;$i<7;$i++) {
$this->list_table_config['edit_fields'][($begin + $i)]['name'] = '';
if (isset($this->base_object->config->shopConfiguration['customer_freetextfield'.$i.'_name'])) {
$this->list_table_config['edit_fields'][($begin + $i)]['name'] = $this->base_object->config->shopConfiguration['customer_freetextfield'.$i.'_name'];
}
}
}
public function registration_date_filter_values() {
$data = array();
for ($i=1;$i<32;$i++) {
$today = getdate((time() - (86400 * $i)));
$day = ($i == 1)?' Tag':' Tage';
$data[$today['year'].'-'.$today['mon'].'-'.$today['mday']] = $i.$day;
}
return $data;
}
public function on_off_values() {
return array (
'0' => 'Nein',
'1' => 'Ja'
);
}
public function salutation_values() {
return array (
'0' => 'Herr',
'1' => 'Frau',
'2' => 'Firma'
);
}
public function active_values() {
return array (
'0' => 'Ja',
'1' => 'Nein',
'-1' => 'Erstfreigabe mit Benachrichtigung'
);
}
public function skonto_values() {
$data = array ('0' => '-');
for ($i=1;$i<11;$i++) {
$data[$i] = $i;
}
return $data;
}
public function customer_state_text() {
return array (
'0' => 'aktiv',
'1' => 'gesperrt'
);
}
public function customer_group_name() {
$data = $this->customergroups_object->get_all_names();
$data['0'] = '#not defined#';
return $data;
}
public function customer_group_values() {
$data = $this->customergroups_object->get_all_names();
$data['0'] = '-';
return $data;
}
public function admin_role_values() {
include_once './core/admin_role.class.php';
$admin_role_object = new Admin_role($this->base_object);
$data = $admin_role_object->get_all_names();
$data['0'] = '-';
return $data;
}
public function country_values() {
include_once './core/main.class.php';
$country_object = new Country($this->base_object);
$data = $country_object->get_all_names();
return $data;
}
public function get_error() {
return $this->_error;
}
public function get_id() {
return $this->customer_id;
}
public function set_id($id) {
$this->customer_id = $id;
}
public function save($data, $object_id = false) {
if (isset($data['id'])) {
$id = $data['id'];
unset($data['id']);
$this->set_id($id);
return $this->update($data);
} else {
return $this->create($data);
}
}
public function login($loginname, $password, $login_save_session = false) {
if ($loginname && $password) {
$sql = "SELECT
id, pass AS password, email, locked, group_id, merchant, firstname, surname, admin_role_id
FROM
customers
WHERE
(email = '".$this->db->real_escape_string($loginname)."'";
$number = (int) $loginname;
if ($number) {
$sql .= " OR number='".$this->db->real_escape_string($number)."'";
} if ($this->base_object->config->shopConfiguration['guest_order_customer_group']) {
$sql .= ") AND group_id != ".$this->db->real_escape_string($this->base_object->config->shopConfiguration['guest_order_customer_group']);
} else {
$sql .= ")";
}
$result = $this->db->query($sql);
if ($result->num_rows == 1) {
$obj = $result->fetch_object();
if ($obj->password == md5($password)) {
if ($obj->locked == 1) {
$_SESSION['zugriff']['admin'] = false;
$_SESSION['uid'] = false;
$_SESSION['ewcms'] = false;
$_SESSION['new_login'] = false;
// account disabled
return 4;
} else {
$this->customer_id = $_SESSION['easyshop']['login']['id'] = $obj->id;
$_SESSION['easyshop']['login']['haendler'] = $obj->merchant;
$_SESSION['easyshop']['login']['name'] = $obj->name.' '.$obj->surname;
// if admin
if ($obj->admin_role_id > 0) {
$_SESSION['zugriff']['admin'] = 1;
$_SESSION['uid'] = $obj->id;
$_SESSION['ewcms'] = true;
$_SESSION['new_login'] = 'loggedandgood';
} else {
$_SESSION['zugriff']['admin'] = false;
$_SESSION['uid'] = false;
$_SESSION['ewcms'] = false;
$_SESSION['new_login'] = false;
}
// save session?
if ($login_save_session) {
setcookie("userid",$obj->id,time()+(3600*24*100));
}
// login ok
return 1;
}
} else {
$_SESSION['zugriff']['admin'] = false;
$_SESSION['uid'] = false;
$_SESSION['ewcms'] = false;
$_SESSION['new_login'] = false;
// wrong password
return 3;
}
} else {
$_SESSION['zugriff']['admin'] = false;
$_SESSION['uid'] = false;
$_SESSION['ewcms'] = false;
$_SESSION['new_login'] = false;
// no customer found
return 2;
}
}
return 0;
} // end login
public function logout() {
$_SESSION['zugriff']['admin'] = false;
$_SESSION['uid'] = false;
$_SESSION['ewcms'] = false;
$_SESSION['new_login'] = false;
unset($_COOKIE['userid']);
setcookie("userid", '',time() - 3600);
setcookie("userid", '',time() - 3600, '/');
unset($_SESSION['easyshop']['login']['id']);
return;
} // end logout
public function auth() {
if (!isset($_SESSION['easyshop']['login']['id']) && isset($_COOKIE['userid'])) {
$_SESSION['easyshop']['login']['id'] = $_COOKIE['userid'];
}
if (isset($_SESSION['easyshop']['login']['id'])) {
$result = $this->db->query("
SELECT
c.*,
ca.company AS default_address_company, ca.honorific AS default_address_honorific, ca.firstname AS default_address_firstname,
ca.surname AS default_address_surname, ca.street AS default_address_street, ca.house_number AS default_address_house_number,
ca.zip_code AS default_address_zip_code, ca.city AS default_address_city, ca.country AS default_address_country_id
FROM
customers c
LEFT JOIN
customer_addresses ca
ON
c.default_address = ca.id
WHERE
c.id = '".$_SESSION['easyshop']['login']['id']."'
");
if ($result->num_rows == 1) {
$object_data = $result->fetch_object();
// customer found
if ($object_data->locked == 1) {
// account disabled
unset($_SESSION['easyshop']['login']['id']);
return 4;
} else {
// account ok
$this->customer_id = $_SESSION['easyshop']['login']['id'] = $object_data->id;
$this->country_id = $object_data->default_address_country_id;
foreach ($object_data as $key => $value) {
$this->{$key} = $value;
}
if ($this->admin_role_id > 0) {
return 2;
}
else {
return 1;
}
}
} else {
unset($_SESSION['easyshop']['login']['id']);
}
}
return 0;
} // end auth
public function lost_password($email) {
if ($email) {
$sql = "SELECT id, email FROM customers WHERE email LIKE '".$this->db->real_escape_string(trim($email))."' AND group_id !=".$this->db->real_escape_string(trim($this->base_object->config->shopConfiguration['guest_order_customer_group']));
if ($this->base_object->config->shopConfiguration['guest_order_customer_group']) {
$sql .= " AND group_id != ".$this->db->real_escape_string($this->base_object->config->shopConfiguration['guest_order_customer_group']);
}
$result = $this->db->query($sql);
$obj = $result->fetch_object();
if ($obj->id) {
$new_password = $this->password_generator(4);
$this->db->query("UPDATE customers SET pass = '".md5($new_password)."' WHERE id = ".$obj->id);
$ticket_object = new Cs_ticket($this->base_object);
$data = array('password' => $new_password);
$ticket_object->event(10, $obj->id, false, $data);
return 1;
}
return -1;
}
return 0;
} // end lost_password
public function new_password($customer_id) {
if ($customer_id) {
// set new password
$new_password = $this->password_generator(4);
$sql = "UPDATE customers SET pass = '".md5($new_password)."' WHERE id = ".$customer_id;
$this->db->query($sql);
$ticket_object = new Cs_ticket($this->base_object);
$data = array(
'password' => $new_password
);
$ticket_object->event(16, $customer_id, false, $data);
return 1;
}
return false;
} // end lost_password
public function first_activation($customer_id) {
if ($customer_id) {
// send message to customer
$ticket_object = new Cs_ticket($this->base_object);
$ticket_object->event(12, $customer_id, false);
return 1;
}
return false;
}
public function check_data_diff($customer_id, $data) {
// get old customer data
$customer_data_old = $this->get_data($customer_id);
// get field data
$field_data = array();
foreach ($this->list_table_config['edit_fields'] as $field) {
$values = false;
if (isset($field['values'])) {
$values = $this->{$field['values']}();
}
$field_data[$field['db_field']] = array(
'name' => $field['name'],
'values' => $values
);
}
// check new data
$diff_data = array();
foreach ($data as $key => $value) {
$value_old = $customer_data_old->{$key};
if ($key != 'honorific' && $key != 'newsletter_sub' && $key != 'burth_date' && $key != 'pass' && $value != $value_old) {
if ($field_data[$key]['values']) {
$diff_data[$field_data[$key]['name']] = array(
'old' => $field_data[$key]['values'][$value_old],
'new' => $field_data[$key]['values'][$value]
);
}
else {
$diff_data[$field_data[$key]['name']] = array(
'old' => $value_old,
'new' => $value
);
}
/*$log_object = Logger::get_instance();
$log_object->info($key, $value.'---'.$value_old);*/
}
}
return $diff_data;
}
function make_diff_table($data) {
$html = '<table border="0" cellpadding="2" cellspacing="2">';
$html .= '<tr><th colspan="3">Persönliche Daten geändert</hd></tr><th>Feld</th><th>Alter Wert</th><th>Neuer Wert</th></tr>';
foreach ($data as $key => $val) {
$html .= '<tr><td>'.$key.'</td><td>'.$val['old'].'</td><td>'.$val['new'].'</td></tr>';
}
$html .= '</table>';
return $html;
}
public function get_data($id = false) {
$customer_id = false;
$customer_id = (is_numeric($id)) ? $id : $this->customer_id;
$sql = "
SELECT
c.*,
ca.company AS default_address_company, ca.honorific AS default_address_honorific, ca.firstname AS default_address_firstname,
ca.surname AS default_address_surname, ca.street AS default_address_street, ca.house_number AS default_address_house_number,
ca.zip_code AS default_address_zip_code, ca.city AS default_address_city, ca.country AS default_address_country_id,
cr.name AS default_address_countryname,
g.name AS group_name,
g.show_tax
FROM
customers c
LEFT JOIN
customer_addresses ca
ON
c.default_address = ca.id
LEFT JOIN
countries cr
ON
cr.id = ca.country
LEFT JOIN
customer_groups g
ON
c.group_id = g.id
WHERE
c.id = $customer_id
";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
$obj = $result->fetch_object();
$obj->files = $this->get_file_list();
return $obj;
}
return false;
} // end get_data
public function add_uploaded_file($file_data) {
$tmpname = $file_data['Filedata']['tmp_name'];
$name = $file_data['Filedata']['name'];
$type = $file_data['Filedata']['type'];
$hndFile = fopen($tmpname, "r");
$data = addslashes(fread($hndFile, filesize($tmpname)));
if ($data) {
$sql = "INSERT INTO customer_files (customer_id, file_name, file_data, file_type) VALUES
(".$this->customer_id.", '".$name."', '".$data."','".$type."')";
$this->db->query($sql);
}
return;
}
public function get_file_list() {
$sql = "SELECT * FROM customer_files WHERE
customer_id=".$this->db->real_escape_string($this->customer_id);
$result = $this->db->query($sql);
$data = array();
if ($result->num_rows > 0) {
while ($obj = $result->fetch_object()) {
$data[] = $obj;
}
}
return $data;
} // end get_file_list
public function get_file($file_id) {
$sql = "SELECT * FROM cusomer_files WHERE customer_id=".$this->customer_id." AND id=".$file_id;
$result = $this->db->query($sql);
while ($obj = $result->fetch_object()) {
$data[] = $obj;
}
return $data;
}
# password generator
public function password_generator($count=4) {
$conso=array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","x","y","z");
$vocal=array("a","e","i","o","u");
$pw="";
srand ((double)microtime()*1000000);
for ($f=1; $f<=$count; $f++) {
$pw.=$conso[rand(0,19)];
$pw.=$vocal[rand(0,4)];
}
return($pw);
} // end password_generator
function get_payments() {
$payments = array();
$sql = "SELECT name FROM payment WHERE aktiv = '1' ORDER BY rang";
$res = $this->db->query($sql);
if ($res && $res->num_rows > 0) {
while ($obj = $res->fetch_object()) {
$payments[] = $obj;
}
}
return $payments;
} // end get_payments
public function get_config_item($item_key) {
if (isset($this->admin_settings)) {
$config = array();
eval($this->admin_settings);
if (isset($config[$item_key])) {
return $config[$item_key];
}
return;
} else {
return;
}
}
public function set_config_item($item_key, $item_value) {
$config = array();
eval($this->admin_settings);
$config[$item_key] = $item_value;
$config_string = '$config = '.$this->php_2_string($config).';';
$this->admin_settings = $config_string;
$sql = 'UPDATE customers SET admin_settings = "'.$config_string.'" WHERE id = '.$this->customer_id;
$this->db->query($sql);
return;
}
private function php_2_string($data) {
$string = '';
if (is_array($data)) {
$string .= 'array(';
foreach ($data as $key => $value) {
if (is_array($value)) {
$string .= "'$key' => ".$this->php_2_string($value).", ";
} else {
$string .= "'$key' => '$value', ";
}
}
$string .= ")";
} else {
$string .= "'".$data."'";
}
return $string;
}
public function get_new($limit = false) {
$sql = "SELECT surname, firstname, email, number, id
FROM customers
WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= registration_date";
if ($limit) {
$sql .= " LIMIT ".$limit;
}
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_object()) {
$data[] = $row;
}
return $data;
}
return false;
} // end get_new
public function new_customer_count() {
$sql = "SELECT *FROM customers
WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= registration_date";
$result = $this->db->query($sql);
return $result->num_rows;
} // end new_customer_count
public function get_all() {
$result = $this->db->query("SELECT *
FROM customers");
while ($row = $result->fetch_object()) {
$data[] = $row;
}
return $data;
} // end get_all
public function data_filter($request) {
$data = array();
foreach ($this->customer_fields as $field_name => $var_type) {
if (isset($request[$field_name])) {
if ($var_type == 'text') {
$data[$field_name] = $request[$field_name];
} else if ($var_type == 'password') {
if ($request[$field_name]) {
$data[$field_name] = md5($request[$field_name]);
}
} else {
$data[$field_name] = (int)$request[$field_name];
}
}
}
return $data;
}
public function search($data) {
$sql = 'SELECT *
FROM customers';
$where = '';
if (isset($data['firstname'])) {
$where = Database::where($where, " firstname LIKE '%".$data['firstname']."%'");
}
if (isset($data['surname'])) {
$where = Database::where($where, " surname LIKE '%".$data['surname']."%'");
}
if (isset($data['company'])) {
$where = Database::where($where, " company LIKE '%".$data['company']."%'");
}
if (isset($data['street'])) {
$where = Database::where($where, " street LIKE '%".$data['street']."%'");
}
if (isset($data['city'])) {
$where = Database::where($where, " city LIKE '%".$data['city']."%'");
}
if (isset($data['email'])) {
$where = Database::where($where, " email LIKE '%".$data['email']."%'");
}
$result = $this->db->query($sql.$where);
while ($obj = $result->fetch_object()) {
$end[] = $obj;
}
return $end;
}
public function delete_by_id($id) {
$rs = $this->db->query("DELETE FROM customers WHERE id=$id;");
}
public function get_default_address($id) {
$sql = "SELECT default_address FROM customers WHERE id=".$id;
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
// PHP 8 FIX: Actually return the fetched value
$obj = $result->fetch_object();
return $obj ? $obj->default_address : false;
}
return false;
}
// TODO: who uses this and when can i get rid of it?
public function get_address_by_customer_id($id, $customer_group_id = false) {
$sql = "
SELECT
a.*,
c.name, c.shipping_area_id
FROM
customer_addresses a
LEFT JOIN
countries c
ON
a.country = c.id
WHERE
a.customer_id = ".$this->db->real_escape_string($id)."
";
$result = $this->db->query($sql);
if ($result) {
while ($obj = $result->fetch_object()) {
if ($obj != NULL) {
if ($customer_group_id) {
$sql = "SELECT * FROM country_customergroup_shippingarea
WHERE country_id = ".$obj->country." AND customer_group_id = $customer_group_id";
$result2 = $this->db->query($sql);
if ($result2->num_rows > 0) {
$obj->shipping_area_id = $result2->fetch_object()->shipping_area_id;
}
}
$return[$obj->id] = $obj;
}
}
}
if ($return) {
return $return;
}
return false;
} // end get_address_by_customer_id
public static function get_address_by_id($id) {
$db = Registry::get('base')->db;
$sql = "SELECT default_address FROM customers WHERE id=".$id;
$result = $db->query($sql);
if ($result->num_rows > 0) {
$default_address = $result->fetch_object()->default_address;
} else {
$default_address = false;
}
$sql = "SELECT * FROM customer_addresses WHERE customer_id = $id";
$result = $db->query($sql);
if ($result->num_rows > 0) {
$i = 0;
while ($obj = $result->fetch_object()) {
$obj->honorific_text = Honorific::get_honorific($obj->honorific);
$obj->country = Country::get_name_by_id($obj->country);
if ($default_address) {
if ($obj->id == $default_address) {
$obj->isDefault = 1;
} else {
$obj->isDefault = 0;
}
} else {
if ($i == 0) {
$obj->isDefault = 1;
} else {
$obj->isDefault = 0;
}
}
$return[] = $obj;
}
$i++;
}
if (is_array($return)) {
uasort($return, function($a, $b) {
if ($a->isDefault > $b->isDefault) {
return -1;
} else {
return 1;
}
});
}
if ($return) {
return $return;
}
return false;
} // end get_address_by_customer_id
// TODO: rewrite get_customer_addresses_by_id in admin_customer_actions to not use this class, needs lots o work in order edior
public static function get_address_by_id_hacked($id) {
$db = Registry::get('base')->db;
$sql = "SELECT default_address FROM customers WHERE id=".$id;
$result = $db->query($sql);
if ($result->num_rows > 0) {
$default_address = $result->fetch_object()->default_address;
} else {
$default_address = false;
}
$sql = "SELECT * FROM customer_addresses WHERE customer_id = $id";
$result = $db->query($sql);
if ($result->num_rows > 0) {
$i = 0;
while ($obj = $result->fetch_object()) {
$obj->honorific_text = Honorific::get_honorific($obj->honorific);
$obj->country_text = Country::get_name_by_id($obj->country);
if ($default_address) {
if ($obj->id == $default_address) {
$obj->isDefault = 1;
} else {
$obj->isDefault = 0;
}
} else {
if ($i == 0) {
$obj->isDefault = 1;
} else {
$obj->isDefault = 0;
}
}
$return[] = $obj;
}
$i++;
}
if ($return) {
return $return;
}
return false;
} // end get_address_by_customer_id
public function find_customer_like($data) {
$sql = "SELECT id, firstname, surname, company, number
FROM customers
WHERE CONCAT(firstname, surname, company, number) LIKE '%$data%'";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
while ($obj = $result->fetch_object()) {
$return[] = $obj;
}
return $return;
}
return false;
} // end find_customer_like
public function find_customer_by_id($id) {
$sql = "SELECT * FROM customers WHERE id = $id";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
return $result->fetch_object();
}
return false;
} // end find_customer_by_id
/**
* Get an Object with the customerdata (default address)
*
* @param int $id the customer id
*
* @return object with the customerdata
*/
public function get_by_id($id) {
$sql = "
SELECT
c.*,
ca.company AS default_address_company, ca.honorific AS default_address_honorific, ca.firstname AS default_address_firstname,
ca.surname AS default_address_surname, ca.street AS default_address_street, ca.house_number AS default_address_house_number,
ca.zip_code AS default_address_zip_code, ca.city AS default_address_city, ca.country AS default_address_country_id,
cr.name AS default_address_countryname
FROM
customers c
LEFT JOIN
customer_addresses ca
ON
c.default_address = ca.id
LEFT JOIN
countries cr
ON
cr.id = ca.country
WHERE
c.id = $id
";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
return $result->fetch_object();
}
return false;
}
public static function get_name_by_id($id, $with_honorific = true) {
$db = Registry::get('base')->db;
$sql = "SELECT honorific, firstname, surname
FROM customers
WHERE id = $id";
$result = $db->query($sql);
if ($result->num_rows > 0) {
$obj = $result->fetch_object();
if ($with_honorific) {
if ($obj->honorific == 0) {
$honorific = "Herr ";
} else if ($obj->honorific == 1) {
$honorific = "Frau ";
} else {
$honorific = "";
}
} else {
$honorific = "";
}
return $honorific.$obj->firstname.' '.$obj->surname;
}
return false;
}
// if insertet returns true, else false
public function add_address($data) {
$data = Database::clean($data);
$sql = Database::insert('customer_addresses', $data);
if ($this->db->query($sql)) {
return $this->db->insert_id;
}
return false;
} // end add_address
public static function set_standard_address($customer_id, $address_id) {
$db = Registry::get('base')->db;
$sql = "UPDATE customers
SET default_address=$address_id
WHERE id=$customer_id";
return $db->query($sql);
} // end set_standard_address
public static function delete_address($customer_id, $address_id) {
$db = Registry::get('base')->db;
$sql = "DELETE FROM customer_addresses
WHERE id=$address_id
AND customer_id=$customer_id";
return $db->query($sql);
}
public static function has_id($id) {
$db = Registry::get('base')->db;
$sql = "SELECT *
FROM customers
WHERE id = $id";
$result = $db->query($sql);
if ($result->num_rows > 0) {
return true;
}
return false;
}
public function set_last_interesting_item_groups ($group_id) {
setcookie('last_interesting_item_groups', $group_id, time() + 60 * 60 * 24 * 365);
return;
}
public function get_last_interesting_item_groups () {
if (isset($_COOKIE['last_interesting_item_groups'])) {
return $_COOKIE['last_interesting_item_groups'];
}
return;
}
public function create($data) {
if ($data) {
$customer_groups = $this->customergroups_object->get_all();
//$data['locked'] = !$customer_groups[$data['group_id']]->state_after_registration;
// is customer a guest
$customer_is_guest = 0;
if ($this->base_object->config->shopConfiguration['guest_order_customer_group'] == $customer_groups[$data['group_id']]->id) {
$customer_is_guest = 1;
}
// E-Mail test
if ($customer_is_guest) {
$data['number'] = '';
} else {
if (trim($data['email']) != '') {
$email_exists = $this->check_email($data['email']);
if ($email_exists) {
$this->_error = 'email exisitiert bereits';
return false;
}
}
// customer number
$data['number'] = $this->get_next_number();
}
// registration date
$today = getdate();
$data['registration_date'] = $today['year'].'-'.$today['mon'].'-'.$today['mday'];
// password
if ($data['pass'] != '') {
$data['pass'] = md5($data['pass']);
}
// birth date
if ($data['burth_date'] == '') {
$data['burth_date'] = '0000-00-00';
}
$sql = Database::insert('customers', $data);
$return = $this->db->query($sql);
if ($this->db->error) {
$log_object = Logger::get_instance();
$log_object->info('Error in /core/customer_class.php->create()', $this->db->error.', sql:'.$sql);
$count = 0;
}
if ($return) {
return $this->db->insert_id;
}
$this->_error = 'datenbank fehler';
return false;
}
$this->_error = 'keine daten';
return false;
} // end create
public function update($data) {
if ($data) {
if (isset($data['pass'])) {
$data['pass'] = md5($data['pass']);
}
$sql = "UPDATE customers SET ";
$size = count($data);
$i = 1;
foreach ($data as $key => $value) {
$sql .= $key;
$sql .= "=";
$sql .= "'".$this->db->real_escape_string($value)."'";
if ($i < $size) {
$sql .= ", ";
$i++;
}
}
$sql .= " WHERE id=".$this->db->real_escape_string($this->customer_id);
$result = $this->db->query($sql);
if ($this->db->error) {
$log_object = Logger::get_instance();
$log_object->info('Error in /core/customer_class.php->update()', $this->db->error.', sql:'.$sql);
$count = 0;
}
if ($result) {
return $this->customer_id;
}
}
return false;
} // end update
public function get_next_number() {
$sql = "SELECT number FROM customers ORDER BY number DESC LIMIT 1";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
return $result->fetch_object()->number + 1;
}
return 100001;
} // end get_next_number
public function verify($data, $is_update = false) {
$this->validation_errors = array();
if (isset($data['group_id'])) {
$group_id = $data['group_id'];
} else {
$group_id = false;
}
if ($group_id) {
$group_data = $this->customergroups_object->get_data($group_id);
if ($group_data) {
$verification_type = $group_data->verification_type;
if ($verification_type == '') {
$verification_type == 'regular_verification';
}
if ($verification_type == 'regular_verification') {
return $this->regular_verification($data, $is_update);
} else if ($verification_type == 'regular_no_email_verification') {
return $this->regular_no_email_verification($data, $is_update);
} else if ($verification_type == '') {
return $this->company_verification($data, $is_update);
} else if ($verification_type == '') {
return $this->company_no_email_verification($data, $is_update);
} else {
$this->_error = "unknow verification type";
return false;
}
} else {
$this->_error = "No group data";
return false;
}
}
$this->_error = "No group id";
return false;
} // end verify
public function regular_verification($data, $is_update) {
$is_valid = true;
// check first name
if (!isset($data['firstname']) && $data['firstname'] != '') {
$is_valid = false;
$this->validation_errors['firstname'] = array('set' => false);
}
// check surname
if (!isset($data['surname']) && $data['surname'] != '') {
$is_valid = false;
$this->validation_errors['surname'] = array('set' => false);
}
if (!$is_update) {
if (isset($data['email']) && $data['email'] != '') {
$email_in_use = $this->check_email($data['email']);
if ($email_in_use) {
$is_valid = false;
$this->validation_errors['email'] = array('used' => true);
}
} else {
$is_valid = false;
$this->validation_errors['email'] = array('set' => false);
}
// check pass1
if (!isset($data['pass']) && $data['pass']) {
$is_valid = false;
$this->validation_errors['pass'] = array('set' => false);
}
// check address
//$this->address_verification();
}
if ($is_valid) {
return $data;
}
return $is_valid;
} // end regular_verification
public function regular_no_email_verification($data, $is_update) {
$is_valid = true;
echo "<pre>";
print_r($data);
exit();
echo "in regular_no_email_verification";
exit();
} // end regular_no_email_verification
public function company_verification($data, $is_update) {
$is_valid = true;
echo "in company_verification";
exit();
} // end company_verification
public function company_no_email_verification($data, $is_update) {
$is_valid = true;
echo "in company_no_email_verification";
exit();
} // end company_no_email_verification
// TODO: hand this to customer address class in future
public function address_verification($address) {
echo "in address_verification";
} // end address_verification
public function check_email($email) {
$sql = "SELECT * FROM customers WHERE email='".$this->db->real_escape_string($email)."'";
if ($this->base_object->config->shopConfiguration['guest_order_customer_group']) {
$sql .= " AND group_id != ".$this->base_object->config->shopConfiguration['guest_order_customer_group'];
}
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
$obj = $result->fetch_object();
return $obj->id;
}
return false;
} // end check_email
public function get_all_newsletter_subscriber($customer_group) {
$sql = "SELECT
id, firstname, surname, company, email
FROM customers
WHERE group_id=".$this->db->real_escape_string($customer_group)." AND newsletter_sub=1";
$result = $this->db->query($sql);
if ($result->num_rows > 0) {
while ($obj = $result->fetch_object()) {
$return[] = $obj;
}
return $return;
}
return false;
} // end find_customer_like
}
?>