| Server IP : 146.59.209.152 / Your IP : 216.73.216.152 Web Server : Apache System : Linux webm009.cluster131.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : monpetu ( 144298) PHP Version : 7.4.33 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/monpetu/www/ipprint/wp-content/plugins/order-tracking/includes/ |
Upload File : |
<?php
/**
* Class to handle all order database interactions for the Order Tracking plugin
*/
if ( !defined( 'ABSPATH' ) )
exit;
if ( !class_exists( 'ewdotpOrderManager' ) ) {
class ewdotpOrderManager {
// The name of the orders table, set in the constructor
public $orders_table_name;
// The name of the orders statuses table, set in the constructor
public $order_statuses_table_name;
// The name of the meta table, set in the constructor
public $meta_table_name;
// Array containing the arguments for the query
public $args = array();
// Array containing retrieved order objects
public $orders = array();
public function __construct() {
global $wpdb;
$this->orders_table_name = $wpdb->prefix . "EWD_OTP_Orders";
$this->order_statuses_table_name = $wpdb->prefix . "EWD_OTP_Order_Statuses";
$this->meta_table_name = $wpdb->prefix . "EWD_OTP_Fields_Meta";
if ( get_transient( 'ewd-otp-update-tables' ) ) {
add_action( 'plugins_loaded', array( $this, 'create_tables' ) );
}
}
/**
* Creates the tables used to store orders and their meta information
* @since 3.0.0
*/
public function create_tables() {
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$sql = "CREATE TABLE $this->orders_table_name (
Order_ID mediumint(9) NOT NULL AUTO_INCREMENT,
Order_Name text DEFAULT '' NOT NULL,
Order_Number text DEFAULT '' NOT NULL,
Order_Status text DEFAULT '' NOT NULL,
Order_External_Status text DEFAULT '' NOT NULL,
Order_Location text DEFAULT '' NOT NULL,
Order_Notes_Public text DEFAULT '' NOT NULL,
Order_Notes_Private text DEFAULT '' NOT NULL,
Order_Customer_Notes text DEFAULT '' NOT NULL,
Order_Email text DEFAULT '' NOT NULL,
Order_Phone_Number text DEFAULT '' NOT NULL,
Sales_Rep_ID mediumint(9) DEFAULT 0 NOT NULL,
Customer_ID mediumint(9) DEFAULT 0 NOT NULL,
WooCommerce_ID mediumint(9) DEFAULT 0 NOT NULL,
Zendesk_ID mediumint(9) DEFAULT 0 NOT NULL,
Order_Status_Updated datetime DEFAULT '0000-00-00 00:00:00' NULL,
Order_Display text DEFAULT '' NOT NULL,
Order_Payment_Price text DEFAULT '' NOT NULL,
Order_Payment_Completed text DEFAULT '' NOT NULL,
Order_PayPal_Receipt_Number text DEFAULT '' NOT NULL,
Order_View_Count mediumint(9) DEFAULT 0 NOT NULL,
Order_Tracking_Link_Clicked text DEFAULT '' NOT NULL,
Order_Tracking_Link_Code text DEFAULT '' NOT NULL,
UNIQUE KEY id (Order_ID)
)
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
dbDelta($sql);
$sql = "CREATE TABLE $this->order_statuses_table_name (
Order_Status_ID mediumint(9) NOT NULL AUTO_INCREMENT,
Order_ID mediumint(9) DEFAULT 0 NOT NULL,
Order_Status text DEFAULT '' NOT NULL,
Order_Location text DEFAULT '' NOT NULL,
Order_Internal_Status text DEFAULT '' NOT NULL,
Order_Status_Created datetime DEFAULT '0000-00-00 00:00:00' NULL,
UNIQUE KEY id (Order_Status_ID)
)
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
dbDelta($sql);
$sql = "CREATE TABLE $this->meta_table_name (
Meta_ID mediumint(9) NOT NULL AUTO_INCREMENT,
Field_ID mediumint(9) DEFAULT '0',
Order_ID mediumint(9) DEFAULT '0',
Customer_ID mediumint(9) DEFAULT '0',
Sales_Rep_ID mediumint(9) DEFAULT '0',
Meta_Value text DEFAULT '' NOT NULL,
UNIQUE KEY id (Meta_ID)
)
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
/**
* Returns a single order given its order ID
* @since 3.0.0
*/
public function get_order_from_id( $order_id ) {
global $wpdb;
$db_order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->orders_table_name WHERE Order_ID=%d", $order_id ) );
return $db_order;
}
/**
* Returns a single order given its Zendesk ID
* @since 3.0.0
*/
public function get_order_from_zendesk_id( $zendesk_id ) {
global $wpdb;
$db_order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->orders_table_name WHERE Zendesk_ID=%d", $zendesk_id ) );
return ! empty( $db_order ) ? $db_order : null;
}
/**
* Returns a single order given its WooCommerce ID
* @since 3.0.0
*/
public function get_order_from_woocommerce_id( $post_id ) {
global $wpdb;
$db_order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->orders_table_name WHERE WooCommerce_ID=%d", $post_id ) );
return ! empty( $db_order ) ? $db_order : null;
}
/**
* Returns a single order given its order number
* @since 3.0.0
*/
public function get_order_from_tracking_number( $order_number ) {
global $wpdb;
$db_order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->orders_table_name WHERE Order_Number=%s", $order_number ) );
return ! empty( $db_order ) ? $db_order : null;
}
/**
* Returns orders matching the arguments supplied
* @since 3.0.0
*/
public function get_matching_orders( $args ) {
$this->orders = array();
$defaults = array(
'orders_per_page' => 20,
'order' => 'ASC',
'paged' => 1,
'date_range' => '',
);
$this->args = wp_parse_args( $args, $defaults );
$this->prepare_args();
$this->run_query();
return $this->orders;
}
/**
* Return the counts for orders being displayed on the admin orders page
* @since 3.0.0
*/
public function get_order_counts( $args ) {
global $wpdb;
global $ewd_otp_controller;
$this->args = $args;
$this->prepare_args();
$args = $this->args;
$query_string = "SELECT Order_Status, count( * ) AS num_orders
FROM $this->orders_table_name
WHERE 1=%d
";
$query_args = array(1);
if ( ! empty( $args['number'] ) ) {
$query_string .= " AND Order_Number=%s";
$query_args[] = sanitize_text_field( $args['number'] );
}
if ( ! empty( $args['display'] ) ) {
$query_string .= " AND Order_Display=%s";
$query_args[] = 'Yes';
}
if ( ! empty( $args['after'] ) ) {
$query_string .= " AND Order_Status_Updated>=%s";
$query_args[] = $args['after'];
}
if ( ! empty( $args['before'] ) ) {
$query_string .= " AND Order_Status_Updated<=%s";
$query_args[] = $args['before'];
}
if ( ! empty( $args['date'] ) ) {
$query_string .= " AND DATE(Order_Status_Updated)=%s";
$query_args[] = $args['date'];
}
$query_string .= " GROUP BY Order_Status";
$count_results = $wpdb->get_results( $wpdb->prepare( $query_string, $query_args ) );
$statuses = ewd_otp_decode_infinite_table_setting( $ewd_otp_controller->settings->get_setting( 'statuses' ) );
$counts = array();
foreach( $statuses as $status ) {
$counts[ sanitize_title( $status->status, '', 'ewd_otp' ) ] = 0;
}
foreach ( $count_results as $count ) {
$counts[ sanitize_title( $count->Order_Status, '', 'ewd_otp' ) ] = $count->num_orders;
}
$counts['total'] = array_sum( $counts );
return $counts;
}
/**
* Prepares the arguments before the query is run
* @since 3.0.0
*/
public function prepare_args() {
$args = $this->args;
if ( is_string( $args['date_range'] ) ) {
if ( !empty( $args['start_date'] ) || !empty( $args['end_date'] ) ) {
if ( !empty( $args['start_date'] ) ) {
$args['after'] = sanitize_text_field( $args['start_date'] ) . ( ( isset( $args['start_time'] ) and $args['start_time'] ) ? $args['start_time'] : '' );
}
if ( !empty( $args['end_date'] ) ) {
$args['before'] = sanitize_text_field( $args['end_date'] ) . ( ( isset( $args['end_time'] ) and $args['end_time'] ) ? $args['end_time'] : ' 23:59' );
}
} elseif ( $args['date_range'] === 'today' ) {
$args['after'] = date( 'Y-m-d H:i:s', strtotime( 'today midnight' ) );
$args['before'] = date( 'Y-m-d H:i:s', strtotime( 'tomorrow midnight' ) );
} elseif ( $args['date_range'] === 'week' ) {
$args['after'] = date( 'Y-m-d H:i:s', strtotime( 'monday this week' ) );
$args['before'] = date( 'Y-m-d H:i:s', strtotime( 'sunday this week' ) );
} elseif ( $args['date_range'] === 'past' ) {
$args['before'] = date( 'Y-m-d H:i:s', strtotime( 'now' ) );
}
}
$this->args = $args;
return $this->args;
}
/**
* Create and run the SQL query based on the arguments received
* @since 3.0.0
*/
public function run_query() {
global $wpdb;
$args = $this->args;
$query_string = "SELECT * FROM $this->orders_table_name WHERE 1=%d";
$query_args = array( 1 );
if ( ! empty( $args['id'] ) ) {
$query_string .= " AND Order_ID=%d";
$query_args[] = intval( $args['id'] );
}
if ( ! empty( $args['name'] ) ) {
$query_string .= " AND Order_Name=%s";
$query_args[] = $args['name'];
}
if ( ! empty( $args['number'] ) ) {
$query_string .= " AND Order_Number=%s";
$query_args[] = $args['number'];
}
if ( ! empty( $args['location'] ) ) {
$query_string .= " AND Order_Location=%s";
$query_args[] = $args['location'];
}
if ( ! empty( $args['status'] ) ) {
if( is_array( $args['status'] ) ) {
$status_placeholder = implode( ', ', array_fill( 0, count( $args['status'] ), '%s' ) );
$query_string .= " AND Order_Status IN ( $status_placeholder )";
$query_args = array_merge( $query_args, $args['status'] );
}
else {
$query_string .= " AND Order_Status=%s";
$query_args[] = $args['status'];
}
}
if ( ! empty( $args['location'] ) ) {
if( is_array( $args['location'] ) ) {
$location_placeholder = implode( ', ', array_fill( 0, count( $args['location'] ), '%s' ) );
$query_string .= " AND Order_Location IN ( $location_placeholder )";
$query_args = array_merge( $query_args, $args['location'] );
}
else {
$query_string .= " AND Order_Location=%s";
$query_args[] = $args['location'];
}
}
if ( ! empty( $args['email'] ) ) {
$query_string .= " AND Order_Email=%s";
$query_args[] = $args['email'];
}
if ( ! empty( $args['customer'] ) ) {
if( is_array( $args['customer'] ) ) {
$cstm_plchldr = implode( ', ', array_fill( 0, count( $args['customer'] ), '%d' ) );
$query_string .= " AND Customer_ID IN ( $cstm_plchldr )";
$query_args = array_merge( $query_args, $args['customer'] );
}
else {
$query_string .= " AND Customer_ID=%d";
$query_args[] = intval( $args['customer'] );
}
}
if ( ! empty( $args['sales_rep'] ) ) {
if( is_array( $args['sales_rep'] ) ) {
$sls_rp_plchldr = implode( ', ', array_fill( 0, count( $args['sales_rep'] ), '%d' ) );
$query_string .= " AND Sales_Rep_ID IN ( $sls_rp_plchldr )";
$query_args = array_merge( $query_args, $args['sales_rep'] );
}
else {
$query_string .= " AND Sales_Rep_ID=%d";
$query_args[] = intval( $args['sales_rep'] );
}
}
if ( ! empty( $args['display'] ) ) {
if ( strtolower( $args['display'] ) == 'no' ){
$query_string .= " AND Order_Display=%s";
$query_args[] = 'No';
}
else {
$query_string .= " AND Order_Display=%s";
$query_args[] = 'Yes';
}
}
if ( ! empty( $args['payment_completed'] ) ) {
$query_string .= " AND Order_Payment_Completed=%s";
$query_args[] = $args['payment_completed'];
}
if ( ! empty( $args['after'] ) ) {
$query_string .= " AND Order_Status_Updated>=%s";
$query_args[] = $args['after'];
}
if ( ! empty( $args['before'] ) ) {
$query_string .= " AND Order_Status_Updated<=%s";
$query_args[] = $args['before'];
}
if ( ! empty( $args['date'] ) ) {
$query_string .= " AND DATE(Order_Status_Updated)=%s";
$query_args[] = $args['date'];
}
if ( ! empty( $args['orderby'] ) ) {
$args['orderby'] = $args['orderby'] == 'date' ? 'Order_Status_Updated' : $args['orderby'];
$query_string .= ' ORDER BY ' . esc_sql( $args['orderby'] ) . ' ' . ( strtolower( $args['order'] ) == 'desc' ? 'DESC' : 'ASC' );
}
if ( $args['orders_per_page'] > 0 ) {
$query_string .= ' LIMIT ' . intval( ( $args['paged'] - 1 ) * $args['orders_per_page'] ) . ', ' . intval( $args['orders_per_page'] );
}
$db_orders = $wpdb->get_results( $wpdb->prepare( $query_string, $query_args ) );
foreach ( $db_orders as $db_order ) {
$order = new ewdotpOrder();
$order->load_order( $db_order );
$this->orders[] = $order;
}
}
/**
* Returns the value for a given field/order id pair
* @since 3.0.0
*/
public function get_order_status_history( $order_id ) {
global $wpdb;
return $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $this->order_statuses_table_name WHERE Order_ID=%d ORDER BY Order_Status_Created", $order_id ) );
}
/**
* Returns the value for a given field/order id pair
* @since 3.0.0
*/
public function get_order_field( $field, $order_id ) {
global $wpdb;
$db_order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->orders_table_name WHERE Order_ID=%d", $order_id ) );
$order = new ewdotpOrder();
$order->load_order( $db_order );
return ! empty( $order->$field ) ? $order->$field : '';
}
/**
* Returns the value for a given custom_field/order pair
* @since 3.0.0
*/
public function get_field_value( $custom_field_id, $order_id ) {
global $wpdb;
return $wpdb->get_var( $wpdb->prepare( "SELECT Meta_Value FROM $this->meta_table_name WHERE Field_ID=%d AND Order_ID=%d ORDER BY Meta_ID DESC", $custom_field_id, $order_id ) );
}
/**
* Accepts an order object, inserts it into the database, and returns the ID of the newly inserted order
* @since 3.0.0
*/
public function insert_order( $order ) {
global $wpdb;
global $ewd_otp_controller;
$query_args = array(
'Order_Name' => ! empty( $order->name ) ? $order->name : '',
'Order_Number' => ! empty( $order->number ) ? $order->number : '',
'Order_Status' => ! empty( $order->status ) ? $order->status : '',
'Order_External_Status' => ! empty( $order->external_status ) ? $order->external_status : '',
'Order_Location' => ! empty( $order->location ) ? $order->location : '',
'Order_Notes_Public' => ! empty( $order->notes_public ) ? $order->notes_public : '',
'Order_Notes_Private' => ! empty( $order->notes_private ) ? $order->notes_private : '',
'Order_Customer_Notes' => ! empty( $order->customer_notes ) ? $order->customer_notes : '',
'Order_Email' => ! empty( $order->email ) ? $order->email : '',
'Order_Phone_Number' => ! empty( $order->phone_number ) ? $order->phone_number : '',
'Customer_ID' => ! empty( $order->customer ) ? $order->customer : 0,
'Sales_Rep_ID' => ! empty( $order->sales_rep ) ? $order->sales_rep : 0,
'WooCommerce_ID' => ! empty( $order->woocommerce_id ) ? $order->woocommerce_id : 0,
'Zendesk_ID' => ! empty( $order->zendesk_id ) ? $order->zendesk_id : 0,
'Order_Status_Updated' => ! empty( $order->status_updated ) ? $order->status_updated : date( 'Y-m-d H:i:s' ),
'Order_Display' => ! empty( $order->display ) ? 'Yes' : 'No',
'Order_Payment_Price' => ! empty( $order->payment_price ) ? $order->payment_price : '',
'Order_Payment_Completed' => ! empty( $order->payment_completed ) ? $order->payment_completed : '',
'Order_PayPal_Receipt_Number' => ! empty( $order->paypal_receipt_number ) ? $order->paypal_receipt_number : '',
'Order_View_Count' => ! empty( $order->views ) ? $order->views : 0,
'Order_Tracking_Link_Clicked' => ! empty( $order->tracking_link_clicked ) ? 'Yes' : 'No',
'Order_Tracking_Link_Code' => ! empty( $order->tracking_link_code ) ? $order->tracking_link_code : '',
);
$wpdb->insert(
$this->orders_table_name,
$query_args
);
$order_id = $wpdb->insert_id;
if ( ! $order_id ) { return $order_id; }
$custom_fields = $ewd_otp_controller->settings->get_order_custom_fields();
foreach ( $custom_fields as $custom_field ) {
if ( empty( $order->custom_fields[ $custom_field->id ] ) ) { continue; }
$query_args = array(
'Field_ID' => $custom_field->id,
'Order_ID' => $order_id,
'Meta_Value' => $order->custom_fields[ $custom_field->id ]
);
$wpdb->insert(
$this->meta_table_name,
$query_args
);
}
return $order_id;
}
/**
* Accepts an order object, updates it in the database, and returns the ID if successful or false otherwise
* @since 3.0.0
*/
public function update_order( $order ) {
global $wpdb;
global $ewd_otp_controller;
if ( empty( $order->id ) ) { return false; }
$query_args = array(
'Order_Name' => ! empty( $order->name ) ? $order->name : '',
'Order_Number' => ! empty( $order->number ) ? $order->number : '',
'Order_Status' => ! empty( $order->status ) ? $order->status : '',
'Order_External_Status' => ! empty( $order->external_status ) ? $order->external_status : '',
'Order_Location' => ! empty( $order->location ) ? $order->location : '',
'Order_Notes_Public' => ! empty( $order->notes_public ) ? $order->notes_public : '',
'Order_Notes_Private' => ! empty( $order->notes_private ) ? $order->notes_private : '',
'Order_Customer_Notes' => ! empty( $order->customer_notes ) ? $order->customer_notes : '',
'Order_Email' => ! empty( $order->email ) ? $order->email : '',
'Order_Phone_Number' => ! empty( $order->phone_number ) ? $order->phone_number : '',
'Customer_ID' => ! empty( $order->customer ) ? $order->customer : 0,
'Sales_Rep_ID' => ! empty( $order->sales_rep ) ? $order->sales_rep : 0,
'WooCommerce_ID' => ! empty( $order->woocommerce_id ) ? $order->woocommerce_id : 0,
'Zendesk_ID' => ! empty( $order->zendesk_id ) ? $order->zendesk_id : 0,
'Order_Status_Updated' => ! empty( $order->status_updated ) ? $order->status_updated : date( 'Y-m-d H:i:s' ),
'Order_Display' => ! empty( $order->display ) ? 'Yes' : 'No',
'Order_Payment_Price' => ! empty( $order->payment_price ) ? $order->payment_price : '',
'Order_Payment_Completed' => ! empty( $order->payment_completed ) ? 'Yes' : 'No',
'Order_PayPal_Receipt_Number' => ! empty( $order->paypal_receipt_number ) ? $order->paypal_receipt_number : '',
'Order_View_Count' => ! empty( $order->views ) ? $order->views : 0,
'Order_Tracking_Link_Clicked' => ! empty( $order->tracking_link_clicked ) ? 'Yes' : 'No',
'Order_Tracking_Link_Code' => ! empty( $order->tracking_link_code ) ? $order->tracking_link_code : '',
);
$wpdb->update(
$this->orders_table_name,
$query_args,
array( 'Order_ID' => $order->id )
);
$custom_fields = $ewd_otp_controller->settings->get_order_custom_fields();
foreach ( $custom_fields as $custom_field ) {
$wpdb->get_var( $wpdb->prepare( "SELECT Meta_Value from $this->meta_table_name WHERE Field_ID=%d AND Order_ID=%d ORDER BY Meta_ID DESC", $custom_field->id, $order->id ) );
$update = $wpdb->num_rows ? true : false;
if ( empty( $order->custom_fields[ $custom_field->id ] ) ) {
$where_args = array(
'Field_ID' => $custom_field->id,
'Order_ID' => $order->id,
);
$wpdb->delete(
$this->meta_table_name,
$where_args
);
}
elseif ( $update ) {
$query_args = array(
'Meta_Value' => $order->custom_fields[ $custom_field->id ]
);
$where_args = array(
'Field_ID' => $custom_field->id,
'Order_ID' => $order->id,
);
$wpdb->update(
$this->meta_table_name,
$query_args,
$where_args
);
}
else {
$query_args = array(
'Meta_Value' => $order->custom_fields[ $custom_field->id ],
'Field_ID' => $custom_field->id,
'Order_ID' => $order->id,
);
$wpdb->insert(
$this->meta_table_name,
$query_args
);
}
}
return $order->id;
}
/**
* Adds a new order status to the database
* @since 3.0.0
*/
public function update_order_status( $order ) {
global $wpdb;
$query_args = array(
'Order_ID' => $order->id,
'Order_Status' => ! empty( $order->status ) ? $order->status : '',
'Order_Location' => ! empty( $order->location ) ? $order->location : '',
'Order_Internal_Status' => ! empty( $order->status ) ? $order->status : '',
'Order_Status_Created' => ! empty( $order->status_updated ) ? $order->status_updated : date( 'Y-m-d H:i:s' ),
);
$wpdb->insert(
$this->order_statuses_table_name,
$query_args
);
}
/**
* Removs an existing order status
* @since 3.0.1
*/
public function delete_order_status( $order_status_id ) {
global $wpdb;
$wpdb->delete(
$this->order_statuses_table_name,
array( 'Order_Status_ID' => $order_status_id)
);
}
/**
* Accepts an order id, deletes the corresponding order
* @since 3.0.0
*/
public function delete_order( $order_id ) {
global $wpdb;
$wpdb->delete(
$this->orders_table_name,
array( 'Order_ID' => $order_id )
);
$wpdb->delete(
$this->order_statuses_table_name,
array( 'Order_ID' => $order_id )
);
$wpdb->delete(
$this->meta_table_name,
array( 'Order_ID' => $order_id )
);
}
/**
* Accepts an order id, sets the payment_received field for the corresponding order to Yes
* @since 3.0.0
*/
public function set_order_paid( $order_id ) {
global $wpdb;
$query_args = array(
'Order_Payment_Completed' => 'Yes'
);
$wpdb->update(
$this->orders_table_name,
$query_args,
array( 'Order_ID' => $order_id )
);
}
/**
* Accepts an order id, updates the status of the corresponding order
* @since 3.0.0
*/
public function set_order_status( $order_id, $status ) {
global $wpdb;
$order = new ewdotpOrder();
$order->load_order_from_id( $order_id );
$order->set_status( $status );
}
/**
* Increment the views for a given order_id
* @since 3.0.4
*/
public function increase_order_views( $order_id ) {
global $wpdb;
$wpdb->query( $wpdb->prepare( "UPDATE $this->orders_table_name SET Order_View_Count=Order_View_Count+1 WHERE Order_ID=%d", $order_id ) );
}
/**
* Accepts an email and order id, and verify that they match the saved data,
* @since 3.0.0
*/
public function verify_order_email( $email, $order_id ) {
global $wpdb;
$order_email = $wpdb->get_var( $wpdb->prepare( "SELECT Order_Email FROM $this->orders_table_name WHERE Order_ID=%d", $order_id ) );
if ( $order_email == $email ) {
return true;
}
return false;
}
}
}