2012-09-10 11:26:26 +00:00
< ? php
2014-11-20 18:41:51 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
if ( ! class_exists ( 'WP_Importer' ) ) {
return ;
}
2012-09-10 11:26:26 +00:00
/**
* Tax Rates importer - import tax rates and local tax rates into WooCommerce .
*
2014-08-31 07:17:58 +00:00
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin / Importers
2014-11-20 18:41:51 +00:00
* @ version 2.3 . 0
2012-09-10 11:26:26 +00:00
*/
2014-11-20 18:41:51 +00:00
class WC_Tax_Rate_Importer extends WP_Importer {
public $id ;
public $file_url ;
public $import_page ;
public $delimiter ;
/**
* Constructor
*/
public function __construct () {
$this -> import_page = 'woocommerce_tax_rate_csv' ;
$this -> delimiter = empty ( $_POST [ 'delimiter' ] ) ? ',' : wc_clean ( $_POST [ 'delimiter' ] );
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* Registered callback function for the WordPress Importer
*
* Manages the three separate stages of the CSV import process
*/
public function dispatch () {
2014-08-31 07:17:58 +00:00
2014-11-20 18:41:51 +00:00
$this -> header ();
2014-08-31 07:17:58 +00:00
2014-11-20 18:41:51 +00:00
$step = empty ( $_GET [ 'step' ] ) ? 0 : ( int ) $_GET [ 'step' ];
2012-09-10 11:26:26 +00:00
2014-11-20 18:41:51 +00:00
switch ( $step ) {
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
case 0 :
$this -> greet ();
break ;
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
case 1 :
check_admin_referer ( 'import-upload' );
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
if ( $this -> handle_upload () ) {
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
if ( $this -> id ) {
$file = get_attached_file ( $this -> id );
} else {
$file = ABSPATH . $this -> file_url ;
2012-09-10 11:26:26 +00:00
}
2014-08-31 07:17:58 +00:00
2014-11-20 18:41:51 +00:00
add_filter ( 'http_request_timeout' , array ( $this , 'bump_request_timeout' ) );
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$this -> import ( $file );
}
break ;
2012-09-10 11:26:26 +00:00
}
2014-11-20 18:41:51 +00:00
$this -> footer ();
}
2012-12-03 10:57:36 +00:00
2014-11-20 18:41:51 +00:00
/**
* Import is starting
*/
private function import_start () {
if ( function_exists ( 'gc_enable' ) ) {
gc_enable ();
}
@ set_time_limit ( 0 );
@ ob_flush ();
@ flush ();
@ ini_set ( 'auto_detect_line_endings' , '1' );
}
2012-12-03 10:57:36 +00:00
2014-11-20 18:41:51 +00:00
/**
* format_data_from_csv function .
*
* @ param mixed $data
* @ param string $enc
* @ return string
*/
public function format_data_from_csv ( $data , $enc ) {
return ( $enc == 'UTF-8' ) ? $data : utf8_encode ( $data );
}
2012-12-03 10:57:36 +00:00
2014-11-20 18:41:51 +00:00
/**
* import function .
*
* @ param mixed $file
*/
public function import ( $file ) {
if ( ! is_file ( $file ) ) {
$this -> import_error ( __ ( 'The file does not exist, please try again.' , 'woocommerce' ) );
}
2014-08-31 07:17:58 +00:00
2014-11-20 18:41:51 +00:00
$this -> import_start ();
2012-11-27 16:22:47 +00:00
2015-01-15 15:29:14 +00:00
$loop = 0 ;
2015-02-18 17:34:03 +00:00
if ( ( $handle = fopen ( $file , " r " ) ) !== false ) {
2014-10-10 14:18:47 +00:00
2014-11-20 18:41:51 +00:00
$header = fgetcsv ( $handle , 0 , $this -> delimiter );
2014-11-20 17:08:17 +00:00
2014-11-20 18:41:51 +00:00
if ( 10 === sizeof ( $header ) ) {
2014-11-20 17:08:17 +00:00
2015-02-18 17:34:03 +00:00
while ( ( $row = fgetcsv ( $handle , 0 , $this -> delimiter ) ) !== false ) {
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
list ( $country , $state , $postcode , $city , $rate , $name , $priority , $compound , $shipping , $class ) = $row ;
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$tax_rate = array (
'tax_rate_country' => $country ,
'tax_rate_state' => $state ,
'tax_rate' => $rate ,
'tax_rate_name' => $name ,
'tax_rate_priority' => $priority ,
'tax_rate_compound' => $compound ? 1 : 0 ,
'tax_rate_shipping' => $shipping ? 1 : 0 ,
'tax_rate_order' => $loop ++ ,
'tax_rate_class' => $class
);
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$tax_rate_id = WC_Tax :: _insert_tax_rate ( $tax_rate );
WC_Tax :: _update_tax_rate_postcodes ( $tax_rate_id , wc_clean ( $postcode ) );
WC_Tax :: _update_tax_rate_cities ( $tax_rate_id , wc_clean ( $city ) );
2012-09-10 11:26:26 +00:00
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
} else {
$this -> import_error ( __ ( 'The CSV is invalid.' , 'woocommerce' ) );
2012-09-10 11:26:26 +00:00
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
fclose ( $handle );
2012-09-10 11:26:26 +00:00
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
// Show Result
echo ' < div class = " updated settings-error below-h2 " >< p >
2015-01-15 15:29:14 +00:00
' . sprintf( __( ' Import complete - imported < strong >% s </ strong > tax rates . ', ' woocommerce ' ), $loop ) . '
2014-11-20 18:41:51 +00:00
</ p ></ div > ' ;
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$this -> import_end ();
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* Performs post - import cleanup of files and the cache
*/
public function import_end () {
echo '<p>' . __ ( 'All done!' , 'woocommerce' ) . ' <a href="' . admin_url ( 'admin.php?page=wc-settings&tab=tax' ) . '">' . __ ( 'View Tax Rates' , 'woocommerce' ) . '</a>' . '</p>' ;
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
do_action ( 'import_end' );
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* Handles the CSV upload and initial parsing of the file to prepare for
* displaying author import options
*
* @ return bool False if error uploading or invalid file , true otherwise
*/
public function handle_upload () {
if ( empty ( $_POST [ 'file_url' ] ) ) {
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$file = wp_import_handle_upload ();
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
if ( isset ( $file [ 'error' ] ) ) {
$this -> import_error ( $file [ 'error' ] );
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
$this -> id = absint ( $file [ 'id' ] );
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
} elseif ( file_exists ( ABSPATH . $_POST [ 'file_url' ] ) ) {
$this -> file_url = esc_attr ( $_POST [ 'file_url' ] );
} else {
$this -> import_error ();
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
return true ;
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* header function .
*/
public function header () {
echo '<div class="wrap"><div class="icon32 icon32-woocommerce-importer" id="icon-woocommerce"><br></div>' ;
echo '<h2>' . __ ( 'Import Tax Rates' , 'woocommerce' ) . '</h2>' ;
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* footer function .
*/
public function footer () {
echo '</div>' ;
}
2012-09-10 11:26:26 +00:00
2014-11-20 18:41:51 +00:00
/**
* greet function .
*/
public function greet () {
echo '<div class="narrow">' ;
echo '<p>' . __ ( 'Hi there! Upload a CSV file containing tax rates to import the contents into your shop. Choose a .csv file to upload, then click "Upload file and import".' , 'woocommerce' ) . '</p>' ;
echo '<p>' . sprintf ( __ ( 'Tax rates need to be defined with columns in a specific order (10 columns). <a href="%s">Click here to download a sample</a>.' , 'woocommerce' ), WC () -> plugin_url () . '/dummy-data/sample_tax_rates.csv' ) . '</p>' ;
$action = 'admin.php?import=woocommerce_tax_rate_csv&step=1' ;
$bytes = apply_filters ( 'import_upload_size_limit' , wp_max_upload_size () );
$size = size_format ( $bytes );
$upload_dir = wp_upload_dir ();
if ( ! empty ( $upload_dir [ 'error' ] ) ) :
?> <div class="error"><p><?php _e( 'Before you can upload your import file, you will need to fix the following error:', 'woocommerce' ); ?></p>
< p >< strong >< ? php echo $upload_dir [ 'error' ]; ?> </strong></p></div><?php
else :
?>
< form enctype = " multipart/form-data " id = " import-upload-form " method = " post " action = " <?php echo esc_attr(wp_nonce_url( $action , 'import-upload')); ?> " >
< table class = " form-table " >
< tbody >
< tr >
< th >
< label for = " upload " >< ? php _e ( 'Choose a file from your computer:' , 'woocommerce' ); ?> </label>
</ th >
< td >
< input type = " file " id = " upload " name = " import " size = " 25 " />
< input type = " hidden " name = " action " value = " save " />
< input type = " hidden " name = " max_file_size " value = " <?php echo $bytes ; ?> " />
< small >< ? php printf ( __ ( 'Maximum size: %s' , 'woocommerce' ), $size ); ?> </small>
</ td >
</ tr >
< tr >
< th >
< label for = " file_url " >< ? php _e ( 'OR enter path to file:' , 'woocommerce' ); ?> </label>
</ th >
< td >
< ? php echo ' ' . ABSPATH . ' ' ; ?> <input type="text" id="file_url" name="file_url" size="25" />
</ td >
</ tr >
< tr >
< th >< label >< ? php _e ( 'Delimiter' , 'woocommerce' ); ?> </label><br/></th>
< td >< input type = " text " name = " delimiter " placeholder = " , " size = " 2 " /></ td >
</ tr >
</ tbody >
</ table >
< p class = " submit " >
< input type = " submit " class = " button " value = " <?php esc_attr_e( 'Upload file and import', 'woocommerce' ); ?> " />
</ p >
</ form >
< ? php
endif ;
echo '</div>' ;
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* Show import error and quit
* @ param string $message
*/
private function import_error ( $message = '' ) {
echo '<p><strong>' . __ ( 'Sorry, there has been an error.' , 'woocommerce' ) . '</strong><br />' ;
if ( $message ) {
echo esc_html ( $message );
2012-09-10 11:26:26 +00:00
}
2014-11-20 18:41:51 +00:00
echo '</p>' ;
$this -> footer ();
die ();
}
2012-11-27 16:22:47 +00:00
2014-11-20 18:41:51 +00:00
/**
* Added to http_request_timeout filter to force timeout at 60 seconds during import
*
* @ param int $val
* @ return int 60
*/
public function bump_request_timeout ( $val ) {
return 60 ;
2012-09-10 11:26:26 +00:00
}
2013-05-14 09:33:19 +00:00
}