221 lines
7.4 KiB
PHP
221 lines
7.4 KiB
PHP
<?php
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Class Wiaas_User
|
|
*/
|
|
class Wiaas_User {
|
|
|
|
public static function init() {
|
|
include_once dirname( __FILE__ ) . '/user/class-wiaas-user-profile.php';
|
|
|
|
add_action('init', array(__CLASS__, 'load_user_organization'));
|
|
add_action('plugins_loaded', array(__CLASS__, 'remove_default_user_groups'), 30);
|
|
add_action('woocommerce_rest_insert_customer', array(__CLASS__, 'add_meta_data_to_customer'), 10, 3);
|
|
|
|
add_filter('woocommerce_rest_prepare_customer', array(__CLASS__, 'transform_rest_customer'), 10, 3);
|
|
add_filter('jwt_auth_token_before_dispatch', array(__CLASS__, 'transform_jwt_token_response'), 10, 2);
|
|
}
|
|
|
|
/**
|
|
* Fires after a customer is created or updated via the REST API.
|
|
*
|
|
* @param WP_User $customer Data used to create the customer.
|
|
* @param WP_REST_Request $request Request object.
|
|
* @param boolean $creating True when creating customer, false when updating customer.
|
|
*/
|
|
public static function add_meta_data_to_customer($customer, $request, $creating){
|
|
if (isset($request['phone'])){
|
|
update_user_meta( $customer->ID, 'phone', $request['phone'] );
|
|
}
|
|
|
|
if (isset($request['vatCode'])){
|
|
update_user_meta( $customer->ID, 'vat_code', $request['vatCode']);
|
|
}
|
|
|
|
if (isset($request['companyName'])){
|
|
update_user_meta( $customer->ID, 'company_name', $request['companyName']);
|
|
}
|
|
|
|
if (isset($request['deliveryAddress'])){
|
|
$received_address = json_decode($request['deliveryAddress']);
|
|
$delivery_addresses = get_user_meta($customer->ID, 'delivery_addresses', true) ?: [];
|
|
|
|
if ($received_address->id){
|
|
$updated = array(
|
|
'id' => $received_address->id,
|
|
'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected),
|
|
'deliveryMail' => $received_address->deliveryMail,
|
|
'idCountrySelected' => $received_address->idCountrySelected,
|
|
'city' => $received_address->city,
|
|
'detailedAddress' => $received_address->detailedAddress,
|
|
'zipCode' => $received_address->zipCode
|
|
);
|
|
foreach($delivery_addresses as $key => $address){
|
|
if ($address['id'] === $received_address->id){
|
|
$delivery_addresses[$key] = $updated;
|
|
break;
|
|
}
|
|
}
|
|
}else{
|
|
$new_delivery_address = array(
|
|
'id' => time(),
|
|
'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected),
|
|
'deliveryMail' => $received_address->deliveryMail,
|
|
'idCountrySelected' => $received_address->idCountrySelected,
|
|
'city' => $received_address->city,
|
|
'detailedAddress' => $received_address->detailedAddress,
|
|
'zipCode' => $received_address->zipCode
|
|
);
|
|
|
|
array_push($delivery_addresses, $new_delivery_address);
|
|
}
|
|
|
|
update_user_meta( $customer->ID, 'delivery_addresses', $delivery_addresses);
|
|
//delete_user_meta ($customer->ID, 'delivery_addresses');
|
|
}
|
|
|
|
if (isset($request['billingAddress'])){
|
|
$received_address = json_decode($request['billingAddress']);
|
|
$billing_addresses = get_user_meta($customer->ID, 'billing_addresses', true) ?: [];
|
|
|
|
if ($received_address->id){
|
|
$updated = array(
|
|
'id' => $received_address->id,
|
|
'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected),
|
|
'deliveryMail' => $received_address->deliveryMail,
|
|
'idCountrySelected' => $received_address->idCountrySelected,
|
|
'city' => $received_address->city,
|
|
'detailedAddress' => $received_address->detailedAddress,
|
|
'zipCode' => $received_address->zipCode,
|
|
'firstName' => $received_address->firstName,
|
|
'lastName' => $received_address->lastName,
|
|
'invoiceMail' => $received_address->invoiceMail
|
|
);
|
|
foreach($billing_addresses as $key => $address){
|
|
if ($address['id'] === $received_address->id){
|
|
$billing_addresses[$key] = $updated;
|
|
break;
|
|
}
|
|
}
|
|
}else{
|
|
$new_billing_address = array(
|
|
'id' => time(),
|
|
'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected),
|
|
'deliveryMail' => $received_address->deliveryMail,
|
|
'idCountrySelected' => $received_address->idCountrySelected,
|
|
'city' => $received_address->city,
|
|
'detailedAddress' => $received_address->detailedAddress,
|
|
'zipCode' => $received_address->zipCode,
|
|
'firstName' => $received_address->firstName,
|
|
'lastName' => $received_address->lastName,
|
|
'invoiceMail' => $received_address->invoiceMail
|
|
);
|
|
|
|
array_push($billing_addresses, $new_billing_address);
|
|
}
|
|
|
|
update_user_meta( $customer->ID, 'billing_addresses', $billing_addresses);
|
|
//delete_user_meta ($customer->ID, 'delivery_addresses');
|
|
}
|
|
|
|
if (isset($request['removeDeliveryAddress'])){
|
|
$addressID = $request['removeDeliveryAddress'];
|
|
$delivery_addresses = get_user_meta($customer->ID, 'delivery_addresses', true) ?: [];
|
|
$counter = 0;
|
|
foreach($delivery_addresses as $key => $address){
|
|
if ($address['id'] == $addressID){
|
|
array_splice($delivery_addresses, $counter, 1);
|
|
break;
|
|
}
|
|
$counter++;
|
|
}
|
|
update_user_meta( $customer->ID, 'delivery_addresses', $delivery_addresses);
|
|
}
|
|
|
|
if (isset($request['removeBillingAddress'])){
|
|
$addressID = $request['removeBillingAddress'];
|
|
$billing_addresses = get_user_meta($customer->ID, 'billing_addresses', true) ?: [];
|
|
$counter = 0;
|
|
foreach($billing_addresses as $key => $address){
|
|
if ($address['id'] == $addressID){
|
|
array_splice($billing_addresses, $counter, 1);
|
|
break;
|
|
}
|
|
$counter++;
|
|
}
|
|
|
|
update_user_meta( $customer->ID, 'billing_addresses', $billing_addresses);
|
|
}
|
|
|
|
}
|
|
|
|
public static function load_user_organization() {
|
|
if (class_exists('WP_User_Taxonomy')) {
|
|
require_once dirname( __FILE__ ) . '/user/class-wiaas-user-organization.php';
|
|
|
|
new Wiaas_User_Organization();
|
|
}
|
|
}
|
|
|
|
public static function remove_default_user_groups() {
|
|
remove_action( 'init', 'wp_register_default_user_group_taxonomy' );
|
|
remove_action( 'init', 'wp_register_default_user_type_taxonomy' );
|
|
}
|
|
|
|
/**
|
|
* Apply wiaas custom transformation on retrieved JSON customer object
|
|
*
|
|
* @param $response
|
|
* @param $order
|
|
* @param $request
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function transform_rest_customer($response, $order, $request) {
|
|
$data = $response->get_data();
|
|
$user_id = $data['id'];
|
|
$result = array(
|
|
'id' => $user_id,
|
|
'idCompany' => 0,
|
|
'isCompanyAdmin' => 1,
|
|
'mail' => $data['email'],
|
|
'name' => $data['first_name'] . ' ' . $data['last_name'],
|
|
'phone' => get_user_meta($user_id, 'phone', true),
|
|
'companyName' => get_user_meta($user_id, 'company_name', true),
|
|
'vatCode' => get_user_meta($user_id, 'vat_code', true),
|
|
'billingAddresses' => get_user_meta($user_id, 'billing_addresses', true) ?: [],
|
|
'deliveryAddresses' => get_user_meta($user_id, 'delivery_addresses', true) ?: [],
|
|
'userType' => $data['role']
|
|
);
|
|
|
|
return new WP_REST_Response($result);
|
|
}
|
|
|
|
/**
|
|
* Apply wiaas custom transformation on JWT token response
|
|
*
|
|
* @param $data
|
|
* @param $user
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function transform_jwt_token_response($data, $user) {
|
|
return new WP_REST_Response(array(
|
|
'token' => $data['token'],
|
|
'userInfo' => array(
|
|
'wiaas_id_user' => $user->ID,
|
|
'wiaas_is_company_admin' => 1, //TODO: don't hardcode this
|
|
'wiaas_user_full_name' => $user->first_name . ' ' . $user->last_name,
|
|
'wiaas_user_type' => $user->roles,
|
|
'wiaas_username' => $user->data->user_login
|
|
)
|
|
));
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
Wiaas_User::init(); |