51f85fa4 by Jeff Balicki

xport

Signed-off-by: Jeff <jeff@gotenzing.com>
1 parent 24351a69
Showing 157 changed files with 23584 additions and 0 deletions
<?php
/**
* The admin-specific functionality of the plugin.
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/admin
*/
/**
* The admin-specific functionality of the plugin.
*
* Defines the plugin name, version, and two examples hooks for how to
* enqueue the admin-specific stylesheet and JavaScript.
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/admin
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Admin_Basic')){
class Wt_Import_Export_For_Woo_Admin_Basic {
/**
* The ID of this plugin.
*
* @since 1.0.0
* @access private
* @var string $plugin_name The ID of this plugin.
*/
private $plugin_name;
/**
* The version of this plugin.
*
* @since 1.0.0
* @access private
* @var string $version The current version of this plugin.
*/
private $version;
/*
* module list, Module folder and main file must be same as that of module name
* Please check the `register_modules` method for more details
*/
public static $modules=array(
'history',
'export',
'import',
);
public static $existing_modules=array();
public static $addon_modules=array();
/*
* WebToffee data identifier, this variable used for identify that the data is belongs to WebToffee Import/Export.
* Use1: used in evaluation operators prefix.
* Use2: We can use this for identify WebToffee operations (@[]/+-*) etc
* !!!important: Do not change this value frequently
*/
public static $wt_iew_prefix = 'wt_iew';
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $plugin_name The name of this plugin.
* @param string $version The version of this plugin.
*/
public function __construct( $plugin_name, $version ) {
$this->plugin_name = $plugin_name;
$this->version = $version;
}
/**
* Register the stylesheets for the admin area.
*
* @since 1.0.0
*/
public function enqueue_styles() {
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed()){
wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/wt-import-export-for-woo-admin.css', array(), $this->version, 'all' );
}
}
/**
* Register the JavaScript for the admin area.
*
* @since 1.0.0
*/
public function enqueue_scripts()
{
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed()){
/* enqueue scripts */
if(!function_exists('is_plugin_active'))
{
include_once(ABSPATH.'wp-admin/includes/plugin.php');
}
if(is_plugin_active('woocommerce/woocommerce.php'))
{
wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/wt-import-export-for-woo-admin.js', array( 'jquery', 'jquery-tiptip'), $this->version, false );
}else
{
wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/wt-import-export-for-woo-admin.js', array( 'jquery'), $this->version, false );
wp_enqueue_script(WT_IEW_PLUGIN_ID_BASIC.'-tiptip', WT_U_IEW_PLUGIN_URL.'admin/js/tiptip.js', array('jquery'), WT_U_IEW_VERSION, false);
}
$order_addon_active_status = false;
$product_addon_active_status = false;
if(is_plugin_active( 'order-import-export-for-woocommerce/order-import-export-for-woocommerce.php' )){
$order_addon_active_status = true;
}
if(is_plugin_active( 'product-import-export-for-woo/product-import-export-for-woo.php' )){
$product_addon_active_status = true;
}
$params=array(
'nonces' => array(
'main' => wp_create_nonce(WT_IEW_PLUGIN_ID_BASIC),
),
'ajax_url' => admin_url('admin-ajax.php'),
'plugin_id' =>WT_IEW_PLUGIN_ID_BASIC,
'msgs'=>array(
'settings_success'=>__('Settings updated.'),
'all_fields_mandatory'=>__('All fields are mandatory'),
'settings_error'=>__('Unable to update Settings.'),
'template_del_error'=>__('Unable to delete template'),
'template_del_loader'=>__('Deleting template...'),
'value_empty'=>__('Value is empty.'),
'error'=>sprintf(__('An unknown error has occurred! Refer to our %stroubleshooting guide%s for assistance.'), '<a href="'.WT_IEW_DEBUG_BASIC_TROUBLESHOOT.'" target="_blank">', '</a>'),
'success'=>__('Success.'),
'loading'=>__('Loading...'),
'no_results_found'=>__('No results found.'),
'sure'=>__('Are you sure?'),
'use_expression'=>__('Apply'),
'cancel'=>__('Cancel'),
'hide_features'=>__('Hide features'),
'show_features'=>__('Show features'),
),
'pro_plugins' => array(
'order' => array(
'url' => "https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Order, Coupon, Subscription Export Import for WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/order-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/03/Order_SampleCSV.csv",
'is_active' => $order_addon_active_status
),
'coupon' => array(
'url' => "https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Order, Coupon, Subscription Export Import for WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/order-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2016/09/Coupon_Sample_CSV.csv",
'is_active' => $order_addon_active_status
),
'product' => array(
'url' => "https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Product Import Export Plugin For WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/product-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/03/Product_SampleCSV.csv",
'is_active' => $product_addon_active_status
),
'product_review' => array(
'url' => "https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Product Import Export Plugin For WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/product-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/04/product_review_SampleCSV.csv",
'is_active' => $product_addon_active_status
),
'product_categories' => array(
'url' => "https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Product Import Export Plugin For WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/product-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/09/Sample-CSV-of-product-categories.csv",
'is_active' => $product_addon_active_status
),
'product_tags' => array(
'url' => "https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Product Import Export Plugin For WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/product-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/09/Sample-CSV-with-product-tags.csv",
'is_active' => $product_addon_active_status
),
'user' => array(
'url' => "https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=User_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('WordPress Users & WooCommerce Customers Import Export'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/user-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2020/10/Sample_Users.csv",
'is_active' => true
),
'subscription' => array(
'url' => "https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=" . WT_U_IEW_VERSION,
'name' => __('Order, Coupon, Subscription Export Import for WooCommerce'),
'icon_url' => WT_U_IEW_PLUGIN_URL.'assets/images/gopro/order-ie.svg',
'sample_csv_url' => "https://www.webtoffee.com/wp-content/uploads/2021/04/Subscription_Sample_CSV.csv",
'is_active' => false
),
)
);
wp_localize_script($this->plugin_name, 'wt_iew_basic_params', $params);
}
}
/**
* Registers menu options
* Hooked into admin_menu
*
* @since 1.0.0
*/
public function admin_menu()
{
$menus=array(
'general-settings'=>array(
'menu',
__('General Settings'),
__('General Settings'),
apply_filters('wt_import_export_allowed_capability', 'import'),
WT_IEW_PLUGIN_ID_BASIC,
array($this,'admin_settings_page'),
'dashicons-controls-repeat',
56
)
);
$menus=apply_filters('wt_iew_admin_menu_basic',$menus);
$menu_order=array("export","export-sub","import","history","history_log");
$this->wt_menu_order_changer($menus,$menu_order);
$main_menu = reset($menus); //main menu must be first one
$parent_menu_key=$main_menu ? $main_menu[4] : WT_IEW_PLUGIN_ID_BASIC;
/* adding general settings menu */
$menus['general-settings-sub']=array(
'submenu',
$parent_menu_key,
__('General Settings'),
__('General Settings'),
apply_filters('wt_import_export_allowed_capability', 'import'),
WT_IEW_PLUGIN_ID_BASIC,
array($this, 'admin_settings_page')
);
if(count($menus)>0)
{
foreach($menus as $menu)
{
if($menu[0]=='submenu')
{
/* currently we are only allowing one parent menu */
add_submenu_page($parent_menu_key,$menu[2],$menu[3],$menu[4],$menu[5],$menu[6]);
}else
{
add_menu_page($menu[1],$menu[2],$menu[3],$menu[4],$menu[5],$menu[6],$menu[7]);
}
}
}
add_submenu_page( $parent_menu_key, esc_html__('Pro upgrade'), '<span class="wt-go-premium">' . esc_html__('Pro upgrade') . '</span>', 'import', $parent_menu_key . '-premium', array( $this, 'admin_upgrade_premium_settings' ) );
if(function_exists('remove_submenu_page')){
//remove_submenu_page(WT_PIEW_POST_TYPE, WT_PIEW_POST_TYPE);
}
}
function wt_menu_order_changer (&$arr, $index_arr) {
$arr_t=array();
foreach($index_arr as $i=>$v) {
foreach($arr as $k=>$b) {
if ($k==$v) $arr_t[$k]=$b;
}
}
$arr=$arr_t;
}
public function admin_settings_page()
{
include(plugin_dir_path( __FILE__ ).'partials/wt-import-export-for-woo-admin-display.php');
}
public function admin_upgrade_premium_settings()
{
wp_safe_redirect(admin_url('admin.php?page=wt_import_export_for_woo_basic#wt-pro-upgrade'));
exit();
}
/**
* Save admin settings and module settings ajax hook
*/
public function save_settings()
{
$out=array(
'status'=>false,
'msg'=>__('Error'),
);
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
$advanced_settings=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings();
$advanced_fields=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings_fields();
$validation_rule=Wt_Import_Export_For_Woo_Basic_Common_Helper::extract_validation_rules($advanced_fields);
$new_advanced_settings=array();
foreach($advanced_fields as $key => $value)
{
$form_field_name = isset($value['field_name']) ? $value['field_name'] : '';
$field_name=(substr($form_field_name,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$form_field_name;
$validation_key=str_replace('wt_iew_', '', $field_name);
if(isset($_POST[$field_name]))
{
$new_advanced_settings[$field_name]=Wt_Iew_Sh::sanitize_data($_POST[$field_name], $validation_key, $validation_rule);
}
}
$checkbox_items = array( 'wt_iew_enable_import_log', 'wt_iew_enable_history_auto_delete', 'wt_iew_include_bom' );
foreach ( $checkbox_items as $checkbox_item ){
$new_advanced_settings[$checkbox_item] = isset( $new_advanced_settings[$checkbox_item] ) ? $new_advanced_settings[$checkbox_item] : 0;
}
Wt_Import_Export_For_Woo_Basic_Common_Helper::set_advanced_settings($new_advanced_settings);
$out['status']=true;
$out['msg']=__('Settings Updated');
do_action('wt_iew_after_advanced_setting_update_basic', $new_advanced_settings);
}
echo json_encode($out);
exit();
}
/**
* Delete pre-saved temaplates entry from DB - ajax hook
*/
public function delete_template() {
$out = array(
'status' => false,
'msg' => __('Error'),
);
if (Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC)) {
if (isset($_POST['template_id'])) {
global $wpdb;
$template_id = absint($_POST['template_id']);
$tb = $wpdb->prefix . Wt_Import_Export_For_Woo_Basic::$template_tb;
$where = "=%d";
$where_data = array($template_id);
$wpdb->query($wpdb->prepare("DELETE FROM $tb WHERE id" . $where, $where_data));
$out['status'] = true;
$out['msg'] = __('Template deleted successfully');
$out['template_id'] = $template_id;
}
}
wp_send_json($out);
}
/**
Registers modules: admin
*/
public function admin_modules()
{
$wt_iew_admin_modules=get_option('wt_iew_admin_modules');
if($wt_iew_admin_modules===false)
{
$wt_iew_admin_modules=array();
}
foreach (self::$modules as $module) //loop through module list and include its file
{
$is_active=1;
if(isset($wt_iew_admin_modules[$module]))
{
$is_active=$wt_iew_admin_modules[$module]; //checking module status
}else
{
$wt_iew_admin_modules[$module]=1; //default status is active
}
$module_file=plugin_dir_path( __FILE__ )."modules/$module/$module.php";
if(file_exists($module_file) && $is_active==1)
{
self::$existing_modules[]=$module; //this is for module_exits checking
require_once $module_file;
}else
{
$wt_iew_admin_modules[$module]=0;
}
}
$out=array();
foreach($wt_iew_admin_modules as $k=>$m)
{
if(in_array($k, self::$modules))
{
$out[$k]=$m;
}
}
update_option('wt_iew_admin_modules',$out);
/**
* Add on modules
*/
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
foreach (self::$addon_modules as $module) //loop through module list and include its file
{
$plugin_file="wt-import-export-for-woo-$module/wt-import-export-for-woo-$module.php";
if(is_plugin_active($plugin_file))
{
$module_file=WP_PLUGIN_DIR."/wt-import-export-for-woo-$module/$module/$module.php";
if(file_exists($module_file))
{
self::$existing_modules[]=$module;
require_once $module_file;
}
}
}
$addon_modules_basic = array(
'user'=>'users-customers-import-export-for-wp-woocommerce',
'product'=>'product-import-export-for-woo',
'product_review'=>'product-import-export-for-woo',
'product_categories'=>'product-import-export-for-woo',
'product_tags'=>'product-import-export-for-woo',
'order'=>'order-import-export-for-woocommerce',
'coupon'=>'order-import-export-for-woocommerce',
'subscription'=>'order-import-export-for-woocommerce',
);
foreach ($addon_modules_basic as $module_key => $module_path)
{
if(is_plugin_active("{$module_path}/{$module_path}.php"))
{
$module_file=WP_PLUGIN_DIR."/{$module_path}/admin/modules/$module_key/$module_key.php";
if(file_exists($module_file))
{
self::$existing_modules[]=$module_key;
require_once $module_file;
}
}
}
}
public static function module_exists($module)
{
return in_array($module, self::$existing_modules);
}
/**
* Envelope settings tab content with tab div.
* relative path is not acceptable in view file
*/
public static function envelope_settings_tabcontent($target_id,$view_file="",$html="",$variables=array(),$need_submit_btn=0)
{
extract($variables);
?>
<div class="wt-iew-tab-content" data-id="<?php echo $target_id;?>">
<?php
if($view_file!="" && file_exists($view_file))
{
include_once $view_file;
}else
{
echo $html;
}
?>
<?php
if($need_submit_btn==1)
{
include WT_U_IEW_PLUGIN_PATH."admin/views/admin-settings-save-button.php";
}
?>
</div>
<?php
}
/**
* Plugin page action links
*/
public function plugin_action_links($links)
{
$links[] = '<a href="'.admin_url('admin.php?page='.WT_IEW_PLUGIN_ID_BASIC).'">'.__('Settings').'</a>';
$links[] = '<a href="https://www.webtoffee.com/" target="_blank">'.__('Documentation').'</a>';
$links[] = '<a href="https://www.webtoffee.com/support/" target="_blank">'.__('Support').'</a>';
return $links;
}
public function tools_wtexport_text(){
echo "<p><b>" . sprintf( __( 'Export WordPress users and WooCommerce customers in CSV format using <a href="%s">this exporter</a>.' ), admin_url( 'admin.php?page=wt_import_export_for_woo_basic_export&wt_to_export=user' ) ) . "</b></p>";
if( !is_plugin_active( 'order-import-export-for-woocommerce/order-import-export-for-woocommerce.php' ) ){
echo "<p><b>" . sprintf(
/* translators: %s: Order Import Export for WooCommerce plugin URL */
__( 'You can export WooCommerce orders and coupons in CSV format using the plugin <a href="%s" target="_blank">Order Export & Order Import for WooCommerce</a>.' ),
admin_url('plugin-install.php?tab=plugin-information&plugin=order-import-export-for-woocommerce')
) . "</b></p>";
}else{
echo "<p><b>" . sprintf( __( 'Export WooCommerce orders and coupons in CSV format using <a href="%s">this exporter</a>.' ), admin_url( 'admin.php?page=wt_import_export_for_woo_basic_export&wt_to_export=order' ) ) . "</b></p>";
}
if( !is_plugin_active( 'product-import-export-for-woo/product-import-export-for-woo.php' ) ){
echo "<p><b>" . sprintf(
/* translators: %s: Product Import Export for WooCommerce plugin URL */
__( 'You can export WooCommerce products, product categories, product tags and product reviews in CSV format using the plugin <a href="%s" target="_blank">Product Import Export for WooCommerce</a>.' ),
admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
) . "</b></p>";
}else{
echo "<p><b>" . sprintf( __( 'Export WooCommerce products, product categories, product tags and product reviews in CSV format using <a href="%s">this exporter</a>.' ), admin_url( 'admin.php?page=wt_import_export_for_woo_basic_export&wt_to_export=product' ) ) . "</b></p>";
}
}
/**
* Search for users and return json.
*/
public static function ajax_user_search() {
if (Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC)) {
if (!current_user_can('export')) {
wp_die(-1);
}
$term = isset($_POST['term']) ? (string) sanitize_text_field(wp_unslash($_POST['term'])) : '';
$limit = 0;
if (empty($term)) {
wp_die();
}
// If search is smaller than 3 characters, limit result set to avoid
// too many rows being returned.
if (3 > strlen($term)) {
$limit = 20;
} else {
$limit = 50;
}
$found_users = array();
$users = new WP_User_Query( apply_filters( 'wt_iew_user_search_query_args', array(
'search' => '*' . esc_attr($term) . '*',
'number' => $limit,
'search_columns' => array(
'user_login',
'user_email'
))
));
$users_found = $users->get_results();
foreach ($users_found as $user) {
$the_customer = get_userdata($user->ID);
/* translators: 1: user display name 2: user ID 3: user email */
$found_users[] = array('id' => $the_customer->ID, 'text' => sprintf(
/* translators: $1: user name, $2 user id, $3: user email */
esc_html__('%1$s (#%2$s - %3$s)'),
$the_customer->first_name . ' ' . $the_customer->last_name,
$the_customer->ID,
$the_customer->user_email
)
);
}
wp_send_json(apply_filters('wt_json_search_found_users', $found_users));
}
}
}
}
\ No newline at end of file
<?php
/**
* CSV reading section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Csvreader')){
class Wt_Import_Export_For_Woo_Basic_Csvreader
{
public $delimiter=',';
public $fgetcsv_esc_check=0;
public function __construct($delimiter=',')
{
$this->delimiter=$delimiter;
$this->delimiter=($this->delimiter=='tab' ? "\t" : $this->delimiter);
/* version 5.3.0 onwards 5th escaping argument introduced in `fgetcsv` function */
$this->fgetcsv_esc_check = (version_compare(PHP_VERSION, '5.3.0') >= 0);
}
/**
* Taking sample data for mapping screen preparation
* This function skip empty rows and take first two non empty rows
*/
public function get_sample_data($file, $grouping=false)
{
$use_mb = function_exists('mb_detect_encoding');
// Set locale
$enc = ($use_mb) ? mb_detect_encoding( $file, 'UTF-8, ISO-8859-1', true ) : false;
if($enc)
{
setlocale(LC_ALL, 'en_US.'.$enc);
}
@ini_set('auto_detect_line_endings', true);
$sample_data_key=array();
$sample_data_val=array();
$sample_data=array();
if(($handle=@fopen($file, "r"))!== false)
{
$row_count=0;
while(($row=($this->fgetcsv_esc_check) ? fgetcsv($handle, 0, $this->delimiter, '"', '"') : fgetcsv($handle, 0, $this->delimiter, '"') )!==false)
{
if(count(array_filter($row))==0)
{
continue;
}else
{
$row_count++;
}
if($row_count==1) //taking heading row
{
$sample_data_key=$row;
}else //taking data row
{
$sample_data_val=$row;
break; //only single data row needed
}
}
foreach($sample_data_key as $k => $key)
{
if(!$key)
{
continue;
}
$val=(isset($sample_data_val[$k]) ? $this->format_data_from_csv($sample_data_val[$k], $enc) : '');
/* removing BOM like non characters */
$wt_remove_bom = apply_filters('wt_import_csv_parser_keep_bom', true);
if ($wt_remove_bom) {
$key = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $key);
} else {
$key = wt_removeBomUtf8_basic($key);
}
if($grouping)
{
if(strrpos($key, ':')!==false)
{
$key_arr=explode(":", $key);
if(count($key_arr)>1)
{
$meta_key=$key_arr[0];
if(!isset($sample_data[$meta_key]))
{
$sample_data[$meta_key]=array();
}
$sample_data[$meta_key][$key]=$val;
}else
{
$sample_data[$key]=$val;
}
}else
{
$sample_data[$key]=$val;
}
}else
{
$sample_data[$key]=$val;
}
}
fclose($handle);
}
return $sample_data;
}
/**
* Get data from CSV as batch
*/
public function get_data_as_batch($file, $offset, $batch_count, $module_obj, $form_data)
{
$use_mb = function_exists('mb_detect_encoding');
// Set locale
$enc = ($use_mb) ? mb_detect_encoding( $file, 'UTF-8, ISO-8859-1', true ) : false;
if($enc)
{
setlocale( LC_ALL, 'en_US.' . $enc );
}
@ini_set('auto_detect_line_endings', true);
$out=array(
'response'=>false,
'offset'=>$offset,
'data_arr'=>array(),
);
if(($handle=@fopen($file, "r"))!== false)
{
/**
* taking head
*/
$head_arr=array();
while(($row=($this->fgetcsv_esc_check) ? fgetcsv($handle, 0, $this->delimiter, '"', '"') : fgetcsv($handle, 0, $this->delimiter, '"') )!==false)
{
if(count(array_filter($row))!=0) /* first non empty array */
{
$head_arr=$row;
if($offset==0) /* on first batch */
{
$offset_after_head=ftell($handle);
fseek($handle, $offset_after_head); /* skipping head row */
}
break;
}
}
$empty_head_columns=array();
foreach($head_arr as $head_key=>$head_val)
{
if(trim($head_val)=='')
{
$empty_head_columns[]=$head_key;
unset($head_arr[$head_key]);
}else
{
/* removing BOM like non characters */
$wt_remove_bom = apply_filters('wt_import_csv_parser_keep_bom', true);
if ($wt_remove_bom) {
$head_arr[$head_key]=preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $head_val);
} else {
$head_arr[$head_key]= wt_removeBomUtf8_basic($head_val);
}
}
}
/* moving the pointer to corresponding batch. If not first batch */
if($offset!=0)
{
fseek($handle, $offset);
}
$out_arr=array();
$row_count=0;
/* taking data */
while(($row=($this->fgetcsv_esc_check) ? fgetcsv($handle, 0, $this->delimiter, '"', '"') : fgetcsv($handle, 0, $this->delimiter, '"') )!==false)
{
$offset=ftell($handle); /* next offset */
/*
* Skipping empty rows
*/
if(count(array_filter($row))==0)
{
continue;
}
/*
* Remove values of empty head
*/
foreach($empty_head_columns as $key)
{
unset($row[$key]);
}
/*
* Creating associative array with heading and data
*/
$row_column_count=count($row);
$head_column_count=count($head_arr);
if($row_column_count<$head_column_count)
{
$empty_row=array_fill($row_column_count, ($head_column_count-$row_column_count), '');
$row=array_merge($row, $empty_row);
$empty_row=null;
unset($empty_row);
}
elseif($row_column_count>$head_column_count)
{
$row = array_slice($row, 0, $head_column_count); //IER-209
//continue;
}
/* clearing temp variables */
$row_column_count=$head_column_count=null;
unset($row_column_count, $head_column_count);
$head_arr = array_map('trim', $head_arr); //WUWCIEP-132
/* preparing associative array */
$data_row=array_combine($head_arr, $row);
$out_arr[]=$module_obj->process_column_val($data_row, $form_data);
//$out_arr[]=$data_row;
unset($data_row);
$row_count++;
if($row_count==$batch_count)
{
break;
}
}
fclose($handle);
$out=array(
'response'=>true,
'offset'=>$offset,
'rows_processed'=>$row_count,
'data_arr'=>$out_arr,
);
$head_arr=$form_data=$row=$out_arr=null;
unset($head_arr, $form_data, $row, $out_arr);
}
return $out;
}
protected function format_data_from_csv($data, $enc)
{
//return sanitize_text_field(( $enc == 'UTF-8' ) ? trim($data) : utf8_encode(trim($data))); sanitize_text_field stripping html content
return (( $enc == 'UTF-8' ) ? trim($data) : utf8_encode(trim($data)));
}
}
}
\ No newline at end of file
<?php
/**
* CSV writing section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Csvwriter')){
class Wt_Import_Export_For_Woo_Basic_Csvwriter
{
public $file_path='';
public $data_ar='';
public $csv_delimiter='';
public $use_bom=true;
public function __construct($file_path, $offset, $csv_delimiter=",", $use_bom=true)
{
$this->csv_delimiter=$csv_delimiter;
$this->file_path=$file_path;
$this->use_bom = $use_bom;
$this->get_file_pointer($offset);
}
/**
* This is used in XML to CSV converting
*/
public function write_row($row_data, $offset=0, $is_last_offset=false)
{
if($is_last_offset)
{
$this->close_file_pointer();
}else
{
if($offset==0) /* set heading */
{
$this->fput_csv($this->file_pointer, array_keys($row_data), $this->csv_delimiter);
}
$this->fput_csv($this->file_pointer, $row_data, $this->csv_delimiter);
}
}
/**
* Create CSV
*
*/
public function write_to_file($export_data, $offset, $is_last_offset, $to_export)
{
$this->export_data=$export_data;
$this->set_head($export_data, $offset, $this->csv_delimiter);
$this->set_content($export_data, $this->csv_delimiter);
$this->close_file_pointer();
}
private function get_file_pointer($offset)
{
if($offset==0)
{
$this->file_pointer=fopen($this->file_path, 'w');
$this->use_bom = apply_filters('wt_ier_include_bom_in_csv', $this->use_bom);
if($this->use_bom){
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
fwrite($this->file_pointer, $BOM); // NEW LINE
}
}else
{
$this->file_pointer=fopen($this->file_path, 'a+');
}
}
private function close_file_pointer()
{
if($this->file_pointer!=null)
{
fclose($this->file_pointer);
}
}
/**
* Escape a string to be used in a CSV context
*
* Malicious input can inject formulas into CSV files, opening up the possibility
* for phishing attacks and disclosure of sensitive information.
*
* Additionally, Excel exposes the ability to launch arbitrary commands through
* the DDE protocol.
*
* @see http://www.contextis.com/resources/blog/comma-separated-vulnerabilities/
* @see https://hackerone.com/reports/72785
*
* @param string $data CSV field to escape.
* @return string
*/
public function escape_data( $data )
{
$active_content_triggers = array( '=', '+', '-', '@' );
if ( in_array( mb_substr( $data, 0, 1 ), $active_content_triggers, true ) ) {
$data = "'" . $data;
}
return $data;
}
public function format_data( $data )
{
if ( ! is_scalar( $data ) ) {
if ( is_a( $data, 'WC_Datetime' ) ) {
$data = $data->date( 'Y-m-d G:i:s' );
} else {
$data = ''; // Not supported.
}
} elseif ( is_bool( $data ) ) {
$data = $data ? 1 : 0;
}
$use_mb = function_exists( 'mb_detect_encoding' );
if ( $use_mb ) {
$encoding = mb_detect_encoding( $data, 'UTF-8, ISO-8859-1', true );
$data = 'UTF-8' === $encoding ? $data : utf8_encode( $data );
}
return $this->escape_data( $data );
}
private function set_content($export_data, $delm=',')
{
if(isset($export_data) && isset($export_data['body_data']) && count($export_data['body_data'])>0)
{
$row_datas=array_values($export_data['body_data']);
foreach($row_datas as $row_data)
{
foreach($row_data as $key => $value)
{
$row_data[$key]=$this->format_data($value);
}
$this->fput_csv($this->file_pointer, $row_data, $delm);
}
}
}
private function set_head($export_data, $offset, $delm=',')
{
if($offset==0 && isset($export_data) && isset($export_data['head_data']) && count($export_data['head_data'])>0)
{
foreach($export_data['head_data'] as $key => $value)
{
$export_data['head_data'][$key]=$this->format_data($value);
}
$this->fput_csv($this->file_pointer, $export_data['head_data'], $delm);
}
}
private function fput_csv($fp, $row, $delm=',', $encloser='"' )
{
fputcsv($fp,$row,$delm,$encloser);
}
private function array_to_csv($arr, $delm=',', $encloser='"')
{
$fp=fopen('php://memory','rw');
foreach($arr as $row)
{
$this->fput_csv($fp, $row, $delm, $encloser);
}
rewind($fp);
$csv=stream_get_contents($fp);
fclose($fp);
return $csv;
}
}
}
\ No newline at end of file
<?php
/**
* Log writing section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Log')){
class Wt_Import_Export_For_Woo_Basic_Log
{
public static $log_dir=WP_CONTENT_DIR.'/webtoffee_iew_log';
public static $history_id='';
public function __construct()
{
}
/**
* Get given temp file path.
* If file name is empty then file path will return
*/
public static function get_file_path($file_name="")
{
if(!is_dir(self::$log_dir))
{
if(!mkdir(self::$log_dir, 0700))
{
return false;
}else
{
$files_to_create=array('.htaccess' => 'deny from all', 'index.php'=>'<?php // Silence is golden');
foreach($files_to_create as $file=>$file_content)
{
if(!file_exists(self::$log_dir.'/'.$file))
{
$fh=@fopen(self::$log_dir.'/'.$file, "w");
if(is_resource($fh))
{
fwrite($fh, $file_content);
fclose($fh);
}
}
}
}
}
return self::$log_dir.'/'.$file_name;
}
/**
* Checks a log file created for the history entry for current day
* @param int $history_id id of history entry
* @return string/bool if file found returns file name otherwise false
*/
public static function check_log_exists_for_entry($history_id)
{
$log_dir=self::get_file_path();
$exp='~^'.$history_id.'.*\.log$~';
$files = preg_grep($exp, scandir($log_dir));
if(count($files)>0) /* file exists */
{
foreach($files as $key => $value)
{
$file_name=pathinfo($value, PATHINFO_FILENAME);
$file_name_arr=explode('_', $file_name);
$file_date_time=end($file_name_arr);
$file_date_time_arr=explode(' ', $file_date_time);
$file_time=strtotime($file_date_time_arr[0]);
if($file_time) //file time exists
{
$today=strtotime(date('Y-m-d'));
$file_time=strtotime(date('Y-m-d', $file_time));
if($today==$file_time) //file exists with the current day
{
return $value;
}
}
}
}
return false;
}
/**
* Generate log file name
*
*/
public static function generate_file_name($post_type='', $action_type='', $history_id='')
{
$arr=array($history_id, $post_type);
if(defined( 'WT_IEW_CRON' )) /* this is a cron run so add a schedule prefix */
{
$arr[]='schedule';
}
$arr[]=$action_type;
$arr[]=date('Y-m-d h i s A'); /* if changing this format please consider `check_log_exists_for_entry` method */
$arr=array_filter($arr);
return implode("_", $arr).'.log';
}
}
}
\ No newline at end of file
<?php
/**
* Log reading section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Logreader')){
class Wt_Import_Export_For_Woo_Basic_Logreader
{
private $file_path='';
private $file_pointer=null;
private $mode='';
public function __construct()
{
}
public function init($file_path)
{
$mode = 'r';
$this->file_path=$file_path;
$this->mode=$mode;
$this->file_pointer=@fopen($file_path, $mode);
}
public function close_file_pointer()
{
if($this->file_pointer!=null)
{
fclose($this->file_pointer);
}
}
public function get_full_data($file_path)
{
$out=array(
'response'=>false,
'data_str'=>'',
);
$this->init($file_path);
if(!is_resource($this->file_pointer))
{
return $out;
}
$data=fread($this->file_pointer, filesize($file_path));
$this->close_file_pointer();
$out=array(
'response'=>false,
'data_str'=>$data,
);
return $out;
}
/**
* Read log file as batch
* @param string path of file to read
* @param int offset in bytes. default 0
* @param int total row in a batch. default 50
* @return array response, next offset, data array, finished or not flag
*/
public function get_data_as_batch($file_path, $offset=0, $batch_count=50)
{
$out=array(
'response'=>false,
'offset'=>$offset,
'data_arr'=>array(),
'finished'=>false, //end of file reached or not
);
$this->init($file_path);
if(!is_resource($this->file_pointer))
{
return $out;
}
fseek($this->file_pointer, $offset);
$row_count=0;
$next_offset=$offset;
$finished=false;
$data_arr=array();
while(($data=fgets($this->file_pointer))!==false)
{
$data=maybe_unserialize($data);
if(is_array($data))
{
$data_arr[]=$data;
$row_count++;
$next_offset=ftell($this->file_pointer);
}
if($row_count==$batch_count)
{
break;
}
}
if($next_offset==filesize($file_path))
{
$finished=true;
}
$this->close_file_pointer();
$out=array(
'response'=>true,
'offset'=>$next_offset,
'data_arr'=>$data_arr,
'finished'=>$finished,
);
return $out;
}
}
}
\ No newline at end of file
<?php
/**
* Log writing section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Logwriter')){
class Wt_Import_Export_For_Woo_Basic_Logwriter extends Wt_Import_Export_For_Woo_Basic_Log
{
private static $file_path='';
private static $file_pointer=null;
private static $mode='';
public function __construct()
{
}
public static function init($file_path, $mode="a+")
{
self::$file_path=$file_path;
self::$mode=$mode;
self::$file_pointer=@fopen($file_path, $mode);
}
public static function write_row($text, $is_writing_finished=false)
{
if(is_null(self::$file_pointer))
{
return;
}
@fwrite(self::$file_pointer, $text.PHP_EOL);
if($is_writing_finished)
{
self::close_file_pointer();
}
}
public static function close_file_pointer()
{
if(self::$file_pointer!=null)
{
fclose(self::$file_pointer);
}
}
/**
* Debug log writing function
* @param string $post_type post type
* @param string $action_type action type
* @param mixed $data array/string of data to write
*/
public static function write_log( $post_type, $action_type, $data ) {
//if ( Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings( 'enable_import_log' ) == 1 ) {
/**
* Checks log file created for the current day
*/
$old_file_name = self::check_log_exists_for_entry( self::$history_id );
if ( !$old_file_name ) {
$file_name = self::generate_file_name( $post_type, $action_type, self::$history_id );
} else {
$file_name = $old_file_name;
}
$file_path = self::get_file_path( $file_name );
self::init( $file_path );
$date_string = date_i18n( 'm-d-Y @ H:i:s' );
if ( is_array( $data ) ) {
foreach ( $data as $value ) {
self::write_row( $date_string . " - " . maybe_serialize( $value ) );
}
} else {
self::write_row( $date_string . " - " . $data );
}
//}
}
/**
* Import response log
* @param array $data array/string of import response data
* @param string $file_path import log file
*/
public static function write_import_log($data_arr, $file_path)
{
self::init($file_path);
foreach($data_arr as $key => $data)
{
self::write_row(maybe_serialize($data));
}
self::close_file_pointer();
}
}
}
\ No newline at end of file
/*! jQuery UI - v1.9.0 - 2012-10-05
* http://jqueryui.com
* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
* Copyright 2012 jQuery Foundation and other contributors; Licensed MIT */
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; }
.ui-accordion .ui-accordion-icons { padding-left: 2.2em; }
.ui-accordion .ui-accordion-noicons { padding-left: .7em; }
.ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; }
.ui-autocomplete { position: absolute; cursor: default; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
.ui-menu .ui-menu-item a.ui-state-focus,
.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
.ui-menu .ui-state-disabled a { cursor: default; }
/* icon support */
.ui-menu-icons { position: relative; }
.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
/* left-aligned */
.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
/* right-aligned */
.ui-menu .ui-menu-icon { position: static; float: right; }
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }
.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; z-index: 100; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
.ui-spinner-up { top: 0; }
.ui-spinner-down { bottom: 0; }
/* TR overrides */
span.ui-spinner { background: none; }
.ui-spinner .ui-icon-triangle-1-s {
/* need to fix icons sprite */
background-position:-65px -16px;
}
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tooltip {
padding:8px;
position:absolute;
z-index:9999;
-o-box-shadow: 0 0 5px #aaa;
-moz-box-shadow: 0 0 5px #aaa;
-webkit-box-shadow: 0 0 5px #aaa;
box-shadow: 0 0 5px #aaa;
}
/* Fades and background-images don't work well together in IE6, drop the image */
* html .ui-tooltip {
background-image: none;
}
body .ui-tooltip { border-width:2px; }
/* Component containers
----------------------------------*/
.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
.ui-widget-content a { color: #222222/*{fcContent}*/; }
.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
.ui-widget-header a { color: #222222/*{fcHeader}*/; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
\ No newline at end of file
.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #ddd;border-radius:0px;cursor:text;line-height: 1.5}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none;margin: 5px 5px 0 0}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
\ No newline at end of file
/**
* All of the CSS for your admin-specific functionality should be
* included in this file.
*/
/**
* Tab section
*/
.wt_iew_page_hd{ font-size:20px; }
.wt-iew-tab-head{ margin-right:0px; margin-top:20px; clear:both;}
.wt-iew-tab-container{ padding:15px; padding-bottom:0px; background:#fff; box-shadow:0px 2px 2px #ccc; float:left; box-sizing:border-box; width:100%; height:auto;}
.wt-iew-tab-head .nav-tab-active{ background: #fff; border-bottom: solid 1px #fff; }
.wt-iew-tab-head .nav-tab:focus{ box-shadow:none;}
.wt-iew-tab-content{ display:none; float:left; width:100%; height:auto; }
.wt_iew_sub_tab_container{float:left; width:100%; height:auto; padding-bottom:0px;}
.wt_iew_sub_tab{ display:inline-block; margin:0px;}
.wt_iew_sub_tab li{ display:inline-block; border-left: solid 1px #ccc; padding:3px 10px; cursor: pointer;}
.wt_iew_sub_tab_content{ display: none; float:left; width:100%; height:auto; }
.wt-iew-settings-header{border-bottom:dashed 1px #ccc; margin-left:-15px; margin-right:-15px; padding-top:0px;}
.wt-iew-settings-header h3{margin-top:0px; margin-left:15px; width:60%; display:inline-block;}
.wt-iew-settings-header .wt_iew_step_info{float:right; font-weight:bold; margin-right:15px; background:#dceff4; display:inline-block; padding:5px 10px; margin-top:-6px; margin-bottom:-15px; padding-bottom:6px; line-height:24px; border-radius:6px; }
.rtl .wt-iew-settings-header .wt_iew_step_info{float:right; margin-left:15px; }
.wt-iew-plugin-toolbar {
height: 40px;
width: 100%;
margin: 0;
padding: 0;
}
.wt-iew-plugin-toolbar .left {
float: left;
margin: 0;
padding: 0;
}
.wt-iew-plugin-toolbar .left img {
vertical-align: text-bottom;
margin-right: 10px;
}
.wt-iew-plugin-toolbar .right {
float: right;
margin: 0 10px 0 0;
padding: 0;
}
.wt-iew-plugin-toolbar.top {
margin-bottom: -5px;
}
.wt-iew-plugin-toolbar.bottom {
margin-top: 12px;
background: #f5f5f5;
border-top: 1px solid #ddd;
margin-left: -15px;
margin-right: -15px;
margin-bottom:0px;
padding:9px 15px;
}
.wt-iew-plugin-toolbar.top {
margin-top:-15px;
background: #f5f5f5;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
margin-left: -15px;
margin-right: -15px;
margin-bottom: -15px;
padding:15px;
}
.wt-iew-plugin-toolbar.bottom .button{padding:0.2rem 0.75rem; margin-top:2px; height:auto;}
/**
* Form section
*/
.wt_notify_msg{ position:fixed; width:300px; padding:15px; color:#fff; right:60px; top:0px; opacity:0; box-shadow:0px 2px 2px #333; border-radius:5px; z-index:1000000000;}
.wt_iew_overlayed_loader{ position:absolute; z-index:10000; background:rgba(255,255,255,.5); width:100%; height:auto; margin-left:-15px; margin-top:-15px;}
.wt_iew_loader_info_box{display:none; position:fixed; z-index:10001; width:300px; left:50%; top:50%; font-size:14px; font-weight:bold; background:#0073aa; text-align:center; line-height:20px; box-shadow:2px 2px 4px 0px #ccc; margin-left:-155px; margin-top:-45px; padding:10px 5px; color:#fff;}
.wt_iew_loader_info_box a{ color:#fff; text-decoration:underline; cursor:pointer; }
.wt_iew_loader_info_box .wt_iew_info_box_title{ font-size:16px; }
.wt_iew_loader_info_box .wt_iew_info_box_finished_text{ display:inline-block; font-weight:normal; margin-top:0px; }
.wf-help-links li{ float:left; padding:40px; margin:20px; display: inline-block; text-align: center; box-shadow:1px 1px 5px 1px rgba(0,0,0,.1); width: 185px; height: 245px;}
.wf-help-links li a{ text-decoration: none; height: 28px !important; margin-top: 20px; }
.wf-help-links li img{
margin-top: 15px;
}
.wt_iew_noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Old versions of Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome, Opera and Firefox */
}
/* copied from bootstrap */
.wt-iew-form-table input[type="text"], .wt-iew-form-table input[type="number"], .wt-iew-form-table input[type="password"], .wt-iew-form-table select, .wt_iew_select, .wt_iew_text{
display: block;
width:100%;
padding: 0.35rem 0.75rem;
font-size: 1rem;
line-height: 1.5 !important;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
height:36px;
max-width:none;
}
.wt-iew-form-table *::placeholder{ font-size:12px; }
.wt-iew-form-table .select2-container .select2-selection--multiple{ border-color:#ced4da !important; }
.wt-iew-form-table select, .wt_iew_select{
padding: 0.44rem 0.75rem;
}
.wt-iew-form-table textarea{
display: block;
width:100%;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.wt-iew-form-table .select2-selection, .wt-iew-form-table .select2-selection.select2-selection--multiple{
display: block;
width:100%;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
min-height: 60px; font-size: 12px;
}
.wt-iew-form-table .select2-container {
width:100% !important;
}
.wf_select_multi{
width:100%;
}
.wf_select_multi .select2-container{
width:100% !important;
}
.wt-iew-form-table .button {
padding:0.2rem 0.75rem; height: auto;
}
.wf_settings_form .button {
padding:0.2rem 0.75rem; height: auto;
}
.wt-iew_form_help{ color:#666;font-weight:400; font-size:12px; display:inline-block; width:100%; margin-top:10px; }
.wt-iew_conditional_help_text{ display:none;}
.wt-iew-form-table tr th:first-child{ width:40% !important; padding:10px 15px 10px 0; vertical-align:top; }
.wt-iew-form-table tr th:first-child label{ margin-top:5px; display:inline-block; }
.wt-iew-form-table tr td:nth-child(2){ width:42%; padding:10px 5px 10px 0; }
.wt-iew-form-table tr td:nth-child(3){ width:35%; }
.wt_form_radio_block, .wt_form_checkbox_block{ display:inline-block; margin-top:8px; }
.wt-iew-tab-container .wp-list-table thead th{ font-weight:bold; }
.wt-iew-exporter-step-btn, .wt-iew-exporter-step-export-btn{ float:right; }
.wt_iew_export_main .wt-iew-mapping-tb tr td{position: relative;}
.wt_iew_export_main .wt-iew-mapping-tb tr td:last-child:after {
content: "\f464";
font-family: 'dashicons';
font-size: 18px;
width: 20px;
height: 20px;
color: gray;
position: absolute;
top: 10px;
right: 10px;
}
.wt-iew-form-table select.wt_iew_delimiter_preset{ width:70% !important; float:left; }
.wt-iew-form-table input[type="text"].wt_iew_custom_delimiter{ width:25% !important; float:right; }
.wt-iew-form-table select.wt_iew_date_format_preset{ width:70% !important; float:left; }
.wt-iew-form-table input[type="text"].wt_iew_custom_date_format{ width:25% !important; float:right; }
.wt_iew_warn_box{padding:20px; padding-bottom:0px;}
.wt_iew_warn{ display:inline-block; width:100%; box-sizing:border-box; padding:10px; background-color:#fff8e5; border-left:solid 2px #ffb900; color:#333; }
.wt_iew_free_addon_warn{ display:inline-block; width:100%; box-sizing:border-box; padding:10px; background-color:#fff8e5; border:solid 1px #ffb900; color:#333; text-align: center; }
.wt_iew_rerun_warn{ width:95%; margin:30px 2.5%; }
.wt_iew_type_subscription{ background-color:#dbeddd;border: solid 1px #c3c0b9; }
.wt_iew_info_box{padding:20px; padding-bottom:0px;}
.wt_iew_info{ display:inline-block; width:100%; box-sizing:border-box; padding:10px; background-color:#d1ecf1; border-left:solid 2px #0c5460; color:#185b8d; }
/* mapping step */
.wt-iew-mapping-tb{ border:1px solid #e5e5e5; width:100%; }
.wt-iew-mapping-tb th{ text-align:left; height:30px; /* background:#e5e5e5; */ border-bottom:solid 1px #e5e5e5; }
.wt-iew-mapping-tb tr td:first-child, .wt-iew-mapping-tb tr th:first-child{ width:50px; }
.wt-iew-mapping-tb td, .wt-iew-mapping-tb th{ padding:5px; }
.wt-iew-mapping-tb td input[type="text"], .wt_iew_text_field{
display: block;
max-width:500px;
width:100%;
color: #495057;
background-clip: padding-box;
border: 1px solid #ced4da !important;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
height:32px;
}
.wt_iew_sort_handle{ width:25px; cursor:move; }
.wt-iew-mapping-tb tbody tr:hover td{ background:#f6f6f6; }
.wt-iew-mapping-tb .wt_iew_mapping_checkbox_main{ margin-left:29px; }
.wt-iew-mapping-tb .wt_iew_mapping_checkbox_sub{ margin-left:4px; margin-top:2px; }
.wt_iew_sort_handle{ float:left; }
.wt_iew_sort_handle img{ margin-top:5px; color:#ccc; height:15px; opacity:.8; }
.wt_iew_checkbox{ display:inline-block; padding:0px 15px; }
.wt_iew_mapping_field_val{ width:100%; min-height:32px; display:inline-block; background:#fff; padding:5px 5px; box-sizing:border-box; border:solid 1px #ced4da; border-radius:0.25rem; cursor:text; }
span.wt_iew_mapping_field_val::after {
content: "\f347";
font-family: 'dashicons';
font-size: 18px;
width: 20px;
height: 20px;
color: gray;
float: right;
top: 10px;
right: 10px;
}
.wt-iew-sortable-placeholder td{ height:30px; background:#fff; border-top:dashed 1px #ccc; border-bottom:dashed 1px #ccc; }
.wt-iew-sortable-placeholder td:first-child{ border:dashed 1px #ccc; border-right:none; }
.wt-iew-sortable-placeholder td:last-child{ border:dashed 1px #ccc; border-left:none; }
.meta_mapping_box{width:100%; float:left; height:auto; margin-bottom:0px;}
.meta_mapping_box_hd{min-width:720px; width:100%; display:inline-block; height:40px; line-height:40px; font-weight:bold; background:#f6f6f6; box-sizing:border-box; padding:2px 10px; box-shadow:1px 1px 1px #e0e0e0; border-bottom:solid 1px #ccc; border-top:solid 1px #fff; cursor:pointer;}
.meta_mapping_box_hd_nil{min-width:720px; width:100%; display:inline-block; height:40px; line-height:40px; font-weight:bold; background:#f6f6f6; box-sizing:border-box; padding:2px 10px; box-shadow:1px 1px 1px #e0e0e0; border-bottom:solid 1px #ccc; border-top:solid 1px #fff; cursor:pointer;}
.meta_mapping_box_hd .dashicons{ margin-top:10px; }
.meta_mapping_box_selected_count_box{ float:right; margin-top:-3px; font-weight:normal; font-style:italic; }
.meta_mapping_box_con{min-width:720px; width:100%; display:inline-block; height:auto; padding:0px; display:none;}
.wt-iew-mapping-tb{ min-width:720px; }
.meta_mapping_box_toggle{ font-weight:normal; float:right; cursor:pointer; }
.wt_iew_invalid_mapping_field{ color:red; display:inline-block !important; padding:0px !important; margin:0px !important; }
.wt-iew-mapping-tb-imp tr td:nth-child(2), .wt-iew-mapping-tb-imp tr th:nth-child(2), .meta_mapping_box_hd_imp tr td:nth-child(2), .meta_mapping_box_hd_imp tr th:nth-child(2){ width:30% !important; }
.wt-iew-mapping-tb-imp tr td:nth-child(3), .wt-iew-mapping-tb-imp tr th:nth-child(3), .meta_mapping_box_hd_imp tr td:nth-child(2), .meta_mapping_box_hd_imp tr th:nth-child(2){ width:50% !important; }
/* popup */
.wt_iew_overlay{ position:fixed; z-index:100000000; width:100%; height:100%; background-color:rgba(0,0,0,.5); left:0px; top:0px; display:none;}
.wt_iew_popup{position:fixed; z-index:100000001; background:#fff; border:solid 1px #eee; text-align:center; box-shadow:0px 2px 5px #333; left:50%; display:none;}
.wt_iew_import_progress_wrap{
position: fixed;
overflow: scroll;
display: none;
top: 15px;
left: 50%;
width: 100%;
/*max-width: 580px;*/
height: 700px;
margin-left: -260px;
background: #ffffff;
border-radius: 3px;
z-index: 100000001;
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.25);
}
.wt_iew_import_progress_wrap.open {
display: flex;
flex-direction: column;
}
.wt_iew_import_progress_content{
height: 100%;
overflow-y: auto;
/*padding: 10px;*/
}
.wt_iew_import_progress_header{
padding: 15px;
top: 15px;
border-radius: 3px 3px 0 0;
}
.wt_iew_import_progress_wrap th, .wt_iew_import_progress_wrap td{text-align: center}
.wt_iew_import_progress{border: none !important;}
.wt_iew_import_progress table, .wt_iew_import_progress td {
border-collapse: collapse;
/*border: 1px solid #000;*/
}
.wt_iew_import_progress thead {
display: table; /* to take the same width as tr */
width: 100%;
}
.wt_iew_import_progress tbody {
display: block; /* to enable vertical scrolling */
max-height: 430px; /* e.g. */
overflow-y: scroll; /* keeps the scrollbar even if it doesn't need it; display purpose */
}
.wt_iew_import_progress th, .wt_iew_import_progress td {
/*width: 33.33%;*/
/* to enable "word-break: break-all" */
padding: 5px;
word-break: break-all; /* 4. */
}
.wt_iew_import_progress tr {
display: table; /* display purpose; th's border */
width: 100%;
box-sizing: border-box; /* because of the border (Chrome needs this line, but not FF) */
}
.wt_iew_import_progress td {
text-align: center;
border-bottom: none;
border-left: none;
}
progress {
height: 30px;
border-radius: 30px;
width:100%;
}
progress[value]::-webkit-progress-bar {
background-color: #EDEDED;
border-radius: 40px;
}
progress[value]::-moz-progress-bar {
background-color: #008000;
border-radius: 40px;
}
progress[value]::-webkit-progress-value {
border-radius: 40px;
background-color:#008000;
}
.wt-iew-import-result-row {
display: table;
width: 100%; /*Optional*/
table-layout: fixed; /*Optional*/
border-spacing: 10px; /*Optional*/
}
.wt-iew-import-result-column {
display: table-cell;
padding-bottom: 20px;
}
.wt-iew-import-completed .dashicons-yes:before{color: green;}
#wt_iew_import_progress .dashicons-dismiss:before {color: red;}
#wt_iew_import_progress .dashicons-yes-alt:before {color: green;}
.wt_iew_view_imported_items:focus, .wt_iew_view_imported_items:visited{
outline: none !important;
box-shadow: none !important;
}
.progressa {
border-radius: 50px !important;
line-height: 36px;
font-size: 14px;
overflow: hidden;
margin-bottom: 45px;
background-color: #dadada80;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
line-height: 30px;
height: 40px;
font-size: 14px;
/*border: 3px solid transparent;*/
margin-left:25px;
width:95%;
}
.progressab {
/*background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);
background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);
*/
-webkit-background-size: 40px 40px;
background-size: 40px 40px;
-webkit-transition: width .25s ease,height .25s ease,font-size .25s ease;
-moz-transition: width .25s ease,height .25s ease,font-size .25s ease;
-ms-transition: width .25s ease,height .25s ease,font-size .25s ease;
-o-transition: width .25s ease,height .25s ease,font-size .25s ease;
transition: width .25s ease,height .25s ease,font-size .25s ease;
width: 0;
color: #fff;
text-align: center;
font-family: 'Open Sans',sans-serif !important;
animation: progress-bar-stripes 2s linear infinite reverse;
}
.wt_iew_popup_hd{display:inline-block; width:100%; box-sizing:border-box; font-weight:bold; background-color:#f3f3f3; height:40px; text-align:left; line-height:40px; padding:0px 20px;}
.wt_iew_popup_close{float:right; width:40px; height:40px; text-align:right; line-height:40px; cursor:pointer;}
.wt_iew_popup_footer{width:100%; text-align:right; margin-top:10px;}
.wt_iew_data_dv{ display:none; }
.wt_iew_action_btn{ cursor:pointer; }
.wt-iew-form-table .wt_iew_radio_block p{ margin-bottom:15px; line-height:18px; }
.wt-iew-form-table .wt_iew_radio_block span{ display:inline-block; padding-left:25px; }
.wt-iew-form-table .wt_iew_radio_block b{ display:inline-block; margin-left:5px; }
.wt-iew-form-table .wt_iew_field_group{ padding-left:0px; }
.wt-iew-form-table .wt_iew_field_group_hd{ display:block; border-bottom:dashed 1px #ccc; padding-bottom:5px; padding-top:20px; font-size:15px; font-weight:bold; cursor:pointer; }
.wt-iew-form-table .wt_iew_field_group_hd .wt_iew_field_group_toggle_btn{float:left; margin-right:10px; width:20px; height:20px; border-radius:10px; color:#666; cursor:pointer; }
.wt-iew-form-table .wt_iew_field_group_content{ padding-left:10px; display:none; }
/* Dropdown */
.wt_iew_dropdown{ position:absolute; z-index:100; background:#fff; border:1px solid #ccc; border-radius:4px; padding:0px; display:none; box-shadow:1px 3px 2px 2px rgba(0,0,0,0.1); }
.wt_iew_dropdown li{ padding:7px 14px; margin:5px 0px; cursor:pointer; }
.wt_iew_dropdown li:hover{ background:#fafafa; }
/* template saving popup */
.wt_iew_template_name{width:100%; max-width:320px;}
.wt_iew_template_name_box{ float:left; width:90%; padding:5%; padding-top:0px; }
.wt_iew_template_name_wrn{display:none; text-align:left; }
.wt_iew_template_name_label{ display:inline-block; width:100%; text-align:left; font-weight:bold; padding:3px 0px; }
/* file attacher */
.wt-iew-form-table .wt_iew_file_attacher_dv{width:100%; }
.wt-iew-form-table .wt_iew_file_attacher_dv input[type="text"]{width:70%; float:left; }
.wt-iew-form-table .wt_iew_file_attacher_dv input[type="button"]{width:25%; float:right; }
.wt_iew_file_attacher_dv{ float:left; width:100%; }
/* popover */
.wt_iew_popover{ position: absolute; min-width:250px; min-height:150px; height: auto; background: #fff; border-radius: 5px; box-shadow: 0 5px 10px rgba(0,0,0,.2); top:50px; border: 1px solid #ccc;}
.wt_iew_popover:after, .wt_iew_popover:before {
right: 100%;
top:25%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.wt_iew_popover:after {
border-color: rgba(255, 255, 255, 0);
border-right-color: #fff;
border-width: 20px;
margin-top: -20px;
}
.wt_iew_popover:before {
border-color: rgba(204, 204, 204, 0);
border-right-color: #ccc;
border-width: 21px;
margin-top: -21px;
}
.wt_iew_popover-title{ background:#f7f7f7; height:35px;
margin: 0px;
border-top-left-radius: 5px;
border-top-right-radius: 5px; padding:5px; padding-left: 15px; line-height: 35px; font-size: 14px;}
.popover_close_icon_button{ float:right; height:20px; width:20px; border-radius:20px; color:#fff; background:#666; padding:3px; font-weight:bold; text-align:center; line-height:20px; margin-top:5px; margin-right:5px; cursor:pointer; }
.wt_iew_popover-content{
min-height:65px; height: auto; padding:15px; float:left; clear:both;
}
.wt_iew_popover-footer{ background:#f7f7f7; clear:both; height:30px; margin:0px; margin-top:10px; border-bottom-left-radius:5px; border-bottom-right-radius:5px; padding:7px 15px;}
.wt_iew_popover-content input[type="text"]{
margin:5px;
border-radius:3px;
padding: 0.2rem 0.3rem;
font-size: 1rem;
line-height: 1.5;
text-indent: 25px;
}
.wt_iew_popover-footer .button{
float: right; margin-left: 5px;
}
.wt_iew_popover.wt-pop-hidden:before {
display: none;
}
.wt_iew_popover.wt-pop-hidden:after {
display: none;
}
/* mapping field editor */
.wt_iew_mapping_field_editor_container{ display:none; }
.wt_iew_mapping_field_editor{ float:left; width:400px; padding:0px; background:#fff; margin:0px;}
.wt_iew_mapping_field_editor *{ box-sizing:border-box; }
.wt_iew_mapping_field_editor label{ float:left; width:100%; margin-bottom:3px; font-weight:bold; font-size:13px; color:#333; }
.wt_iew_mapping_field_editor_box{border:solid 1px #ddd; float:left; width:100%; height:auto; min-height:50px; padding:3px; margin-bottom:10px; margin-top:5px;}
.wt_iew_mapping_field_editor_box textarea{border:none; float:left; width:100%; height:50px; outline:none; resize:none;}
.wt_iew_mapping_field_editor_box input[type="text"]{width:98%; font-size:12px;}
.wt_iew_mapping_field_editor_box input[type="text"]::placeholder{ font-size:12px; }
.wt_iew_mapping_field_editor_info{ margin:0px; }
.wt_iew_mapping_field_editor_er{ margin:0px; color:red; }
.wt_iew_mapping_field_selector_box{ float:left; width:100%; height:120px; overflow:auto; margin-top:5px; }
.wt_iew_mapping_field_selector{ float:left; width:100%; margin:0px; padding:0px; }
.wt_iew_mapping_field_selector li{ float:left; width:100%; padding:5px; margin:0px; cursor:pointer;}
.wt_iew_mapping_field_selector li:hover{ background:#0073aa; color:#fff; }
.wt_iew_mapping_field_selector_no_column{ float:left; width:100%; color:red; }
.wt_iew_no_sample_mapping_data{ color:gray; display:inline-block !important; padding:0px !important; margin:0px !important; font-style:italic; }
.wt_evaluation_expression_points{list-style: none;}
.wt_evaluation_expression_points li::before {
content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */
color: red; /* Change the color */
font-weight: bold; /* If you want it to be bold */
display: inline-block; /* Needed to add space between the bullet and the text */
width: 1em; /* Also needed for space (tweak if needed) */
}
/* debug panel */
.wt_iew_debug_panel{ position:fixed; top:30px; right:0px; background:#fff; padding:5px; padding-bottom:0px; box-shadow:2px 2px 2px #ccc; }
.wt_iew_debug_panel_hd{ width:100%; font-size:12px; font-weight:bold; padding:2px; }
.wt_iew_debug_panel_con{ width:100%; min-height:30px; font-size:12px; text-align:center;}
.wt_iew_debug_panel_con a{ display:inline-block; padding:2px; border-right:solid 1px #ccc; cursor:pointer; }
.wt_iew_debug_panel_con a:last-child{ border-right:solid 0px #ccc; }
/* pagination */
.wt_iew_pagination{ float:right; width:auto; height:auto; margin:10px 0px;}
.wt_iew_pagination a{ float:left; padding:6px 12px; background:#f3f5f6; border:solid 1px #cccccc; color:#2e8ab6; text-decoration:none; margin-right:5px; border-radius:5px; }
.wt_iew_pagination a.wt_iew_pageactive{ background:#fff; color:#333; border:solid 1px #ddd; }
.wt_iew_pagination a.wt_iew_pagedisabled{ background:#f7f7f7; color:#a0a5aa; border:solid 1px #ddd; }
.wt_iew_pagination a.wt_iew_page{ cursor:pointer; }
.wt_iew_pagination_total_info{ float:left; padding:8px; }
/* listing */
.wt_iew_badge{ display:inline-block; padding:2px 6px; font-size:12px; border-radius:3px; background:#ccc; color:#fff; text-align:center; }
/* responsive */
@media (max-width:768px) {
.wt-iew-form-table tr th:first-child{ width:100%; }
.wt-iew-form-table tr td:nth-child(2){ width:100%; }
.wt-iew-form-table tr td:nth-child(3){ width:100%; }
.wt-iew-form-table .wt_iew_file_attacher_dv input[type="text"]{width:50%; float:left; }
.wt-iew-form-table .wt_iew_file_attacher_dv input[type="button"]{width:45%; float:right; }
}
/* tooltip */
.wt-iew-tips{ color:#16a7c5; }
.wt_iew_tooltip_span{ display:inline-block; margin-bottom:9px; line-height:16px; text-align:left; border-top:
dashed 1px #efefef; }
#tiptip_content .wt_iew_tooltip_span:first-child{ border:none; margin-top:4px; }
#tiptip_content .wt_iew_tooltip_span:last-child{ margin-bottom:4px; }
.tips {
cursor:help;
text-decoration:none
}
img.tips {
padding:5px 0 0
}
#tiptip_holder {
display:none;
z-index:8675309;
position:absolute;
top:0;
left:0
}
#tiptip_holder.tip_top {
padding-bottom:5px
}
#tiptip_holder.tip_top #tiptip_arrow_inner {
margin-top:-7px;
margin-left:-6px;
border-top-color:#333
}
#tiptip_holder.tip_bottom {
padding-top:5px
}
#tiptip_holder.tip_bottom #tiptip_arrow_inner {
margin-top:-5px;
margin-left:-6px;
border-bottom-color:#333
}
#tiptip_holder.tip_right {
padding-left:5px
}
#tiptip_holder.tip_right #tiptip_arrow_inner {
margin-top:-6px;
margin-left:-5px;
border-right-color:#333
}
#tiptip_holder.tip_left {
padding-right:5px
}
#tiptip_holder.tip_left #tiptip_arrow_inner {
margin-top:-6px;
margin-left:-7px;
border-left-color:#333
}
#tiptip_content,
.chart-tooltip,
.wc_error_tip {
color:#fff;
font-size:.8em;
max-width:150px;
background:#333;
text-align:center;
border-radius:3px;
padding:.618em 1em;
box-shadow:0 1px 3px rgba(0,
0,
0,
.2)
}
#tiptip_content code,
.chart-tooltip code,
.wc_error_tip code {
padding:1px;
background:#888
}
#tiptip_arrow,
#tiptip_arrow_inner {
position:absolute;
border-color:transparent;
border-style:solid;
border-width:6px;
height:0;
width:0
}
/**
* Dropzone: Drag and Drop file upload
*/
.wt_iew_dropzone{ text-align:center; cursor:pointer; width:100%; height:200px; border:dashed 3px #ccc; }
.wt_iew_dropzone.wt_drag_start{ border-color:#92b0b3; background:#c8dadf; }
.dz-preview{ width:300px; display:inline-block; margin-top:70px; }
.dz-message{ font-size:1.5em; margin-top:85px; line-height:14px; }
.wt_iew_dropzone .dz-preview .dz-details{ font-size:14px}
.wt_iew_dropzone .dz-preview.dz-processing .dz-progress{ opacity:1;-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-ms-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}
.wt_iew_dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;-ms-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}
.wt_iew_dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}
.wt_iew_dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;margin-top:-8px;margin-left:-40px;background:rgba(255,255,255,.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}
.wt_iew_dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom,#666,#444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width .3s ease-in-out;-moz-transition:width .3s ease-in-out;-ms-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out}
.wt_iew_dropzone .dz-preview .dz-progress{width:300px;margin-left:0;margin-top:5px}
.wt_iew_dropzone .dz-preview .dz-progress .dz-upload{background:#2092ea}
.wt_iew_dz_file_name, .wt_iew_dz_remove_link, .wt_iew_dz_file_success{ display:inline-block; font-size:14px; }
.wt_iew_dz_remove_link{ cursor:pointer; color:#4289a9; }
.wt_iew_dz_file_success{ line-height:20px; }
.wt_iew_dropzone .dz-preview .dz-progress .dz-upload-info{display:inline-block;text-align:center;width:100%;}
.wt_iew_dropzone.dz-started .dz-message{ display:none;}
/* start marketing section */
.wt-import-export-upsell-wrapper.market-box{
width:27%;
float: right;
}
.wrap .wt-import-export-upsell-wrapper .ier-premium-upgrade {
margin-top: 0px;
margin-right: 0px;
}
.wt-import-export-upsell-wrapper .ier-premium-upgrade {
margin-top: 30px;
margin-right: 15px;
}
.wt-ierpro-sidebar{
border-radius: 7px;
padding: 0;
}
.wt-ierpro-header{
background: #FFFFFF;
box-shadow: 0px 4px 19px rgba(49, 117, 252, 0.2);
padding: 8px;
margin-top: 15px;
}
.wt-ierpro-name{
border-radius: 3px;
margin: 0;
padding: 16px;
display: flex;
align-items: center;
}
.wt-ierpro-name img{
width: 50px;
height: auto;
border-radius: 7px;
}
.wt-ierpro-name h4{
font-style: normal;
font-weight: 600;
font-size: 15px;
line-height: 20px;
margin: 0 0 5px 12px;
}
.wt-ierpro-name .star-rating{
float: left;
}
.wt-ierpro-mainfeatures ul{
padding: 0;
margin: 15px 25px 20px 25px;
}
.wt-ierpro-mainfeatures li{
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height:24px;
letter-spacing: -0.01em;
list-style: none;
position: relative;
color: #091E80;
padding-left: 28px;
}
.wt-ierpro-mainfeatures li.money-back:before{
content: '';
position: absolute;
left: 0;
height:24px ;
width: 16px;
background-image: url(../../assets/images/gopro/money-back.svg);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.wt-ierpro-mainfeatures li.support:before{
content: '';
position: absolute;
left: 0;
height:24px ;
width: 16px;
background-image: url(../../assets/images/gopro/support.svg);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.wt-ierpro-btn-wrapper{
display: block;
margin: 20px auto 20px;
text-align: center;
}
.wt-ierpro-blue-btn, .wt-ierpro-blue-btn:visited{
background: linear-gradient(90.67deg, #2608DF -34.86%, #3284FF 115.74%);
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.39);
border-radius: 5px;
padding: 10px 15px 10px 38px;
display: inline-block;
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height: 18px;
color: #FFFFFF;
text-decoration: none;
transition: all .2s ease;
position: relative;
border: none;
}
.wt-ierpro-blue-btn:before{
content: '';
position: absolute;
height: 15px;
width: 18px;
background-image: url(../../assets/images/gopro/white-crown.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 15px;
}
.wt-ierpro-blue-btn:hover{
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.5);
text-decoration: none;
transform: translateY(2px);
transition: all .2s ease;
color: #FFFFFF;
}
.wt-ierpro-features{
padding: 20px 10px 10px 10px;
}
.wt-ierpro-features ul{
padding: 0;
margin: 0;
}
.wt-ierpro-features li{
font-style: normal;
font-weight: 500;
font-size: 13px;
line-height: 17px;
color: #001A69;
list-style: none;
position: relative;
padding-left: 35px;
padding-right: 5px;
margin: 0 0 15px 0;
display: flex;
align-items: center;
}
.wt-ierpro-newfeat li:before{
content: '';
position: absolute;
height: 39px;
width: 39px;
background-image: url(../../assets/images/gopro/new-badge.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 0;
}
.wt-ierpro-allfeat li:before{
content: '';
position: absolute;
height: 16px;
width: 16px;
background-image: url(../../assets/images/gopro/tick.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 10px;
}
ul.wt-ierpro-newfeat li {
margin-bottom: 30px;
}
.wt-ierpro-outline-btn, .wt-ierpro-outline-btn:visited{
background: linear-gradient(90.67deg, #2608DF -34.86%, #3284FF 115.74%);
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.39);
border-radius: 5px;
padding: 10px 15px 10px 38px;
display: inline-block;
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height: 18px;
color: #FFFFFF;
text-decoration: none;
transition: all .2s ease;
position: relative;
border: none;
}
.wt-ierpro-outline-btn:before{
content: '';
position: absolute;
height: 15px;
width: 18px;
background-image: url(../../assets/images/gopro/white-crown.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 15px;
}
.wt-ierpro-outline-btn:hover{
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.5);
text-decoration: none;
transform: translateY(2px);
transition: all .2s ease;
color: #FFFFFF;
}
.wt-ier-rating-number{
float: left;
margin-left:10px;
margin-right:10px;
margin-top: 3px;
}
.wt-star-rating{white-space: nowrap;}
.wt-star-rating .wt-star{
display: inline-block;
width: 20px;
height: 20px;
-webkit-font-smoothing: antialiased;
font-size: 20px;
line-height: 1;
font-family: dashicons;
text-decoration: inherit;
font-weight: 400;
font-style: normal;
vertical-align: top;
transition: color .1s ease-in;
text-align: center;
color: #dba617;
}
.wt-star-rating .wt-star-full:before {
content: "\f155";
}
.wt-star-rating .wt-star-half:before{
content: "\f459";
}
.wt-star-rating .wt-star-empty:before {
content: "\f154";
}
.wt-ier-all-in-one-text{
text-align: left;
margin-left: 18px;
}
.wt-ier-all-in-one-text-sp{
font-size: 15px;
}
.wt-ierpro-blue-btn-suite, .wt-ierpro-blue-btn-suite:visited{
background: linear-gradient(90.67deg, #2D9FFF -34.86%, #2D9FFF 115.74%);
border-radius: 5px;
padding: 10px 15px 10px 38px;
display: inline-block;
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height: 18px;
color: #FFFFFF;
text-decoration: none;
transition: all .2s ease;
position: relative;
border: none;
width: 70%;
margin-top: 15px;
}
.wt-ierpro-blue-btn-suite:hover{
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.5);
text-decoration: none;
transform: translateY(2px);
transition: all .2s ease;
color: #FFFFFF;
}
.wt-ier-suite-moneyback-wrap{
padding: 5px !important;
margin-bottom: 5px !important;
background: linear-gradient(178deg, #F4F1FF 3%, rgba(238, 240, 255, 0) 93.18%);
}
.wt-ier-sidebar-wrapper{
background: #FFFFFF;
border-radius: 5px;
max-width: 300px;
}
.wt-ier-sidebar-img{
margin: 0 auto 20px auto;
display: block;
}
.wt-ier-sidebar-title{
font-weight: 600;
font-size: 17px;
line-height: 25px;
color: #000000;
margin-bottom: 20px;
}
.wt-ier-icon{
width: auto;
height: 100%;
max-height: 25px;
margin-right: 8px;
}
.wt-ier-sidebar-p{
font-style: normal;
font-weight: normal;
font-size: 12px;
line-height: 16px;
color: #000000;
margin: 0;
}
.wt-ier-green-btn{
background: #00CB95;
border-radius: 4px;
font-weight: 600;
font-size: 16px;
line-height: 19px;
text-align: center;
padding: 15px 20px;
color: #FFFFFF;
display: inline-block;
text-decoration: none;
transition: all .2s ease;
border:none;
margin-top: 20px;
}
.wt-ier-green-btn:hover,.wt-ier-green-btn:focus{
color: #fff;
text-decoration: none;
opacity: .8;
transition: all .2s ease;
border:none;
transform: translateY(1px);
}
.wt-ier-wrapper{
background-color: #fff;
padding: 30px;
}
.wt-ier-box-wrapper{
background: #FFFFFF;
border: 1px solid #D2D2D2;
border-radius: 6px;
min-height: 100%;
}
.wt-ier-page-title{
font-style: normal;
font-weight: 600;
font-size: 25px;
line-height: 30px;
color: #111111;
margin-bottom: 13px;
margin-top: 10px;
}
.wt-ier-subp{
font-style: normal;
font-weight: normal;
font-size: 15px;
line-height: 18px;
margin-bottom: 40px;
margin-top: 0;
color: #111111;
}
.wt-ier-plugin-name{
font-style: normal;
font-weight: 600;
font-size: 16px;
line-height: 25px;
letter-spacing: -0.5px;
text-transform: uppercase;
margin-bottom: 15px;
margin-top: 12px;
color: #000000;
}
.wt-ier-p{
font-size: 14px;
line-height: 23px;
color: #445359;
margin-top: 15px;
margin-bottom: 18px;
}
.wt-ier-primary-btn{
background: #007CBA;
border:1px solid #007CBA;
color: #FFFFFF;
}
.wt-ier-secondary-btn{
color: #007CBA;
border:1px solid #007CBA;
}
.wt-ier-secondary-btn,.wt-ier-primary-btn{
font-style: normal;
font-weight: 500;
font-size: 13px;
line-height: 16px;
text-decoration: none;
padding:10px 12px;
border-radius: 5px;
text-align: center;
display: inline-block;
transition: all .2s ease;
margin-top: 18px;
}
.wt-ier-primary-btn:hover,.wt-ier-primary-btn:focus{
color:#fff;
}
.wt-ier-secondary-btn:hover,.wt-ier-primary-btn:hover,
.wt-ier-secondary-btn:focus,.wt-ier-primary-btn:focus{
transform: translateY(1px);
transition: all .2s ease;
}
.wt-ier-btn-group{
justify-content: space-between!important;
margin: -8px;
align-items: center;
position: absolute;
bottom: 0;
}
.wt-ier-btn-group .wt-ier-btn{
margin: 8px;
}
.wt-ier-box-highlight{
box-shadow: 0px 0px 20px rgba(19, 109, 200, 0.3);
}
.wt-ier-center{
text-align: center;
}
.wt-ier-p-5{
padding:30px;
}
.wt-ier-p-4{
padding:20px;
}
.wt-ier-px-3{
padding-right:12px;
padding-left:12px;
}
.wt-ier-mb-4{
margin-bottom: 20px;
}
.wt-ier-mt-5{
margin-top: 75px;
}
.wt-ier-v-center{
-ms-flex-align: center;
align-items: center;
}
.wt-ier-row{
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
/*flex-wrap: wrap;*/
width:95%;
margin-left: -17px;
}
.wt-ier-col-12{
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%;
}
.wt-ier-col-md-6,.wt-ier-col-12{
position: relative;
width: 100%;
padding:15px;
}
.wt-ier-flex {
display: -ms-flexbox;
display: flex;
}
.wt-ier-modal {
display: none;
position: fixed;
z-index: 1;
padding-top: 50px;
padding-bottom: 50px;
left: 0;
top: 0;
width: 100%;
height: 90%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
}
.wt-ier-modal-content {
background-color: #fefefe;
margin: auto;
border: 1px solid #888;
width: 78%;
}
.wt-ier-close {
color: #aaaaaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.wt-ier-close:hover,
.wt-ier-close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.wt-ier-pre-icon{
height: 15px;
margin-right: 9px;
}
.wt-ier-resposive-table {
width: 100%;
overflow-x: auto;
}
.wt-ier-table{
width: 100%;
margin-bottom: 1rem;
background-color: transparent;
border-collapse: collapse;
min-width: 700px;
}
.wt-ier-table th, .wt-ier-table td{
padding: 18px 25px;
}
.wt-ier-table td{
border-top: 1px solid #E9E9E9;
border-right: 1px solid #E9E9E9;
}
.wt-ier-table th{
border-right: 1px solid #E9E9E9;
}
.wt-ier-top-tr th{
padding-bottom: 0;
}
.wt-ier-table th{
font-style: normal;
font-weight: bold;
font-size: 18px;
line-height: 22px;
color: #007CBA;
text-align: center;
}
.wt-ier-table tr td{
width:23%;
text-align: center;
font-weight: normal;
font-size: 12px;
line-height: 15px;
color: #000000;
}
.wt-ier-table tr td p,.wt-ier-table tr td{
margin: 0;
}
.wt-ier-table tr td p {
margin-top: 5px!important;
}
.wt-ier-table tr td:first-child{
width:31%;
}
.wt-ier-table tr td:first-child{
font-weight: normal;
font-size: 15px;
line-height: 18px;
color: #000000;
}
.wt-ier-table tr td:first-child,.wt-ier-table tr th:first-child,
.wt-ier-table tr td:last-child,.wt-ier-table tr th:last-child{
border-right: none!important;
}
.wt-ier-table tr td:first-child,.wt-ier-table tr th:first-child{
background-color: #F7FAFE;
text-align: left!important;
}
.wt-ier-table tr td li{
text-align: left;
list-style: none;
}
@media (min-width: 992px){
.wt-ier-col-lg-6{
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%;
}
.wt-ier-col-lg-4{
-ms-flex: 0 0 33.333333%;
flex: 0 0 33.333333%;
max-width: 33.333333%;
}
.wt-ier-mb-lg-0{
margin-bottom: 0;
}
.wt-ier-suite{
background-image: url(../../assets/images/upgrade/suite-cover.svg);
background-position: right;
background-size: 50% 100%;
background-repeat: no-repeat;
}
}
@media (min-width: 768px){
.wt-ier-col-md-6{
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%;
}
.wt-ier-mb-md-0{
margin-bottom: 0;
}
.wt-ier-border-md-right{
border-right: 1px solid #E8E8E8;
}
}
@media (min-width: 576px){
.wt-ier-d-sm-flex{
display: flex;
}
}
/* end marketing */
.wt-iew-upgrade-to-pro-new-feature{ display:inline-block; width:60px; height:21px; background: url(../../assets/images/gopro/new_flag.svg) no-repeat; color:#fff; text-align:center; font-weight:normal; padding-left:4px; line-height:20px; font-size:12px; text-shadow:0px 2px 4px rgba(0, 0, 0, 0.35);}
/* start small marketing section */
.ier_pro_plugins_section_small{
margin-top: 30px;
width: 100%;
}
.wt-import-export-upsell-small-wrapper.market-box{
height:400px;
}
.wrap .wt-import-export-small-upsell-wrapper .ier-premium-upgrade {
margin-top: 0px;
margin-right: 0px;
}
.wt-import-export-upsell-small-wrapper .ier-premium-upgrade {
margin-top: 0px;
margin-right: 0px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-sidebar{
background: #FFFFFF;
border-radius: 7px;
padding: 0;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-header{
background: #FFFFFF;
box-shadow: none;
border-radius: 0px;
padding: 0px;
margin: 0;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-name-small{
margin: 0;
padding: 20px;
display: flex;
align-items: center;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-name-small img{
width: 36px;
height: auto;
border-radius: 3px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-name-small h4{
font-style: normal;
font-weight: 600;
font-size: 15px;
line-height: 18px;
margin: 0 0 0 12px;
color: #5D63D9;
}
.rtl .wt-import-export-upsell-small-wrapper .wt-ierpro-name-small h4{
margin: 0 12px 0 0px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-mainfeatures ul{
padding: 0;
margin: 15px 25px 20px 25px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-mainfeatures li{
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height:24px;
letter-spacing: -0.01em;
list-style: none;
position: relative;
color: #091E80;
padding-left: 28px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-mainfeatures li.money-back:before{
content: '';
position: absolute;
left: 0;
height:24px ;
width: 16px;
background-image: url(../../assets/images/gopro/money-back.svg);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-mainfeatures li.support:before{
content: '';
position: absolute;
left: 0;
height:24px ;
width: 16px;
background-image: url(../../assets/images/gopro/support.svg);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-btn-wrapper{
display: block;
margin: 20px auto 20px;
text-align: center;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-blue-btn, .wt-ierpro-blue-btn:visited{
background: linear-gradient(90.67deg, #2608DF -34.86%, #3284FF 115.74%);
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.39);
border-radius: 5px;
padding: 10px 15px 10px 38px;
display: inline-block;
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height: 18px;
color: #FFFFFF;
text-decoration: none;
transition: all .2s ease;
position: relative;
border: none;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-blue-btn:before{
content: '';
position: absolute;
height: 15px;
width: 18px;
background-image: url(../../assets/images/gopro/white-crown.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 15px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-blue-btn:hover{
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.5);
text-decoration: none;
transform: translateY(2px);
transition: all .2s ease;
color: #FFFFFF;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-features{
padding: 0px 5px 5px 10px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-features ul{
padding: 0;
margin: 0;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-features li{
font-style: normal;
font-weight: 500;
font-size: 13px;
line-height: 17px;
color: #001A69;
list-style: none;
position: relative;
padding-left: 35px;
padding-right: 5px;
margin: 0 0 15px 0;
display: flex;
align-items: center;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-newfeat li:before{
content: '';
position: absolute;
height: 39px;
width: 39px;
background-image: url(../../assets/images/gopro/new-badge.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 0;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-allfeat li:before{
content: '';
position: absolute;
height: 16px;
width: 16px;
background-image: url(../../assets/images/gopro/tick.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 10px;
}
.wt-import-export-upsell-small-wrapper ul.wt-ierpro-newfeat li {
margin-bottom: 30px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-outline-btn, .wt-ierpro-outline-btn:visited{
background: linear-gradient(90.67deg, #2608DF -34.86%, #3284FF 115.74%);
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.39);
border-radius: 5px;
padding: 10px 15px 10px 38px;
display: inline-block;
font-style: normal;
font-weight: bold;
font-size: 14px;
line-height: 18px;
color: #FFFFFF;
text-decoration: none;
transition: all .2s ease;
position: relative;
border: none;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-outline-btn:before{
content: '';
position: absolute;
height: 15px;
width: 18px;
background-image: url(../../assets/images/gopro/white-crown.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
left: 15px;
}
.wt-import-export-upsell-small-wrapper .wt-ierpro-outline-btn:hover{
box-shadow: 0px 4px 13px rgba(46, 80, 242, 0.5);
text-decoration: none;
transform: translateY(2px);
transition: all .2s ease;
color: #FFFFFF;
}
.wp-submenu li span.wt-go-premium {
font-weight: 700;
color: #28e499;
}
.wt-cs-rating-money-back{
margin-top: 30px;
background-color: #fff;
}
.wt-money-back{
border-bottom: 1px solid #ccc;
padding:10px;
display: flex;
}
.wt-money-back img{
margin-right: 10px;
}
.wt-cs-rating img{
margin-right: 10px;
}
.wt-cs-rating{
display: flex;
padding: 10px;
}
.wt-ierpro-name-small-p{
margin-top: 0px;
font-size: 14px;
padding-left: 25px;
padding-bottom: 6px;
line-height: 20px;
border-bottom: 1px solid #ccc;
margin-bottom: 0px;
color:#959595;
}
.wt-hide-features-view-plugin{
border-bottom: 1px solid #ccc;
padding:20px;
display: flex;
margin-bottom: 10px;
}
.wt-view-plugin, .wt-hide-features{
text-decoration:none;color:#3176FD;
}
\ No newline at end of file
"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}var Emitter=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"on",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:"emit",value:function(e){this._callbacks=this._callbacks||{};var t=this._callbacks[e];if(t){for(var n=arguments.length,i=new Array(1<n?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=!0,a=!1,l=void 0;try{for(var s,u=t[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){s.value.apply(this,i)}}catch(e){a=!0,l=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw l}}}return this}},{key:"off",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var n=this._callbacks[e];if(!n)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var i=0;i<n.length;i++){if(n[i]===t){n.splice(i,1);break}}return this}}]),e}(),Dropzone=function(){function C(e,t){var n,i,r;if(_classCallCheck(this,C),(n=_possibleConstructorReturn(this,_getPrototypeOf(C).call(this))).element=e,n.version=C.version,n.defaultOptions.previewTemplate=n.defaultOptions.previewTemplate.replace(/\n*/g,""),n.clickableElements=[],n.listeners=[],n.files=[],"string"==typeof n.element&&(n.element=document.querySelector(n.element)),!n.element||null==n.element.nodeType)throw new Error("Invalid dropzone element.");if(n.element.dropzone)throw new Error("Dropzone already attached.");C.instances.push(_assertThisInitialized(n)),n.element.dropzone=_assertThisInitialized(n);var o=null!=(r=C.optionsForElement(n.element))?r:{};if(n.options=C.extend({},n.defaultOptions,o,null!=t?t:{}),n.options.forceFallback||!C.isBrowserSupported())return _possibleConstructorReturn(n,n.options.fallback.call(_assertThisInitialized(n)));if(null==n.options.url&&(n.options.url=n.element.getAttribute("action")),!n.options.url)throw new Error("No URL provided.");if(n.options.acceptedFiles&&n.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(n.options.uploadMultiple&&n.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return n.options.acceptedMimeTypes&&(n.options.acceptedFiles=n.options.acceptedMimeTypes,delete n.options.acceptedMimeTypes),null!=n.options.renameFilename&&(n.options.renameFile=function(e){return n.options.renameFilename.call(_assertThisInitialized(n),e.name,e)}),n.options.method=n.options.method.toUpperCase(),(i=n.getExistingFallback())&&i.parentNode&&i.parentNode.removeChild(i),!1!==n.options.previewsContainer&&(n.options.previewsContainer?n.previewsContainer=C.getElement(n.options.previewsContainer,"previewsContainer"):n.previewsContainer=n.element),n.options.clickable&&(!0===n.options.clickable?n.clickableElements=[n.element]:n.clickableElements=C.getElements(n.options.clickable,"clickable")),n.init(),n}return _inherits(C,Emitter),_createClass(C,null,[{key:"initClass",value:function(){this.prototype.Emitter=Emitter,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(e,t,n){if(n)return{dzuuid:n.file.upload.uuid,dzchunkindex:n.index,dztotalfilesize:n.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:n.file.upload.totalChunkCount,dzchunkbyteoffset:n.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e;this.element.className="".concat(this.element.className," dz-browser-not-supported");var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.getElementsByTagName("div")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )dz-message($| )/.test(a.className)){(e=a).className="dz-message";break}}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}e||(e=C.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));var l=e.getElementsByTagName("span")[0];return l&&(null!=l.textContent?l.textContent=this.options.dictFallbackMessage:null!=l.innerText&&(l.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,i){var r={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==n?(t=r.srcWidth,n=r.srcHeight):null==t?t=n*o:null==n&&(n=t/o);var a=(t=Math.min(t,r.srcWidth))/(n=Math.min(n,r.srcHeight));if(r.srcWidth>t||r.srcHeight>n)if("crop"===i)a<o?(r.srcHeight=e.height,r.srcWidth=r.srcHeight*a):(r.srcWidth=e.width,r.srcHeight=r.srcWidth/a);else{if("contain"!==i)throw new Error("Unknown resizeMethod '".concat(i,"'"));a<o?n=t/o:t=n*o}return r.srcX=(e.width-r.srcWidth)/2,r.srcY=(e.height-r.srcHeight)/2,r.trgWidth=t,r.trgHeight=n,r},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Check</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Error</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:function(){},dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:function(){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(t){var n=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){t.previewElement=C.createElement(this.options.previewTemplate.trim()),t.previewTemplate=t.previewElement,this.previewsContainer.appendChild(t.previewElement);var e=!0,i=!1,r=void 0;try{for(var o,a=t.previewElement.querySelectorAll("[data-dz-name]")[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var l=o.value;l.textContent=t.name}}catch(e){i=!0,r=e}finally{try{e||null==a.return||a.return()}finally{if(i)throw r}}var s=!0,u=!1,c=void 0;try{for(var d,p=t.previewElement.querySelectorAll("[data-dz-size]")[Symbol.iterator]();!(s=(d=p.next()).done);s=!0)(l=d.value).innerHTML=this.filesize(t.size)}catch(e){u=!0,c=e}finally{try{s||null==p.return||p.return()}finally{if(u)throw c}}this.options.addRemoveLinks&&(t._removeLink=C.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'.concat(this.options.dictRemoveFile,"</a>")),t.previewElement.appendChild(t._removeLink));var h=function(e){return e.preventDefault(),e.stopPropagation(),t.status===C.UPLOADING?C.confirm(n.options.dictCancelUploadConfirmation,function(){return n.removeFile(t)}):n.options.dictRemoveFileConfirmation?C.confirm(n.options.dictRemoveFileConfirmation,function(){return n.removeFile(t)}):n.removeFile(t)},f=!0,v=!1,m=void 0;try{for(var y,g=t.previewElement.querySelectorAll("[data-dz-remove]")[Symbol.iterator]();!(f=(y=g.next()).done);f=!0){y.value.addEventListener("click",h)}}catch(e){v=!0,m=e}finally{try{f||null==g.return||g.return()}finally{if(v)throw m}}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-thumbnail]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;l.alt=e.name,l.src=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return setTimeout(function(){return e.previewElement.classList.add("dz-image-preview")},1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"String"!=typeof t&&t.error&&(t=t.error);var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-errormessage]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.textContent=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t){if(e.previewElement){var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-uploadprogress]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;"PROGRESS"===l.nodeName?l.value=t:l.style.width="".concat(t,"%")}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];for(var r=0,o=n;r<o.length;r++){var a=o[r];for(var l in a){var s=a[l];e[l]=s}}return e}}]),_createClass(C,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(e){return e.accepted}).map(function(e){return e})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(e){return!e.accepted}).map(function(e){return e})}},{key:"getFilesWithStatus",value:function(t){return this.files.filter(function(e){return e.status===t}).map(function(e){return e})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(C.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(C.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(C.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(e){return e.status===C.UPLOADING||e.status===C.QUEUED}).map(function(e){return e})}},{key:"init",value:function(){var s=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(C.createElement('<div class="dz-default dz-message"><button class="dz-button" type="button">'.concat(this.options.dictDefaultMessage,"</button></div>"))),this.clickableElements.length){!function l(){return s.hiddenFileInput&&s.hiddenFileInput.parentNode.removeChild(s.hiddenFileInput),s.hiddenFileInput=document.createElement("input"),s.hiddenFileInput.setAttribute("type","file"),(null===s.options.maxFiles||1<s.options.maxFiles)&&s.hiddenFileInput.setAttribute("multiple","multiple"),s.hiddenFileInput.className="dz-hidden-input",null!==s.options.acceptedFiles&&s.hiddenFileInput.setAttribute("accept",s.options.acceptedFiles),null!==s.options.capture&&s.hiddenFileInput.setAttribute("capture",s.options.capture),s.hiddenFileInput.style.visibility="hidden",s.hiddenFileInput.style.position="absolute",s.hiddenFileInput.style.top="0",s.hiddenFileInput.style.left="0",s.hiddenFileInput.style.height="0",s.hiddenFileInput.style.width="0",C.getElement(s.options.hiddenInputContainer,"hiddenInputContainer").appendChild(s.hiddenFileInput),s.hiddenFileInput.addEventListener("change",function(){var e=s.hiddenFileInput.files;if(e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;s.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}return s.emit("addedfiles",e),l()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;var e=!0,t=!1,n=void 0;try{for(var i,r=this.events[Symbol.iterator]();!(e=(i=r.next()).done);e=!0){var o=i.value;this.on(o,this.options[o])}}catch(e){t=!0,n=e}finally{try{e||null==r.return||r.return()}finally{if(t)throw n}}this.on("uploadprogress",function(){return s.updateTotalUploadProgress()}),this.on("removedfile",function(){return s.updateTotalUploadProgress()}),this.on("canceled",function(e){return s.emit("complete",e)}),this.on("complete",function(e){if(0===s.getAddedFiles().length&&0===s.getUploadingFiles().length&&0===s.getQueuedFiles().length)return setTimeout(function(){return s.emit("queuecomplete")},0)});function a(e){var t;return(t=e).dataTransfer.types&&t.dataTransfer.types.some(function(e){return"Files"==e})&&(e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1)}return this.listeners=[{element:this.element,events:{dragstart:function(e){return s.emit("dragstart",e)},dragenter:function(e){return a(e),s.emit("dragenter",e)},dragover:function(e){var t;try{t=e.dataTransfer.effectAllowed}catch(e){}return e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy",a(e),s.emit("dragover",e)},dragleave:function(e){return s.emit("dragleave",e)},drop:function(e){return a(e),s.drop(e)},dragend:function(e){return s.emit("dragend",e)}}}],this.clickableElements.forEach(function(t){return s.listeners.push({element:t,events:{click:function(e){return t===s.element&&e.target!==s.element&&!C.elementInside(e.target,s.element.querySelector(".dz-message"))||s.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),null!=this.hiddenFileInput&&this.hiddenFileInput.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,C.instances.splice(C.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var e,t=0,n=0;if(this.getActiveFiles().length){var i=!0,r=!1,o=void 0;try{for(var a,l=this.getActiveFiles()[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;t+=s.upload.bytesSent,n+=s.upload.total}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}e=100*t/n}else e=100;return this.emit("totaluploadprogress",e,n,t)}},{key:"_getParamName",value:function(e){return"function"==typeof this.options.paramName?this.options.paramName(e):"".concat(this.options.paramName).concat(this.options.uploadMultiple?"[".concat(e,"]"):"")}},{key:"_renameFile",value:function(e){return"function"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:"getFallbackForm",value:function(){var e,t;if(e=this.getExistingFallback())return e;var n='<div class="dz-fallback">';this.options.dictFallbackText&&(n+="<p>".concat(this.options.dictFallbackText,"</p>")),n+='<input type="file" name="'.concat(this._getParamName(0),'" ').concat(this.options.uploadMultiple?'multiple="multiple"':void 0,' /><input type="submit" value="Upload!"></div>');var i=C.createElement(n);return"FORM"!==this.element.tagName?(t=C.createElement('<form action="'.concat(this.options.url,'" enctype="multipart/form-data" method="').concat(this.options.method,'"></form>'))).appendChild(i):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:i}},{key:"getExistingFallback",value:function(){for(var e=function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )fallback($| )/.test(a.className))return a}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}},t=0,n=["div","form"];t<n.length;t++){var i,r=n[t];if(i=e(this.element.getElementsByTagName(r)))return i}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.addEventListener(t,n,!1))}return e}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.removeEventListener(t,n,!1))}return e}()})}},{key:"disable",value:function(){var t=this;return this.clickableElements.forEach(function(e){return e.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(e){return t.cancelUpload(e)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(e){return e.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(e){var t=0,n="b";if(0<e){for(var i=["tb","gb","mb","kb","b"],r=0;r<i.length;r++){var o=i[r];if(Math.pow(this.options.filesizeBase,4-r)/10<=e){t=e/Math.pow(this.options.filesizeBase,4-r),n=o;break}}t=Math.round(10*t)/10}return"<strong>".concat(t,"</strong> ").concat(this.options.dictFileSizeUnits[n])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],n=0;n<e.dataTransfer.files.length;n++)t[n]=e.dataTransfer.files[n];if(t.length){var i=e.dataTransfer.items;i&&i.length&&null!=i[0].webkitGetAsEntry?this._addFilesFromItems(i):this.handleFiles(t)}this.emit("addedfiles",t)}}},{key:"paste",value:function(e){if(null!=__guard__(null!=e?e.clipboardData:void 0,function(e){return e.items})){this.emit("paste",e);var t=e.clipboardData.items;return t.length?this._addFilesFromItems(t):void 0}}},{key:"handleFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}},{key:"_addFilesFromItems",value:function(s){var u=this;return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a,l=r.value;null!=l.webkitGetAsEntry&&(a=l.webkitGetAsEntry())?a.isFile?e.push(u.addFile(l.getAsFile())):a.isDirectory?e.push(u._addFilesFromDirectory(a,a.name)):e.push(void 0):null!=l.getAsFile&&(null==l.kind||"file"===l.kind)?e.push(u.addFile(l.getAsFile())):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()}},{key:"_addFilesFromDirectory",value:function(e,s){function t(t){return __guardMethod__(console,"log",function(e){return e.log(t)})}var u=this,n=e.createReader();return function l(){return n.readEntries(function(e){if(0<e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.isFile?a.file(function(e){if(!u.options.ignoreHiddenFiles||"."!==e.name.substring(0,1))return e.fullPath="".concat(s,"/").concat(e.name),u.addFile(e)}):a.isDirectory&&u._addFilesFromDirectory(a,"".concat(s,"/").concat(a.name))}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}l()}return null},t)}()}},{key:"accept",value:function(e,t){this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):C.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(t){var n=this;t.upload={uuid:C.uuidv4(),progress:0,total:t.size,bytesSent:0,filename:this._renameFile(t)},this.files.push(t),t.status=C.ADDED,this.emit("addedfile",t),this._enqueueThumbnail(t),this.accept(t,function(e){e?(t.accepted=!1,n._errorProcessing([t],e)):(t.accepted=!0,n.options.autoQueue&&n.enqueueFile(t)),n._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.enqueueFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==C.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=C.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return t.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout(function(){return t._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var t=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var n=this._thumbnailQueue.shift();return this.createThumbnail(n,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(e){return t.emit("thumbnail",n,e),t._processingThumbnail=!1,t._processThumbnailQueue()})}}},{key:"removeFile",value:function(e){if(e.status===C.UPLOADING&&this.cancelUpload(e),this.files=without(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);var t=!0,n=!1,i=void 0;try{for(var r,o=this.files.slice()[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.status===C.UPLOADING&&!e||this.removeFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"resizeImage",value:function(r,e,t,n,o){var a=this;return this.createThumbnail(r,e,t,n,!0,function(e,t){if(null==t)return o(r);var n=a.options.resizeMimeType;null==n&&(n=r.type);var i=t.toDataURL(n,a.options.resizeQuality);return"image/jpeg"!==n&&"image/jpg"!==n||(i=ExifRestore.restore(r.dataURL,i)),o(C.dataURItoBlob(i))})}},{key:"createThumbnail",value:function(e,t,n,i,r,o){var a=this,l=new FileReader;l.onload=function(){e.dataURL=l.result,"image/svg+xml"!==e.type?a.createThumbnailFromUrl(e,t,n,i,r,o):null!=o&&o(l.result)},l.readAsDataURL(e)}},{key:"displayExistingFile",value:function(t,e,n,i,r){var o=this,a=!(4<arguments.length&&void 0!==r)||r;if(this.emit("addedfile",t),this.emit("complete",t),a){t.dataURL=e,this.createThumbnailFromUrl(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.resizeMethod,this.options.fixOrientation,function(e){o.emit("thumbnail",t,e),n&&n()},i)}else this.emit("thumbnail",t,e),n&&n()}},{key:"createThumbnailFromUrl",value:function(o,a,l,s,t,u,e){var c=this,d=document.createElement("img");return e&&(d.crossOrigin=e),d.onload=function(){var e=function(e){return e(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&t&&(e=function(e){return EXIF.getData(d,function(){return e(EXIF.getTag(this,"Orientation"))})}),e(function(e){o.width=d.width,o.height=d.height;var t=c.options.resize.call(c,o,a,l,s),n=document.createElement("canvas"),i=n.getContext("2d");switch(n.width=t.trgWidth,n.height=t.trgHeight,4<e&&(n.width=t.trgHeight,n.height=t.trgWidth),e){case 2:i.translate(n.width,0),i.scale(-1,1);break;case 3:i.translate(n.width,n.height),i.rotate(Math.PI);break;case 4:i.translate(0,n.height),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-n.width);break;case 7:i.rotate(.5*Math.PI),i.translate(n.height,-n.width),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-n.height,0)}drawImageIOSFix(i,d,null!=t.srcX?t.srcX:0,null!=t.srcY?t.srcY:0,t.srcWidth,t.srcHeight,null!=t.trgX?t.trgX:0,null!=t.trgY?t.trgY:0,t.trgWidth,t.trgHeight);var r=n.toDataURL("image/png");if(null!=u)return u(r,n)})},null!=u&&(d.onerror=u),d.src=o.dataURL}},{key:"processQueue",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,n=t;if(!(e<=t)){var i=this.getQueuedFiles();if(0<i.length){if(this.options.uploadMultiple)return this.processFiles(i.slice(0,e-t));for(;n<e;){if(!i.length)return;this.processFile(i.shift()),n++}}}}},{key:"processFile",value:function(e){return this.processFiles([e])}},{key:"processFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.processing=!0,a.status=C.UPLOADING,this.emit("processing",a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return this.options.uploadMultiple&&this.emit("processingmultiple",e),this.uploadFiles(e)}},{key:"_getFilesWithXhr",value:function(t){return this.files.filter(function(e){return e.xhr===t}).map(function(e){return e})}},{key:"cancelUpload",value:function(e){if(e.status===C.UPLOADING){var t=this._getFilesWithXhr(e.xhr),n=!0,i=!1,r=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.status=C.CANCELED}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}void 0!==e.xhr&&e.xhr.abort();var l=!0,s=!1,u=void 0;try{for(var c,d=t[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;this.emit("canceled",p)}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}this.options.uploadMultiple&&this.emit("canceledmultiple",t)}else e.status!==C.ADDED&&e.status!==C.QUEUED||(e.status=C.CANCELED,this.emit("canceled",e),this.options.uploadMultiple&&this.emit("canceledmultiple",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(e){if("function"!=typeof e)return e;for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return e.apply(this,n)}},{key:"uploadFile",value:function(e){return this.uploadFiles([e])}},{key:"uploadFiles",value:function(s){var u=this;this._transformFiles(s,function(e){if(u.options.chunking){var t=e[0];s[0].upload.chunked=u.options.chunking&&(u.options.forceChunking||t.size>u.options.chunkSize),s[0].upload.totalChunkCount=Math.ceil(t.size/u.options.chunkSize)}if(s[0].upload.chunked){var r=s[0],o=e[0];r.upload.chunks=[];var i=function(){for(var e=0;void 0!==r.upload.chunks[e];)e++;if(!(e>=r.upload.totalChunkCount)){0;var t=e*u.options.chunkSize,n=Math.min(t+u.options.chunkSize,r.size),i={name:u._getParamName(0),data:o.webkitSlice?o.webkitSlice(t,n):o.slice(t,n),filename:r.upload.filename,chunkIndex:e};r.upload.chunks[e]={file:r,index:e,dataBlock:i,status:C.UPLOADING,progress:0,retries:0},u._uploadData(s,[i])}};if(r.upload.finishedChunkUpload=function(e){var t=!0;e.status=C.SUCCESS,e.dataBlock=null,e.xhr=null;for(var n=0;n<r.upload.totalChunkCount;n++){if(void 0===r.upload.chunks[n])return i();r.upload.chunks[n].status!==C.SUCCESS&&(t=!1)}t&&u.options.chunksUploaded(r,function(){u._finished(s,"",null)})},u.options.parallelChunkUploads)for(var n=0;n<r.upload.totalChunkCount;n++)i();else i()}else{for(var a=[],l=0;l<s.length;l++)a[l]={name:u._getParamName(l),data:e[l],filename:s[l].upload.filename};u._uploadData(s,a)}})}},{key:"_getChunk",value:function(e,t){for(var n=0;n<e.upload.totalChunkCount;n++)if(void 0!==e.upload.chunks[n]&&e.upload.chunks[n].xhr===t)return e.upload.chunks[n]}},{key:"_uploadData",value:function(t,e){var n=this,i=new XMLHttpRequest,r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){l.value.xhr=i}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}t[0].upload.chunked&&(t[0].upload.chunks[e[0].chunkIndex].xhr=i);var u=this.resolveOption(this.options.method,t),c=this.resolveOption(this.options.url,t);i.open(u,c,!0),i.timeout=this.resolveOption(this.options.timeout,t),i.withCredentials=!!this.options.withCredentials,i.onload=function(e){n._finishedUploading(t,i,e)},i.ontimeout=function(){n._handleUploadError(t,i,"Request timedout after ".concat(n.options.timeout," seconds"))},i.onerror=function(){n._handleUploadError(t,i)},(null!=i.upload?i.upload:i).onprogress=function(e){return n._updateFilesUploadProgress(t,i,e)};var d={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};for(var p in this.options.headers&&C.extend(d,this.options.headers),d){var h=d[p];h&&i.setRequestHeader(p,h)}var f=new FormData;if(this.options.params){var v=this.options.params;for(var m in"function"==typeof v&&(v=v.call(this,t,i,t[0].upload.chunked?this._getChunk(t[0],i):null)),v){var y=v[m];f.append(m,y)}}var g=!0,b=!1,k=void 0;try{for(var w,F=t[Symbol.iterator]();!(g=(w=F.next()).done);g=!0){var z=w.value;this.emit("sending",z,i,f)}}catch(e){b=!0,k=e}finally{try{g||null==F.return||F.return()}finally{if(b)throw k}}this.options.uploadMultiple&&this.emit("sendingmultiple",t,i,f),this._addFormElementData(f);for(var x=0;x<e.length;x++){var E=e[x];f.append(E.name,E.data,E.filename)}this.submitRequest(i,f,t)}},{key:"_transformFiles",value:function(n,i){for(var e=this,r=[],o=0,t=function(t){e.options.transformFile.call(e,n[t],function(e){r[t]=e,++o===n.length&&i(r)})},a=0;a<n.length;a++)t(a)}},{key:"_addFormElementData",value:function(e){if("FORM"===this.element.tagName){var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.querySelectorAll("input, textarea, select, button")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value,l=a.getAttribute("name"),s=a.getAttribute("type");if(s=s&&s.toLowerCase(),null!=l)if("SELECT"===a.tagName&&a.hasAttribute("multiple")){var u=!0,c=!1,d=void 0;try{for(var p,h=a.options[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var f=p.value;f.selected&&e.append(l,f.value)}}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else(!s||"checkbox"!==s&&"radio"!==s||a.checked)&&e.append(l,a.value)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}}},{key:"_updateFilesUploadProgress",value:function(e,t,n){var i;if(void 0!==n){if(i=100*n.loaded/n.total,e[0].upload.chunked){var r=e[0],o=this._getChunk(r,t);o.progress=i,o.total=n.total,o.bytesSent=n.loaded;r.upload.progress=0,r.upload.total=0;for(var a=r.upload.bytesSent=0;a<r.upload.totalChunkCount;a++)void 0!==r.upload.chunks[a]&&void 0!==r.upload.chunks[a].progress&&(r.upload.progress+=r.upload.chunks[a].progress,r.upload.total+=r.upload.chunks[a].total,r.upload.bytesSent+=r.upload.chunks[a].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount}else{var l=!0,s=!1,u=void 0;try{for(var c,d=e[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;p.upload.progress=i,p.upload.total=n.total,p.upload.bytesSent=n.loaded}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}}var h=!0,f=!1,v=void 0;try{for(var m,y=e[Symbol.iterator]();!(h=(m=y.next()).done);h=!0){var g=m.value;this.emit("uploadprogress",g,g.upload.progress,g.upload.bytesSent)}}catch(e){f=!0,v=e}finally{try{h||null==y.return||y.return()}finally{if(f)throw v}}}else{var b=!0,k=!0,w=!(i=100),F=void 0;try{for(var z,x=e[Symbol.iterator]();!(k=(z=x.next()).done);k=!0){var E=z.value;100===E.upload.progress&&E.upload.bytesSent===E.upload.total||(b=!1),E.upload.progress=i,E.upload.bytesSent=E.upload.total}}catch(e){w=!0,F=e}finally{try{k||null==x.return||x.return()}finally{if(w)throw F}}if(b)return;var C=!0,_=!1,S=void 0;try{for(var D,T=e[Symbol.iterator]();!(C=(D=T.next()).done);C=!0){var L=D.value;this.emit("uploadprogress",L,i,L.upload.bytesSent)}}catch(e){_=!0,S=e}finally{try{C||null==T.return||T.return()}finally{if(_)throw S}}}}},{key:"_finishedUploading",value:function(e,t,n){var i;if(e[0].status!==C.CANCELED&&4===t.readyState){if("arraybuffer"!==t.responseType&&"blob"!==t.responseType&&(i=t.responseText,t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json")))try{i=JSON.parse(i)}catch(e){n=e,i="Invalid JSON response from server."}this._updateFilesUploadProgress(e),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t)):this._finished(e,i,n):this._handleUploadError(e,t,i)}}},{key:"_handleUploadError",value:function(e,t,n){if(e[0].status!==C.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var i=this._getChunk(e[0],t);if(i.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[i.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}this._errorProcessing(e,n||this.options.dictResponseError.replace("{{statusCode}}",t.status),t)}}},{key:"submitRequest",value:function(e,t){e.send(t)}},{key:"_finished",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.SUCCESS,this.emit("success",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("successmultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.ERROR,this.emit("error",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("errormultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}}]),C}();Dropzone.initClass(),Dropzone.version="5.7.0",Dropzone.options={},Dropzone.optionsForElement=function(e){return e.getAttribute("id")?Dropzone.options[camelize(e.getAttribute("id"))]:void 0},Dropzone.instances=[],Dropzone.forElement=function(e){if("string"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return e.dropzone},Dropzone.autoDiscover=!0,Dropzone.discover=function(){var s;if(document.querySelectorAll)s=document.querySelectorAll(".dropzone");else{s=[];var e=function(l){return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=l[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;/(^| )dropzone($| )/.test(a.className)?e.push(s.push(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()};e(document.getElementsByTagName("div")),e(document.getElementsByTagName("form"))}return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;!1!==Dropzone.optionsForElement(a)?e.push(new Dropzone(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()},Dropzone.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],Dropzone.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){var t=!0,n=!1,i=void 0;try{for(var r,o=Dropzone.blacklistedBrowsers[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){r.value.test(navigator.userAgent)&&(e=!1)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}else e=!1;else e=!1;return e},Dropzone.dataURItoBlob=function(e){for(var t=atob(e.split(",")[1]),n=e.split(",")[0].split(":")[1].split(";")[0],i=new ArrayBuffer(t.length),r=new Uint8Array(i),o=0,a=t.length,l=0<=a;l?o<=a:a<=o;l?o++:o--)r[o]=t.charCodeAt(o);return new Blob([i],{type:n})};var without=function(e,t){return e.filter(function(e){return e!==t}).map(function(e){return e})},camelize=function(e){return e.replace(/[\-_](\w)/g,function(e){return e.charAt(1).toUpperCase()})};Dropzone.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes[0]},Dropzone.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},Dropzone.getElement=function(e,t){var n;if("string"==typeof e?n=document.querySelector(e):null!=e.nodeType&&(n=e),null==n)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector or a plain HTML element."));return n},Dropzone.getElements=function(e,t){var n,i;if(e instanceof Array){i=[];try{var r=!0,o=!1,a=void 0;try{for(var l,s=e[Symbol.iterator]();!(r=(l=s.next()).done);r=!0)n=l.value,i.push(this.getElement(n,t))}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}}catch(e){i=null}}else if("string"==typeof e){var u=!0,c=!(i=[]),d=void 0;try{for(var p,h=document.querySelectorAll(e)[Symbol.iterator]();!(u=(p=h.next()).done);u=!0)n=p.value,i.push(n)}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else null!=e.nodeType&&(i=[e]);if(null==i||!i.length)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector, a plain HTML element or a list of those."));return i},Dropzone.confirm=function(e,t,n){return window.confirm(e)?t():null!=n?n():void 0},Dropzone.isValidFile=function(e,t){if(!t)return!0;t=t.split(",");var n=e.type,i=n.replace(/\/.*$/,""),r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){var u=l.value;if("."===(u=u.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(u.toLowerCase(),e.name.length-u.length))return!0}else if(/\/\*$/.test(u)){if(i===u.replace(/\/.*$/,""))return!0}else if(n===u)return!0}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each(function(){return new Dropzone(this,e)})}),"undefined"!=typeof module&&null!==module?module.exports=Dropzone:window.Dropzone=Dropzone,Dropzone.ADDED="added",Dropzone.QUEUED="queued",Dropzone.ACCEPTED=Dropzone.QUEUED,Dropzone.UPLOADING="uploading",Dropzone.PROCESSING=Dropzone.UPLOADING,Dropzone.CANCELED="canceled",Dropzone.ERROR="error",Dropzone.SUCCESS="success";var detectVerticalSquash=function(e){e.naturalWidth;var t=e.naturalHeight,n=document.createElement("canvas");n.width=1,n.height=t;var i=n.getContext("2d");i.drawImage(e,0,0);for(var r=i.getImageData(1,0,1,t).data,o=0,a=t,l=t;o<l;){0===r[4*(l-1)+3]?a=l:o=l,l=a+o>>1}var s=l/t;return 0==s?1:s},drawImageIOSFix=function(e,t,n,i,r,o,a,l,s,u){var c=detectVerticalSquash(t);return e.drawImage(t,n,i,r,o,a,l,s,u/c)},ExifRestore=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",n=void 0,i=void 0,r="",o=void 0,a=void 0,l=void 0,s="",u=0;o=(n=e[u++])>>2,a=(3&n)<<4|(i=e[u++])>>4,l=(15&i)<<2|(r=e[u++])>>6,s=63&r,isNaN(i)?l=s=64:isNaN(r)&&(s=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l)+this.KEY_STR.charAt(s),n=i=r="",o=a=l=s="",u<e.length;);return t}},{key:"restore",value:function(e,t){if(!e.match("data:image/jpeg;base64,"))return t;var n=this.decode64(e.replace("data:image/jpeg;base64,","")),i=this.slice2Segments(n),r=this.exifManipulation(t,i);return"data:image/jpeg;base64,".concat(this.encode64(r))}},{key:"exifManipulation",value:function(e,t){var n=this.getExifArray(t),i=this.insertExif(e,n);return new Uint8Array(i)}},{key:"getExifArray",value:function(e){for(var t=void 0,n=0;n<e.length;){if(255===(t=e[n])[0]&225===t[1])return t;n++}return[]}},{key:"insertExif",value:function(e,t){var n=e.replace("data:image/jpeg;base64,",""),i=this.decode64(n),r=i.indexOf(255,3),o=i.slice(0,r),a=i.slice(r),l=o;return l=(l=l.concat(t)).concat(a)}},{key:"slice2Segments",value:function(e){for(var t=0,n=[];;){if(255===e[t]&218===e[t+1])break;if(255===e[t]&216===e[t+1])t+=2;else{var i=t+(256*e[t+2]+e[t+3])+2,r=e.slice(t,i);n.push(r),t=i}if(t>e.length)break}return n}},{key:"decode64",value:function(e){var t=void 0,n=void 0,i="",r=void 0,o=void 0,a="",l=0,s=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(l++))<<2|(r=this.KEY_STR.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(o=this.KEY_STR.indexOf(e.charAt(l++)))>>2,i=(3&o)<<6|(a=this.KEY_STR.indexOf(e.charAt(l++))),s.push(t),64!==o&&s.push(n),64!==a&&s.push(i),t=n=i="",r=o=a="",l<e.length;);return s}}]),e}();ExifRestore.initClass();var contentLoaded=function(t,n){function i(e){if("readystatechange"!==e.type||"complete"===o.readyState)return("load"===e.type?t:o)[s](u+e.type,i,!1),!r&&(r=!0)?n.call(t,e.type||e):void 0}var r=!1,e=!0,o=t.document,a=o.documentElement,l=o.addEventListener?"addEventListener":"attachEvent",s=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on";if("complete"!==o.readyState){if(o.createEventObject&&a.doScroll){try{e=!t.frameElement}catch(e){}e&&!function t(){try{a.doScroll("left")}catch(e){return void setTimeout(t,50)}return i("poll")}()}return o[l](u+"DOMContentLoaded",i,!1),o[l](u+"readystatechange",i,!1),t[l](u+"load",i,!1)}};function __guard__(e,t){return null!=e?t(e):void 0}function __guardMethod__(e,t,n){return null!=e&&"function"==typeof e[t]?n(e,t):void 0}Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover)return Dropzone.discover()},contentLoaded(window,Dropzone._autoDiscoverFunction);
\ No newline at end of file
/*! Select2 4.0.6-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k<a.length;k++)if("."===(m=a[k]))a.splice(k,1),k-=1;else if(".."===m){if(0===k||1===k&&".."===a[2]||".."===a[k-1])continue;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o<c.length;o+=1)if(n=p(c[o],t),"require"===(k=n.f))w[o]=q.require(a);else if("exports"===k)w[o]=q.exports(a),v=!0;else if("module"===k)h=w[o]=q.module(a);else if(e(r,k)||e(s,k)||e(u,k))w[o]=j(k);else{if(!n.p)throw new Error(a+" missing "+k);n.p.load(n.n,g(f,!0),i(k),{}),w[o]=r[k]}m=d?d.apply(r[a],w):void 0,a&&(h&&h.exports!==b&&h.exports!==r[a]?r[a]=h.exports:m===b&&v||(r[a]=m))}else a&&(r[a]=d)},a=c=o=function(a,c,d,e,f){if("string"==typeof a)return q[a]?q[a](c):j(p(a,l(c)).f);if(!a.splice){if(t=a,t.deps&&o(t.deps,t.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?n(b,a,c,d):setTimeout(function(){n(b,a,c,d)},4),o},o.config=function(a){return o(a)},a._defined=r,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(r,a)||e(s,a)||(s[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){"function"==typeof b[d]&&("constructor"!==d&&c.push(d))}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){return Array.prototype.unshift.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;c<d;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;c<a;c++){b+=Math.floor(36*Math.random()).toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return(e!==f||"hidden"!==f&&"visible"!==f)&&("scroll"===e||"scroll"===f||(d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth))},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){b.find(".select2-results").append(a)},c.prototype.sort=function(a){return this.options.get("sorter")(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k<c.children.length;k++){var l=c.children[k],m=this.option(l);j.push(m)}var n=a("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.attr("title",e.title||e.text),c.StoreData(f[0],"data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h<e.length;h++)if(g={data:e[h]},this.trigger("unselect",g),g.prevented)return void this.$element.val(f);this.$element.trigger("change"),this.trigger("toggle",{})}}},d.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||c.which!=b.DELETE&&c.which!=b.BACKSPACE||this._handleClear(c)},d.prototype.update=function(b,d){if(b.call(this,d),!(this.$selection.find(".select2-selection__placeholder").length>0||0===d.length)){var e=a('<span class="select2-selection__clear">&times;</span>');c.StoreData(e[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(e)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple")){if(a.selected=!1,c(a.element).is("option"))return a.element.selected=!1,void this.$element.trigger("change");this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})}},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){b.RemoveData(this)})},d.prototype.query=function(a,b){var d=[],e=this;this.$element.children().each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var d;a.children?(d=document.createElement("optgroup"),d.label=a.text):(d=document.createElement("option"),void 0!==d.textContent?d.textContent=a.text:d.innerText=a.text),void 0!==a.id&&(d.value=a.id),a.disabled&&(d.disabled=!0),a.selected&&(d.selected=!0),a.title&&(d.title=a.title);var e=c(d),f=this._normalizeItem(a);return f.element=d,b.StoreData(d,"data",f),e},d.prototype.item=function(a){var d={};if(null!=(d=b.GetData(a[0],"data")))return d;if(a.is("option"))d={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){d={text:a.prop("label"),children:[],title:a.prop("title")};for(var e=a.children("option"),f=[],g=0;g<e.length;g++){var h=c(e[g]),i=this.item(h);f.push(i)}d.children=f}return d=this._normalizeItem(d),d.element=a[0],b.StoreData(a[0],"data",d),d},d.prototype._normalizeItem=function(a){a!==Object(a)&&(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){return this.options.get("matcher")(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0);if((i.text||"").toUpperCase()===(b.term||"").toUpperCase()||j)return!f&&(a.data=g,void c(a))}if(f)return!0;var k=e.createTag(b);if(null!=k){var l=e.option(k);l.attr("data-select2-tag",!0),e.addOptions([l]),e.insertTag(g,k)}a.results=g,c(a)}var e=this;if(this._removeOldTags(),null==b.term||null!=b.page)return void a.call(this,b,c);a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b);if(!g.$element.find("option").filter(function(){return a(this).val()===c.id}).length){var d=g.option(c);d.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([d])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",b.term.length<this.minimumInputLength)return void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return!(a(c.data.results)<this.minimumResultsForSearch)&&b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",["../utils"],function(a){function b(){}return b.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},b.prototype._handleSelectOnClose=function(b,c){if(c&&null!=c.originalSelect2Event){var d=c.originalSelect2Event;if("select"===d._type||"unselect"===d._type)return}var e=this.getHighlightedResults();if(!(e.length<1)){var f=a.GetData(e[0],"data");null!=f.element&&f.element.selected||null==f.element&&f.selected||this.trigger("select",{data:f})}},b}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){return"Please enter "+(a.minimum-a.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}return D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(a){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(a){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var O=k.loadPath(this.defaults.amdLanguageBase+"en"),P=new k(l.language);P.extend(O),l.translations=P}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,d.GetData(a[0])):d.GetData(a[0]);var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h<i;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
\ No newline at end of file
!function(t){t.fn.tipTip=function(e){var o={activation:"hover",keepAlive:!1,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:!1,enter:function(){},exit:function(){}},i=t.extend(o,e);if(t("#tiptip_holder").length<=0){var n=t('<div id="tiptip_holder" style="max-width:'+i.maxWidth+';"></div>'),r=t('<div id="tiptip_content"></div>'),a=t('<div id="tiptip_arrow"></div>');t("body").append(n.html(r).prepend(a.html('<div id="tiptip_arrow_inner"></div>')))}else var n=t("#tiptip_holder"),r=t("#tiptip_content"),a=t("#tiptip_arrow");return this.each(function(){function e(){i.enter.call(this),r.html(d),n.hide().removeAttr("class").css("margin","0"),a.removeAttr("style");var e=parseInt(f.offset().top),o=parseInt(f.offset().left),p=parseInt(f.outerWidth()),l=parseInt(f.outerHeight()),h=n.outerWidth(),c=n.outerHeight(),s=Math.round((p-h)/2),_=Math.round((l-c)/2),v=Math.round(o+s),m=Math.round(e+l+i.edgeOffset),g="",b="",M=Math.round(h-12)/2;"bottom"==i.defaultPosition?g="_bottom":"top"==i.defaultPosition?g="_top":"left"==i.defaultPosition?g="_left":"right"==i.defaultPosition&&(g="_right");var w=s+o<parseInt(t(window).scrollLeft()),O=h+o>parseInt(t(window).width());w&&s<0||"_right"==g&&!O||"_left"==g&&o<h+i.edgeOffset+5?(g="_right",b=Math.round(c-13)/2,M=-12,v=Math.round(o+p+i.edgeOffset),m=Math.round(e+_)):(O&&s<0||"_left"==g&&!w)&&(g="_left",b=Math.round(c-13)/2,M=Math.round(h),v=Math.round(o-(h+i.edgeOffset+5)),m=Math.round(e+_));var x=e+l+i.edgeOffset+c+8>parseInt(t(window).height()+t(window).scrollTop()),I=e+l-(i.edgeOffset+c+8)<0;x||"_bottom"==g&&x||"_top"==g&&!I?("_top"==g||"_bottom"==g?g="_top":g+="_top",b=c,m=Math.round(e-(c+5+i.edgeOffset))):(I|("_top"==g&&I)||"_bottom"==g&&!x)&&("_top"==g||"_bottom"==g?g="_bottom":g+="_bottom",b=-12,m=Math.round(e+l+i.edgeOffset)),"_right_top"==g||"_left_top"==g?m+=5:"_right_bottom"!=g&&"_left_bottom"!=g||(m-=5),"_left_top"!=g&&"_left_bottom"!=g||(v+=5),a.css({"margin-left":M+"px","margin-top":b+"px"}),n.css({"margin-left":v+"px","margin-top":m+"px"}).attr("class","tip"+g),u&&clearTimeout(u),u=setTimeout(function(){n.stop(!0,!0).fadeIn(i.fadeIn)},i.delay)}function o(){i.exit.call(this),u&&clearTimeout(u),n.fadeOut(i.fadeOut)}var f=t(this);if(i.content)d=i.content;else var d=f.attr(i.attribute);if(""!=d){i.content||f.removeAttr(i.attribute);var u=!1;"hover"==i.activation?(f.hover(function(){e()},function(){i.keepAlive||o()}),i.keepAlive&&n.hover(function(){},function(){o()})):"focus"==i.activation?f.focus(function(){e()}).blur(function(){o()}):"click"==i.activation&&(f.click(function(){return e(),!1}).hover(function(){},function(){i.keepAlive||o()}),i.keepAlive&&n.hover(function(){},function(){o()}))}})}}(jQuery);
\ No newline at end of file
(function( $ ) {
'use strict';
$(function() {
$(".wt-iew-tips").tipTip({'attribute': 'data-wt-iew-tip'});
/* tab view */
var wf_tab_view=
{
Set:function(prnt_selector)
{
var wf_prnt_obj=$(prnt_selector);
var wf_nav_tab=wf_prnt_obj.find('.wt-iew-tab-head .nav-tab');
if(wf_nav_tab.length>0)
{
wf_nav_tab.click(function(){
var wf_tab_hash=$(this).attr('href');
wf_nav_tab.removeClass('nav-tab-active');
$(this).addClass('nav-tab-active');
wf_tab_hash=wf_tab_hash.charAt(0)=='#' ? wf_tab_hash.substring(1) : wf_tab_hash;
var wf_tab_elm=$('div[data-id="'+wf_tab_hash+'"]');
wf_prnt_obj.find('.wt-iew-tab-content').hide();
if(wf_tab_elm.length>0 && wf_tab_elm.is(':hidden'))
{
wf_tab_elm.fadeIn();
}
});
$(window).on('hashchange', function (e) {
var location_hash=window.location.hash;
if(location_hash!="")
{
wf_tab_view.showTab(location_hash);
}
}).trigger('hashchange');
var location_hash=window.location.hash;
if(location_hash!="")
{
wf_tab_view.showTab(location_hash);
}else
{
wf_nav_tab.eq(0).click();
}
}
this.subTab(wf_prnt_obj);
},
showTab:function(location_hash)
{
var wf_tab_hash=location_hash.charAt(0)=='#' ? location_hash.substring(1) : location_hash;
if(wf_tab_hash!="")
{
var wf_tab_elm=$('div[data-id="'+wf_tab_hash+'"]');
if(wf_tab_elm.length>0 && wf_tab_elm.is(':hidden'))
{
$('a[href="#'+wf_tab_hash+'"]').click();
}
}
},
subTab:function(wf_prnt_obj)
{
wf_prnt_obj.find('.wt_iew_sub_tab li').click(function(){
var trgt=$(this).attr('data-target');
var prnt=$(this).parent('.wt_iew_sub_tab');
var ctnr=prnt.siblings('.wt_iew_sub_tab_container');
prnt.find('li a').css({'color':'#0073aa','cursor':'pointer'});
$(this).find('a').css({'color':'#000','cursor':'default'});
ctnr.find('.wt_iew_sub_tab_content').hide();
ctnr.find('.wt_iew_sub_tab_content[data-id="'+trgt+'"]').fadeIn();
});
wf_prnt_obj.find('.wt_iew_sub_tab').each(function(){
var elm=$(this).children('li').eq(0);
elm.click();
});
}
}
wf_tab_view.Set('#'+wt_iew_basic_params.plugin_id); /* set plugin main div as parent object to avoid conflict with other WT plugins */
/* tab view */
});
})( jQuery );
var wt_iew_settings_form_basic=
{
Set:function(prnt_selector)
{
var wf_prnt_obj=jQuery(prnt_selector);
wf_prnt_obj.find('.wt_iew_settings_form_basic').submit(function(e){
e.preventDefault();
var data=jQuery(this).serialize();
var submit_btn=jQuery(this).find('input[type="submit"]');
var spinner=submit_btn.siblings('.spinner');
spinner.css({'visibility':'visible'});
submit_btn.css({'opacity':'.5','cursor':'default'}).prop('disabled',true);
jQuery.ajax({
url:wt_iew_basic_params.ajax_url,
type:'POST',
dataType:'json',
data:data+'&action=wt_iew_save_settings_basic',
success:function(data)
{
spinner.css({'visibility':'hidden'});
submit_btn.css({'opacity':'1','cursor':'pointer'}).prop('disabled',false);
if(data.status==true)
{
wt_iew_notify_msg.success(data.msg);
}else
{
wt_iew_notify_msg.error(data.msg);
}
},
error:function ()
{
spinner.css({'visibility':'hidden'});
submit_btn.css({'opacity':'1','cursor':'pointer'}).prop('disabled',false);
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.settings_error);
}
});
});
}
}
var wt_saved_templates = {
Set: function()
{
jQuery('.wt_ier_delete_template').unbind('click').click(function (e) {
e.preventDefault();
if(confirm(wt_iew_basic_params.msgs.sure)){
var template_id = jQuery(this).attr('data-id');
var data = {
_wpnonce: wt_iew_basic_params.nonces.main,
action: 'wt_iew_delete_template',
template_id: template_id,
};
jQuery('tr[data-row-id='+data.template_id+']').html('<td colspan="5">'+wt_iew_basic_params.msgs.template_del_loader+'</td>');
jQuery.ajax({
url: wt_iew_basic_params.ajax_url,
type: 'POST',
dataType: 'json',
data: data,
success: function (data)
{
if (data.status == true)
{
wt_iew_notify_msg.success(data.msg, true);
jQuery('tr[data-row-id='+data.template_id+']').remove();
} else
{
wt_iew_notify_msg.error(data.msg, true);
}
},
error: function ()
{
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.template_del_error);
}
});
}
});
}
}
var wt_drp_menu=
{
Set:function()
{
jQuery(document).on('click', '.wt_iew_drp_menu', function(){
var trgt=jQuery(this).attr('data-target');
var drp_menu=jQuery('.wt_iew_dropdown[data-id="'+trgt+'"]');
if(drp_menu.is(':visible'))
{
drp_menu.hide();
}else
{
var pos=jQuery(this).position();
var t=pos.top+(jQuery(this).height()/2)+5;
var l=pos.left; //-drp_menu.outerWidth()+jQuery(this).outerWidth();
var w=jQuery(this).outerWidth();
drp_menu.css({'display':'block','left':l,'top':t,'opacity':0,'width':w}).stop(true, true).animate({'top':t+5, 'opacity':1});
}
});
jQuery(document).on('click', 'body, body *', function(e){
var drp_menu=jQuery('.wt_iew_dropdown');
if(drp_menu.is(':visible'))
{
if(jQuery(e.target).hasClass('wt_iew_dropdown')===false && jQuery(e.target).hasClass('wt_iew_drp_menu')===false && jQuery(e.target).hasClass('dashicons')===false)
{
drp_menu.hide();
}
}
});
}
}
var wt_iew_notify_msg=
{
error:function(message, auto_close)
{
var auto_close=(auto_close!== undefined ? auto_close : false);
var er_elm=jQuery('<div class="wt_notify_msg" style="background:#f8d7da; border:solid 1px #f5c6cb; color: #721c24">'+message+'</div>');
this.setNotify(er_elm, auto_close);
},
success:function(message, auto_close)
{
var auto_close=(auto_close!== undefined ? auto_close : false);
var suss_elm=jQuery('<div class="wt_notify_msg" style="background:#d4edda; border:solid 1px #c3e6cb; color: #155724;">'+message+'</div>');
this.setNotify(suss_elm, auto_close);
},
setNotify:function(elm, auto_close)
{
jQuery('body').append(elm);
jQuery('.wt_notify_msg').click(function(){
jQuery(this).remove();
});
elm.stop(true,true).animate({'opacity':1,'top':'50px'},1000);
if(auto_close)
{
setTimeout(function(){
wt_iew_notify_msg.fadeOut(elm);
},5000);
}else
{
jQuery('body').click(function(){
wt_iew_notify_msg.fadeOut(elm);
});
}
},
fadeOut:function(elm)
{
elm.animate({'opacity':0,'top':'100px'},1000,function(){
elm.remove();
});
}
}
wt_iew_popup={
Set:function()
{
this.regPopupOpen();
this.regPopupClose();
jQuery('body').prepend('<div class="wt_iew_overlay"></div>');
},
regPopupOpen:function()
{
jQuery('[data-wt_iew_popup]').click(function(){
var elm_class=jQuery(this).attr('data-wt_iew_popup');
var elm=jQuery('.'+elm_class);
if(elm.length>0)
{
wt_iew_popup.showPopup(elm);
}
});
},
showPopup:function(popup_elm)
{
var pw=popup_elm.outerWidth();
var wh=jQuery(window).height();
var ph=wh-150;
popup_elm.css({'margin-left':((pw/2)*-1),'display':'block','top':'20px'}).animate({'top':'50px'});
popup_elm.find('.wt_iew_popup_body').css({'max-height':ph+'px','overflow':'auto'});
jQuery('.wt_iew_overlay').show();
},
showimportPopup:function(popup_elm)
{
var pw=popup_elm.outerWidth();
var wh=jQuery(window).height();
var ph=wh-150;
popup_elm.css({'margin-left':((pw/2)*-1),'display':'block','top':'50px'});
popup_elm.find('.wt_iew_popup_body').css({'max-height':ph+'px','overflow':'auto'});
jQuery('.wt_iew_overlay').show();
},
hidePopup:function()
{
jQuery('.wt_iew_popup_close').click();
},
regPopupClose:function(popup_elm)
{
jQuery(document).keyup(function(e){
if(e.keyCode==27)
{
wt_iew_popup.hidePopup();
}
});
jQuery('.wt_iew_popup_close, .wt_iew_popup_cancel, .wt_iew_popup_close_btn').unbind('click').click(function(){
jQuery('.wt_iew_overlay, .wt_iew_popup, .wt-something-went-wrong').hide();
});
}
}
var wt_field_group=
{
Set:function()
{
//jQuery('.wt_iew_field_group_children').hide();
jQuery('.wt_iew_field_group_hd .wt_iew_field_group_toggle_btn').each(function(){
var group_id = jQuery(this).attr('data-id');
var group_content_dv = jQuery(this).parents('tr').find('.wt_iew_field_group_content');
var visibility = jQuery(this).attr('data-visibility');
jQuery('.wt_iew_field_group_children[data-field-group="'+group_id+'"]').appendTo(group_content_dv.find('table'));
if(visibility==1)
{
group_content_dv.show();
}
});
jQuery('.wt_iew_field_group_hd').click(function(){
var toggle_btn=jQuery(this).find('.wt_iew_field_group_toggle_btn');
var visibility=toggle_btn.attr('data-visibility');
var group_content_dv=toggle_btn.parents('tr').find('.wt_iew_field_group_content');
if(visibility==1)
{
toggle_btn.attr('data-visibility',0);
toggle_btn.find('.dashicons').removeClass('dashicons-arrow-down').addClass('dashicons-arrow-right');
group_content_dv.hide();
}else
{
toggle_btn.attr('data-visibility',1);
toggle_btn.find('.dashicons').removeClass('dashicons-arrow-right').addClass('dashicons-arrow-down');
group_content_dv.show();
}
});
}
}
var wt_iew_form_toggler=
{
Set:function()
{
this.runToggler();
jQuery('select.wt_iew_form_toggler').change(function(){
wt_iew_form_toggler.toggle(jQuery(this));
});
jQuery('input[type="radio"].wt_iew_form_toggler').click(function(){
if(jQuery(this).is(':checked'))
{
wt_iew_form_toggler.toggle(jQuery(this));
}
});
jQuery('input[type="checkbox"].wt_iew_form_toggler').click(function(){
wt_iew_form_toggler.toggle(jQuery(this),1);
});
},
runToggler:function(prnt)
{
prnt=prnt ? prnt : jQuery('body');
prnt.find('select.wt_iew_form_toggler').each(function(){
wt_iew_form_toggler.toggle(jQuery(this));
});
prnt.find('input[type="radio"].wt_iew_form_toggler, input[type="checkbox"].wt_iew_form_toggler').each(function(){
if(jQuery(this).is(':checked'))
{
wt_iew_form_toggler.toggle(jQuery(this));
}
});
prnt.find('input[type="checkbox"].wt_iew_form_toggler').each(function(){
wt_iew_form_toggler.toggle(jQuery(this),1);
});
},
toggle:function(elm, checkbox)
{
var vl=elm.val();
var trgt=elm.attr('wf_frm_tgl-target');
jQuery('[wf_frm_tgl-id="'+trgt+'"]').hide();
if(!elm.is(':visible'))
{
return false;
}
if(elm.css('display')!='none') /* if parent is visible. `:visible` method. it will not work on JS tabview */
{
var elms=this.getElms(elm,trgt,vl,checkbox);
elms.show().find('th label').css({'margin-left':'0px'})
elms.each(function(){
var lvl=jQuery(this).attr('wf_frm_tgl-lvl');
var mrgin=25;
if (typeof lvl!== typeof undefined && lvl!== false) {
mrgin=lvl*mrgin;
}
jQuery(this).find('th label').animate({'margin-left':mrgin+'px'},1000);
});
}
/* in case of greater than 1 level */
jQuery('[wf_frm_tgl-id="'+trgt+'"]').each(function(){
wt_iew_form_toggler.runToggler(jQuery(this));
});
},
getElms:function(elm,trgt,vl,checkbox)
{
return jQuery('[wf_frm_tgl-id="'+trgt+'"]').filter(function(){
if(jQuery(this).attr('wf_frm_tgl-val')==vl)
{
if(checkbox)
{
if(elm.is(':checked'))
{
if(jQuery(this).attr('wf_frm_tgl-chk')=='true')
{
return true;
}else
{
return false;
}
}else
{
if(jQuery(this).attr('wf_frm_tgl-chk')=='false')
{
return true;
}else
{
return false;
}
}
}else
{
return true;
}
}else
{
return false;
}
});
}
}
var wt_iew_file_attacher={
Set:function()
{
var file_frame;
jQuery(".wt_iew_file_attacher").click(function(event){
event.preventDefault();
if(jQuery(this).data('file_frame'))
{
}else
{
/* reset user preference. This will open file uploader by default. */
wp.media.controller.Library.prototype.defaults.contentUserSetting=false;
/* Create the media frame. */
var file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery( this ).data( 'invoice_uploader_title' ),
button: {
text: jQuery( this ).data( 'invoice_uploader_button_text' ),
},
/* Set to true to allow multiple files to be selected */
multiple: false
});
jQuery(this).data('file_frame',file_frame);
var wf_file_target=jQuery(this).attr('wt_iew_file_attacher_target');
var wt_file_attacher_choosed=jQuery(this).parent('.wt_iew_file_attacher_dv').find('.wt_iew_file_attacher_choosed');
var elm=jQuery(this);
/* When an image is selected, run a callback. */
jQuery(this).data('file_frame').on( 'select', function() {
/* We set multiple to false so only get one image from the uploader */
var attachment =file_frame.state().get('selection').first().toJSON();
/* Send the value of attachment.url back to shipment label printing settings form */
jQuery(wf_file_target).val(attachment.url);
if(wt_file_attacher_choosed.length>0)
{
wt_file_attacher_choosed.css({'visibility':'visible'}).html(attachment.filename);
}
});
/* Finally, open the modal */
}
jQuery(this).data('file_frame').open();
});
function wf_update_file_choosed(wf_file_target, wt_file_attacher_choosed)
{
if(jQuery(wf_file_target).val()=="")
{
wt_file_attacher_choosed.css({'visibility':'hidden'});
}else
{
wt_file_attacher_choosed.css({'visibility':'visible'});
}
}
jQuery(".wt_iew_file_attacher").each(function(){
var wf_file_target=jQuery(this).attr('wt_iew_file_attacher_target');
var wt_file_attacher_choosed=jQuery(this).parent('.wt_iew_file_attacher_dv').find('.wt_iew_file_attacher_choosed');
if(wt_file_attacher_choosed.length>0)
{
wf_update_file_choosed(wf_file_target, wt_file_attacher_choosed);
jQuery(wf_file_target).change(function(){
wf_update_file_choosed(wf_file_target, wt_file_attacher_choosed);
});
}
});
}
}
var wt_iew_popover=
{
action_module:false,
Set:function()
{
jQuery('[data-wt_iew_popover="1"]').unbind('click').click(function(){
/* check popover is visible now */
if(jQuery('.wt_iew_popover').length>0 && jQuery('.wt_iew_popover').is(':visible'))
{
wt_iew_popover.remove_active_row();
}
var cr_elm=jQuery(this);
if(!cr_elm.hasClass('dashicons')){
jQuery('.wt_iew_mapping_field_editor_top').hide();
jQuery('.wt_iew_mapping_field_editor_bottom').hide();
}else{
jQuery('.wt_iew_mapping_field_editor_top').show();
jQuery('.wt_iew_mapping_field_editor_bottom').show();
var cr_elm = jQuery(this).closest('td').prev('td').find('span:first');
}
if(cr_elm.attr('data-popup-opened')==1)
{
jQuery('[data-wt_iew_popover="1"]').attr('data-popup-opened',0);
wt_iew_popover.closePop();
return false;
}else
{
jQuery('[data-wt_iew_popover="1"]').attr('data-popup-opened',0);
cr_elm.attr('data-popup-opened',1);
}
if(jQuery('.wt_iew_popover').length==0)
{
var template='<div class="wt_iew_popover"><h3 class="wt_iew_popover-title">'
+'<span class="wt_iew_popover-title-text"></span><span class="popover_close_icon_button popover_close">X</span></h3>'
+'<div class="wt_iew_popover-content"></div><div class="wt_iew_popover-footer">'
+'<button name="wt_iew_popover_do_action" type="button" class="button button-primary">'+wt_iew_basic_params.msgs.use_expression+'</button>'
+'<button name="popover_close" type="button" class="button button-secondary popover_close">'+wt_iew_basic_params.msgs.cancel+'</button>'
+'<span class="spinner" style="margin-top:5px"></span>'
+'</div></div>';
jQuery('body').append(template);
wt_iew_popover.regclosePop();
}
var ttle=jQuery.trim(cr_elm.attr('data-title'));
var pp_elm=jQuery('.wt_iew_popover');
var pp_html='';
var pp_html_cntr=cr_elm.attr('data-content-container');
if(typeof pp_html_cntr!==typeof undefined && pp_html_cntr!==false)
{
pp_html=jQuery(pp_html_cntr).html();
ttle=(ttle=="" ? jQuery(pp_html_cntr).attr('data-title') : ttle);
wt_iew_popover.action_module=jQuery(pp_html_cntr).attr('data-module');
}else
{
pp_html=cr_elm.attr('data-content');
}
pp_elm.css({'display':'block'}).find('.wt_iew_popover-content').html(pp_html);
//pp_elm.find('.wt_iew_popover-footer').show();
var cr_elm_w=cr_elm.width();
var cr_elm_h=cr_elm.height();
var pp_elm_w=pp_elm.width();
var pp_elm_h=pp_elm.height();
var cr_elm_pos=cr_elm.offset();
var cr_elm_pos_t=cr_elm_pos.top-((pp_elm_h-cr_elm_h)/4);
var cr_elm_pos_l=cr_elm_pos.left+cr_elm_w;
jQuery('.wt_iew_popover').removeClass('wt-pop-hidden');
if(!jQuery(this).hasClass('dashicons')){
var cr_elm_pos_l=cr_elm_pos.left-20;
var cr_elm_pos_t=cr_elm_pos.top+cr_elm_h+3;
jQuery('.wt_iew_popover').addClass('wt-pop-hidden');
jQuery('.wt_iew_popover-content').css('padding', '0');
jQuery( '.wt_iew_mapping_popup_label' ).hide();
jQuery('.wt_iew_mapping_field_editor_box').css('margin-bottom', '0');
jQuery('.wt_iew_mapping_field_editor_box').css('margin-top', '0');
jQuery('.wt_iew_mapping_field_editor_box').css({'border-radius': 0});
var quick_map_w = jQuery('.wt_iew_mapping_field_val').width()+10;
if(quick_map_w < 250){
quick_map_w = 250;
}
jQuery('.wt_iew_mapping_field_editor').css('width', quick_map_w);
jQuery('.wt_iew_mapping_field_selector_box').css('height', '320');
jQuery('.wt-input-column-search').css({'top':15, 'left': 15});
}else{
jQuery('.wt_iew_popover-content').css('padding', '15');
jQuery( '.wt_iew_mapping_popup_label' ).show();
jQuery('.wt_iew_mapping_field_editor_box').css({'margin-bottom':10, 'margin-top':5});
jQuery('.wt_iew_mapping_field_editor').css('width', '400');
jQuery('.wt_iew_mapping_field_selector_box').css('height', '200');
jQuery('.wt-input-column-search').css({'top':272, 'left': 30});
jQuery('.wt_iew_mapping_field_editor_box').css({'border-radius': 5});
}
cr_elm_pos_t=cr_elm_pos_t+10; /* 10 px buffer for input span element padding */
pp_elm.find('.wt_iew_popover-title-text').html(ttle);
var target_elm_label=cr_elm.parents('tr').find('.wt_iew_mapping_column_label').html();
jQuery('.wt_iew_target_column').html(target_elm_label);
jQuery('.wt_iew_popover-content').find('.wt_iew_mapping_field_editor_expression').val(cr_elm.siblings('.columns_val').val());
var animation_speed = 500;
if(!jQuery(this).hasClass('dashicons')){
jQuery('.wt_iew_popover-footer').hide();
jQuery('.wt_iew_popover-title').hide();
animation_speed = 0;
}else{
jQuery('.wt_iew_popover-footer').show();
jQuery('.wt_iew_popover-title').show();
}
wt_iew_popover.set_active_row(cr_elm);
pp_elm.css({'display':'block','opacity':0, 'top':cr_elm_pos_t,'left':cr_elm_pos_l}).stop(true,true).animate({'left':cr_elm_pos_l+20,'opacity':1}, 500, function(){
jQuery('.wt_iew_mapping_field_editor_column_search').focus();
});
jQuery('[name="wt_iew_popover_do_action"]').data('click-elm', cr_elm);
wt_iew_popover.do_action();
if(wt_iew_popover.action_module=='import')
{
wt_iew_basic_import.mapping_field_editor();
wt_iew_basic_import.mapping_field_editor_output_preview();
}
});
},
do_action:function()
{
jQuery('[name="wt_iew_popover_do_action"]').unbind('click').click(function(){
var click_elm=jQuery(this).data('click-elm');
var vl=jQuery.trim(jQuery('.wt_iew_popover-content').find('.wt_iew_mapping_field_editor_expression').val());
var html_vl=vl;
if(wt_iew_popover.action_module=='import')
{
var html_vl=wt_iew_basic_import.mapping_field_editor_validate_column_val(vl);
}
click_elm.html(html_vl);
click_elm.siblings('.columns_val').val(vl);
wt_iew_popover.closePop();
if(wt_iew_popover.action_module=='import')
{
if(vl=="")
{
click_elm.parents('tr').find('.wt_iew_mapping_checkbox_sub').prop('checked', false);
}else
{
click_elm.parents('tr').find('.wt_iew_mapping_checkbox_sub').prop('checked', true);
}
wt_iew_basic_import.mapping_fields_selected_count(click_elm.parents('table'));
}
});
jQuery(document).on('click', '.wt_iew_mapping_field_selector>li' ,function (e) {
if(!jQuery('.wt_iew_popover-footer').is(':visible')){
var click_elm = jQuery('[name="wt_iew_popover_do_action"]').data('click-elm');
var vl= jQuery(this).attr('data-val');
var html_vl=vl;
if(wt_iew_popover.action_module=='import')
{
var html_vl='{'+vl+'}';
}
click_elm.html(html_vl);
click_elm.siblings('.columns_val').val(html_vl);
wt_iew_popover.closePop();
if(wt_iew_popover.action_module=='import')
{
if(vl=="")
{
click_elm.parents('tr').find('.wt_iew_mapping_checkbox_sub').prop('checked', false);
}else
{
click_elm.parents('tr').find('.wt_iew_mapping_checkbox_sub').prop('checked', true);
}
wt_iew_basic_import.mapping_fields_selected_count(click_elm.parents('table'));
}
}
});
},
regclosePop:function()
{
jQuery('.meta_mapping_box_toggle').click(function(){
wt_iew_popover.closePop();
});
jQuery('.popover_close').unbind('click').click(function(){
wt_iew_popover.closePop();
});
},
set_active_row:function(cr_elm)
{
cr_elm.parents('tr').find('td').css({'background':'#f6f6f6'});
},
remove_active_row:function()
{
var click_elm=jQuery('[name="wt_iew_popover_do_action"]').data('click-elm');
click_elm.parents('tr').find('td').css({'background':'#fff'});
},
closePop:function()
{
var pp_elm=jQuery('.wt_iew_popover');
if(pp_elm.length>0)
{
var pp_lft=pp_elm.offset().left-50;
jQuery('[data-wt_iew_popover="1"]').attr('data-popup-opened',0);
pp_elm.stop(true,true).animate({'opacity':0, 'left':pp_lft},300,function(){
jQuery(this).css({'display':'none'});
});
this.remove_active_row();
}
}
};
var wt_iew_custom_and_preset=
{
toggler:function(preset_elm, custom_elm, custom_val) /* Toggle between custom and preset value */
{
this.do_toggle(preset_elm, custom_elm, custom_val,true);
preset_elm.unbind('change').change(function(){
wt_iew_custom_and_preset.do_toggle(preset_elm, custom_elm, custom_val,false);
});
},
do_toggle:function(preset_elm, custom_elm, custom_val, first_load)
{
if(preset_elm.val()==custom_val)
{
custom_elm.prop('readonly', false).css({'background':'#ffffff'}).focus();
if(!first_load){
custom_elm.val('');
}
}else
{
custom_elm.prop('readonly', true).css({'background':'#efefef'}).val(preset_elm.find('option:selected').attr('data-val'));
}
},
delimiter_toggler:function() /* function for delimiter toggle */
{
this.toggler(jQuery('.wt_iew_delimiter_preset'), jQuery('.wt_iew_custom_delimiter'), 'other');
},
date_format_toggler:function() /* function for date format toggle */
{
this.toggler(jQuery('.wt_iew_date_format_preset'), jQuery('.wt_iew_custom_date_format'), 'other');
}
}
var wt_iew_conditional_help_text=
{
Set:function(prnt)
{
prnt=prnt ? prnt : jQuery('body');
const regex = /\[(.*?)\]/gm;
let m;
prnt.find('.wt-iew_conditional_help_text').each(function()
{
var help_text_elm=jQuery(this);
var this_condition=jQuery(this).attr('data-iew-help-condition');
if(this_condition!='')
{
var condition_conf=new Array();
var field_arr=new Array();
while ((m = regex.exec(this_condition)) !== null)
{
/* This is necessary to avoid infinite loops with zero-width matches */
if(m.index === regex.lastIndex)
{
regex.lastIndex++;
}
condition_conf.push(m[1]);
condition_arr=m[1].split('=');
if(condition_arr.length>1) /* field value pair */
{
field_arr.push(condition_arr[0]);
}
}
if(field_arr.length>0)
{
var callback_fn=function()
{
var is_hide=true;
var previous_type='';
for(var c_i=0; c_i<condition_conf.length; c_i++)
{
var cr_conf=condition_conf[c_i]; /* conf */
var conf_arr=cr_conf.split('=');
if(conf_arr.length>1) /* field value pair */
{
if(previous_type!='field')
{
previous_type='field';
var elm=jQuery('[name="'+conf_arr[0]+'"]');
var vl='';
if(elm.prop('nodeName').toLowerCase()=='input' && elm.attr('type')=='radio')
{
vl=jQuery('[name="'+conf_arr[0]+'"]:checked').val();
}
else if(elm.prop('nodeName').toLowerCase()=='input' && elm.attr('type')=='checkbox')
{
if(elm.is(':checked'))
{
vl=elm.val();
}
}else
{
vl=elm.val();
}
is_hide=(vl==conf_arr[1] ? false : true);
}
}else /* glue */
{
if(previous_type!='glue')
{
previous_type='glue';
if(conf_arr[0]=='OR')
{
if(is_hide===false) /* one previous condition is okay, then stop the loop */
{
break;
}
}else if(conf_arr[0]=='AND')
{
if(is_hide===true && c_i>0) /* one previous condition is not okay, then stop the loop */
{
break;
}
}
}
}
}
if(is_hide)
{
help_text_elm.hide();
}else
{
help_text_elm.css({'display':'inline-block'});
}
}
callback_fn();
for(var f_i=0; f_i<field_arr.length; f_i++)
{
var elm=jQuery('[name="'+field_arr[f_i]+'"]');
if(elm.prop('nodeName')=='radio' || elm.prop('nodeName')=='checkbox')
{
elm.on('click', callback_fn);
}else
{
elm.on('change', callback_fn);
}
}
}
}
});
}
}
jQuery(document).ready(function(){
wt_iew_popup.Set();
wt_iew_settings_form_basic.Set('#'+wt_iew_basic_params.plugin_id);
wt_drp_menu.Set();
wt_iew_file_attacher.Set();
wt_iew_form_toggler.Set();
wt_field_group.Set();
wt_saved_templates.Set();
});
var wt_iew_basic_export=(function( $ ) {
//'use strict';
var wt_iew_basic_export=
{
ajax_data:{},
selected_template:0,
selected_template_name:'',
to_export:( wt_iew_export_basic_params.to_export !== '' ) ? wt_iew_export_basic_params.to_export : 'user',
to_export_title:'',
export_method:'',
current_step:'',
loaded_status_arr:{'loaded':1, 'loading':2, 'not_loaded':0},
page_overlay:false,
step_keys:[],
form_data:{},
only_enabled_data:false,
on_rerun:false,
rerun_id:0,
export_finished:false,
Set:function()
{
this.step_keys=Object.keys(wt_iew_export_basic_params.steps);
if(this.on_rerun)
{
this.rerun();
}else
{
var first_step=this.step_keys[0];
this.load_steps([first_step], first_step);
this.show_step_page(first_step, false); /* just to show a loading */
}
},
rerun:function()
{
var last_step=this.step_keys[this.step_keys.length-1];
this.load_steps(this.step_keys, last_step);
this.show_step_page(last_step, false); /* just to show a loading */
},
load_steps:function(steps, step_to_show)
{
this.prepare_ajax_data('get_steps', 'json');
this.ajax_data.steps=steps;
if(this.on_rerun)
{
this.ajax_data.rerun_id=this.rerun_id;
}
this.set_step_loading_status(steps, 'loading');
this.set_ajax_page_loader(steps, 'loading');
$.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
if(data.status==1)
{
wt_iew_basic_export.set_step_page(data);
wt_iew_basic_export.set_step_loading_status(steps, 'loaded');
if(step_to_show)
{
wt_iew_basic_export.show_step_page(step_to_show, true);
}
if(wt_iew_basic_export.on_rerun)
{
wt_iew_basic_export.load_meta_mapping_fields();
wt_iew_basic_export.on_rerun=false;
wt_iew_basic_export.rerun_id=0;
}
}else
{
// wt_iew_basic_import.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_export.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_export.set_ajax_page_loader(steps, 'error');
}
wt_iew_basic_export.remove_ajax_page_loader();
},
error:function()
{
// wt_iew_basic_import.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_export.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_export.remove_ajax_page_loader();
wt_iew_basic_export.set_ajax_page_loader(steps, 'error');
}
});
},
load_meta_mapping_fields:function()
{
if($('.meta_mapping_box_con').length>0)
{
if($('.meta_mapping_box_con[data-loaded="0"]').length==0)
{
return false;
}
}else
{
return false;
}
this.prepare_ajax_data('get_meta_mapping_fields', 'json');
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_export_step_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
$.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
if(data.status==1)
{
$.each(data.meta_html, function(meta_id, meta_content){
$('.meta_mapping_box_con[data-key="'+meta_id+'"]').html(meta_content).attr('data-loaded', 1);
});
wt_iew_basic_export.enable_sortable();
wt_iew_basic_export.reg_mapping_field_bulk_action();
}else
{
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_export_step_loader">'+wt_iew_basic_params.msgs.error+'</div>');
}
},
error:function()
{
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_export_step_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
}
});
},
console_formdata:function()
{
console.log(this.form_data);
},
refresh_step:function(no_overlay)
{
if(!no_overlay){
this.page_overlay=true;
}
this.load_steps([this.current_step], this.current_step);
},
load_pending_steps:function(no_overlay)
{
if(!no_overlay){
this.page_overlay=true;
}
var rest_steps=this.step_keys.slice(0);
rest_steps.shift(); /* remove first step. no need to load it agian */
this.load_steps(rest_steps, this.current_step);
},
get_page_dom_object:function(step)
{
return $('.wt_iew_export_step_'+step);
},
remove_ajax_page_loader:function()
{
$('.wt_iew_loader_info_box').hide();
$('.wt_iew_overlayed_loader').hide();
$('.spinner').css({'visibility':'hidden'});
this.page_overlay=false;
},
set_ajax_page_loader:function(steps, msg_type)
{
if(this.page_overlay)
{
var h=parseInt($('.wt_iew_export_step_main').outerHeight());
var w=parseInt($('.wt_iew_export_step_main').outerWidth());
$('.wt_iew_overlayed_loader').show().css({'height':h,'width':w,'margin-top':'30px','margin-left':'30px'});
$('.spinner').css({'visibility':'visible'});
}else
{
var msg='';
if(msg_type=='loading')
{
msg=wt_iew_basic_params.msgs.loading;
}else if(msg_type=='error')
{
msg=wt_iew_basic_params.msgs.error;
}
$.each(steps, function(step_ind, step){
wt_iew_basic_export.get_page_dom_object(step).html('<div class="wt_iew_export_step_loader">'+msg+'</div>');
});
}
},
hide_export_info_box:function()
{
$('.wt_iew_loader_info_box').hide();
},
refresh_export_page:function()
{
wt_iew_basic_export.export_finished = true;
location.reload();
},
set_export_progress_info:function(msg)
{
$('.wt_iew_loader_info_box').show().html(msg);
},
nonstep_actions:function(action)
{
if(this.export_method=='template' && this.selected_template==0)
{
$('.wt_iew_warn').hide();
$('.wt_iew_export_template_wrn').show();
return false;
}
this.prepare_ajax_data(action, 'json');
if(action=='save_template' || action=='save_template_as' || action=='update_template')
{
$('.wt_iew_template_name_wrn').hide();
var pop_elm=$('.wt_iew_template_name');
var popup_label=pop_elm.attr('data-save-label');
if(action=='save_template_as')
{
var popup_label=pop_elm.attr('data-saveas-label');
}
pop_elm.find('.wt_iew_popup_hd_label, .wt_iew_template_create_btn').text(popup_label);
wt_iew_popup.showPopup(pop_elm);
$('[name="wt_iew_template_name_field"]').val(this.selected_template_name).focus();
$('.wt_iew_template_create_btn').unbind('click').click(function(){
var name=$.trim($('.wt_iew_template_name_field').val());
if(name=='')
{
$('.wt_iew_template_name_wrn').show();
$('.wt_iew_template_name_field').focus();
}else
{
$('.wt_iew_template_name_wrn').hide();
wt_iew_popup.hidePopup();
wt_iew_basic_export.prepare_form_data();
wt_iew_basic_export.ajax_data['template_name']=name;
wt_iew_basic_export.ajax_data['form_data']=wt_iew_basic_export.form_data;
wt_iew_basic_export.do_nonstep_action(action);
}
});
}else if(action=='export' || action=='upload' || action=='export_image')
{
if(action=='export' || action=='export_image')
{
this.ajax_data['offset']=0;
this.prepare_form_data();
this.ajax_data['form_data']=this.form_data;
}
wt_iew_basic_export.do_nonstep_action(action);
}else
{
/* custom action section for other modules */
this.prepare_form_data();
this.ajax_data['form_data']=this.form_data;
wt_iew_custom_action_basic(this.ajax_data, action, this.selected_template);
}
},
do_nonstep_action:function(action)
{
this.page_overlay=true;
this.set_ajax_page_loader();
$.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
wt_iew_basic_export.remove_ajax_page_loader();
if(data.status==1)
{
if(action=='save_template' || action=='save_template_as' || action=='update_template')
{
wt_iew_basic_export.selected_template=data.id;
wt_iew_basic_export.selected_template_name=data.name;
wt_iew_notify_msg.success(data.msg);
//wt_iew_notify_msg.success(wt_iew_basic_params.msgs.success);
}else if(action=='export' || action=='upload' || action=='export_image')
{
if(data.finished==1)
{
if(data.no_post==1){
alert(data.msg);
}else{
wt_iew_basic_export.set_export_progress_info(data.msg);
wt_iew_notify_msg.success(wt_iew_basic_params.msgs.success);
wt_iew_basic_export.export_finished = true;
}
}
else if(data.finished==2) /* Remote export */
{
wt_iew_basic_export.set_export_progress_info(data.msg);
wt_iew_basic_export.ajax_data['export_id']=data.export_id;
wt_iew_basic_export.ajax_data['total_records']=data.total_records;
wt_iew_basic_export.ajax_data['export_action']='upload';
wt_iew_basic_export.ajax_data['form_data']={};
wt_iew_basic_export.do_nonstep_action('upload');
}
else
{
wt_iew_basic_export.set_export_progress_info(data.msg);
wt_iew_basic_export.ajax_data['offset']=data.new_offset;
wt_iew_basic_export.ajax_data['export_id']=data.export_id;
wt_iew_basic_export.ajax_data['total_records']=data.total_records;
wt_iew_basic_export.do_nonstep_action(action);
}
}else
{
}
}else
{
if(data.msg!="")
{
wt_iew_notify_msg.error(data.msg);
}else
{
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
}
},
error:function()
{
wt_iew_basic_export.remove_ajax_page_loader();
jQuery('.wt-something-went-wrong').show();
//wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
});
},
reg_button_actions:function()
{
$('.wt_iew_export_action_btn').unbind('click').click(function(e){
e.preventDefault();
wt_iew_basic_export.remove_ajax_page_loader(); /* remove any loader that are open */
var action=$(this).attr('data-action');
var action_type=$(this).attr('data-action-type');
var is_previous_step=wt_iew_basic_export.is_previous_step(action);
if(action_type=='step')
{
wt_iew_basic_export.change_step(action);
}else
{
wt_iew_basic_export.nonstep_actions(action);
}
});
},
change_step:function(step_to_go)
{
/* validation section */
if(this.current_step=='post_type')
{
if(this.to_export=='')
{
$('.wt_iew_post_type_wrn').show();
return false;
}
}else if(this.current_step=='method_export') /* method export page */
{
if(this.export_method=='template' && this.selected_template==0 && !this.is_previous_step(step_to_go))
{
$('.wt_iew_warn').hide();
$('.wt_iew_export_template_wrn').show();
return false;
}
}
/* setting fromdata */
this.prepare_form_data();
/* step changing section */
this.show_step_page(step_to_go, true);
},
reset_form_data:function()
{
this.form_data={};
this.selected_template=0;
this.selected_template_name='';
this.export_method='';
},
prepare_form_data:function()
{
if(this.current_step=='post_type')
{
this.form_data['post_type_form_data']=JSON.stringify({'item_type':wt_iew_basic_export.to_export});
}
else if(this.current_step=='method_export')
{
var mapping_enabled_fields=new Array();
$('.wt_iew_export_step_method_export [name="wt_iew_include_these_fields[]"]').each(function(){
if($(this).is(':checked'))
{
mapping_enabled_fields.push($(this).val());
}
});
this.form_data['method_export_form_data']=JSON.stringify({'method_export':wt_iew_basic_export.export_method, 'mapping_enabled_fields':mapping_enabled_fields, 'selected_template':this.selected_template});
}
else if(this.current_step=='filter')
{
if($('.wt_iew_export_filter_form').length>0)
{
var form_data=$('.wt_iew_export_filter_form').serializeArray();
var filter_form_data={};
$.each(form_data, function(){
if(filter_form_data[this.name])
{
if(!filter_form_data[this.name].push)
{
filter_form_data[this.name] = [filter_form_data[this.name]];
}
filter_form_data[this.name].push(this.value || '');
}else
{
if(wt_iew_basic_export.is_multi_select(this.name))
{
filter_form_data[this.name] = [(this.value || '')];
}else
{
filter_form_data[this.name] = this.value || '';
}
}
});
this.form_data['filter_form_data']=JSON.stringify(filter_form_data);
}
}
else if(this.current_step=='mapping')
{
/**
* Default mapping fields //===============================================
*/
var mapping_form_data={};
var mapping_fields={};
var mapping_selected_fields={}; /* this value is only for backend processing */
$('.wt-iew-exporter-default-mapping-tb tbody tr').each(function(){
var columns_key=$(this).find('.columns_key').val();
var columns_val=$(this).find('.columns_val').val();
if(wt_iew_basic_export.only_enabled_data===false) /* get whole keys instead of enabled/disabled */
{
var enabled=($(this).find('.columns_key').is(':checked') ? 1 : 0);
mapping_fields[columns_key]=[columns_val,enabled];
if(enabled==1)
{
mapping_selected_fields[columns_key]=columns_val;
}
}else
{
if($(this).find('.columns_key').is(':checked'))
{
mapping_fields[columns_key]=columns_val;
mapping_selected_fields[columns_key]=columns_val;
}
}
});
var mapping_enabled_fields=new Array();
/*
$('.wt_iew_export_step_mapping [name="wt_iew_include_these_fields[]"]').each(function(){
if($(this).is(':checked'))
{
mapping_enabled_fields.push($(this).val());
}
});
*/
mapping_form_data={'mapping_fields':mapping_fields,'mapping_enabled_fields':mapping_enabled_fields, 'mapping_selected_fields':mapping_selected_fields};
this.form_data['mapping_form_data']=JSON.stringify(mapping_form_data);
/**
* meta mapping fields //===============================================
*/
var meta_step_form_data={};
var mapping_fields={};
var mapping_selected_fields={}; /* this value is only for backend processing */
$('.wt-iew-exporter-meta-mapping-tb').each(function(){
var mapping_key=$(this).attr('data-field-type');
mapping_fields[mapping_key]={};
mapping_selected_fields[mapping_key]={};
$(this).find('tbody tr').each(function(){
if($(this).find('.columns_key').length>0 && $(this).find('.columns_val').length>0)
{
var columns_key=$(this).find('.columns_key').val();
var columns_val=$(this).find('.columns_val').val();
if(wt_iew_basic_export.only_enabled_data===false) /* get whole keys instead of enabled/disabled */
{
var enabled=($(this).find('.columns_key').is(':checked') ? 1 : 0);
mapping_fields[mapping_key][columns_key]=[columns_val,enabled];
if(enabled==1)
{
mapping_selected_fields[mapping_key][columns_key]=columns_val;
}
}else
{
if($(this).find('.columns_key').is(':checked'))
{
mapping_fields[mapping_key][columns_key]=columns_val;
mapping_selected_fields[mapping_key][columns_key]=columns_val;
}
}
}
});
});
meta_step_form_data={'mapping_fields':mapping_fields, 'mapping_selected_fields':mapping_selected_fields};
this.form_data['meta_step_form_data']=JSON.stringify(meta_step_form_data);
}
else
{
var current_form_data={};
if($('.wt_iew_export_'+this.current_step+'_form').length>0) /* may be user hit the back button */
{
var form_data=$('.wt_iew_export_'+this.current_step+'_form').serializeArray();
$.each(form_data, function(){
if(current_form_data[this.name])
{
if(!current_form_data[this.name].push)
{
current_form_data[this.name] = [current_form_data[this.name]];
}
current_form_data[this.name].push(this.value || '');
}else
{
current_form_data[this.name] = this.value || '';
}
});
this.form_data[this.current_step+'_form_data']=JSON.stringify(current_form_data);
}
}
/* we are resetting formdata on second step. If user not going to first step then post type formdata will be empty. */
if(this.current_step!='post_type')
{
this.form_data['post_type_form_data']=JSON.stringify({'item_type':wt_iew_basic_export.to_export});
}
},
is_multi_select:function(name)
{
var elm=$('[name="'+name+'"]');
if(elm.prop("tagName").toLowerCase()=='select' && this.has_attr(elm,'multiple'))
{
return true;
}else
{
return false;
}
},
has_attr:function(elm,attr_name)
{
var attr = elm.attr(attr_name);
if(typeof attr!==typeof undefined && attr!==false)
{
return true;
}else
{
return false;
}
},
is_previous_step:function(step_key)
{
if(wt_iew_export_basic_params.steps.hasOwnProperty(step_key))
{
if(this.step_keys.indexOf(step_key)<this.step_keys.indexOf(this.current_step))
{
return true;
}
}
return false;
},
is_step_loaded:function(step)
{
if(this.get_page_dom_object(step).length==0){ return true; } /* block infinite loop, if element is not available */
return (this.get_page_dom_object(step).attr('data-loaded')==this.loaded_status_arr['loaded']);
},
set_step_loading_status:function(steps, status)
{
$.each(steps, function(step_ind, step){
wt_iew_basic_export.get_page_dom_object(step).attr('data-loaded', wt_iew_basic_export.loaded_status_arr[status]);
});
},
show_step_page:function(step, force_check_loaded)
{
$('.wt_iew_export_step').hide();
this.get_page_dom_object(step).show();
this.current_step=step;
if(force_check_loaded)
{
if(this.is_step_loaded(step))
{
this.current_step_actions();
}else
{
this.refresh_step(true);
}
}else
{
this.current_step_actions();
}
wt_iew_form_toggler.runToggler();
},
current_step_actions:function() /* current page actions after page is visible */
{
if(this.current_step=='filter')
{
this.load_meta_mapping_fields();
if($('.wt-user-search').length>0){
wt_iew_basic_export.initiate_user_search();
}
}else if(this.current_step=='advanced')
{
wt_field_group.Set();
jQuery(".wt-iew-tips").tipTip({'attribute': 'data-wt-iew-tip', 'delay': 0, 'edgeOffset':8});
}
},
show_post_type_name:function()
{
if(this.to_export!="" && this.to_export_title=='')
{
$('[name="wt_iew_export_post_type"]').val(this.to_export);
if(wt_iew_export_basic_params.to_export !== ''){
$('[name="wt_iew_export_post_type"]').trigger('change');
}
this.to_export_title=$('[name="wt_iew_export_post_type"] option:selected').text();
}
$('.wt_iew_step_head_post_type_name').html(this.to_export_title);
$('.wt-import-export-upsell-small-wrapper').hide();
$('.wt-ier-advt-'+this.to_export).show();
$('.wt-ier-product-features').hide();
$('.wt-hide-features').html(wt_iew_basic_params.msgs.show_features);
$('.wt-you-may-like').css('margin-top', '-200px');
$('.wt_iew_free_addon').hide();
$('.wt_iew_export_action_btn').prop('disabled', false);
if(!wt_iew_basic_params.pro_plugins[this.to_export]['is_active']){
$('.wt_iew_export_action_btn').prop('disabled', true);
$('.wt_iew_type_'+this.to_export).show();
}
},
page_actions:function(step)
{
if(step=='post_type') /* post type page */
{
$('[name="wt_iew_export_post_type"]').unbind('change').change(function(){
if (!wt_iew_basic_params.pro_plugins[$(this).val()]['is_active']) {
$('.wt_iew_export_action_btn').prop('disabled', true);
$('.wt_iew_type_' + this.to_export).show();
}
wt_iew_basic_export.to_export=$(this).val();
wt_iew_basic_export.to_export_title='';
wt_iew_basic_export.reset_form_data();
$('.wt_iew_post_type_name').html('');
if(wt_iew_basic_export.to_export=='')
{
$('.wt_iew_post_type_wrn').show();
}else
{
$('.wt_iew_post_type_wrn').hide();
var post_type_name=$('[name="wt_iew_export_post_type"] option:selected').text();
/* $('.wt_iew_post_type_name').html(': '+post_type_name); */
wt_iew_basic_export.to_export_title=post_type_name;
wt_iew_basic_export.load_pending_steps(true);
}
});
}
else if(step=='method_export') /* method export page */
{
this.export_method=$('[name="wt_iew_export_method_export"]:checked').val();
this.toggle_export_method_options();
$('[name="wt_iew_export_method_export"]').unbind('click').click(function(){
var vl=$(this).val();
if(wt_iew_basic_export.export_method==vl)
{
return false;
}
wt_iew_basic_export.reset_form_data();
wt_iew_basic_export.export_method=vl;
if(wt_iew_basic_export.export_method=='template')
{
if($('.wt-iew-export-template-sele').val()==0)
{
wt_iew_basic_export.refresh_step();
}else
{
wt_iew_basic_export.selected_template=$('.wt-iew-export-template-sele').val();
wt_iew_basic_export.selected_template_name=$.trim($('.wt-iew-export-template-sele option:selected').text());
wt_iew_basic_export.load_pending_steps();
}
}else
{
wt_iew_basic_export.load_pending_steps();
}
});
$('.wt-iew-export-template-sele').unbind('change').change(function(){
wt_iew_basic_export.selected_template=$(this).val();
$('.wt_iew_warn').hide();
if(wt_iew_basic_export.selected_template==0)
{
$('.wt_iew_export_template_wrn').show();
}else
{
wt_iew_basic_export.selected_template_name=$.trim($('.wt-iew-export-template-sele option:selected').text());
wt_iew_basic_export.load_pending_steps();
}
});
wt_iew_basic_export.warn_on_refresh();
}
else if(step=='filter') /* filter page */
{
$('.wc-enhanced-select').select2();
$( document.body ).trigger( 'wc-enhanced-select-init' );
wt_iew_basic_export.warn_on_refresh();
}
else if(step=='mapping') /* mapping page */
{
this.enable_sortable();
this.mapping_box_accordian();
this.reg_mapping_field_bulk_action();
wt_iew_basic_export.warn_on_refresh();
}
else if(step=='advanced')
{
/* callback for external adapters */
if($('select[name="wt_iew_file_into"]').length>0) /* multiple adapter exists so select box */
{
var file_into=$('[name="wt_iew_file_into"]').val();
$('[name="wt_iew_file_into"]').unbind('change').on('change',function(){
var file_into=$(this).val();
wt_iew_set_file_into_fields(file_into);
});
}else /* radio button */
{
var file_into=$('[name="wt_iew_file_into"]:checked').val();
$('[name="wt_iew_file_into"]').on('click',function(){
var file_into=$('[name="wt_iew_file_into"]:checked').val();
wt_iew_set_file_into_fields(file_into);
});
}
wt_iew_set_file_into_fields(file_into);
/* separate image export option */
if($('.wt_iew_separate_image_export').length>0) /* separate image export option available */
{
if($('.wt_iew_separate_image_export:checked').val()=='Yes')
{
$('.iew_export_image_btn').show();
}else
{
$('.iew_export_image_btn').hide();
}
}else
{
$('.iew_export_image_btn').hide();
}
$('.wt_iew_separate_image_export').unbind('click').click(function(){
if($(this).val()=='Yes')
{
$('.iew_export_image_btn').show();
}else
{
$('.iew_export_image_btn').hide();
}
});
/* CSV delimiter form toggler. Custom and preset delimiter */
wt_iew_custom_and_preset.delimiter_toggler();
/* file extension info box */
$('.wt_iew_file_ext_info').html('.'+$('[name="wt_iew_file_as"]').val());
$('[name="wt_iew_file_as"]').unbind('change').change(function(){
$('.wt_iew_file_ext_info').html('.'+$(this).val());
});
wt_iew_basic_export.warn_on_refresh();
}
/* common events */
if($('.wt_iew_datepicker').length>0)
{
$('.wt_iew_datepicker').datepicker({dateFormat: 'yy-mm-dd'});
}
wt_field_group.Set();
wt_iew_form_toggler.Set();
wt_iew_conditional_help_text.Set(this.get_page_dom_object(step));
},
enable_sortable:function()
{
$('.meta_mapping_box_con[data-sortable="0"]').each(function(){
var tb=$(this).find(".wt-iew-mapping-tb tbody");
if(tb.length>0)
{
tb.sortable({
handle: ".wt_iew_sort_handle",
placeholder: "wt-iew-sortable-placeholder",
forcePlaceholderSize: true,
revert:true
});
$(this).attr('data-sortable', 1);
}
});
},
toggle_export_method_options:function()
{
$('.wt-iew-export-method-options').hide();
$('.wt-iew-export-method-options-'+this.export_method).show();
},
mapping_box_accordian:function()
{
$('.meta_mapping_box_hd').unbind('click').click(function()
{
var c_dv=$(this).parents('.meta_mapping_box').find('.meta_mapping_box_con');
if(c_dv.is(':visible'))
{
c_dv.hide();
$(this).find('.dashicons').removeClass('dashicons-arrow-down').addClass('dashicons-arrow-right');
}else
{
c_dv.show();
c_dv.find(".wt-iew-mapping-tb tbody tr td").each(function(){
$(this).css({'width':$(this).width()});
});
$(this).find('.dashicons').removeClass('dashicons-arrow-right').addClass('dashicons-arrow-down');
}
});
},
mapping_fields_selected_count:function(tb_elm)
{
tb_elm.parents('.meta_mapping_box').find('.meta_mapping_box_selected_count_box_num').text(tb_elm.find('.wt_iew_mapping_checkbox_sub:checked').length);
},
reg_mapping_field_bulk_action:function()
{
$('.wt_iew_mapping_checkbox_main').each(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if(tb.find('.wt_iew_mapping_checkbox_sub:checked').length==tb.find('.wt_iew_mapping_checkbox_sub').length)
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',false);
}
wt_iew_basic_export.mapping_fields_selected_count(tb);
});
$('.wt_iew_mapping_checkbox_main').unbind('click').click(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if($(this).is(':checked'))
{
tb.find('.wt_iew_mapping_checkbox_sub').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_sub').prop('checked',false);
}
wt_iew_basic_export.mapping_fields_selected_count(tb);
});
$('.wt_iew_mapping_checkbox_sub').unbind('click').click(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if($(this).is(':checked') && tb.find('.wt_iew_mapping_checkbox_sub:checked').length==tb.find('.wt_iew_mapping_checkbox_sub').length)
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',false);
}
wt_iew_basic_export.mapping_fields_selected_count(tb);
});
},
set_step_page:function(data)
{
page_html=data.page_html;
$.each(page_html, function(step_id, page_content){
wt_iew_basic_export.get_page_dom_object(step_id).html(page_content);
wt_iew_basic_export.page_actions(step_id);
if(step_id=='method_export' && (wt_iew_basic_export.selected_template>0 || wt_iew_basic_export.on_rerun))
{
wt_iew_basic_export.form_data=data.template_data;
if(wt_iew_basic_export.on_rerun)
{
if($('.wt-iew-export-template-sele').val()==0)
{
wt_iew_basic_export.selected_template=0;
wt_iew_basic_export.selected_template_name='';
}else
{
wt_iew_basic_export.selected_template=$('.wt-iew-export-template-sele').val();
wt_iew_basic_export.selected_template_name=$.trim($('.wt-iew-export-template-sele option:selected').text());
}
}
}
wt_iew_basic_export.show_post_type_name();
});
this.reg_button_actions();
},
prepare_ajax_data:function(action, data_type)
{
this.ajax_data = {
'_wpnonce': wt_iew_basic_params.nonces.main,
'action': "iew_export_ajax_basic",
'export_action': action,
'selected_template': this.selected_template,
'to_export': this.to_export,
'data_type': data_type,
'export_method': this.export_method,
};
},
warn_on_refresh: function () {
window.onbeforeunload = function (event)
{ if(!wt_iew_basic_export.export_finished){
return confirm("Changes that you made may not be saved.");
}
};
},
initiate_user_search: function(){
jQuery(".wt-user-search").select2({
minimumInputLength: 2,
multiple: true,
noResults: wt_iew_basic_params.msgs.no_results_found,
ajax: {
url: wt_iew_basic_params.ajax_url,
dataType: 'json',
type: "POST",
quietMillis: 50,
data: function (terms) {
return {
term: terms.term,
_wpnonce: wt_iew_basic_params.nonces.main,
action: 'wt_iew_ajax_user_search',
};
},
processResults: function (data) {
return {
results: jQuery.map(data, function (item) {
return {
id: item.id,
text: item.text
}
})
};
}
}
});
}
}
return wt_iew_basic_export;
})( jQuery );
var wt_plugin_advt = {
Set: function ()
{
jQuery('.wt-hide-features-post-types').click(function (e) {
e.preventDefault();
var invisible_mtop = '20px';
var visible_mtop = '-200px';
if ('user' === wt_iew_basic_export.to_export) {
invisible_mtop = '60px';
}
if ('order' === wt_iew_basic_export.to_export || 'coupon' === wt_iew_basic_export.to_export || 'subscription' === wt_iew_basic_export.to_export) {
invisible_mtop = '40px';
}
var div_visible = jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_export.to_export).is(':visible');
if (!div_visible) {
jQuery('.wt-you-may-like').css('margin-top', invisible_mtop);
jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_export.to_export).show();
jQuery('.wt-hide-features').html(wt_iew_basic_params.msgs.hide_features);
} else {
jQuery('.wt-you-may-like').css('margin-top', visible_mtop);
jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_export.to_export).hide();
jQuery('.wt-hide-features').html(wt_iew_basic_params.msgs.show_features);
}
});
}
};
jQuery(function() {
if(wt_iew_export_basic_params.rerun_id>0)
{
wt_iew_basic_export.to_export=wt_iew_export_basic_params.to_export;
wt_iew_basic_export.export_method=wt_iew_export_basic_params.export_method;
wt_iew_basic_export.rerun_id=wt_iew_export_basic_params.rerun_id;
wt_iew_basic_export.on_rerun=true;
}
wt_iew_basic_export.Set();
wt_plugin_advt.Set();
});
<?php
/**
* Ajax section of the Export module
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Export_Ajax')){
class Wt_Import_Export_For_Woo_Basic_Export_Ajax
{
public $step='';
public $steps=array();
public $step_btns=array();
public $export_method='';
public $to_export='';
protected $step_title='';
protected $step_keys=array();
protected $current_step_index=0;
protected $current_step_number=1;
protected $last_page=false;
protected $total_steps=0;
protected $step_summary='';
protected $mapping_enabled_fields=array();
protected $mapping_templates=array();
protected $selected_template=0;
protected $selected_template_form_data=array(); /* this variable is using to store form_data of selected template or selected history entry */
protected $export_obj=null;
protected $rerun_id=0;
public function __construct($export_obj, $to_export, $steps, $export_method, $selected_template, $rerun_id)
{
$this->export_obj=$export_obj;
$this->to_export=$to_export;
$this->steps=$steps;
$this->export_method=$export_method;
$this->selected_template=$selected_template;
$this->rerun_id=$rerun_id;
}
/**
* Ajax main function to retrive steps HTML
*/
public function get_steps($out)
{
//sleep(3);
$steps=(is_array($_POST['steps']) ? $_POST['steps'] : array($_POST['steps']));
$steps=Wt_Iew_Sh::sanitize_item($steps, 'text_arr');
$page_html=array();
if($this->selected_template>0) /* taking selected tamplate form_data */
{
$this->get_template_form_data($this->selected_template);
}elseif($this->rerun_id>0)
{
$this->selected_template_form_data=$this->export_obj->form_data;
}
foreach($steps as $step)
{
$method_name=$step.'_page';
if(method_exists($this, $method_name))
{
$page_html[$step]=$this->{$method_name}();
if($step=='method_export' && ($this->selected_template>0 || $this->rerun_id>0))
{
$out['template_data']=$this->selected_template_form_data;
}
}
}
$out['status']=1;
$out['page_html']=$page_html;
return $out;
}
/**
* Ajax function to retrive meta step data
*/
public function get_meta_mapping_fields($out)
{
if($this->selected_template>0) /* taking selected tamplate form_data */
{
$this->get_template_form_data($this->selected_template);
}elseif($this->rerun_id>0)
{
$this->selected_template_form_data=$this->export_obj->form_data;
}
$this->get_mapping_enabled_fields();
$meta_mapping_screen_fields=array();
foreach($this->mapping_enabled_fields as $field_key=>$field_vl)
{
$field_vl=(!is_array($field_vl) ? array($field_vl, 0) : $field_vl);
$meta_mapping_screen_fields[$field_key]=array(
'title'=>'',
'checked'=>$field_vl[1],
'fields'=>array(),
);
}
//taking current page form data
$meta_step_form_data=(isset($this->selected_template_form_data['meta_step_form_data']) ? $this->selected_template_form_data['meta_step_form_data'] : array());
/* form_data/template data of fields in mapping page */
$form_data_meta_mapping_fields=isset($meta_step_form_data['mapping_fields']) ? $meta_step_form_data['mapping_fields'] : array();
$meta_mapping_screen_fields=apply_filters('wt_iew_exporter_alter_meta_mapping_fields_basic', $meta_mapping_screen_fields, $this->to_export, $form_data_meta_mapping_fields);
$draggable_tooltip=__("Drag to rearrange the columns");
$module_url=plugin_dir_url(dirname(__FILE__));
$meta_html=array();
if($meta_mapping_screen_fields && is_array($meta_mapping_screen_fields))
{
/* loop through mapping fields */
foreach($meta_mapping_screen_fields as $meta_mapping_screen_field_key=>$meta_mapping_screen_field_val)
{
$current_meta_step_form_data=(isset($form_data_meta_mapping_fields[$meta_mapping_screen_field_key]) ? $form_data_meta_mapping_fields[$meta_mapping_screen_field_key] : array());
ob_start();
include dirname(plugin_dir_path(__FILE__)).'/views/_export_meta_step_page.php';
$meta_html[$meta_mapping_screen_field_key]=ob_get_clean();
}
}
$out['status']=1;
$out['meta_html']=$meta_html;
return $out;
}
public function save_template($out)
{
return $this->do_save_template('save', $out);
}
public function save_template_as($out)
{
return $this->do_save_template('save_as', $out);
}
public function update_template($out)
{
return $this->do_save_template('update', $out);
}
/**
* Ajax hook to upload the exported file.
*
*/
public function upload($out)
{
$export_id=(isset($_POST['export_id']) ? intval($_POST['export_id']) : 0);
$out=$this->export_obj->process_upload('upload', $export_id, $this->to_export);
if($out['response']===true)
{
$out['status']=1;
}else
{
$out['status']=0;
}
return $out;
}
/**
* Process the export data
*
* @return array
*/
public function export($out)
{
$offset=(isset($_POST['offset']) ? intval($_POST['offset']) : 0);
$export_id=(isset($_POST['export_id']) ? intval($_POST['export_id']) : 0);
$file_name='';
if($export_id==0) /* first batch */
{
/* process form data */
$form_data=(isset($_POST['form_data']) ? Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize(($_POST['form_data']))) : array());
//sanitize form data
$form_data=Wt_Iew_IE_Basic_Helper::sanitize_formdata($form_data, $this->export_obj);
/* taking file name from user input. (If given) */
if(isset($form_data['advanced_form_data']) && isset($form_data['advanced_form_data']['wt_iew_file_name']) && $form_data['advanced_form_data']['wt_iew_file_name']!="")
{
$file_name=$form_data['advanced_form_data']['wt_iew_file_name'];
}
}else
{
/* no need to send form_data. It will take from history table by `process_action` method */
$form_data=array();
}
/* do the export process */
$out=$this->export_obj->process_action($form_data, 'export', $this->to_export, $file_name, $export_id, $offset);
if($out['response']===true)
{
$out['status']=1;
}else
{
$out['status']=0;
}
return $out;
}
/**
* Save/Update template (Ajax sub function)
* @param boolean $is_update is update existing template or save as new
* @return array response status, name, id
*/
public function do_save_template($step, $out)
{
$is_update=($step=='update' ? true : false);
/* take template name from post data, if not then create from time stamp */
$template_name=(isset($_POST['template_name']) ? sanitize_text_field($_POST['template_name']) : date('d-M-Y h:i:s A'));
$template_name = stripslashes($template_name);
$out['name']= $template_name;
$out['id']=0;
$out['status']=1;
if($this->to_export!='')
{
global $wpdb;
/* checking: just saved and again click the button so shift the action as update */
if($step=='save' && $this->selected_template>0)
{
$is_update=true;
}
/* checking template with same name exists */
$template_data=$this->get_mapping_template_by_name($template_name);
if($template_data)
{
$is_throw_warn=false;
if($is_update)
{
if($template_data['id']!=$this->selected_template)
{
$is_throw_warn=true;
}
}else
{
$is_throw_warn=true;
}
if($is_throw_warn)
{
$out['status']=0;
if($step=='save_as')
{
$out['msg']=__('Please enter a different name');
}else
{
$out['msg']=__('Template with same name already exists');
}
return $out;
}
}
$tb=$wpdb->prefix. Wt_Import_Export_For_Woo_Basic::$template_tb;
/* process form data */
$form_data=(isset($_POST['form_data']) ? Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize(($_POST['form_data']))) : array());
//sanitize form data
$form_data=Wt_Iew_IE_Basic_Helper::sanitize_formdata($form_data, $this->export_obj);
/* upadte the template */
if($is_update)
{
$update_data=array(
'data'=>maybe_serialize($form_data),
'name'=>$template_name, //may be a rename
);
$update_data_type=array(
'%s',
'%s'
);
$update_where=array(
'id'=>$this->selected_template
);
$update_where_type=array(
'%d'
);
if($wpdb->update($tb, $update_data, $update_where, $update_data_type, $update_where_type)!==false)
{
$out['id']=$this->selected_template;
$out['name']=$template_name;
$out['msg']=__('Template updated successfully');
return $out;
}
}else
{
$insert_data=array(
'template_type'=>'export',
'item_type'=>$this->to_export,
'name'=>$template_name,
'data'=>maybe_serialize($form_data),
);
$insert_data_type=array(
'%s','%s','%s','%s'
);
if($wpdb->insert($tb, $insert_data, $insert_data_type)) //success
{
$out['id']=$wpdb->insert_id;
$out['msg']=__('Template saved successfully');
return $out;
}
}
}
$out['status']=0;
return $out;
}
/**
* Step 1 (Ajax sub function)
* Built in steps, post type choosing page
*/
public function post_type_page()
{
$post_types=apply_filters('wt_iew_exporter_post_types_basic', array());
$post_types=(!is_array($post_types) ? array() : $post_types);
$this->step='post_type';
$step_info=$this->steps[$this->step];
$item_type=$this->to_export;
$this->prepare_step_summary();
$this->prepare_footer_button_list();
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_export_post_type_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}
/**
* Step 2 (Ajax sub function)
* Built in steps, export method choosing page
*/
public function method_export_page()
{
$this->step='method_export';
$step_info=$this->steps[$this->step];
if($this->to_export!="")
{
/* setting a default export method */
$this->export_method=($this->export_method=='' ? $this->export_obj->default_export_method : $this->export_method);
$this->export_obj->export_method=$this->export_method;
$this->steps=$this->export_obj->get_steps();
$form_data_export_template=$this->selected_template;
$form_data_mapping_enabled=array();
if($this->rerun_id>0)
{
if(isset($this->selected_template_form_data['method_export_form_data']))
{
if(isset($this->selected_template_form_data['method_export_form_data']['selected_template']))
{
/* do not set this value to `$this->selected_template` */
$form_data_export_template=$this->selected_template_form_data['method_export_form_data']['selected_template'];
}
if(isset($this->selected_template_form_data['method_export_form_data']['mapping_enabled_fields']))
{
$form_data_mapping_enabled=$this->selected_template_form_data['method_export_form_data']['mapping_enabled_fields'];
$form_data_mapping_enabled=(is_array($form_data_mapping_enabled) ? $form_data_mapping_enabled : array());
}
}
}
$this->prepare_step_summary();
$this->prepare_footer_button_list();
/* meta field list for quick export */
$this->get_mapping_enabled_fields();
/* template list for template export */
$this->get_mapping_templates();
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_export_method_export_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/*
* Get step information
* @param string $step
*/
public function get_step_info( $step ) {
return isset( $this->steps[ $step ] ) ? $this->steps[ $step ] : array( 'title' => ' ', 'description' => ' ' );
}
/**
* Step 3 (Ajax sub function)
* Built in steps, filter page
*/
public function filter_page()
{
$this->step='filter';
$step_info= $this->get_step_info($this->step);
if($this->to_export!='')
{
$this->prepare_step_summary();
$this->prepare_footer_button_list();
//taking current page form data
$filter_form_data=(isset($this->selected_template_form_data['filter_form_data']) ? $this->selected_template_form_data['filter_form_data'] : array());
$filter_screen_fields=$this->export_obj->get_filter_screen_fields($filter_form_data);
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_export_filter_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Step 4 (Ajax sub function)
* Built in steps, mapping page
*/
public function mapping_page()
{
$this->step='mapping';
$step_info= $this->get_step_info($this->step);
if($this->to_export!='')
{
$this->prepare_step_summary();
$this->prepare_footer_button_list();
//taking current page form data
$mapping_form_data=(isset($this->selected_template_form_data['mapping_form_data']) ? $this->selected_template_form_data['mapping_form_data'] : array());
/* form_data/template data of fields in mapping page */
$form_data_mapping_fields=isset($mapping_form_data['mapping_fields']) ? $mapping_form_data['mapping_fields'] : array();
/* default mapping page fields */
$mapping_fields=array();
$mapping_fields=apply_filters('wt_iew_exporter_alter_mapping_fields_basic', $mapping_fields, $this->to_export, $form_data_mapping_fields);
/* meta fields list */
$this->get_mapping_enabled_fields();
/* mapping enabled meta fields */
$form_data_mapping_enabled_fields=(isset($mapping_form_data['mapping_enabled_fields']) ? $mapping_form_data['mapping_enabled_fields'] : array());
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_export_mapping_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Step 5 (Ajax sub function)
* Built in steps, advanced page
*/
public function advanced_page()
{
$this->step='advanced';
$step_info= $this->get_step_info($this->step);
if($this->to_export!='')
{
$this->prepare_step_summary();
$this->prepare_footer_button_list();
//taking current page form data
$advanced_form_data=(isset($this->selected_template_form_data['advanced_form_data']) ? $this->selected_template_form_data['advanced_form_data'] : array());
$advanced_screen_fields=$this->export_obj->get_advanced_screen_fields($advanced_form_data);
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_export_advanced_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Get template form data
*/
protected function get_template_form_data($id)
{
$template_data=$this->get_mapping_template_by_id($id);
if($template_data)
{
$decoded_form_data=Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize($template_data['data']));
$this->selected_template_form_data=(!is_array($decoded_form_data) ? array() : $decoded_form_data);
}
}
/**
* Taking mapping template by Name
*/
protected function get_mapping_template_by_name($name)
{
global $wpdb;
$tb=$wpdb->prefix. Wt_Import_Export_For_Woo_Basic::$template_tb;
$qry=$wpdb->prepare("SELECT * FROM $tb WHERE template_type=%s AND item_type=%s AND name=%s",array('export', $this->to_export, $name));
return $wpdb->get_row($qry, ARRAY_A);
}
/**
* Taking mapping template by ID
*/
protected function get_mapping_template_by_id($id)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
$qry=$wpdb->prepare("SELECT * FROM $tb WHERE template_type=%s AND item_type=%s AND id=%d",array('export', $this->to_export, $id));
return $wpdb->get_row($qry, ARRAY_A);
}
/**
* Taking all mapping templates
*/
protected function get_mapping_templates()
{
if($this->to_export=='')
{
return;
}
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
$val=$wpdb->get_results("SELECT * FROM $tb WHERE template_type='export' AND item_type='".$this->to_export."' ORDER BY id DESC", ARRAY_A);
//add a filter here for modules to alter the data
$this->mapping_templates=($val ? $val : array());
}
/**
* Get meta field list for mapping page
*
*/
protected function get_mapping_enabled_fields()
{
$mapping_enabled_fields=array(
);
$this->mapping_enabled_fields=apply_filters('wt_iew_exporter_alter_mapping_enabled_fields_basic', $mapping_enabled_fields, $this->to_export, array());
}
protected function prepare_step_footer_html()
{
include dirname(plugin_dir_path(__FILE__)).'/views/_export_footer.php';
}
protected function prepare_step_summary()
{
$step_info= $this->get_step_info($this->step);
$this->step_title=$step_info['title'];
$this->step_keys=array_keys($this->steps);
$this->current_step_index=array_search($this->step, $this->step_keys);
$this->current_step_number=$this->current_step_index+1;
$this->last_page=(!isset($this->step_keys[$this->current_step_index+1]) ? true : false);
$this->total_steps=count($this->step_keys);
$this->step_summary=__(sprintf("Step %d of %d", $this->current_step_number, $this->total_steps));
}
protected function prepare_step_header_html()
{
include dirname(plugin_dir_path(__FILE__)).'/views/_export_header.php';
}
protected function prepare_footer_button_list()
{
$out=array();
$step_keys=$this->step_keys;
$current_index=$this->current_step_index;
$last_page=$this->last_page;
if($current_index!==false) /* step exists */
{
if($current_index>0) //add back button
{
$out['back']=array(
'type'=>'button',
'action_type'=>'step',
'key'=>$step_keys[$current_index-1],
'text'=>'<span class="dashicons dashicons-arrow-left-alt2" style="line-height:27px;"></span> '.__('Back'),
);
}
if(isset($step_keys[$current_index+1])) /* not last step */
{
$next_number=$current_index+2;
$next_key=$step_keys[$current_index+1];
$next_title=$this->steps[$next_key]['title'];
$out['next']=array(
'type'=>'button',
'action_type'=>'step',
'key'=>$next_key,
'text'=>__('Step').' '.$next_number.': '.$next_title.' <span class="dashicons dashicons-arrow-right-alt2" style="line-height:27px;"></span>',
);
if($this->export_method=='quick' || $this->export_method=='template') //Quick Or Template method
{
$out['or']=array(
'type'=>'text',
'text'=>__('Or'),
);
}
}else
{
$last_page=true;
}
if($this->export_method=='quick' || $this->export_method=='template' || $last_page) //template method, or last page, or quick export
{
if($last_page && $this->export_method!='quick') //last page and not quick export
{
if($this->export_method=='template')
{
$out['save']=array(
'key'=>'save',
'icon'=>'',
'type'=>'dropdown_button',
'text'=>__('Save template'),
'items'=>array(
'update'=>array(
'key'=>'update_template',
'text'=>__('Save'), //no prompt
),
'save'=>array(
'key'=>'save_template_as',
'text'=>__('Save As'), //prompt for name
)
)
);
}else
{
$out['save']=array(
'key'=>'save_template',
'icon'=>'',
'type'=>'button',
'text'=>__('Save template'), //prompt for name
);
}
}
$out['export']=array(
'key'=>'export',
'class'=>'iew_export_btn',
'icon'=>'',
'type'=>'button',
'text'=>__('Export'),
);
}
}
$this->step_btns=apply_filters('wt_iew_exporter_alter_footer_btns_basic', $out, $this->step, $this->steps);
}
}
}
\ No newline at end of file
<?php
/**
* Export section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Export')){
class Wt_Import_Export_For_Woo_Basic_Export
{
public $module_id='';
public static $module_id_static='';
public $module_base='export';
public static $export_dir=WP_CONTENT_DIR.'/webtoffee_export';
public static $export_dir_name='/webtoffee_export';
public $steps=array();
public $allowed_export_file_type=array();
private $to_export='';
private $to_export_id='';
private $rerun_id=0;
public $export_method='';
public $export_methods=array();
public $selected_template=0;
public $default_batch_count=0; /* configure this value in `advanced_setting_fields` method */
public $selected_template_data=array();
public $default_export_method=''; /* configure this value in `advanced_setting_fields` method */
public $use_bom = true;
public $form_data=array();
public $validation_rule = array();
public $step_need_validation_filter = array();
public function __construct()
{
$this->module_id=Wt_Import_Export_For_Woo_Basic::get_module_id($this->module_base);
self::$module_id_static=$this->module_id;
/* allowed file types */
$this->allowed_export_file_type=array(
'csv'=>__('CSV'),
);
/* default step list */
$this->steps=array
(
'post_type'=>array(
'title'=>__('Select a post type'),
'description'=>__('Export and download the data for the respective post type into a CSV file. As per the selected post type, we can use this exported CSV file to import data to your site.'),
),
'method_export'=>array(
'title'=>__('Select an export method'),
'description'=>__('Choose from the options below to continue with your export: quick export from DB, based on a pre-saved template or a new export with advanced options.'),
),
'filter'=>array(
'title'=>__('Filter data'),
'description'=>__('Filter data that needs to be exported as per the below criteria.'),
),
'mapping'=>array(
'title'=>__('Map and reorder export columns'),
'description'=>__('The default export column names can be edited from the screen below, if required. If you have chosen a pre-saved template you can see the preferred names and choices that were last saved. You may also drag the columns accordingly to reorder them within the output file.'),
),
'advanced'=>array(
'title'=>__('Advanced options/Batch export'),
'description'=>__('You can save the template file for future exports or proceed with the export.'),
),
);
$this->validation_rule=array(
'post_type'=>array(), /* no validation rule. So default sanitization text */
'method_export'=>array(
'mapping_enabled_fields' => array('type'=>'text_arr') //in case of quick export
)
);
$this->step_need_validation_filter=array('filter', 'advanced');
$this->export_methods=array(
'quick'=>array('title'=>__('Quick export'), 'description'=> __('Exports all the basic fields.')),
'template'=>array('title'=>__('Pre-saved template'), 'description'=> __('Exports data as per the specifications(filters, selective column,mapping etc) of the template saved during the previous Advanced exports. To change the settings, move to filter data.')),
'new'=>array('title'=>__('Advanced export'), 'description'=> __('Exports data after a detailed process of filtration, column selection and advanced options. The configured settings can be saved as a template for future exports.')),
);
/* advanced plugin settings */
add_filter('wt_iew_advanced_setting_fields_basic', array($this, 'advanced_setting_fields'), 11);
/* setting default values, this method must be below of advanced setting filter */
$this->get_defaults();
/* main ajax hook. The callback function will decide which is to execute. */
add_action('wp_ajax_iew_export_ajax_basic', array($this, 'ajax_main'), 11);
/* Admin menu for export */
add_filter('wt_iew_admin_menu_basic', array($this, 'add_admin_pages'), 10, 1);
/* Download export file via nonce URL */
add_action('admin_init', array($this, 'download_file'), 11);
}
public function get_defaults()
{
$this->default_export_method= Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('default_export_method');
$this->default_batch_count=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('default_export_batch');
$this->use_bom = (bool)Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('include_bom');
}
/**
* Fields for advanced settings
*
*/
public function advanced_setting_fields($fields)
{
$export_methods=array_map(function($vl){ return $vl['title']; }, $this->export_methods);
$fields['default_export_method']=array(
'label'=>__("Default Export method"),
'type'=>'select',
'sele_vals'=>$export_methods,
'value' =>'new',
'field_name'=>'default_export_method',
'field_group'=>'advanced_field',
'help_text'=>__('Select the default method of export.'),
);
$fields['include_bom'] = array(
'label'=>__( "Include BOM in export file" ),
'value'=>1,
'checkbox_fields' => array( 1 => __( 'Enable' ) ),
'type'=>'checkbox',
'field_name'=>'include_bom',
'field_group'=>'advanced_field',
'help_text'=>__( "The BOM will help some programs like Microsoft Excel read your export file if it includes non-English characters." ),
);
$fields['default_export_batch']=array(
'label'=>__("Default Export batch count"),
'type'=>'number',
'value' =>30,
'field_name'=>'default_export_batch',
'help_text'=>__('Provide the default count for the records to be exported in a batch.'),
'validation_rule'=>array('type'=>'absint'),
'attr' => array('min' => 1, 'max' => 200),
);
return $fields;
}
/**
* Adding admin menus
*/
public function add_admin_pages($menus)
{
$menu_temp=array(
$this->module_base=>array(
'menu',
__('Export'),
__('WebToffee Import Export (Basic)'),
apply_filters('wt_import_export_allowed_capability', 'import'),
$this->module_id,
array($this,'admin_settings_page'),
'dashicons-controls-repeat',
56
),
$this->module_base.'-sub'=>array(
'submenu',
$this->module_id,
__('Export'),
__('Export'),
apply_filters('wt_import_export_allowed_capability', 'import'),
$this->module_id,
array($this, 'admin_settings_page')
),
);
unset($menus['general-settings']);
$menus=array_merge($menu_temp, $menus);
return $menus;
}
/**
* Export page
*/
public function admin_settings_page()
{
/**
* Check it is a rerun call
*/
$requested_rerun_id=(isset($_GET['wt_iew_rerun']) ? absint($_GET['wt_iew_rerun']) : 0);
$this->_process_rerun($requested_rerun_id);
$this->enqueue_assets();
include plugin_dir_path(__FILE__).'views/main.php';
}
/**
* Main ajax hook to handle all export related requests
*/
public function ajax_main()
{
include_once plugin_dir_path(__FILE__).'classes/class-export-ajax.php';
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
/**
* Check it is a rerun call
*/
if(!$this->_process_rerun((isset($_POST['rerun_id']) ? absint($_POST['rerun_id']) : 0)))
{
$this->export_method=(isset($_POST['export_method']) ? Wt_Iew_Sh::sanitize_item($_POST['export_method'], 'text') : '');
$this->to_export=(isset($_POST['to_export']) ? Wt_Iew_Sh::sanitize_item($_POST['to_export'], 'text') : '');
$this->selected_template=(isset($_POST['selected_template']) ? Wt_Iew_Sh::sanitize_item($_POST['selected_template'], 'int') : 0);
}
$this->get_steps();
$ajax_obj=new Wt_Import_Export_For_Woo_Basic_Export_Ajax($this, $this->to_export, $this->steps, $this->export_method, $this->selected_template, $this->rerun_id);
$export_action=Wt_Iew_Sh::sanitize_item($_POST['export_action'], 'text');
$data_type=Wt_Iew_Sh::sanitize_item($_POST['data_type'], 'text');
$allowed_ajax_actions=array('get_steps', 'get_meta_mapping_fields', 'save_template', 'save_template_as', 'update_template', 'upload', 'export', 'export_image');
$out=array(
'status'=>0,
'msg'=>__('Error'),
);
if(method_exists($ajax_obj, $export_action) && in_array($export_action, $allowed_ajax_actions))
{
$out=$ajax_obj->{$export_action}($out);
}
if($data_type=='json')
{
echo json_encode($out);
}
}
exit();
}
public function get_filter_screen_fields($filter_form_data)
{
$filter_screen_fields = array(
'limit' => array(
'label' => __("Limit"),
'value' => '',
'type' => 'number',
'field_name' => 'limit',
'placeholder' => 'Unlimited',
'help_text' => __('The actual number of records you want to export. e.g. A limit of 500 with an offset 10 will export records from 11th to 510th position.'),
'attr' => array('step' => 1, 'min' => 0),
'validation_rule' => array('type' => 'absint')
),
'offset' => array(
'label' => __("Offset"),
'value' => '',
'field_name' => 'offset',
'placeholder' => __('0'),
'help_text' => __('Specify the number of records that should be skipped from the beginning of the database. e.g. An offset of 10 skips the first 10 records.'),
'type' => 'number',
'attr' => array('step' => 1, 'min' => 0),
'validation_rule' => array('type' => 'absint')
),
);
$filter_screen_fields=apply_filters('wt_iew_exporter_alter_filter_fields_basic', $filter_screen_fields, $this->to_export, $filter_form_data);
return $filter_screen_fields;
}
public function get_advanced_screen_fields($advanced_form_data)
{
$file_into_arr=array('local'=>__('Local'));
/* taking available remote adapters */
$remote_adapter_names=array();
$remote_adapter_names=apply_filters('wt_iew_exporter_remote_adapter_names_basic', $remote_adapter_names);
if($remote_adapter_names && is_array($remote_adapter_names))
{
foreach($remote_adapter_names as $remote_adapter_key => $remote_adapter_vl)
{
$file_into_arr[$remote_adapter_key]=$remote_adapter_vl;
}
}
$delimiter_default = isset($advanced_form_data['wt_iew_delimiter']) ? $advanced_form_data['wt_iew_delimiter'] : ",";
//add `is_advanced` field to group it as advanced tab section
$advanced_screen_fields=array(
'batch_count'=>array(
'label'=>__("Export in batches of"),
'type'=>'text',
'merge_right'=>true,
'value'=>$this->default_batch_count,
'field_name'=>'batch_count',
'help_text'=>__('The number of records that the server will process for every iteration within the configured timeout interval. If the export fails due to timeout you can lower this number accordingly and try again'),
'validation_rule'=>array('type'=>'absint'),
),
'delimiter'=>array(
'label'=>__( 'Delimiter' ),
'type'=>'select',
'value'=>",",
'css_class'=>"wt_iew_delimiter_preset",
'tr_id'=>'delimiter_tr',
'field_name'=>'delimiter_preset',
'sele_vals'=>Wt_Iew_IE_Basic_Helper::_get_csv_delimiters(),
'help_text'=>__( 'Separator for differentiating the columns in the CSV file. Assumes ‘,’ by default.' ),
'validation_rule'=>array('type'=>'skip'),
'after_form_field'=>'<input type="text" class="wt_iew_custom_delimiter" name="wt_iew_delimiter" value="'.$delimiter_default.'" maxlength = "1" />',
)
);
/* taking advanced fields from post type modules */
$advanced_screen_fields=apply_filters('wt_iew_exporter_alter_advanced_fields_basic', $advanced_screen_fields, $this->to_export, $advanced_form_data);
return $advanced_screen_fields;
}
/**
* Get steps
*
*/
public function get_steps()
{
if($this->export_method=='quick') /* if quick export then remove some steps */
{
$out=array(
'post_type'=>$this->steps['post_type'],
'method_export'=>$this->steps['method_export'],
'advanced'=>$this->steps['advanced'],
);
$this->steps=$out;
}
$this->steps=apply_filters('wt_iew_exporter_steps_basic', $this->steps, $this->to_export);
return $this->steps;
}
/**
* Validating and Processing rerun action
*/
protected function _process_rerun($rerun_id)
{
if($rerun_id>0)
{
/* check the history module is available */
$history_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules('history');
if(!is_null($history_module_obj))
{
/* check the history entry is for export and also has form_data */
$history_data=$history_module_obj->get_history_entry_by_id($rerun_id);
if($history_data && $history_data['template_type']==$this->module_base)
{
$form_data=maybe_unserialize($history_data['data']);
if($form_data && is_array($form_data))
{
$this->to_export=(isset($form_data['post_type_form_data']) && isset($form_data['post_type_form_data']['item_type']) ? $form_data['post_type_form_data']['item_type'] : '');
if($this->to_export!="")
{
$this->export_method=(isset($form_data['method_export_form_data']) && isset($form_data['method_export_form_data']['method_export']) && $form_data['method_export_form_data']['method_export']!="" ? $form_data['method_export_form_data']['method_export'] : $this->default_export_method);
$this->rerun_id=$rerun_id;
$this->form_data=$form_data;
//process steps based on the export method in the history entry
$this->get_steps();
return true;
}
}
}
}
}
return false;
}
protected function enqueue_assets()
{
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed()){
wp_enqueue_script($this->module_id, plugin_dir_url(__FILE__).'assets/js/main.js', array('jquery', 'jquery-ui-sortable', 'jquery-ui-datepicker'), WT_U_IEW_VERSION);
wp_enqueue_style('jquery-ui-datepicker');
wp_enqueue_style(WT_IEW_PLUGIN_ID_BASIC.'-jquery-ui', WT_U_IEW_PLUGIN_URL.'admin/css/jquery-ui.css', array(), WT_U_IEW_VERSION, 'all');
$params=array(
'item_type'=>'',
'steps'=>$this->steps,
'rerun_id'=>$this->rerun_id,
'to_export'=> isset( $_GET['wt_to_export'] ) ? sanitize_text_field( $_GET['wt_to_export'] ) : $this->to_export,
'export_method'=>$this->export_method,
'msgs'=>array(
'choosed_template'=>__('Choosed template: '),
'choose_export_method'=>__('Please select an export method.'),
'choose_template'=>__('Please select an export template.'),
'step'=>__('Step'),
'choose_ftp_profile'=>__('Please select an FTP profile.'),
),
);
wp_localize_script($this->module_id, 'wt_iew_export_basic_params', $params);
$this->add_select2_lib(); //adding select2 JS, It checks the availibility of woocommerce
}
}
/**
*
* Enqueue select2 library, if woocommerce available use that
*/
protected function add_select2_lib()
{
/* enqueue scripts */
if(!function_exists('is_plugin_active'))
{
include_once(ABSPATH.'wp-admin/includes/plugin.php');
}
if(is_plugin_active('woocommerce/woocommerce.php'))
{
wp_enqueue_script('wc-enhanced-select');
wp_enqueue_style('woocommerce_admin_styles', WC()->plugin_url().'/assets/css/admin.css');
}else
{
wp_enqueue_style(WT_IEW_PLUGIN_ID_BASIC.'-select2', WT_U_IEW_PLUGIN_URL. 'admin/css/select2.css', array(), WT_U_IEW_VERSION, 'all' );
wp_enqueue_script(WT_IEW_PLUGIN_ID_BASIC.'-select2', WT_U_IEW_PLUGIN_URL.'admin/js/select2.js', array('jquery'), WT_U_IEW_VERSION, false );
}
}
/**
* Upload data to the user choosed remote method (Eg: FTP)
* @param string $step the action to perform, here 'upload'
*
* @return array
*/
public function process_upload($step, $export_id, $to_export)
{
$out=array(
'response'=>false,
'export_id'=>0,
'history_id'=>0, //same as that of export id
'finished'=>0,
'file_url'=>'',
'msg'=>'',
);
if($export_id==0) //it may be an error
{
return $out;
}
//take history data by export_id
$export_data=Wt_Import_Export_For_Woo_Basic_History::get_history_entry_by_id($export_id);
if(is_null($export_data)) //no record found so it may be an error
{
return $out;
}
$form_data=maybe_unserialize($export_data['data']);
//taking file name
$file_name=(isset($export_data['file_name']) ? $export_data['file_name'] : '');
$file_path=$this->get_file_path($file_name);
if($file_path===false)
{
$update_data=array(
'status'=>Wt_Import_Export_For_Woo_Basic_History::$status_arr['failed'],
'status_text'=>'File not found.' //no need to add translation function
);
$update_data_type=array(
'%d',
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($export_id, $update_data, $update_data_type);
return $out;
}
/* updating output parameters */
$out['export_id']=$export_id;
$out['history_id']=$export_id;
$out['file_url']='';
//check where to copy the files
$file_into='local';
if(isset($form_data['advanced_form_data']))
{
$file_into=(isset($form_data['advanced_form_data']['wt_iew_file_into']) ? $form_data['advanced_form_data']['wt_iew_file_into'] : 'local');
}
if('local' != $file_into) /* file not save to local. Initiate the choosed remote profile */
{
$remote_adapter=Wt_Import_Export_For_Woo_Basic::get_remote_adapters('export', $file_into);
if(is_null($remote_adapter)) /* adapter object not found */
{
$msg=sprintf('Unable to initailize %s', $file_into);
Wt_Import_Export_For_Woo_Basic_History::record_failure($export_id, $msg);
$out['msg']=__($msg);
return $out;
}
/* upload the file */
$upload_out_format = array('response'=>true, 'msg'=>'');
$advanced_form_data=(isset($form_data['advanced_form_data']) ? $form_data['advanced_form_data'] : array());
$upload_data = $remote_adapter->upload($file_path, $file_name, $advanced_form_data, $upload_out_format);
$out['response'] = (isset($upload_data['response']) ? $upload_data['response'] : false);
$out['msg'] = (isset($upload_data['msg']) ? $upload_data['msg'] : __('Error'));
//unlink the local file
@unlink($file_path);
}else
{
$out['response']=true;
$out['file_url']=html_entity_decode($this->get_file_url($file_name));
}
$out['finished']=1; //if any error then also its finished, but with errors
if($out['response'] === true) //success
{
$out['msg']=__('Finished');
/* updating finished status */
$update_data=array(
'status'=>1 //success
);
$update_data_type=array(
'%d'
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($export_id, $update_data, $update_data_type);
}else //failed
{
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($export_id, 'Failed while uploading');
}
return $out;
}
/**
* Do the export process
*/
public function process_action($form_data, $step, $to_process, $file_name='', $export_id=0, $offset=0)
{
$out=array(
'response'=>false,
'new_offset'=>0,
'export_id'=>0,
'history_id'=>0, //same as that of export id
'total_records'=>0,
'finished'=>0,
'file_url'=>'',
'msg'=>'',
);
/* prepare form_data, If this was not first batch */
if($export_id>0)
{
//take history data by export_id
$export_data=Wt_Import_Export_For_Woo_Basic_History::get_history_entry_by_id($export_id);
if(is_null($export_data)) //no record found so it may be an error
{
return $out;
}
//processing form data
$form_data=(isset($export_data['data']) ? maybe_unserialize($export_data['data']) : array());
}
$this->to_export=$to_process;
$default_batch_count=$this->_get_default_batch_count($form_data);
$batch_count=$default_batch_count;
$file_as='csv';
$csv_delimiter=',';
$total_records=0;
if(isset($form_data['advanced_form_data']))
{
$batch_count=(isset($form_data['advanced_form_data']['wt_iew_batch_count']) && (int)$form_data['advanced_form_data']['wt_iew_batch_count'] > 0 ? $form_data['advanced_form_data']['wt_iew_batch_count'] : $batch_count);
$file_as=(isset($form_data['advanced_form_data']['wt_iew_file_as']) ? $form_data['advanced_form_data']['wt_iew_file_as'] : 'csv');
$csv_delimiter=(isset($form_data['advanced_form_data']['wt_iew_delimiter']) ? $form_data['advanced_form_data']['wt_iew_delimiter'] : ',');
$csv_delimiter=($csv_delimiter=="" ? ',' : $csv_delimiter);
}
//for Quick method exicuted from step 2(method of export)
if(empty($form_data['advanced_form_data']['wt_iew_batch_count'])){
$form_data['advanced_form_data']['wt_iew_batch_count'] = $batch_count;
}
$file_as=(isset($this->allowed_export_file_type[$file_as]) ? $file_as : 'csv');
$generated_file_name=$this->to_export.'_export_'.date('Y-m-d-h-i-s').'.'.$file_as;
if($export_id==0) //first batch then create a history entry
{
$file_name=($file_name=="" ? $generated_file_name : sanitize_file_name($file_name.'.'.$file_as));
$export_id=Wt_Import_Export_For_Woo_Basic_History::create_history_entry($file_name, $form_data, $this->to_export, $step);
$offset=0;
}else
{
//taking file name from export data
$file_name=(isset($export_data['file_name']) ? $export_data['file_name'] : $generated_file_name);
$total_records=(isset($export_data['total']) ? $export_data['total'] : 0);
}
/* setting history_id in Log section */
Wt_Import_Export_For_Woo_Basic_Log::$history_id=$export_id;
$file_path=$this->get_file_path($file_name);
if($file_path===false)
{
$msg='Unable to create backup directory. Please grant write permission for `wp-content` folder.';
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($export_id, $msg);
$out['msg']=__($msg);
return $out;
}
/* giving full data */
$form_data=apply_filters('wt_iew_export_full_form_data_basic', $form_data, $to_process, $step, $this->selected_template_data);
/* hook to get data from corresponding module. Eg: product, order */
$export_data=array(
'total'=>100,
'head_data'=>array("abc"=>"hd1", "bcd"=>"hd2", "cde"=>"hd3", "def"=>"hd4"),
'body_data'=>array(
array("abc"=>"Abc1", "bcd"=>"Bcd1", "cde"=>"Cde1", "def"=>"Def1"),
array("abc"=>"Abc2", "bcd"=>"Bcd2", "cde"=>"Cde2", "def"=>"Def2")
),
);
/* in scheduled export. The export method will not available so we need to take it from form_data */
$form_data_export_method=(isset($form_data['method_export_form_data']) && isset($form_data['method_export_form_data']['method_export']) ? $form_data['method_export_form_data']['method_export'] : $this->default_export_method);
$this->export_method=($this->export_method=="" ? $form_data_export_method : $this->export_method);
$export_data=apply_filters('wt_iew_exporter_do_export_basic', $export_data, $to_process, $step, $form_data, $this->selected_template_data, $this->export_method, $offset);
if($offset==0)
{
$total_records=intval(isset($export_data['total']) ? $export_data['total'] : 0);
}
$this->_update_history_after_export($export_id, $offset, $total_records, $export_data);
/* checking action is finshed */
$is_last_offset=false;
$new_offset=$offset+$batch_count; //increase the offset
if($new_offset>=$total_records) //finished
{
$is_last_offset=true;
}
/* no data from corresponding module */
if(!$export_data) //error !!!
{
//return $out;
}else
{
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-csvwriter.php';
$writer=new Wt_Import_Export_For_Woo_Basic_Csvwriter($file_path, $offset, $csv_delimiter, $this->use_bom);
/**
* Alter export data before writing to file.
* @param array $export_data data to export
* @param int $offset current offset
* @param boolean $is_last_offset is current offset is last one
* @param string $file_as file type to write Eg: XML, CSV
* @param string $to_export Post type
* @param string $csv_delimiter CSV delimiter. In case of CSV export
* @return array $export_data Altered export data
*/
$export_data=apply_filters('wt_iew_alter_export_data_basic', $export_data, $offset, $is_last_offset, $file_as, $this->to_export, $csv_delimiter);
$writer->write_to_file($export_data, $offset, $is_last_offset, $this->to_export);
}
/* updating output parameters */
$out['total_records']=$total_records;
$out['export_id']=$export_id;
$out['history_id']=$export_id;
$out['file_url']='';
$out['response']=true;
/* updating action is finshed */
if($is_last_offset) //finished
{
//check where to copy the files
$file_into='local';
if(isset($form_data['advanced_form_data']))
{
$file_into=(isset($form_data['advanced_form_data']['wt_iew_file_into']) ? $form_data['advanced_form_data']['wt_iew_file_into'] : 'local');
}
if('local' != $file_into) /* file not save to local. Initiate the choosed remote profile */
{
$out['finished']=2; //file created, next upload it
$out['msg']=sprintf(__('Uploading to %s'), $file_into);
}else
{
$out['file_url']=html_entity_decode($this->get_file_url($file_name));
$out['finished']=1; //finished
$msg = __('Export file processing completed');
$msg = __('Export file processing completed');
$msg.='<span class="wt_iew_popup_close" style="line-height:10px;width:auto" onclick="wt_iew_basic_export.hide_export_info_box();">X</span>';
$msg.='<span class="wt_iew_info_box_finished_text" style="font-size: 10px; display:block">';
if(Wt_Import_Export_For_Woo_Admin_Basic::module_exists('history'))
{
$history_module_id= Wt_Import_Export_For_Woo_Basic::get_module_id('history');
$history_page_url=admin_url('admin.php?page='.$history_module_id);
$msg.=__('You can manage exports from History section.');
}
$msg.='<a class="button button-secondary" style="margin-top:10px;" onclick="wt_iew_basic_export.hide_export_info_box();" target="_blank" href="'.$out['file_url'].'" >'.__('Download file').'</a></span>';
if( 0 == $total_records && isset( $export_data['no_post'] ) ){
$out['no_post'] = true;
$msg = $export_data['no_post'];
}
$out['msg']=$msg;
/* updating finished status */
$update_data=array(
'status'=>Wt_Import_Export_For_Woo_Basic_History::$status_arr['finished'],
'status_text'=>'Finished' //translation function not needed
);
$update_data_type=array(
'%d',
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($export_id,$update_data,$update_data_type);
}
}else
{
$out['new_offset']=$new_offset;
$out['msg']=sprintf(__('Exporting...(%d out of %d)'), $new_offset, $total_records);
}
return $out;
}
public static function get_file_path($file_name)
{
if(!is_dir(self::$export_dir))
{
if(!mkdir(self::$export_dir, 0700))
{
return false;
}else
{
$files_to_create=array('.htaccess' => 'deny from all', 'index.php'=>'<?php // Silence is golden');
foreach($files_to_create as $file=>$file_content)
{
if(!file_exists(self::$export_dir.'/'.$file))
{
$fh=@fopen(self::$export_dir.'/'.$file, "w");
if(is_resource($fh))
{
fwrite($fh, $file_content);
fclose($fh);
}
}
}
}
}
return self::$export_dir.'/'.$file_name;
}
/**
* Download file via a nonce URL
*/
public function download_file()
{
if(isset($_GET['wt_iew_export_download']))
{
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC)) /* check nonce and role */
{
$file_name=(isset($_GET['file']) ? sanitize_file_name($_GET['file']) : '');
if($file_name!="")
{
$file_arr=explode(".", $file_name);
$file_ext=end($file_arr);
if(isset($this->allowed_export_file_type[$file_ext]) || $file_ext=='zip') /* Only allowed files. Zip file in image export */
{
$file_path=self::$export_dir.'/'.$file_name;
if(file_exists($file_path) && is_file($file_path)) /* check existence of file */
{
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="'.$file_name.'";');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
//header('Content-Length: '.filesize($file_path));
$chunk_size=1024 * 1024;
$handle=@fopen($file_path, 'rb');
while(!feof($handle))
{
$buffer = fread($handle, $chunk_size);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
exit();
}
}
}
}
}
}
private function _update_history_after_export($export_id, $offset, $total_records, $export_data)
{
/* we need to update total record count on first batch */
if($offset==0)
{
$update_data=array(
'total'=>$total_records
);
}else
{
/* updating completed offset */
$update_data=array(
'offset'=>$offset
);
}
$update_data_type=array(
'%d'
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($export_id, $update_data, $update_data_type);
}
private function _get_default_batch_count($form_data)
{
$default_batch_count=absint(apply_filters('wt_iew_exporter_alter_default_batch_count_basic', $this->default_batch_count, $this->to_export, $form_data));
$form_data=null;
unset($form_data);
return ($default_batch_count==0 ? $this->default_batch_count : $default_batch_count);
}
/**
* Generating downloadable URL for a file
*/
private function get_file_url($file_name)
{
return wp_nonce_url(admin_url('admin.php?wt_iew_export_download=true&file='.$file_name), WT_IEW_PLUGIN_ID_BASIC);
}
}
}
Wt_Import_Export_For_Woo_Basic::$loaded_modules['export']=new Wt_Import_Export_For_Woo_Basic_Export();
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_export_main">
<p><?php echo $step_info['description']; ?></p>
<form class="wt_iew_export_advanced_form">
<table class="form-table wt-iew-form-table wt-iew-export-filter-table">
<?php
Wt_Import_Export_For_Woo_Basic_Common_Helper::field_generator($advanced_screen_fields, $advanced_form_data);
?>
</table>
</form>
</div>
<?php
$file_int_field_tr_arr=array();
$file_int_field_tr_arr=apply_filters('wt_iew_exporter_file_into_fields_row_id_basic', $file_int_field_tr_arr);
?>
<script type="text/javascript">
var file_int_field_tr_arr=<?php echo json_encode($file_int_field_tr_arr); ?>;
/* remote file modules can hook */
function wt_iew_set_file_into_fields(file_into)
{
/* first hide all */
if(file_int_field_tr_arr.length>0)
{
jQuery(file_int_field_tr_arr.join(', ')).hide();
}
// wt_iew_toggle_schedule_btn(0); //hide scheduler btn if exists
<?php
do_action('wt_iew_exporter_file_into_js_fn');
?>
}
<?php /*
function wt_iew_toggle_schedule_btn(state) /* show/hide cron button
{
<?php
do_action('wt_iew_toggle_schedule_btn');
?>
} */ ?>
/* custom action: other than export, save, update. Eg: schedule */
function wt_iew_custom_action_basic(ajx_dta, action, id)
{
ajx_dta['item_type']=ajx_dta['to_export'];
<?php
do_action('wt_iew_custom_action_basic');
?>
}
</script>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_export_main">
<p><?php echo $step_info['description']; ?></p>
<form class="wt_iew_export_filter_form">
<table class="form-table wt-iew-form-table wt-iew-export-filter-table">
<?php
Wt_Import_Export_For_Woo_Basic_Common_Helper::field_generator($filter_screen_fields, $filter_form_data);
?>
</table>
</form>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt-iew-plugin-toolbar bottom">
<div style="float:left; padding-top:10px;" class="wt_iew_export_template_name"> </div>
<div style="float:right;">
<div style="float:right;">
<?php
$button_types = array_column(array_values($this->step_btns), 'type');
$last_button_key = array_search('button', array_reverse($button_types, true));
$count = 0;
$button_standard_class = 'media-button';
foreach($this->step_btns as $btnk=>$btnv)
{
$css_class=(isset($btnv['class']) ? $btnv['class'] : '');
$action_type=(isset($btnv['action_type']) ? $btnv['action_type'] : 'non-step');
if($count == $last_button_key){
$button_standard_class = 'button-primary';
}
if($btnv['type']=='button')
{
?>
<button class="button <?php echo $button_standard_class; ?> wt_iew_export_action_btn <?php echo $css_class; ?>" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnv['key'];?>" type="submit">
<?php echo $btnv['text'];?>
</button>
<?php
}
elseif($btnv['type']=='dropdown_button')
{
$btn_arr=(isset($btnv['items']) && is_array($btnv['items']) ? $btnv['items'] : array());
?>
<button type="button" class="button button-primary wt_iew_drp_menu <?php echo $css_class; ?>" data-target="wt_iew_<?php echo $btnk; ?>_drp">
<?php echo $btnv['text'];?> <span class="dashicons dashicons-arrow-down" style="line-height: 28px;"></span>
</button>
<ul class="wt_iew_dropdown <?php echo $css_class; ?>" data-id="wt_iew_<?php echo $btnk; ?>_drp">
<?php
foreach($btn_arr as $btnkk => $btnvv)
{
$field_attr=(isset($btnvv['field_attr']) ? $btnvv['field_attr'] : '');
$action_type=(isset($btnvv['action_type']) ? $btnvv['action_type'] : 'non-step');
?>
<li class="wt_iew_export_action_btn" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnvv['key'];?>" <?php echo $field_attr;?> ><?php echo $btnvv['text'];?></li>
<?php
}
?>
</ul>
<?php
}
elseif($btnv['type']=='hidden_button')
{
?>
<button style="display:none;" class="button button-primary wt_iew_export_action_btn <?php echo $css_class; ?>" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnv['key'];?>" type="submit">
<?php echo $btnv['text'];?>
</button>
<?php
}
elseif($btnv['type']=='text')
{
?>
<span style="line-height:40px; font-weight:bold;" class="<?php echo $css_class; ?>"><?php echo $btnv['text'];?></span>
<?php
}
$count++;
}
?>
</div>
</div>
<span class="spinner" style="margin-top:11px;"></span>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt-iew-settings-header">
<h3>
<?php _e('Export'); ?><?php if($this->step!='post_type'){ ?> <span class="wt_iew_step_head_post_type_name"></span><?php } ?>: <?php echo $this->step_title; ?>
</h3>
<span class="wt_iew_step_info" title="<?php echo $this->step_summary; ?>">
<?php
echo $this->step_summary;
?>
</span>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_export_main">
<p><?php echo $step_info['description']; ?></p>
<div class="meta_mapping_box">
<div class="meta_mapping_box_hd_nil wt_iew_noselect">
<?php _e('Default fields');?>
<span class="meta_mapping_box_selected_count_box"><span class="meta_mapping_box_selected_count_box_num">0</span> <?php _e(' columns(s) selected'); ?></span>
</div>
<div style="clear:both;"></div>
<div class="meta_mapping_box_con" data-sortable="0" data-loaded="1" data-field-validated="0" data-key="" style="display:inline-block;">
<table class="wt-iew-mapping-tb wt-iew-exporter-default-mapping-tb">
<thead>
<tr>
<th>
<input type="checkbox" name="" class="wt_iew_mapping_checkbox_main">
</th>
<th width="35%"><?php _e('Column');?></th>
<th><?php _e('Column name');?></th>
</tr>
</thead>
<tbody>
<?php
$draggable_tooltip=__("Drag to rearrange the columns");
$tr_count=0;
foreach($form_data_mapping_fields as $key=>$val)
{
if(isset($mapping_fields[$key]))
{
$label=$mapping_fields[$key];
include "_export_mapping_tr_html.php";
unset($mapping_fields[$key]); //remove the field from default list
$tr_count++;
}
}
if(count($mapping_fields)>0)
{
foreach($mapping_fields as $key=>$label)
{
$val=array($key, 1); //enable the field
include "_export_mapping_tr_html.php";
$tr_count++;
}
}
if($tr_count==0)
{
?>
<tr>
<td colspan="3" style="text-align:center;">
<?php _e('No fields found.'); ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
<div style="clear:both;"></div>
<?php
if($this->mapping_enabled_fields)
{
foreach($this->mapping_enabled_fields as $mapping_enabled_field_key=>$mapping_enabled_field)
{
$mapping_enabled_field=(!is_array($mapping_enabled_field) ? array($mapping_enabled_field, 0) : $mapping_enabled_field);
if(count($form_data_mapping_enabled_fields)>0)
{
if(in_array($mapping_enabled_field_key, $form_data_mapping_enabled_fields))
{
$mapping_enabled_field[1]=1;
}else
{
$mapping_enabled_field[1]=0;
}
}
?>
<div class="meta_mapping_box">
<div class="meta_mapping_box_hd wt_iew_noselect">
<span class="dashicons dashicons-arrow-right"></span>
<?php echo $mapping_enabled_field[0];?>
<span class="meta_mapping_box_selected_count_box"><span class="meta_mapping_box_selected_count_box_num">0</span> <?php _e(' columns(s) selected'); ?></span>
</div>
<div style="clear:both;"></div>
<div class="meta_mapping_box_con" data-sortable="0" data-loaded="0" data-field-validated="0" data-key="<?php echo $mapping_enabled_field_key;?>"></div>
</div>
<div style="clear:both;"></div>
<?php
}
}
?>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
$checked=is_array($val) ? $val[1] : 0;
$val=(is_array($val) ? $val[0] : $val);
?>
<tr id="columns_<?php echo $key;?>">
<td>
<div class="wt_iew_sort_handle"><span class="dashicons dashicons-move"></span></div>
<input type="checkbox" name="columns_key[]" class="columns_key wt_iew_mapping_checkbox_sub" value="<?php echo $key;?>" <?php echo ($checked==1 ? 'checked' : ''); ?>></td>
<td>
<label class="wt_iew_mapping_column_label"><?php echo $label;?></label>
</td>
<td>
<input type="text" name="columns_val[]" class="columns_val" value="<?php echo $val;?>">
</td>
</tr>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<table class="wt-iew-mapping-tb wt-iew-exporter-meta-mapping-tb" data-field-type="<?php echo $meta_mapping_screen_field_key; ?>">
<thead>
<tr>
<th>
<?php
$is_checked=(isset($meta_mapping_screen_field_val['checked']) && $meta_mapping_screen_field_val['checked']==1 ? 1 : 0);
$checked_attr=($is_checked==1 ? ' checked="checked"' : '');
?>
<input type="checkbox" name="" class="wt_iew_mapping_checkbox_main" <?php echo $checked_attr; ?>>
</th>
<th width="35%"><?php _e('Column');?></th>
<th><?php _e('Column name');?></th>
</tr>
</thead>
<tbody>
<?php
$tr_count=0;
if(isset($meta_mapping_screen_field_val['fields']) && is_array($meta_mapping_screen_field_val['fields']) && count($meta_mapping_screen_field_val['fields'])>0)
{
foreach($meta_mapping_screen_field_val['fields'] as $key=>$val)
{
$val=is_array($val) ? $val : array($val, 0);
$label=$val[0];
if(isset($current_meta_step_form_data[$key])) /* forma data/template data available */
{
$val=(is_array($current_meta_step_form_data[$key]) ? $current_meta_step_form_data[$key] : array($current_meta_step_form_data[$key], 1));
}else
{
$val[1]=$is_checked; //parent is checked
}
include "_export_mapping_tr_html.php";
$tr_count++;
}
}
if($tr_count==0)
{
?>
<tr>
<td colspan="3" style="text-align:center;">
<?php _e('No fields found.'); ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_export_main">
<p><?php //echo $step_info['description']; ?></p>
<div class="wt_iew_warn wt_iew_method_export_wrn" style="display:none;">
<?php _e('Please select an export method');?>
</div>
<div class="wt_iew_warn wt_iew_export_template_wrn" style="display:none;">
<?php _e('Please select an export template.');?>
</div>
<table class="form-table wt-iew-form-table">
<tr>
<th><label><?php _e('Select an export method');?></label></th>
<td colspan="2" style="width:75%;">
<div class="wt_iew_radio_block">
<?php
if(empty($this->mapping_templates)){
unset($this->export_obj->export_methods['template']);
}
foreach($this->export_obj->export_methods as $key => $value)
{
?>
<p>
<input type="radio" value="<?php echo $key;?>" id="wt_iew_export_<?php echo $key;?>_export" name="wt_iew_export_method_export" <?php echo ($this->export_method==$key ? 'checked="checked"' : '');?>><b><label for="wt_iew_export_<?php echo $key;?>_export"><?php echo $value['title']; ?></label></b> <br />
<span><label for="wt_iew_export_<?php echo $key;?>_export"><?php echo $value['description']; ?></label></span>
</p>
<?php
}
?>
</div>
</td>
</tr>
<?php if(!empty($this->mapping_enabled_fields)):?>
<tr class="wt-iew-export-method-options wt-iew-export-method-options-quick">
<th style="width:150px; text-align:left; vertical-align:top;"><label><?php _e('Include fields from the respective groups');?></label></th>
<td colspan="2" style="width:75%;">
<?php
foreach($this->mapping_enabled_fields as $mapping_enabled_field_key=>$mapping_enabled_field)
{
$mapping_enabled_field=(!is_array($mapping_enabled_field) ? array($mapping_enabled_field, 0) : $mapping_enabled_field);
if($this->rerun_id>0) /* check this is a rerun request */
{
if(in_array($mapping_enabled_field_key, $form_data_mapping_enabled))
{
$mapping_enabled_field[1]=1; //mark it as checked
}else
{
$mapping_enabled_field[1]=0; //mark it as unchecked
}
}
?>
<div class="wt_iew_checkbox" style="padding-left:0px;">
<input type="checkbox" id="wt_iew_<?php echo $mapping_enabled_field_key;?>" name="wt_iew_include_these_fields[]" value="<?php echo $mapping_enabled_field_key;?>" <?php echo ($mapping_enabled_field[1]==1 ? 'checked="checked"' : '');?> />
<label for="wt_iew_<?php echo $mapping_enabled_field_key;?>"><?php echo $mapping_enabled_field[0];?></label>
</div>
<?php
}
?>
<span class="wt-iew_form_help"><?php _e('Enabling any of these ensures that all the fields from the respective groups are included in your export.');?></span>
</td>
</tr>
<?php endif; ?>
<tr class="wt-iew-export-method-options wt-iew-export-method-options-template" style="display:none;">
<th><label><?php _e('Export template');?></label></th>
<td>
<select class="wt-iew-export-template-sele">
<option value="0">-- <?php _e('Select a template'); ?> --</option>
<?php
foreach($this->mapping_templates as $mapping_template)
{
?>
<option value="<?php echo $mapping_template['id'];?>" <?php echo ($form_data_export_template==$mapping_template['id'] ? ' selected="selected"' : ''); ?>>
<?php echo $mapping_template['name'];?>
</option>
<?php
}
?>
</select>
</td>
<td>
</td>
</tr>
</table>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_export_main">
<p><?php echo $step_info['description']; ?></p>
<div class="wt_iew_warn wt_iew_post_type_wrn" style="display:none;">
<?php _e( 'Please select a post type', 'users-customers-import-export-for-wp-woocommerce' );?>
</div>
<table class="form-table wt-iew-form-table">
<tr>
<th><label><?php _e( 'Select a post type to export', 'users-customers-import-export-for-wp-woocommerce' ); ?></label></th>
<td>
<select name="wt_iew_export_post_type">
<option value="">-- <?php _e( 'Select post type', 'users-customers-import-export-for-wp-woocommerce' ); ?> --</option>
<?php
foreach($post_types as $key=>$value)
{
?>
<option value="<?php echo $key;?>" <?php selected($key, $key) ?> <?php echo ($item_type==$key ? 'selected' : '');?>><?php echo $value;?></option>
<?php
}
?>
</select>
</td>
<td></td>
</tr>
</table>
<br/>
<?php
$wt_iew_post_types = array(
'product' => array(
'message' => __( 'The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Products.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_review' => array(
'message' => __( 'The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product reviews.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_categories' => array(
'message' => __( 'The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product categories.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_tags' => array(
'message' => __( 'The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product tags.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'order' => array(
'message' => __( 'The <b>Order Export & Order Import for WooCommerce Add-On</b> is required to export WooCommerce Orders.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=order-import-export-for-woocommerce')
),
'coupon' => array(
'message' => __( 'The <b>Order Export & Order Import for WooCommerce Add-On</b> is required to export WooCommerce Coupons.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=order-import-export-for-woocommerce')
),
'subscription' => array(
'message' => __( 'The <b>Order, Coupon, Subscription Export Import for WooCommerce</b> premium is required to export WooCommerce Subscriptions.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => esc_url( 'https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp_post_type&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=' . WT_U_IEW_VERSION )
)
);
foreach ($wt_iew_post_types as $wt_iew_post_type => $wt_iew_post_type_detail) { ?>
<div class="wt_iew_free_addon wt_iew_free_addon_warn <?php echo 'wt_iew_type_'.$wt_iew_post_type; ?>" style="display:none">
<p><?php echo $wt_iew_post_type_detail['message']; ?></p>
<?php
$install_now = esc_html( 'Install now for free', 'users-customers-import-export-for-wp-woocommerce' );
$is_pro = false;
if( 'subscription' === $wt_iew_post_type ){
$install_now = esc_html( 'Get the plugin', 'users-customers-import-export-for-wp-woocommerce' );
$is_pro = true;
}
?>
<a target="_blank" href="<?php echo $wt_iew_post_type_detail['link']; ?>"><?php esc_attr_e( $install_now ); ?></a>
</div>
<?php
}
?>
</div>
\ No newline at end of file
<?php
/**
* Main view file of export section
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
?>
<?php
do_action('wt_iew_exporter_before_head');
$wf_admin_view_path=plugin_dir_path(WT_U_IEW_PLUGIN_FILENAME).'admin/views/';
?>
<style type="text/css">
.wt_iew_export_step{ display:none; }
.wt_iew_export_step_loader{ width:100%; height:400px; text-align:center; line-height:400px; font-size:14px; }
.wt_iew_export_step_main{ float:left; box-sizing:border-box; padding:15px; padding-bottom:0px; width:95%; margin:30px 2.5%; background:#fff; box-shadow:0px 2px 2px #ccc; border:solid 1px #efefef; }
.wt_iew_export_main{ padding:20px 0px; }
.wt_iew_file_ext_info_td{ vertical-align:top !important; }
.wt_iew_file_ext_info{ display:inline-block; margin-top:3px; }
.wt-something-went-wrong-wrap{position: absolute; margin-top: 150px; left:25%;color:#FFF;width:450px;height:275px;background: #FFF;padding: 25px; text-align: center;border: 1px solid #B32D2E;border-radius: 10px;box-shadow: 0px 0px 2px 2px #cdc8c8;}
</style>
<?php
Wt_Iew_IE_Basic_Helper::debug_panel($this->module_base);
?>
<?php include WT_U_IEW_PLUGIN_PATH."/admin/views/_save_template_popup.php"; ?>
<h2 class="wt_iew_page_hd"><?php _e('Export'); ?><span class="wt_iew_post_type_name"></span></h2>
<span class="wt-webtoffee-icon" style="float: <?php echo (!is_rtl()) ? 'right' : 'left'; ?>; padding-<?php echo (!is_rtl()) ? 'right' : 'left'; ?>:30px; margin-top: -25px;">
<?php _e('Developed by'); ?> <a target="_blank" href="https://www.webtoffee.com">
<img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/webtoffee-logo_small.png';?>" style="max-width:100px;">
</a>
</span>
<?php
if($requested_rerun_id>0 && $this->rerun_id==0)
{
?>
<div class="wt_iew_warn wt_iew_rerun_warn">
<?php _e('Unable to handle Re-Run request.');?>
</div>
<?php
}
?>
<div class="wt_iew_loader_info_box"></div>
<div class="wt_iew_overlayed_loader"></div>
<div class="wt_iew_export_step_main_wrapper" style="width:68%; float: left">
<div class="wt-something-went-wrong" style="position:relative;display:none;">
<div class="wt-something-went-wrong-wrap">
<p class="wt_iew_popup_close" style="float:right;margin-top: -15px !important;margin-right: -15px !important;line-height: 0;"><a href="javascript:void(0)"><img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/wt-close-button.png';?>"/></a></p>
<img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/wt-error-icon.png';?>"/>
<h3><?php esc_html_e('Something went wrong'); ?></h3>
<p style="color:#000;text-align: left;"><?php esc_html_e('We are unable to complete your request.Try reducing the import batch count to 5 or less and increasing the Maximum execution time in the '); ?><a target="_blank" href="<?php echo admin_url('admin.php?page=wt_import_export_for_woo_basic') ?>"><?php esc_html_e('General settings'); ?></a>.</p>
<p style="color:#000;text-align: left;"><?php esc_html_e(' If not resolved, contact the');?> <a target="_blank" href="https://www.webtoffee.com/contact/"><?php esc_html_e('support team'); ?></a> <?php esc_html_e('with the');?> <a target="_blank" href="<?php echo admin_url('admin.php?page=wc-status&tab=logs') ?>"><?php esc_html_e('WooCommerce fatal error log'); ?></a>, <?php esc_html_e('if any'); ?>.</p>
<br/>
<a href="javascript:void(0)" onclick='wt_iew_basic_export.refresh_export_page();' class="button button-primary"><?php esc_html_e('Try again'); ?></a>
</div>
</div>
<div class="wt_iew_export_step_main" style = "width:100%; float: left">
<?php
foreach($this->steps as $stepk=>$stepv)
{
?>
<div class="wt_iew_export_step wt_iew_export_step_<?php echo $stepk;?>" data-loaded="0"></div>
<?php
}
?>
</div>
</div>
<?php
include $wf_admin_view_path."market.php";
\ No newline at end of file
var wt_iew_basic_history=(function( $ ) {
//'use strict';
var wt_iew_basic_history=
{
log_offset:0,
Set:function()
{
this.reg_delete();
this.reg_view_log();
this.reg_bulk_action();
},
reg_view_log:function()
{
jQuery(document).on('click', ".wt_iew_view_log_btn", function(){
jQuery('.wt_iew_overlay, .wt_iew_popup').hide();
wt_iew_basic_history.show_log_popup();
var history_id=$(this).attr('data-history-id');
if(history_id>0)
{
wt_iew_basic_history.log_offset=0;
wt_iew_basic_history.load_page(history_id);
}else
{
var log_file=$(this).attr('data-log-file');
if(log_file!="")
{
wt_iew_basic_history.view_raw_log(log_file);
}
}
});
},
view_raw_log:function(log_file)
{
$('.wt_iew_log_container').html('<div class="wt_iew_log_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
$.ajax({
url:wt_iew_basic_params.ajax_url,
data:{'action':'iew_history_ajax_basic', _wpnonce:wt_iew_basic_params.nonces.main, 'history_action':'view_log', 'log_file':log_file, 'data_type':'json'},
type:'post',
dataType:"json",
success:function(data)
{
if(data.status==1)
{
$('.wt_iew_log_container').html(data.html);
}else
{
$('.wt_iew_log_loader').html(wt_iew_basic_params.msgs.error);
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
},
error:function()
{
$('.wt_iew_log_loader').html(wt_iew_basic_params.msgs.error);
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
});
},
show_log_popup:function()
{
var pop_elm=$('.wt_iew_view_log');
var ww=$(window).width();
pop_w=(ww<1300 ? ww : 1300)-200;
pop_w=(pop_w<200 ? 200 : pop_w);
pop_elm.width(pop_w);
wh=$(window).height();
pop_h=(wh>=400 ? (wh-200) : wh);
$('.wt_iew_log_container').css({'max-height':pop_h+'px','overflow':'auto'});
wt_iew_popup.showPopup(pop_elm);
},
load_page:function(history_id)
{
var offset=wt_iew_basic_history.log_offset;
if(offset==0)
{
$('.wt_iew_log_container').html('<div class="wt_iew_log_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
}else
{
$('.wt_iew_history_loadmore_btn').hide();
$('.wt_iew_history_loadmore_loading').show();
}
$.ajax({
url:wt_iew_basic_params.ajax_url,
data:{'action':'iew_history_ajax_basic', _wpnonce:wt_iew_basic_params.nonces.main, 'history_action':'view_log', 'offset': offset, 'history_id':history_id, 'data_type':'json'},
type:'post',
dataType:"json",
success:function(data)
{
$('.wt_iew_history_loadmore_btn').show();
$('.wt_iew_history_loadmore_loading').hide();
if(data.status==1)
{
wt_iew_basic_history.log_offset=data.offset;
if(offset==0)
{
$('.wt_iew_log_container').html(data.html);
}else
{
$('.log_view_tb_tbody').append(data.html);
}
if(data.finished)
{
$('.wt_iew_history_loadmore_btn').hide();
}else
{
if(offset==0)
{
$('.wt_iew_history_loadmore_btn').unbind('click').click(function(){
wt_iew_basic_history.load_page(history_id);
});
}
}
}else
{
$('.wt_iew_log_loader').html(wt_iew_basic_params.msgs.error);
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
},
error:function()
{
$('.wt_iew_log_loader').html(wt_iew_basic_params.msgs.error);
$('.wt_iew_history_loadmore_btn').show();
$('.wt_iew_history_loadmore_loading').hide();
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
});
},
reg_delete:function()
{
jQuery('.wt_iew_delete_history, .wt_iew_delete_log').click(function(){
if(confirm(wt_iew_history_basic_params.msgs.sure))
{
window.location.href=jQuery(this).attr('data-href');
}
});
},
reg_bulk_action:function()
{
var checkbox_main=$('.wt_iew_history_checkbox_main');
var checkbox_sub=$('.wt_iew_history_checkbox_sub');
var tb=$('.history_list_tb');
if(tb.find('.wt_iew_history_checkbox_sub:checked').length==tb.find('.wt_iew_history_checkbox_sub').length)
{
checkbox_main.prop('checked',true);
}else
{
checkbox_main.prop('checked',false);
}
checkbox_main.unbind('click').click(function()
{
if($(this).is(':checked'))
{
checkbox_sub.prop('checked',true);
}else
{
checkbox_sub.prop('checked',false);
}
});
checkbox_sub.unbind('click').click(function()
{
if($(this).is(':checked') && $('.wt_iew_history_checkbox_sub:checked').length==checkbox_sub.length)
{
checkbox_main.prop('checked',true);
}else
{
checkbox_main.prop('checked',false);
}
});
$('.wt_iew_bulk_action_btn').click(function(){
if($('.wt_iew_history_checkbox_sub:checked').length>0 && $('.wt_iew_bulk_action option:selected').val()!="")
{
var cr_action=$('.wt_iew_bulk_action option:selected').val();
if(cr_action=='delete')
{
if(confirm(wt_iew_history_basic_params.msgs.sure))
{
var id_arr=new Array();
$('.wt_iew_history_checkbox_sub:checked').each(function(){
id_arr.push($(this).val());
});
var delete_url=wt_iew_history_basic_params.delete_url.replace('_history_id_', id_arr.join(','));
window.location.href=delete_url;
}
}
}
});
$('.wt_iew_bulk_action_logs_btn').click(function(){
if($('.wt_iew_history_checkbox_sub:checked').length>0 && $('.wt_iew_bulk_action option:selected').val()!="")
{
var cr_action=$('.wt_iew_bulk_action option:selected').val();
if(cr_action=='delete')
{
if(confirm(wt_iew_history_basic_params.msgs.sure))
{
var id_arr=new Array();
$('.wt_iew_history_checkbox_sub:checked').each(function(){
id_arr.push($(this).val());
});
var delete_url=wt_iew_history_basic_params.delete_url.replace('_log_file_', id_arr.join(','));
window.location.href=delete_url;
}
}
}
});
}
}
return wt_iew_basic_history;
})( jQuery );
jQuery(function() {
wt_iew_basic_history.Set();
});
\ No newline at end of file
<?php
/**
* History of import/Export
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_History')){
class Wt_Import_Export_For_Woo_Basic_History
{
public $module_id='';
public static $module_id_static='';
public $module_base='history';
public static $status_arr=array();
public static $status_label_arr=array();
public static $action_label_arr=array();
public $max_records=50;
public function __construct()
{
$this->module_id=Wt_Import_Export_For_Woo_Basic::get_module_id($this->module_base);
self::$module_id_static=$this->module_id;
self::$status_arr=array(
'pending'=>0, //running...
'finished'=>1, //completed
'failed'=>2, //failed
);
self::$status_label_arr=array(
0=>__('Running/Incomplete'),
1=>__('Finished'),
2=>__('Failed'),
);
self::$action_label_arr=array(
'export'=>__('Export'),
'import'=>__('Import'),
// 'export_image'=>__('Image Export'),
);
/* Admin menu for hostory listing */
add_filter('wt_iew_admin_menu_basic', array($this, 'add_admin_pages'), 10, 1);
/* advanced plugin settings */
add_filter('wt_iew_advanced_setting_fields_basic', array($this, 'advanced_setting_fields'), 12);
/* main ajax hook. The callback function will decide which action is to execute. */
add_action('wp_ajax_iew_history_ajax_basic', array($this, 'ajax_main'), 11);
/* Hook to perform actions after advanced settings was updated */
add_action('wt_iew_after_advanced_setting_update_basic', array($this, 'after_advanced_setting_update'), 11);
/* Download log file via nonce URL */
add_action('admin_init', array($this, 'download_file'), 11);
}
/**
* Adding admin menus
*/
public function add_admin_pages($menus)
{
$menus[$this->module_base]=array(
'submenu',
WT_IEW_PLUGIN_ID_BASIC,
__('History'),
__('History'),
apply_filters('wt_import_export_allowed_capability', 'import'),
$this->module_id,
array($this, 'admin_settings_page')
);
$menus[$this->module_base.'_log']=array(
'submenu',
WT_IEW_PLUGIN_ID_BASIC,
__('Import Logs'),
__('Import Logs'),
apply_filters('wt_import_export_allowed_capability', 'import'),
$this->module_id.'_log',
array($this, 'admin_log_page')
);
return $menus;
}
public function ajax_main()
{
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
$allowed_ajax_actions=array('view_log');
$out=array(
'status'=>0,
'msg'=>__('Error'),
);
$history_action=Wt_Iew_Sh::sanitize_item($_POST['history_action'], 'text');
$data_type=Wt_Iew_Sh::sanitize_item($_POST['data_type'], 'text');
if(method_exists($this, $history_action) && in_array($history_action, $allowed_ajax_actions))
{
$out=$this->{$history_action}($out);
}
if($data_type=='json')
{
echo json_encode($out);
}
}
exit();
}
/**
* Ajax sub function to display logs
*
*/
private function view_log($out)
{
$history_id=(isset($_POST['history_id']) ? absint($_POST['history_id']) : 0);
$out['html']='';
if($history_id>0)
{
$offset=(isset($_POST['offset']) ? absint($_POST['offset']) : 0);
$out['offset']=$offset;
$out['history_id']=$history_id;
$history_item=$this->get_history_entry_by_id($history_id);
if($history_item) //history item exists
{
$action_type=$history_item['template_type'];
if($action_type=='import' && Wt_Import_Export_For_Woo_Admin_Basic::module_exists($action_type))
{
$action_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules($action_type);
$log_file_name=$action_module_obj->get_log_file_name($history_item['id']);
$log_file_path=$action_module_obj->get_file_path($log_file_name);
if(file_exists($log_file_path))
{
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-logreader.php';
$reader=new Wt_Import_Export_For_Woo_Basic_Logreader();
$response=$reader->get_data_as_batch($log_file_path, $offset);
if($response['response'])
{
$log_list=$response['data_arr'];
$out['offset']=$response['offset'];
$out['status']=1;
$out['finished']=$response['finished'];
$is_finished=$response['finished'];
$new_offset=$response['offset'];
$show_item_details=false;
$item_type_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules($history_item['item_type']);
if(!is_null($item_type_module_obj) && method_exists($item_type_module_obj, 'get_item_by_id'))
{
$show_item_details=true;
}
ob_start();
include plugin_dir_path(__FILE__).'views/_log_table.php';
$out['html']=ob_get_clean();
}
}else{
$out['status']=1;
$out['html']= sprintf( __( 'Please check the Generate import log is enabled under <a target = "_blank" href="%s">settings</a>' ), admin_url('admin.php?page=wt_import_export_for_woo_basic'));
}
}
}
}else /* raw log viewing */
{
$log_file_name=(isset($_POST['log_file']) ? sanitize_text_field($_POST['log_file']) : '');
if($log_file_name!="")
{
$ext_arr=explode(".", $log_file_name);
$ext=end($ext_arr);
if($ext=='log')
{
$log_file_path=Wt_Import_Export_For_Woo_Basic_Log::get_file_path($log_file_name);
if(file_exists($log_file_path))
{
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-logreader.php';
$reader=new Wt_Import_Export_For_Woo_Basic_Logreader();
$response=$reader->get_full_data($log_file_path);
$out['status']=1;
$out['html']='<div class="wt_iew_raw_log">'.nl2br(esc_html__($response['data_str'])).'</div>';
}
}
}
}
return $out;
}
/**
* Fields for advanced settings
*
*/
public function advanced_setting_fields($fields)
{
$fields['advanced_field_head'] =array(
'type'=>'field_group_head', //field type
'head'=>__('Advanced options'),
'group_id'=>'advanced_field', //field group id
'show_on_default'=>0,
);
$fields['enable_history_auto_delete']=array(
'label'=>__("Auto delete history"),
'type'=>'checkbox',
'checkbox_fields' => array( 1 => __( 'Enable' ) ),
'value' => 1,
'field_name'=>'enable_history_auto_delete',
'field_group'=>'advanced_field',
'help_text'=>__('Enabling this option will delete records from the history section upon reaching the count mentioned in Maximum entries.'),
'validation_rule'=>array('type'=>'absint'),
'form_toggler'=>array(
'type'=>'parent',
'target'=>'wt_iew_enable_history_auto_delete',
),
);
$fields['auto_delete_history_count']=array(
'label'=>__("Maximum entries"),
'type'=>'number',
'value' =>100,
'attr' =>array(
'style'=>'width:30%;',
),
'field_name'=>'auto_delete_history_count',
'field_group'=>'advanced_field',
'help_text'=>__('Indicates the maximum records to retain in history. Limit the number of records with status ‘Finished’. E.g On giving an input of 50, the system will retain(not delete) the latest 50 records with status ‘Finished’. Any other record with a different status will not be retained.'),
'validation_rule'=>array('type'=>'absint'),
'form_toggler'=>array(
'type'=>'child',
'id'=>'wt_iew_enable_history_auto_delete',
'val'=>1,
'chk' => 'true'
),
);
return $fields;
}
public function admin_log_page($args)
{
/* delete action */
if(isset($_GET['wt_iew_delete_log']))
{
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
$log_file_arr = isset($_GET['wt_iew_log_file']) ? explode(",", $_GET['wt_iew_log_file']) : array();
$log_file_arr = Wt_Iew_Sh::sanitize_item($log_file_arr, 'text_arr');
if (is_array($log_file_arr)) {
foreach ($log_file_arr as $log_file_name) {
$ext_arr = explode(".", $log_file_name);
$ext = end($ext_arr);
if ($ext == 'log') {
$log_file_path = Wt_Import_Export_For_Woo_Basic_Log::get_file_path($log_file_name);
if (file_exists($log_file_path) && is_file($log_file_path)) {
@unlink($log_file_path);
}
}
}
}
}
}
$delete_url_params['wt_iew_delete_log']=1;
$delete_url_params['wt_iew_log_file']='_log_file_';
$delete_url_params['page']=$this->module_id.'_log';
$delete_url=wp_nonce_url(admin_url('admin.php?'.http_build_query($delete_url_params)), WT_IEW_PLUGIN_ID_BASIC);
$download_url=wp_nonce_url(admin_url('admin.php?wt_iew_log_download=1&file=_log_file_'), WT_IEW_PLUGIN_ID_BASIC);
//enqueue script
if(isset($_GET['page']) && $_GET['page']==$this->module_id.'_log')
{
$this->enqueue_scripts($delete_url);
}
include plugin_dir_path(__FILE__).'views/settings.php';
}
/**
* History list page
*/
public function admin_settings_page($args)
{
global $wpdb;
/* delete action */
if(isset($_GET['wt_iew_delete_history']))
{
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
$history_id_arr=isset($_GET['wt_iew_history_id']) ? explode(",", $_GET['wt_iew_history_id']) : array();
$history_id_arr=Wt_Iew_Sh::sanitize_item($history_id_arr, 'absint_arr');
if(count($history_id_arr)>0)
{
self::delete_history_by_id($history_id_arr);
}
}
}
/**
* Lising page section
*/
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
$post_type_arr=self::get_disticnt_items('item_type');
$action_type_arr=self::get_disticnt_items('template_type');
$status_arr=self::get_disticnt_items('status');
$importer_post_types=apply_filters('wt_iew_importer_post_types_basic', array());
$exporter_post_types=apply_filters('wt_iew_exporter_post_types_basic', array());
$post_type_label_arr=array_merge($importer_post_types, $exporter_post_types);
/**
* Get history entries by Schedule ID
*/
$cron_id=(isset($_GET['wt_iew_cron_id']) ? absint($_GET['wt_iew_cron_id']) : 0);
$history_arr=array();
$list_by_cron=false;
if($cron_id>0)
{
$cron_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules('cron');
if(!is_null($cron_module_obj))
{
$cron_data=$cron_module_obj->get_cron_by_id($cron_id);
if($cron_data)
{
$history_id_arr=($cron_data['history_id_list']!="" ? maybe_unserialize($cron_data['history_id_list']) : array());
$history_id_arr=(is_array($history_id_arr) ? $history_id_arr : array());
$list_by_cron=true;
}else
{
$cron_id=0; //invalid cron id
}
}else
{
$cron_id=0; //cron module not enabled
}
}
/**
* Filter by form fields
*/
$filter_by=array(
'item_type'=>array(
'label'=>__('Post type'),
'values'=>$post_type_arr,
'val_labels'=>$post_type_label_arr,
'val_type'=>'%s',
'selected_val'=>'',
),
'template_type'=>array(
'label'=>__('Action type'),
'values'=>$action_type_arr,
'val_labels'=>self::$action_label_arr,
'val_type'=>'%s',
'selected_val'=>'',
),
'status'=>array(
'label'=>__('Status'),
'values'=>$status_arr,
'val_labels'=>self::$status_label_arr,
'validation_rule'=>array('type'=>'absint'),
'val_type'=>'%d',
'selected_val'=>'',
),
);
if($list_by_cron) // no need of these filters in `cron by` listing
{
unset($filter_by['item_type']);
unset($filter_by['template_type']);
}
/**
* Order by field vals
*/
$order_by=array(
'date_desc'=>array('label'=>__('Date descending'), 'sql'=>'created_at DESC'),
'date_asc'=>array('label'=>__('Date ascending'), 'sql'=>'created_at ASC'),
);
/* just applying a text validation */
$conf_arr=isset($_GET['wt_iew_history']) ? Wt_Iew_Sh::sanitize_item($_GET['wt_iew_history'], 'text_arr') : array();
$url_params_allowed=array(); //this array will only include the allowed $_GET params. This will use in pagination section
/**
* Filter by block
*/
$where_qry_val_arr=array(); //sql query WHERE clause val array
$where_qry_format_arr=array(); //sql query WHERE clause val format array
if(isset($conf_arr['filter_by'])) /* filter by GET var exists */
{
$url_params_allowed['filter_by']=array();/* for pagination purpose */
$filter_by_conf=(is_array($conf_arr['filter_by']) ? $conf_arr['filter_by'] : array());
$filter_by_validation_rule=Wt_Import_Export_For_Woo_Basic_Common_Helper::extract_validation_rules($filter_by);
foreach ($filter_by as $filter_key => $filter_val)
{
if(isset($filter_by_conf[$filter_key]) && trim($filter_by_conf[$filter_key])!="") //current filter applied
{
$where_qry_format_arr[]=$filter_key.'='.$filter_val['val_type'];
$filter_by[$filter_key]['selected_val']=Wt_Iew_Sh::sanitize_data($filter_by_conf[$filter_key], $filter_key, $filter_by_validation_rule);
$where_qry_val_arr[]=$filter_by[$filter_key]['selected_val'];
$url_params_allowed['filter_by'][$filter_key]=$filter_by[$filter_key]['selected_val']; /* for pagination purpose */
}
}
}
/**
* Order by block
*/
$default_order_by=array_keys($order_by)[0];
$order_by_val=$default_order_by;
$order_qry_val_arr=array(); //sql query ORDER clause val array
if(isset($conf_arr['order_by'])) /* order by GET var exists */
{
$order_by_val=(is_array($conf_arr['order_by']) ? $default_order_by : $conf_arr['order_by']);
}
if(isset($order_by[$order_by_val]))
{
$order_qry_val_arr[]=$order_by[$order_by_val]['sql'];
$url_params_allowed['order_by']=$order_by_val; /* for pagination purpose */
}
/**
* Pagination block
*/
$max_data=(isset($conf_arr['max_data']) ? absint($conf_arr['max_data']) : $this->max_records);
$this->max_records=($max_data>0 ? $max_data : $this->max_records);
$offset=(isset($_GET['offset']) ? absint($_GET['offset']) : 0);
$url_params_allowed['max_data']=$this->max_records;
$pagination_url_params=array('wt_iew_history'=>$url_params_allowed, 'page'=>$this->module_id);
$offset_qry_str=" LIMIT $offset, ".$this->max_records;
$no_records=false;
if($list_by_cron) /* list by cron */
{
$pagination_url_params['wt_iew_cron_id']=$cron_id; /* adding cron id to URL params */
$total_history_ids=count($history_id_arr);
if($total_history_ids>0)
{
$where_qry_format_arr[]='id IN('.implode(",", array_fill(0, $total_history_ids, "%d")).")";
$where_qry_val_arr=array_merge($where_qry_val_arr, $history_id_arr);
}else //reset all where, order by queries
{
$where_qry_format_arr=array();
$where_qry_val_arr=array();
//$order_qry_val_arr=array();
$no_records=true;
}
}
$where_qry=(count($where_qry_format_arr)>0 ? ' WHERE '.implode(" AND ", $where_qry_format_arr) : '');
$orderby_qry=(count($order_qry_val_arr)>0 ? ' ORDER BY '.implode(", ", $order_qry_val_arr) : '');
/* prepare SQL */
$num_sql="SELECT COUNT(id) AS total_records FROM $tb $where_qry";
$list_sql="SELECT * FROM $tb $where_qry $orderby_qry ".$offset_qry_str;
if(count($where_qry_format_arr)>0)
{
$num_sql=$wpdb->prepare($num_sql, $where_qry_val_arr);
$list_sql=$wpdb->prepare($list_sql, $where_qry_val_arr);
}
if($no_records) /* in list_by cron, history IDs are not available */
{
$total_records=0;
$history_list=array();
}else
{
$total_records=$wpdb->get_row($num_sql, ARRAY_A);
$total_records=($total_records && isset($total_records['total_records']) ? $total_records['total_records'] : 0);
$history_list=$wpdb->get_results($list_sql, ARRAY_A);
$history_list=($history_list ? $history_list : array());
}
$delete_url_params=$pagination_url_params;
$delete_url_params['wt_iew_delete_history']=1;
$delete_url_params['wt_iew_history_id']='_history_id_';
$delete_url_params['offset']=$offset;
$delete_url=wp_nonce_url(admin_url('admin.php?'.http_build_query($delete_url_params)), WT_IEW_PLUGIN_ID_BASIC);
//enqueue script
if(isset($_GET['page']) && $_GET['page']==$this->module_id)
{
$this->enqueue_scripts($delete_url);
}
include plugin_dir_path(__FILE__).'views/settings.php';
}
private function enqueue_scripts($delete_url)
{
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed()){
wp_enqueue_script($this->module_id, plugin_dir_url(__FILE__).'assets/js/main.js', array('jquery'), WT_U_IEW_VERSION, false);
$params=array(
'delete_url'=>$delete_url,
'msgs'=>array(
'sure'=>__('Are you sure?'),
)
);
wp_localize_script($this->module_id, 'wt_iew_history_basic_params', $params);
}
}
public static function record_failure($history_id, $msg)
{
$update_data=array(
'status'=>self::$status_arr['failed'],
'status_text'=>$msg //no need to add translation function
);
$update_data_type=array(
'%d',
'%s',
);
self::update_history_entry($history_id, $update_data, $update_data_type);
}
/**
* Delete history entry from DB and also associated files (Export files only)
* @param array|int $id history entry IDs
*/
public static function delete_history_by_id($id)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
if(is_array($id))
{
$where=" IN(".implode(",", array_fill(0, count($id), '%d')).")";
$where_data=$id;
}else
{
$where="=%d";
$where_data=array($id);
}
//first remove files associated with it. give argument as array then no need to check the result array type
$allowed_ext_arr=array('csv', 'xml'); //please update this array if new file types introduced
$list=self::get_history_entry_by_id($where_data);
if($list)
{
foreach($list as $listv)
{
if($listv['template_type']=='export') //history is for export action
{
if(Wt_Import_Export_For_Woo_Admin_Basic::module_exists('export'))
{
$ext_arr=explode('.', $listv['file_name']);
$ext=end($ext_arr);
if(in_array($ext, $allowed_ext_arr)) /* delete only allowed extensions */
{
$file_path=Wt_Import_Export_For_Woo_Basic_Export::get_file_path($listv['file_name']);
if($file_path && file_exists($file_path))
{
@unlink($file_path);
}
}
}
}elseif($listv['template_type']=='import')
{
$action_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules('import');
$log_file_name=$action_module_obj->get_log_file_name($listv['id']);
$log_file_path=$action_module_obj->get_file_path($log_file_name);
if(file_exists($log_file_path))
{
@unlink($log_file_path);
}
}
}
}
$wpdb->query(
$wpdb->prepare("DELETE FROM $tb WHERE id".$where, $where_data)
);
}
public static function update_history_entry($history_id, $update_data, $update_data_type)
{
global $wpdb;
//updating the data
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
$update_where=array(
'id'=>$history_id
);
$update_where_type=array(
'%d'
);
if($wpdb->update($tb, $update_data, $update_where, $update_data_type, $update_where_type)!==false)
{
return true;
}
return false;
}
/**
* Mathod perform actions after advanced settings was updated
*
*/
public function after_advanced_setting_update($advanced_settings)
{
/* Check auto deletion enabled */
if(isset($advanced_settings['wt_iew_enable_history_auto_delete']) && $advanced_settings['wt_iew_enable_history_auto_delete']==1)
{
$record_count=(isset($advanced_settings['wt_iew_auto_delete_history_count']) ? absint($advanced_settings['wt_iew_auto_delete_history_count']) : 0);
if($record_count>0)
{
self::auto_delete_history_entry($record_count);
}
}
}
/**
* Check and delete history entry. If auto deletion enabled
*
*/
public static function auto_delete_history_entry($record_count=0)
{
if($record_count==0) /* this condition is for, some requests will come from create section or some from advanced settings section */
{
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('enable_history_auto_delete')==1)
{
$record_count=absint(Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('auto_delete_history_count'));
}
}
if($record_count>=1)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
$data=$wpdb->get_results("SELECT * FROM $tb WHERE status=".self::$status_arr['finished']." AND id<(SELECT id FROM $tb ORDER BY id DESC LIMIT ".($record_count-1).",1)", ARRAY_A);
if($data && is_array($data))
{
$id_arr=array_column($data, 'id');
self::delete_history_by_id($id_arr);
}
}
}
/**
* create a history entry before starting export/import
* @param $file_name String export/import file name
* @param $form_data Array export/import formdata
* @param $action String export or import
* @return $history_id Int DB id if success otherwise zero
*/
public static function create_history_entry($file_name, $form_data, $to_process, $action)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
$insert_data=array(
'template_type'=>$action,
'item_type'=>$to_process, //item type Eg: product
'file_name'=>$file_name, //export/import file name
'created_at'=>time(), //craeted time
'data'=>maybe_serialize($form_data), //formadata
'status'=>self::$status_arr['pending'], //pending
'status_text'=>'Pending', //pending, No need to add translate function. we can add this on printing page
'offset'=>0, //current offset, its always 0 on start
'total'=>0, //total records, not available now
);
$insert_data_type=array(
'%s','%s','%s','%d','%s','%d','%d','%d'
);
$insert_response=$wpdb->insert($tb, $insert_data, $insert_data_type);
/* check for auto delete */
self::auto_delete_history_entry();
if($insert_response) //success
{
return $wpdb->insert_id;
}
return 0;
}
/**
* Get distinct column values from history table
* @param string $column table column name
* @return array array of distinct column values
*/
private static function get_disticnt_items($column)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
$data=$wpdb->get_results("SELECT DISTINCT $column FROM $tb ORDER BY $column ASC", ARRAY_A);
$data=is_array($data) ? $data : array();
return array_column($data, $column);
}
/**
* Taking history entry by ID
*/
public static function get_history_entry_by_id($id)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$history_tb;
if(is_array($id))
{
$where=" IN(".implode(",", array_fill(0, count($id), '%d')).")";
$where_data=$id;
}else
{
$where="=%d";
$where_data=array($id);
}
$qry=$wpdb->prepare("SELECT * FROM $tb WHERE id".$where, $where_data);
if(!is_array($id))
{
return $wpdb->get_row($qry, ARRAY_A);
}else
{
return $wpdb->get_results($qry, ARRAY_A);
}
}
/**
* Download log file via a nonce URL
*/
public function download_file()
{
if(isset($_GET['wt_iew_log_download']))
{
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC)) /* check nonce and role */
{
$file_name=(isset($_GET['file']) ? sanitize_text_field($_GET['file']) : '');
if($file_name!="")
{
$file_arr=explode(".", $file_name);
$file_ext=end($file_arr);
if($file_ext=='log') /* Only allowed files. */
{
$file_path=Wt_Import_Export_For_Woo_Basic_Log::get_file_path($file_name);
if(file_exists($file_path) && is_file($file_path))
{
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="'.$file_name.'";');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
//header('Content-Length: '.filesize($file_path));
$chunk_size=1024 * 1024;
$handle=@fopen($file_path, 'rb');
while(!feof($handle))
{
$buffer = fread($handle, $chunk_size);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
exit();
}
}
}
}
}
}
/**
*
* Generate pagination HTML
*/
public static function gen_pagination_html($total, $limit, $offset, $url, $url_params=array(), $mxnav=6)
{
if($total<=0){
return '';
}
/* taking current page */
$crpage=($offset+$limit)/$limit;
$limit=$limit<=0 ? 1 : $limit;
$ttpg=ceil($total/$limit);
if($ttpg<$crpage){
//return '';
}
//calculations
$mxnav=$ttpg<$mxnav ? $ttpg : $mxnav;
$mxnav_mid=floor($mxnav/2);
$pgstart=$mxnav_mid>=$crpage ? 1 : $crpage-$mxnav_mid;
$mxnav_mid+=$mxnav_mid>=$crpage ? ($mxnav_mid-$crpage) : 0; //adjusting other half with first half balance
$pgend=$crpage+$mxnav_mid;
if($pgend>$ttpg)
{
$pgend=$ttpg;
}
$html='<span class="wt_iew_pagination_total_info">'.$total.__(' record(s)').'</span>';
$url_params_string=http_build_query($url_params);
$url_params_string=$url_params_string!="" ? '&'.$url_params_string : '';
$url=(strpos($url, '?')!==false ? $url.'&' : $url.'?');
$href_attr=' href="'.$url.'offset={offset}'.$url_params_string.'"';
$prev_onclick='';
if($crpage>1)
{
$offset=(($crpage-2)*$limit);
$prev_onclick=str_replace('{offset}', $offset, $href_attr);
}
$html.='<a class="'.($crpage>1 ? 'wt_iew_page' : 'wt_iew_pagedisabled').'"'.$prev_onclick.'>‹</a>';
for($i=$pgstart; $i<=$pgend; $i++)
{
$page_offset='';
$onclick='';
$offset=($i*$limit)-$limit;
if($i!=$crpage)
{
$onclick=str_replace('{offset}', $offset, $href_attr);
}
$html.='<a class="'.($i==$crpage ? 'wt_iew_pageactive' : 'wt_iew_page').'" '.$onclick.'>'.$i.'</a>';
}
$next_onclick='';
if($crpage<$ttpg)
{
$offset=($crpage*$limit);
$next_onclick=str_replace('{offset}', $offset, $href_attr);
}
$html.='<a class="'.($crpage<$ttpg ? 'wt_iew_page' : 'wt_iew_pagedisabled').'"'.$next_onclick.'>›</a>';
return '<div class="wt_iew_pagination"><span>'.$html.'</div>';
}
}
}
Wt_Import_Export_For_Woo_Basic::$loaded_modules['history']=new Wt_Import_Export_For_Woo_Basic_History();
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<div class="wt_iew_history_page">
<h2 class="wp-heading-inline"><?php _e('Import/Export history');?></h2>
<div style="margin-bottom:25px;">
<?php _e('Lists the runs and the status corresponding to every import/export with options to re-run, view detailed log or delete entry.');?>
</div>
<div class="wt_iew_history_settings">
<form action="admin.php">
<input type="hidden" name="page" value="<?php echo $this->module_id;?>">
<?php
if(array_filter(array_column($filter_by, 'values')))
{
?>
<div class="wt_iew_history_settings_hd"><?php _e('Filter'); ?></div>
<div class="wt_iew_history_settings_form_group_box">
<?php
foreach ($filter_by as $filter_by_key => $filter_by_value)
{
if(count($filter_by_value['values'])>0)
{
?>
<div class="wt_iew_history_settings_form_group">
<label><?php echo $filter_by_value['label']; ?></label>
<select name="wt_iew_history[filter_by][<?php echo $filter_by_key;?>]" class="wt_iew_select">
<option value=""><?php _e('All'); ?></option>
<?php
$val_labels=$filter_by_value['val_labels'];
foreach($filter_by_value['values'] as $val)
{
?>
<option value="<?php echo $val;?>" <?php echo ($filter_by_value['selected_val']==$val ? 'selected="selected"' : '');?>><?php echo (isset($val_labels[$val]) ? $val_labels[$val] : $val);?></option>
<?php
}
?>
</select>
</div>
<?php
}
}
?>
</div>
<?php
}
?>
<div class="wt_iew_history_settings_form_group_box">
<div class="wt_iew_history_settings_form_group">
<label><?php _e('Sort by'); ?></label>
<select name="wt_iew_history[order_by]" class="wt_iew_select">
<?php
foreach ($order_by as $key => $value)
{
?>
<option value="<?php echo $key;?>" <?php echo ($order_by_val==$key ? 'selected="selected"' : '');?>><?php echo $value['label'];?></option>
<?php
}
?>
</select>
</div>
<div class="wt_iew_history_settings_form_group">
<label><?php _e('Max record/page'); ?></label>
<input type="text" name="wt_iew_history[max_data]" value="<?php echo $this->max_records;?>" class="wt_iew_text" style="width:50px;">
</div>
</div>
<div class="wt_iew_history_settings_form_group_box">
<input type="hidden" name="offset" value="0">
<?php
if($list_by_cron) /* list by cron */
{
?>
<input type="hidden" name="wt_iew_cron_id" value="<?php echo $cron_id;?>">
<?php
}
?>
<button class="button button-primary" type="submit" style="float:left;"><?php _e('Apply'); ?></button>
</div>
</form>
</div>
<div class="wt_iew_bulk_action_box">
<select class="wt_iew_bulk_action wt_iew_select">
<option value=""><?php _e('Bulk Actions'); ?></option>
<option value="delete"><?php _e('Delete'); ?></option>
</select>
<button class="button button-primary wt_iew_bulk_action_btn" type="button" style="float:left;"><?php _e('Apply'); ?></button>
</div>
<?php
echo self::gen_pagination_html($total_records, $this->max_records, $offset, 'admin.php', $pagination_url_params);
?>
<?php
if(isset($history_list) && is_array($history_list) && count($history_list)>0)
{
?>
<table class="wp-list-table widefat fixed striped history_list_tb">
<thead>
<tr>
<th width="100">
<input type="checkbox" name="" class="wt_iew_history_checkbox_main">
<?php _e("No."); ?>
</th>
<th width="50"><?php _e("Id"); ?></th>
<th><?php _e("Action type"); ?></th>
<th><?php _e("Post type"); ?></th>
<th><?php _e("Started at"); ?></th>
<th>
<?php _e("Status"); ?>
<span class="dashicons dashicons-editor-help wt-iew-tips"
data-wt-iew-tip="
<span class='wt_iew_tooltip_span'><?php echo sprintf(__('%sSuccess%s - Process completed successfully'), '<b>', '</b>');?></span><br />
<span class='wt_iew_tooltip_span'><?php echo sprintf(__('%sFailed%s - Failed process triggered due to connection/permission or similar issues(unable to establish FTP/DB connection, write permission issues etc.)'), '<b>', '</b>');?> </span><br />
<span class='wt_iew_tooltip_span'><?php echo sprintf(__('%sRunning/Incomplete%s - Process that are running currently or that may have been terminated unknowingly(e.g, closing a browser tab while in progress etc)'), '<b>', '</b>');?> </span>">
</span>
</th>
<th>
<?php _e("Actions"); ?>
<span class="dashicons dashicons-editor-help wt-iew-tips"
data-wt-iew-tip=" <span class='wt_iew_tooltip_span'><?php _e('Re-run will take the user to the respective screen depending on the corresponding action type and the user can initiate the process accordingly.');?></span>"></span>
</th>
</tr>
</thead>
<tbody>
<?php
$i=$offset;
foreach($history_list as $key =>$history_item)
{
$i++;
?>
<tr>
<th>
<input type="checkbox" value="<?php echo $history_item['id'];?>" name="history_id[]" class="wt_iew_history_checkbox_sub">
<?php echo $i;?>
</td>
<td><?php echo $history_item['id']; ?></td>
<td><?php echo ucfirst($history_item['template_type']); ?></td>
<td><?php echo ucfirst($history_item['item_type']); ?></td>
<td><?php echo date_i18n('Y-m-d h:i:s A', $history_item['created_at']); ?></td>
<td>
<?php
echo (isset(self::$status_label_arr[$history_item['status']]) ? self::$status_label_arr[$history_item['status']] : __('Unknown'));
?>
</td>
<td>
<a class="wt_iew_delete_history" data-href="<?php echo str_replace('_history_id_', $history_item['id'], $delete_url);?>"><?php _e('Delete'); ?></a>
<?php
$form_data=maybe_unserialize($history_item['data']);
$action_type=$history_item['template_type'];
if($form_data && is_array($form_data))
{
$to_process=(isset($form_data['post_type_form_data']) && isset($form_data['post_type_form_data']['item_type']) ? $form_data['post_type_form_data']['item_type'] : '');
if($to_process!="")
{
if(Wt_Import_Export_For_Woo_Admin_Basic::module_exists($action_type))
{
$action_module_id=Wt_Import_Export_For_Woo_Basic::get_module_id($action_type);
$url=admin_url('admin.php?page='.$action_module_id.'&wt_iew_rerun='.$history_item['id']);
?>
| <a href="<?php echo $url;?>" target="_blank"><?php _e("Re-Run");?></a>
<?php
}
}
}
if($action_type=='import' && Wt_Import_Export_For_Woo_Admin_Basic::module_exists($action_type))
{
$action_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules($action_type);
$log_file_name=$action_module_obj->get_log_file_name($history_item['id']);
$log_file_path=$action_module_obj->get_file_path($log_file_name);
if(file_exists($log_file_path))
{
?>
| <a class="wt_iew_view_log_btn" data-history-id="<?php echo $history_item['id'];?>"><?php _e("View log");?></a>
<?php
}
}
if($action_type=='export' && Wt_Import_Export_For_Woo_Admin_Basic::module_exists($action_type))
{
$export_download_url=wp_nonce_url(admin_url('admin.php?wt_iew_export_download=true&file='.$history_item['file_name']), WT_IEW_PLUGIN_ID_BASIC);
?>
| <a class="wt_iew_export_download_btn" target="_blank" href="<?php echo $export_download_url;?>"><?php _e('Download');?></a>
<?php
}
?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
echo self::gen_pagination_html($total_records, $this->max_records, $offset, 'admin.php', $pagination_url_params);
}else
{
?>
<h4 class="wt_iew_history_no_records"><?php _e("No records found."); ?></h4>
<?php
}
?>
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
/* delete after redirect */
if(isset($_GET['wt_iew_delete_log']))
{
?>
<script type="text/javascript">
window.location.href='<?php echo admin_url('admin.php?page='.$this->module_id.'_log'); ?>';
</script>
<?php
}
?>
<div class="wt_iew_history_page">
<h2 class="wp-heading-inline"><?php _e('Import Logs');?></h2>
<p>
<?php _e('Lists developer logs mostly required for debugging purposes. Options to view detailed logs are available along with delete and download(that can be shared with the support team in case of issues).');?>
</p>
<?php
$log_path=Wt_Import_Export_For_Woo_Basic_Log::$log_dir;
$log_files = glob($log_path.'/*'.'.log');
if(is_array($log_files) && count($log_files)>0)
{
foreach ($log_files as $key => $value) {
$date_time = str_replace('.log','',substr($value, strrpos($value, '_') + 1));
$d = DateTime::createFromFormat('Y-m-d H i s A', $date_time);
if ($d == false) {
$index = $date_time;
} else {
$index = $d->getTimestamp();
}
$indexed_log_files[$index] = $value;
}
krsort($indexed_log_files);
$log_files = $indexed_log_files;
?>
<div class="wt_iew_bulk_action_box">
<select class="wt_iew_bulk_action wt_iew_select">
<option value=""><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
</select>
<button class="button button-primary wt_iew_bulk_action_logs_btn" type="button" style="float:left;"><?php _e( 'Apply' ); ?></button>
</div>
<table class="wp-list-table widefat fixed striped history_list_tb log_list_tb">
<thead>
<tr>
<th width="100">
<input type="checkbox" name="" class="wt_iew_history_checkbox_main">
<?php _e("No."); ?>
</th>
<th class="log_file_name_col"><?php _e("File"); ?></th>
<th><?php _e("Actions"); ?></th>
</tr>
</thead>
<tbody>
<?php
$i = 0;
foreach($log_files as $log_file)
{
$i++;
$file_name=basename($log_file);
?>
<tr>
<th>
<input type="checkbox" value="<?php echo $file_name;?>" name="logfile_name[]" class="wt_iew_history_checkbox_sub">
<?php echo $i;?>
</td>
<td class="log_file_name_col"><a class="wt_iew_view_log_btn" data-log-file="<?php echo $file_name;?>"><?php echo $file_name; ?></a></td>
<td>
<a class="wt_iew_delete_log" data-href="<?php echo str_replace('_log_file_', $file_name, $delete_url);?>"><?php _e('Delete'); ?></a>
| <a class="wt_iew_view_log_btn" data-log-file="<?php echo $file_name;?>"><?php _e("View");?></a>
| <a class="wt_iew_download_log_btn" href="<?php echo str_replace('_log_file_', $file_name, $download_url);?>"><?php _e("Download");?></a>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
}else
{
?>
<h4 class="wt_iew_history_no_records"><?php _e( "No logs found." ); ?>
<?php if ( Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings( 'enable_import_log' ) == 0 ): ?>
<span> <?php _e( 'Please enable import log under' ); ?> <a target="_blank" href="<?php echo admin_url( 'admin.php?page=wt_import_export_for_woo_basic' ) ?>"><?php _e( 'settings' ); ?></a></span>
<?php endif; ?>
</h4>
<?php
}
?>
</div>
\ No newline at end of file
<?php
/**
* Log table view file
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
$summary = array(
'type' => array(
0 => array(
'count' => 0,
'description' => __('Item with same ID already exists.'),
'help_link' => 'https://www.webtoffee.com/how-to-resolve-id-conflict-during-import-in-woocommerce/',
'error_code' => 'already exists'
),
1 => array(
'count' => 0,
'description' => __('Importing item conflicts with an existing post.'),
'help_link' => 'https://www.webtoffee.com/how-to-resolve-id-conflict-during-import-in-woocommerce/',
'error_code' => 'conflicts with an existing post'
),
2 => array(
'count' => 0,
'description' => __('Invalid product type.'),
'help_link' => 'https://www.webtoffee.com/setting-up-product-import-export-plugin-for-woocommerce/',
'error_code' => 'Invalid product type'
)
)
);
if(isset($log_list) && is_array($log_list) && count($log_list)>0)
{
if($offset==0)
{
?>
<table class="wp-list-table widefat fixed striped log_view_tb" style="margin-bottom:25px;">
<thead>
<tr>
<th style="width:100px;"><?php _e("Row No."); ?></th>
<th><?php _e("Status"); ?></th>
<th><?php _e("Message"); ?></th>
<th><?php _e("Item"); ?></th>
</tr>
</thead>
<tbody class="log_view_tb_tbody">
<?php
}
foreach($log_list as $key =>$log_item)
{
if(!$log_item['status']){
if(strpos($log_item['message'], 'already exists')!==false){
$summary['type'][0]['count'] = $summary['type'][0]['count']+1;
}
if(strpos($log_item['message'], 'conflicts with an existing post')!==false){
$summary['type'][1]['count'] = $summary['type'][1]['count']+1;
}
if(strpos($log_item['message'], 'Invalid product type')!==false){
$summary['type'][2]['count'] = $summary['type'][2]['count']+1;
}
}
?>
<tr>
<td><?php echo absint($log_item['row']); ?></td>
<td><?php echo ($log_item['status'] ? __('Success') : __('Failed/Skipped') ); ?></td>
<td><?php esc_html_e($log_item['message']); ?></td>
<td>
<?php
if($show_item_details)
{
$item_data=$item_type_module_obj->get_item_by_id($log_item['post_id']);
if($item_data && isset($item_data['title']))
{
if(isset($item_data['edit_url']))
{
echo '<a href="'.$item_data['edit_url'].'" target="_blank">'.$item_data['title'].'</a>';
}else
{
echo $item_data['title'];
}
}else
{
echo $log_item['post_id'];
}
}else
{
echo $log_item['post_id'];
}
?>
</td>
</tr>
<?php
}?>
<div style="background-color: #f6f7f7;padding: 10px;">
<?php
foreach ($summary['type'] as $summary_row) {
$summary_row_count = $summary_row['count'];
$summary_row_help_link = $summary_row['help_link'];
if($summary_row_count):
?>
<p><?php echo $summary_row['description']."($summary_row_count)";?> - <?php _e('Please refer')?> <a href="<?php echo $summary_row_help_link; ?>" target="_blank"><?php _e('this article');?></a> <?php _e('for troubleshoot.');?></p>
<?php
endif;
}
?>
</div>
<?php
if($offset==0)
{
?>
</tbody>
</table>
<h4 style="margin-top:0px;">
<a class="wt_iew_history_loadmore_btn button button-primary"> <?php _e("Load more."); ?></a>
<span class="wt_iew_history_loadmore_loading" style="display:none;"><?php _e("Loading...."); ?></span>
</h4>
<?php
}
}else
{
?>
<h4 style="margin-bottom:55px;"><?php _e("No records found."); ?> </h4>
<?php
}
?>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<style type="text/css">
.wt_iew_history_page{ padding:15px; }
.history_list_tb td, .history_list_tb th{ text-align:center; }
.history_list_tb tr th:first-child{ text-align:left; }
.wt_iew_delete_history, .wt_iew_delete_log{ cursor:pointer; }
.wt_iew_history_settings{ float:left; width:100%; padding:15px; background:#fff; border:solid 1px #ccd0d4; box-sizing:border-box; margin-bottom:15px; }
.wt_iew_history_settings_hd{ float:left; width:100%; font-weight:bold; font-size:13px; }
.wt_iew_history_settings_form_group_box{ float:left; width:100%; box-sizing:border-box; padding:10px; padding-bottom:0px; height:auto; font-size:12px; }
.wt_iew_history_settings_form_group{ float:left; width:auto; margin-right:3%; min-width:200px;}
.wt_iew_history_settings_form_group label{ font-size:12px; font-weight:bold; }
.wt_iew_history_settings_form_group select, .wt_iew_history_settings_form_group input[type="text"]{ height:20px; }
.wt_iew_history_no_records{float:left; width:100%; margin-bottom:55px; margin-top:20px; text-align:center; background:#fff; padding:15px 0px; border:solid 1px #ccd0d4;}
.wt_iew_bulk_action_box{ float:left; width:auto; margin:10px 0px; }
select.wt_iew_bulk_action{ float:left; width:auto; height:20px; margin-right:10px; }
.wt_iew_view_log_btn{ cursor:pointer; }
.wt_iew_view_log{ }
.wt_iew_log_loader{ width:100%; height:200px; text-align:center; line-height:150px; font-size:14px; font-style:italic; }
.wt_iew_log_container{ padding:25px; }
.wt_iew_raw_log{ text-align:left; font-size:14px; }
.log_view_tb th, .log_view_tb td{ text-align:center; }
.log_list_tb .log_file_name_col{ text-align:left; }
</style>
<?php
if(isset($_GET['page']) && $_GET['page']==$this->module_id.'_log')
{
$page =$this->module_id.'_log';
$popup_hd_label = 'Log';
}else
{
$page =$this->module_id;
$popup_hd_label = 'History';
}
?>
<div class="wt_iew_view_log wt_iew_popup">
<div class="wt_iew_popup_hd">
<span style="line-height:40px;" class="dashicons dashicons-media-text"></span>
<span class="wt_iew_popup_hd_label"><?php _e($popup_hd_label.' Details');?></span>
<div class="wt_iew_popup_close">X</div>
</div>
<div class="wt_iew_log_container">
</div>
</div>
<?php
if($page==$this->module_id.'_log')
{
include plugin_dir_path(__FILE__)."/_log_list.php";
}else
{
include plugin_dir_path(__FILE__)."/_history_list.php";
}
?>
\ No newline at end of file
var wt_iew_basic_import=(function( $ ) {
//'use strict';
var wt_iew_basic_import=
{
ajax_data:{},
selected_template:0,
selected_template_name:'',
to_import:'user',
to_import_title:'',
import_method:'',
current_step:'',
loaded_status_arr:{'loaded':1, 'loading':2, 'not_loaded':0},
page_overlay:false,
step_keys:[],
form_data:{},
is_valid_file:false,
temp_import_file:'',
file_from:'',
blocked_action:'', /* the current action will be blocked if file validation is not done. After the successful validation the blocked action will be executed */
local_import_file:'',
url_import_file:'',
on_rerun:false,
import_finished:false,
rerun_id:0,
import_delimiter:',',
import_start_time:0,
Set:function()
{
this.step_keys=Object.keys(wt_iew_import_basic_params.steps);
if(this.on_rerun)
{
this.rerun();
}else
{
var first_step=this.step_keys[0];
this.load_steps([first_step], first_step);
this.show_step_page(first_step, false); /* just to show a loading */
}
},
rerun:function()
{
var last_step=this.step_keys[this.step_keys.length-1];
this.load_steps(this.step_keys, last_step);
this.show_step_page(last_step, false); /* just to show a loading */
},
filter_loaded_steps:function(steps)
{
var filtered_steps=new Array();
$.each(steps, function(step_ind, step){
if(wt_iew_basic_import.get_page_dom_object(step).attr('data-loaded')!=wt_iew_basic_import.loaded_status_arr['loaded'])
{
filtered_steps.push(step);
}
});
return filtered_steps;
},
load_steps:function(steps, step_to_show)
{
steps=this.filter_loaded_steps(steps);
if(steps.length==0){ return; }
this.prepare_ajax_data('get_steps', 'json');
this.ajax_data.steps=steps;
if(this.on_rerun)
{
this.ajax_data.rerun_id=this.rerun_id;
}
this.set_step_loading_status(steps, 'loading');
this.set_ajax_page_loader(steps, 'loading');
$.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
if(data!=null && data.status==1)
{
wt_iew_basic_import.set_step_page(data);
wt_iew_basic_import.set_step_loading_status(steps, 'loaded');
if(step_to_show)
{
wt_iew_basic_import.show_step_page(step_to_show, true);
}
if(wt_iew_basic_import.on_rerun)
{
wt_iew_basic_import.load_meta_mapping_fields();
wt_iew_basic_import.set_validate_file_info(); /* this will prevent revalidation of files */
wt_iew_basic_import.on_rerun=false;
wt_iew_basic_import.rerun_id=0;
}
}else
{
wt_iew_basic_import.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_import.set_ajax_page_loader(steps, 'error');
}
wt_iew_basic_import.remove_ajax_page_loader();
},
error:function()
{
wt_iew_basic_import.set_step_loading_status(steps, 'not_loaded');
wt_iew_basic_import.remove_ajax_page_loader();
wt_iew_basic_import.set_ajax_page_loader(steps, 'error');
}
});
},
load_meta_mapping_fields:function()
{
this.prepare_ajax_data('get_meta_mapping_fields', 'json');
this.ajax_data['file_head_meta']=JSON.stringify(wt_iew_file_head_remaining_meta);
this.ajax_data['rerun_id']=this.rerun_id;
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_import_step_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
$.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
if(data.status==1)
{
$.each(data.meta_html, function(meta_id, meta_content){
$('.meta_mapping_box_con[data-key="'+meta_id+'"]').html(meta_content).attr('data-loaded', 1);
});
wt_iew_basic_import.enable_sortable();
wt_iew_basic_import.reg_mapping_field_bulk_action();
wt_iew_popover.Set();
$('.wt_iew_step_head_post_type_name').html(wt_iew_basic_import.to_import_title);
}else
{
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_import_step_loader">'+wt_iew_basic_params.msgs.error+'</div>');
}
},
error:function()
{
$('.meta_mapping_box_con[data-loaded="0"]').html('<div class="wt_iew_import_step_loader">'+wt_iew_basic_params.msgs.loading+'</div>');
}
});
},
console_formdata:function()
{
console.log(this.form_data);
},
refresh_step:function(no_overlay)
{
/* if popover is opened */
wt_iew_popover.closePop();
if(!no_overlay){
this.page_overlay=true;
}
this.reset_step_loaded_state([this.current_step]);
this.load_steps([this.current_step], this.current_step);
},
get_need_to_reload_steps:function()
{
var rest_steps=this.step_keys.slice(0);
/* remove first and second steps */
rest_steps.shift();
rest_steps.shift();
return rest_steps;
},
load_pending_steps:function(no_overlay, show_step)
{
if(!no_overlay){
this.page_overlay=true;
}
if(!show_step)
{
show_step=this.current_step;
}
this.load_steps(this.get_need_to_reload_steps(), show_step);
},
get_page_dom_object:function(step)
{
return $('.wt_iew_import_step_'+step);
},
remove_ajax_page_loader:function()
{
this.hide_import_info_box();
$('.wt_iew_overlayed_loader').hide();
$('.spinner').css({'visibility':'hidden'});
this.page_overlay=false;
},
set_ajax_page_loader:function(steps, msg_type)
{
if(this.page_overlay)
{
var h=parseInt($('.wt_iew_import_step_main').outerHeight());
var w=parseInt($('.wt_iew_import_step_main').outerWidth());
$('.wt_iew_overlayed_loader').show().css({'height':h,'width':w,'margin-top':'30px','margin-left':'30px'});
$('.spinner').css({'visibility':'visible'});
}else
{
var msg='';
if(msg_type=='loading')
{
msg=wt_iew_basic_params.msgs.loading;
}else if(msg_type=='error')
{
msg=wt_iew_basic_params.msgs.error;
}
$.each(steps, function(step_ind, step){
wt_iew_basic_import.get_page_dom_object(step).html('<div class="wt_iew_import_step_loader">'+msg+'</div>');
});
}
},
hide_import_info_box:function()
{
$('.wt_iew_loader_info_box').hide();
},
refresh_import_page:function()
{
wt_iew_basic_import.import_finished = true;
location.reload();
},
set_import_progress_info:function(msg)
{
$('.wt_iew_loader_info_box').show().html(msg);
},
nonstep_actions:function(action)
{
this.prepare_ajax_data(action, 'json');
if(action=='save_template' || action=='save_template_as' || action=='update_template')
{
$('.wt_iew_template_name_wrn').hide();
var pop_elm=$('.wt_iew_template_name');
var popup_label=pop_elm.attr('data-save-label');
if(action=='save_template_as')
{
var popup_label=pop_elm.attr('data-saveas-label');
}
pop_elm.find('.wt_iew_popup_hd_label, .wt_iew_template_create_btn').text(popup_label);
wt_iew_popup.showPopup(pop_elm);
$('[name="wt_iew_template_name_field"]').val(this.selected_template_name).focus();
$('.wt_iew_template_create_btn').unbind('click').click(function(){
var name=$.trim($('.wt_iew_template_name_field').val());
if(name=='')
{
$('.wt_iew_template_name_wrn').show();
$('.wt_iew_template_name_field').focus();
}else
{
$('.wt_iew_template_name_wrn').hide();
wt_iew_popup.hidePopup();
wt_iew_basic_import.prepare_form_data();
wt_iew_basic_import.ajax_data['template_name']=name;
wt_iew_basic_import.ajax_data['form_data']=wt_iew_basic_import.form_data;
wt_iew_basic_import.do_nonstep_action(action);
}
});
}else if(action=='validate_file' || action=='download')
{
this.prepare_form_data();
this.ajax_data['form_data']=this.form_data;
this.do_nonstep_action(action);
}else
{
/* custom action section for other modules */
this.prepare_form_data();
this.ajax_data['form_data']=this.form_data;
wt_iew_custom_action_basic(this.ajax_data, action, this.selected_template);
}
},
do_nonstep_action:function(action)
{
this.page_overlay=true;
this.set_ajax_page_loader();
if(action=='download')
{
wt_iew_basic_import.set_import_progress_info(wt_iew_import_basic_params.msgs.processing_file);
}
wt_iew_basic_import.import_ajax_xhr = $.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:this.ajax_data,
dataType:'json',
success:function(data)
{
wt_iew_basic_import.remove_ajax_page_loader();
if(wt_iew_basic_import.is_object(data) && data.hasOwnProperty('status'))
{
if(data.status==1)
{
if(action=='save_template' || action=='save_template_as' || action=='update_template')
{
wt_iew_basic_import.selected_template=data.id;
wt_iew_basic_import.selected_template_name=data.name;
wt_iew_notify_msg.success(data.msg);
//wt_iew_notify_msg.success(wt_iew_basic_params.msgs.success);
}else if(action=='import')
{
if(data.finished==1)
{
wt_iew_basic_import.temp_import_file='';
let [firstKey] = Object.keys(data.log_data);
if(data.log_data[firstKey].post_link){
wt_iew_basic_import.show_import_popup();
$('.wt_iew_import_progress_wrap').addClass('open');
var newk = 0;
$.each(data.log_data, function (j) {
var status_icon = (data.log_data[j].status == true ) ? 'yes-alt' : 'dismiss';
var item_name = (data.log_data[j].post_link.edit_url) ? '<a href="'+data.log_data[j].post_link.edit_url+'" target="_blank">'+data.log_data[j].post_link.title+'</a>' : data.log_data[j].post_link.title;
$('#wt_iew_import_progress tbody').append( '<tr id="row-' + data.log_data[j].row + '" class="' + data.log_data[j].status + '"><td style="width:15%"><span class="result" title="' + data.log_data[j].row + '">' + data.log_data[j].row + '</span></td><td style="width:20%" class="row">' + item_name + '</td><td style="width:50%">' + data.log_data[j].message + '</td><td style="width:20%" class="reason"><span class="dashicons dashicons-'+status_icon+'"></span></td></tr>' );
newk = j;
});
//$('.wt-iew-importer-progress').val(data.total_percent);
var elm = document.getElementsByClassName('progressab')[0];
elm.style.width = 100+"%";
document.getElementById('row-' + ( newk )).scrollIntoView(false);
$('.progressa').hide();
$('#wt-iew-import-results-total-count').html((data.total_success + data.total_failed));
$('#wt-iew-import-results-imported-count').html(data.total_success);
$('#wt-iew-import-results-failed-count').html(data.total_failed);
$('.wt-iew-import-completed').show();
var time_taken = new Date().getTime() - wt_iew_basic_import.import_start_time;
time_taken = (time_taken/1000); // convert to seconds
$('#wt-iew-import-time-taken').html(wt_iew_basic_import.toHHMMSS(time_taken));
$('.wt-iew-import-time').show();
$('.wt_iew_view_log_btn').attr('data-log-file', data.log_file);
$('.wt_iew_view_log_btn').show();
$('.wt_iew_view_imported_items').attr('href', wt_iew_import_basic_params.addons[wt_iew_basic_import.to_import].page_link);
$('.wt_iew_view_imported_items').text(wt_iew_import_basic_params.addons[wt_iew_basic_import.to_import].text);
$('.wt_iew_view_imported_items').show();
$('.wt_iew_popup_close_btn').show();
$('.wt_iew_popup_cancel_btn').hide();
}else{
wt_iew_notify_msg.success(wt_iew_basic_params.msgs.success, false);
wt_iew_basic_import.set_import_progress_info(data.msg);
}
wt_iew_basic_import.import_finished = true;
}
else
{
let [firstKey] = Object.keys(data.log_data);
if(data.log_data[firstKey].post_link){
wt_iew_basic_import.show_import_popup();
$('.wt_iew_import_progress_wrap').addClass('open');
var newk = 0;
$.each(data.log_data, function (j) {
var status_icon = (data.log_data[j].status == true ) ? 'yes-alt' : 'dismiss';
var item_name = (data.log_data[j].post_link.edit_url) ? '<a href="'+data.log_data[j].post_link.edit_url+'" target="_blank">'+data.log_data[j].post_link.title+'</a>' : data.log_data[j].post_link.title;
$('#wt_iew_import_progress tbody').append( '<tr id="row-' + data.log_data[j].row + '" class="' + data.log_data[j].status + '"><td style="width:15%"><span class="result" title="' + data.log_data[j].row + '">' + data.log_data[j].row + '</span></td><td style="width:20%" class="row">' + item_name + '</td><td style="width:50%">' + data.log_data[j].message + '</td><td style="width:20%" class="reason"><span class="dashicons dashicons-'+status_icon+'"></span></td></tr>' );
newk = j;
});
var progressval = data.total_percent;
var elm = document.getElementsByClassName('progressab')[0];
elm.style.width = progressval+"%";
elm.innerText = progressval+"%";
elm.style.backgroundColor = '#5FBA89';
//$('.wt-iew-importer-progress').val(data.total_percent);
document.getElementById('row-' + ( newk )).scrollIntoView({block: 'end', behavior: 'smooth'});
}else{
wt_iew_basic_import.set_import_progress_info(data.msg);
}
wt_iew_basic_import.ajax_data['offset']=data.new_offset;
wt_iew_basic_import.ajax_data['import_id']=data.import_id;
wt_iew_basic_import.ajax_data['total_records']=data.total_records;
wt_iew_basic_import.ajax_data['offset_count']=data.offset_count;
wt_iew_basic_import.ajax_data['total_success']=data.total_success;
wt_iew_basic_import.ajax_data['total_failed']=data.total_failed;
wt_iew_basic_import.do_nonstep_action(action);
}
}else if(action=='download')
{
wt_iew_basic_import.set_import_progress_info(data.msg);
wt_iew_basic_import.ajax_data['import_id']=data.import_id;
wt_iew_basic_import.ajax_data['total_records']=data.total_records;
if(data.finished==3)/* finished file processing */
{
wt_iew_basic_import.import_start_time = new Date().getTime();
$("#wt_iew_import_progress_tbody").empty();
$('.progressa').show();
$('.wt-iew-import-completed').hide();
$('.wt-iew-import-time').hide();
$('.wt_iew_popup_close_btn').hide();
$('.wt_iew_view_imported_items').hide();
$('.wt_iew_view_log_btn').hide();
$('.wt_iew_popup_cancel_btn').show();
wt_iew_basic_import.ajax_data['offset']=0;
wt_iew_basic_import.ajax_data['offset_count']=0;
wt_iew_basic_import.ajax_data['import_action']='import';
wt_iew_basic_import.ajax_data['temp_import_file']=data.temp_import_file;
wt_iew_basic_import.temp_import_file=data.temp_import_file;
wt_iew_basic_import.do_nonstep_action('import');
}else
{
wt_iew_basic_import.ajax_data['offset']=data.new_offset;
wt_iew_basic_import.ajax_data['import_action']='download';
wt_iew_basic_import.do_nonstep_action('download');
}
}
else if(action=='validate_file')
{
wt_iew_basic_import.is_valid_file=true;
/* set meta step status to not loaded */
wt_iew_basic_import.reset_meta_step_loaded_state();
wt_iew_basic_import.temp_import_file=data.file_name;
wt_iew_basic_import.set_validate_file_info();
if(wt_iew_basic_import.blocked_action!='') /* pending action exists */
{
if(wt_iew_basic_import.is_step(wt_iew_basic_import.blocked_action))
{
/* load all pending steps, and show the next step (Blocked action) */
wt_iew_basic_import.load_pending_steps(false, wt_iew_basic_import.blocked_action);
}else /* may be import(download) */
{
wt_iew_basic_import.nonstep_actions(wt_iew_basic_import.blocked_action);
}
/* clear the blocked action */
wt_iew_basic_import.blocked_action='';
}
}else
{
}
}else
{
if(data.msg!="")
{
wt_iew_notify_msg.error(data.msg);
}else
{
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
}
}else
{
wt_iew_basic_import.temp_import_file='';
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
},
error:function()
{
wt_iew_basic_import.temp_import_file='';
wt_iew_basic_import.remove_ajax_page_loader();
if(!wt_iew_basic_import.import_finished){
jQuery('.wt-something-went-wrong').show();
}
}
});
},
show_import_popup:function()
{
var pop_elm=$('.wt_iew_import_progress_wrap');
var ww=$(window).width();
pop_w=(ww<1300 ? ww : 1300)-200;
pop_w=(pop_w<200 ? 200 : pop_w);
pop_elm.width(pop_w);
wh=$(window).height();
pop_h=(wh>=400 ? (wh-200) : wh);
$('.wt_iew_import_progress').css({'max-height':pop_h+'px','overflow':'auto'});
wt_iew_popup.showimportPopup(pop_elm);
pop_elm.css({'display':'flex'});
},
toHHMMSS:function(sec_taken){
var sec_num = parseInt(sec_taken, 10); // don't forget the second param
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
if(seconds === 0){
seconds = 1;
}
if (hours < 10) {hours = "0"+hours;}
if (minutes < 10) {minutes = "0"+minutes;}
if (seconds < 10) {seconds = "0"+seconds;}
return hours + ':' + minutes + ':' + seconds;
},
reg_button_actions:function()
{
$('.wt_iew_import_action_btn').unbind('click').click(function(e){
e.preventDefault();
wt_iew_basic_import.remove_ajax_page_loader(); /* remove any loader that are open */
var action=$(this).attr('data-action');
var action_type=$(this).attr('data-action-type');
var is_previous_step=wt_iew_basic_import.is_previous_step(action);
if(!wt_iew_importer_validate_basic(action, action_type, is_previous_step))
{
return false;
}
/* validation section */
if(!wt_iew_basic_import.form_validation(action))
{
return false;
}
/* if popover is opened */
wt_iew_popover.closePop();
/* this method will check current step is import method step and file is validated */
if(!wt_iew_basic_import.validate_file(action, action_type))
{
return false;
}
if(action_type=='step')
{
wt_iew_basic_import.change_step(action);
}else
{
wt_iew_basic_import.nonstep_actions(action);
}
});
$('.wt_iew_popup_cancel_btn').unbind('click').click(function(e){
if (confirm("Are you sure to stop the import?") == true) {
var temp_err_message = wt_iew_basic_params.msgs.error;
wt_iew_basic_params.msgs.error = 'Import cancelled';
wt_iew_basic_import.import_finished = true;
wt_iew_basic_import.import_ajax_xhr.abort();
wt_iew_basic_params.msgs.error = temp_err_message;
var progressval = 1;
var elm = document.getElementsByClassName('progressab')[0];
elm.style.width = progressval+"%";
elm.innerText = progressval+"%";
jQuery('.wt_iew_overlay, .wt_iew_popup').hide();
}
});
},
get_file_from:function()
{
if(jQuery('select[name="wt_iew_file_from"]').length>0) /* select box */
{
var file_from=jQuery('[name="wt_iew_file_from"]').val();
}else
{
var file_from=jQuery('[name="wt_iew_file_from"]:checked').val();
}
return file_from;
},
set_validate_file_info:function()
{
var file_from=this.get_file_from();
if(file_from=='local')
{
this.local_import_file=$('[name="wt_iew_local_file"]').val();
}else if(file_from=='url')
{
this.url_import_file=$('[name="wt_iew_url_file"]').val();
}else
{
wt_iew_set_validate_file_info(file_from);
}
},
validate_file:function(action, action_type)
{
if(this.current_step=='method_import')
{
/* check any revalidation needed for input file */
var file_from=this.get_file_from();
if(file_from=='local')
{
if(this.local_import_file!=$('[name="wt_iew_local_file"]').val())
{
this.is_valid_file=false;
}else
{
this.is_valid_file=true;
}
}else if(file_from=='url')
{
if(this.url_import_file!=$('[name="wt_iew_url_file"]').val())
{
this.is_valid_file=false;
}else
{
this.is_valid_file=true;
}
}else
{
/* revalidation check of other remote adapters will done on form validation hook */
}
}
if(this.current_step=='method_import') // && !this.is_valid_file) /* method import page, then check file validation is done. */
{
if(action_type=='step' && this.is_previous_step(action)) /* step action and previous step */
{
return true;
}
/* store the current action to a variable. After successful validation of the file the stopped action will resumed */
this.blocked_action=action;
this.set_import_progress_info(wt_iew_import_basic_params.msgs.validating_file);
this.nonstep_actions('validate_file'); /* download/upload the file and validate it. */
return false;
}else
{
return true;
}
},
form_validation:function(step_to_go)
{
if(this.current_step=='post_type')
{
if(this.to_import=='')
{
$('.wt_iew_post_type_wrn').show();
return false;
}
}else if(this.current_step=='method_import') /* method import page */
{
if(this.import_method=='template' && this.selected_template==0 && !this.is_previous_step(step_to_go))
{
wt_iew_notify_msg.error(wt_iew_import_basic_params.msgs.select_an_import_template);
return false;
}
if((this.import_method=='new' || this.import_method=='quick') && !this.is_previous_step(step_to_go))
{
if(this.file_from=='')
{
wt_iew_notify_msg.error(wt_iew_import_basic_params.msgs.choose_import_from);
return false;
}else
{
if(this.file_from=='local' && $.trim($('[name="wt_iew_local_file"]').val())=='')
{
wt_iew_notify_msg.error(wt_iew_import_basic_params.msgs.choose_a_file);
return false;
}
else if(this.file_from=='url' && $.trim($('[name="wt_iew_url_file"]').val())=='')
{
wt_iew_notify_msg.error(wt_iew_import_basic_params.msgs.choose_a_file);
return false;
}
}
}
}else if(this.current_step=='advanced')
{
}
return true;
},
change_step:function(step_to_go)
{
/* setting fromdata */
this.prepare_form_data();
/* step changing section */
this.show_step_page(step_to_go, true);
},
reset_form_data:function()
{
this.form_data={};
this.selected_template=0;
this.selected_template_name='';
this.import_method='';
this.is_valid_file=false;
this.local_import_file='';
this.url_import_file='';
wt_iew_importer_reset_form_data_basic();
/* reset loaded state */
this.reset_step_loaded_state(this.get_need_to_reload_steps());
},
reset_step_loaded_state:function(steps)
{
this.set_step_loading_status(steps, 'not_loaded');
},
reset_meta_step_loaded_state:function()
{
var rest_steps=this.get_need_to_reload_steps();
var meta_step=rest_steps.shift();
this.reset_step_loaded_state([meta_step]);
},
prepare_form_data:function()
{
if(this.current_step=='post_type')
{
this.form_data['post_type_form_data']=JSON.stringify({'item_type':wt_iew_basic_import.to_import});
}
else if(this.current_step=='mapping')
{
/**
* Default mapping fields
*/
var mapping_form_data={};
var mapping_fields={};
var mapping_selected_fields={}; /* this value is only for backend processing */
$('.wt-iew-importer-default-mapping-tb tbody tr').each(function(){
var columns_key=$(this).find('.columns_key').val();
var columns_val=$(this).find('.columns_val').val();
var enabled=($(this).find('.columns_key').is(':checked') ? 1 : 0);
var type=$(this).find('.columns_val').attr('data-type');
mapping_fields[columns_key]=[columns_val, enabled, type];
if(enabled==1)
{
mapping_selected_fields[columns_key]=columns_val;
}
});
mapping_form_data={'mapping_fields':mapping_fields, 'mapping_selected_fields':mapping_selected_fields};
this.form_data['mapping_form_data']=JSON.stringify(mapping_form_data);
/**
* meta mapping fields
*/
var meta_step_form_data={};
var mapping_fields={};
var mapping_selected_fields={}; /* this value is only for backend processing */
$('.wt-iew-importer-meta-mapping-tb').each(function(){
var mapping_key=$(this).attr('data-field-type');
mapping_fields[mapping_key]={};
mapping_selected_fields[mapping_key]={};
$(this).find('tbody tr').each(function(){
if($(this).find('.columns_key').length>0 && $(this).find('.columns_val').length>0)
{
var columns_key=$(this).find('.columns_key').val();
var columns_val=$(this).find('.columns_val').val();
var enabled=($(this).find('.columns_key').is(':checked') ? 1 : 0);
var type=$(this).find('.columns_val').attr('data-type');
mapping_fields[mapping_key][columns_key]=[columns_val, enabled, type];
if(enabled==1)
{
mapping_selected_fields[mapping_key][columns_key]=columns_val;
}
}
});
});
meta_step_form_data={'mapping_fields':mapping_fields, 'mapping_selected_fields':mapping_selected_fields};
this.form_data['meta_step_form_data']=JSON.stringify(meta_step_form_data);
}
else
{
var current_form_data={};
if(this.current_step=='method_import')
{
current_form_data={'method_import' : wt_iew_basic_import.import_method, 'selected_template':this.selected_template};
}
if($('.wt_iew_import_'+this.current_step+'_form').length>0) /* may be user hit the back button */
{
var form_data=$('.wt_iew_import_'+this.current_step+'_form').serializeArray();
$.each(form_data, function(){
if(current_form_data[this.name])
{
if(!current_form_data[this.name].push)
{
current_form_data[this.name] = [current_form_data[this.name]];
}
current_form_data[this.name].push(this.value || '');
}else
{
current_form_data[this.name] = this.value || '';
}
});
this.form_data[this.current_step+'_form_data']=JSON.stringify(current_form_data);
}
}
/* we are resetting formdata on second step. If user not going to first step then post type formdata will be empty. */
if(this.current_step!='post_type')
{
this.form_data['post_type_form_data']=JSON.stringify({'item_type':wt_iew_basic_import.to_import});
}
},
is_multi_select:function(name)
{
var elm=$('[name="'+name+'"]');
if(elm.prop("tagName").toLowerCase()=='select' && this.has_attr(elm,'multiple'))
{
return true;
}else
{
return false;
}
},
has_attr:function(elm,attr_name)
{
var attr = elm.attr(attr_name);
if(typeof attr!==typeof undefined && attr!==false)
{
return true;
}else
{
return false;
}
},
is_step:function(step_key)
{
return wt_iew_import_basic_params.steps.hasOwnProperty(step_key) ? true : false;
},
is_previous_step:function(step_key)
{
if(this.is_step(step_key))
{
if(this.step_keys.indexOf(step_key)<this.step_keys.indexOf(this.current_step))
{
return true;
}
}
return false;
},
is_step_loaded:function(step)
{
if(this.get_page_dom_object(step).length==0){ return true; } /* block infinite loop, if element is not available */
return (this.get_page_dom_object(step).attr('data-loaded')==this.loaded_status_arr['loaded']);
},
set_step_loading_status:function(steps, status)
{
$.each(steps, function(step_ind, step){
wt_iew_basic_import.get_page_dom_object(step).attr('data-loaded', wt_iew_basic_import.loaded_status_arr[status]);
});
},
show_step_page:function(step, force_check_loaded)
{
$('.wt_iew_import_step').hide();
this.get_page_dom_object(step).show();
this.current_step=step;
if(force_check_loaded)
{
if(this.is_step_loaded(step))
{
this.current_step_actions();
}else
{
this.refresh_step(true);
}
}else
{
this.current_step_actions();
}
wt_iew_form_toggler.runToggler();
},
current_step_actions:function() /* current page actions after page is visible */
{
if(this.current_step=='method_import')
{
wt_iew_file_attacher.Set();
wt_iew_form_toggler.runToggler();
if(this.import_method == 'template'){
if( this.selected_template == 0){
$('.wt-iew-import-method-options-template').not('.wt-iew-import-template-sele-tr').hide();
}else{
$('.wt-iew-import-method-options-template').show();
}
}
}
else if(this.current_step=='advanced')
{
wt_iew_form_toggler.runToggler();
wt_field_group.Set();
}
else if(this.current_step=='mapping')
{
wt_iew_popover.Set();
if($('.meta_mapping_box_con').length>0)
{
if($('.meta_mapping_box_con[data-loaded="0"]').length>0)
{
this.load_meta_mapping_fields();
}
}
}
},
show_post_type_name:function()
{
if(this.to_import!="" && this.to_import_title=='')
{
$('[name="wt_iew_import_post_type"]').val(this.to_import);
this.to_import_title=$('[name="wt_iew_import_post_type"] option:selected').text();
}
$('.wt_iew_step_head_post_type_name').html(this.to_import_title);
$('#sample-csv-file').attr("href", wt_iew_basic_params.pro_plugins[this.to_import]['sample_csv_url']);
if(this.to_import_title.includes('User'))
$('#user-required-field-message').show();
$('.wt-import-export-upsell-small-wrapper').hide();
$('.wt-ier-advt-'+this.to_import).show();
$('.wt-ier-product-features').hide();
$('.wt-hide-features').html(wt_iew_basic_params.msgs.show_features);
$('.wt-you-may-like').css('margin-top', '-200px');
$('.wt_iew_free_addon').hide();
$('.wt_iew_import_action_btn').prop('disabled', false);
if(!wt_iew_basic_params.pro_plugins[this.to_import]['is_active']){
$('.wt_iew_type_'+this.to_import).show();
$('.wt_iew_import_action_btn').prop('disabled', true);
}
},
page_actions:function(step)
{
if(step=='post_type') /* post type page */
{
$('[name="wt_iew_import_post_type"]').unbind('change').change(function(){
if (!wt_iew_basic_params.pro_plugins[$(this).val()]['is_active']) {
$('.wt_iew_import_action_btn').prop('disabled', true);
$('.wt_iew_type_' + this.to_import).show();
}
wt_iew_basic_import.to_import=$(this).val();
wt_iew_basic_import.to_import_title='';
wt_iew_basic_import.reset_form_data();
$('.wt_iew_post_type_name').html('');
if(wt_iew_basic_import.to_import=='')
{
$('.wt_iew_post_type_wrn').show();
}else
{
$('.wt_iew_post_type_wrn').hide();
var post_type_name=$('[name="wt_iew_import_post_type"] option:selected').text();
/* $('.wt_iew_post_type_name').html(': '+post_type_name); */
wt_iew_basic_import.to_import_title=post_type_name;
/* load second step */
wt_iew_basic_import.set_step_loading_status([wt_iew_basic_import.step_keys[1]], 'not_loaded'); /* resetting status for force refresh */
wt_iew_basic_import.load_steps([wt_iew_basic_import.step_keys[1]]);
}
});
}
else if(step=='method_import') /* method import page */
{
this.import_method=$('[name="wt_iew_import_method_import"]:checked').val();
this.toggle_import_method_options();
$('[name="wt_iew_import_method_import"]').unbind('click').click(function(){
var vl=$(this).val();
if(wt_iew_basic_import.import_method==vl)
{
return false;
}
wt_iew_basic_import.reset_form_data();
wt_iew_basic_import.import_method=vl;
wt_iew_basic_import.refresh_step();
});
$('.wt-iew-import-template-sele').unbind('change').change(function(){
wt_iew_basic_import.selected_template=$(this).val();
wt_iew_basic_import.is_valid_file=false;
if(wt_iew_basic_import.selected_template==0)
{
wt_iew_notify_msg.error(wt_iew_import_basic_params.msgs.select_an_import_template);
}else
{
/* reset step loaded sataus */
wt_iew_basic_import.reset_step_loaded_state(wt_iew_basic_import.get_need_to_reload_steps());
wt_iew_basic_import.selected_template_name=$.trim($('.wt-iew-import-template-sele option:selected').text());
wt_iew_basic_import.refresh_step();
}
});
/* callback for external adapters */
if($('select[name="wt_iew_file_from"]').length>0) /* multiple adapter exists so select box */
{
this.file_from=$('[name="wt_iew_file_from"]').val();
$('[name="wt_iew_file_from"]').unbind('change').on('change',function(){
wt_iew_basic_import.file_from=$(this).val();
wt_iew_basic_import.is_valid_file=false;
wt_iew_set_file_from_fields(wt_iew_basic_import.file_from);
});
}else /* radio button */
{
this.file_from=$('[name="wt_iew_file_from"]:checked').val();
$('[name="wt_iew_file_from"]').on('click',function(){
wt_iew_basic_import.file_from=$('[name="wt_iew_file_from"]:checked').val();
wt_iew_basic_import.is_valid_file=false;
wt_iew_set_file_from_fields(wt_iew_basic_import.file_from);
});
}
wt_iew_set_file_from_fields(wt_iew_basic_import.file_from);
/* CSV delimiter form toggler. Custom and preset delimiter */
wt_iew_custom_and_preset.delimiter_toggler();
/* Input date format form toggler. Custom and preset date format */
wt_iew_custom_and_preset.date_format_toggler();
wt_iew_dropzone.init('wt_iew_local_file_dropzone');
/* Auto populate template file. */
wt_iew_dropzone.auto_populate();
wt_iew_basic_import.warn_on_refresh();
}
else if(step=='mapping') /* mapping page */
{
this.enable_sortable();
this.mapping_box_accordian();
this.reg_mapping_field_bulk_action();
wt_iew_popover.Set();
jQuery(".wt-iew-tips").tipTip({'attribute': 'data-wt-iew-tip', 'delay': 0, 'edgeOffset':8});
jQuery(document).keyup(function(e) {
if (e.key === "Escape") { // Escape key maps to keycode 27
wt_iew_popover.closePop();
}
});
wt_iew_basic_import.warn_on_refresh();
}
else if(step=='advanced')
{
wt_iew_basic_import.warn_on_refresh();
}
/* common events */
if($('.wt_iew_datepicker').length>0)
{
$('.wt_iew_datepicker').datepicker();
}
wt_field_group.Set();
wt_iew_form_toggler.Set();
wt_iew_conditional_help_text.Set(this.get_page_dom_object(step));
},
enable_sortable:function()
{
$('.meta_mapping_box_con[data-sortable="0"]').each(function(){
var tb=$(this).find(".wt-iew-mapping-tb tbody");
if(tb.length>0)
{
tb.sortable({
handle: ".wt_iew_sort_handle",
placeholder: "wt-iew-sortable-placeholder",
forcePlaceholderSize: true,
revert:true
});
$(this).attr('data-sortable', 1);
}
});
},
toggle_import_method_options:function()
{
$('.wt-iew-import-method-options').hide();
$('.wt-iew-import-method-options-'+this.import_method).show();
},
mapping_box_accordian:function()
{
$('.meta_mapping_box_hd').unbind('click').click(function()
{
/* if popover is opened */
wt_iew_popover.closePop();
var c_dv=$(this).parents('.meta_mapping_box').find('.meta_mapping_box_con');
if(c_dv.is(':visible'))
{
c_dv.hide();
$(this).find('.dashicons').removeClass('dashicons-arrow-down').addClass('dashicons-arrow-right');
}else
{
c_dv.show();
c_dv.find(".wt-iew-mapping-tb tbody tr td").each(function(){
$(this).css({'width':$(this).width()});
});
$(this).find('.dashicons').removeClass('dashicons-arrow-right').addClass('dashicons-arrow-down');
}
});
},
mapping_fields_selected_count:function(tb_elm)
{
tb_elm.parents('.meta_mapping_box').find('.meta_mapping_box_selected_count_box_num').text(tb_elm.find('.wt_iew_mapping_checkbox_sub:checked').length);
},
reg_mapping_field_bulk_action:function()
{
$('.wt_iew_mapping_checkbox_main').each(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if(tb.find('.wt_iew_mapping_checkbox_sub:checked').length==tb.find('.wt_iew_mapping_checkbox_sub').length)
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',false);
}
wt_iew_basic_import.mapping_fields_selected_count(tb);
});
$('.wt_iew_mapping_checkbox_main').unbind('click').click(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if($(this).is(':checked'))
{
tb.find('.wt_iew_mapping_checkbox_sub').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_sub').prop('checked',false);
}
wt_iew_basic_import.mapping_fields_selected_count(tb);
});
$('.wt_iew_mapping_checkbox_sub').unbind('click').click(function()
{
var tb=$(this).parents('.wt-iew-mapping-tb');
if($(this).is(':checked') && tb.find('.wt_iew_mapping_checkbox_sub:checked').length==tb.find('.wt_iew_mapping_checkbox_sub').length)
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',true);
}else
{
tb.find('.wt_iew_mapping_checkbox_main').prop('checked',false);
}
wt_iew_basic_import.mapping_fields_selected_count(tb);
});
},
set_step_page:function(data)
{
page_html=data.page_html;
$.each(page_html, function(step_id, page_content){
wt_iew_basic_import.get_page_dom_object(step_id).html(page_content);
wt_iew_basic_import.page_actions(step_id);
if(step_id=='method_import' && (wt_iew_basic_import.selected_template>0 || wt_iew_basic_import.on_rerun))
{
wt_iew_basic_import.form_data=data.template_data;
if(wt_iew_basic_import.on_rerun)
{
if($('.wt-iew-import-template-sele').val()==0)
{
wt_iew_basic_import.selected_template=0;
wt_iew_basic_import.selected_template_name='';
}else
{
wt_iew_basic_import.selected_template=$('.wt-iew-import-template-sele').val();
wt_iew_basic_import.selected_template_name=$.trim($('.wt-iew-import-template-sele option:selected').text());
}
}
}
wt_iew_basic_import.show_post_type_name();
});
this.reg_button_actions();
},
prepare_ajax_data:function(action, data_type)
{
this.ajax_data = {
'_wpnonce': wt_iew_basic_params.nonces.main,
'action': "iew_import_ajax_basic",
'import_action': action,
'selected_template': this.selected_template,
'to_import': this.to_import,
'data_type': data_type,
'import_method': this.import_method,
'temp_import_file': this.temp_import_file,
};
if($('[name="wt_iew_delimiter"]').length>0){
this.import_delimiter = $('[name="wt_iew_delimiter"]').val();
this.ajax_data['delimiter'] = this.import_delimiter;
}
},
mapping_field_editor:function()
{
mapping_field_editor.Set();
},
mapping_field_editor_validate_column_val:function(vl)
{
return mapping_field_editor.validate_column_val(vl);
},
mapping_field_editor_output_preview:function()
{
mapping_field_editor.output_preview();
},
is_object:function(obj)
{
return obj !== undefined && obj !== null && obj.constructor == Object;
},
warn_on_refresh: function () {
window.onbeforeunload = function (event)
{
if(!wt_iew_basic_import.import_finished){
return confirm("Changes that you made may not be saved.");
}
};
}
}
var mapping_field_editor=
{
text_area_pos:null,
popover:null,
Set:function()
{
this.popover=$('.wt_iew_popover-content');
this.add_fields();
this.popover.find('.wt_iew_mapping_field_editor_expression').unbind('keyup').on('keyup', function(){
mapping_field_editor.text_area_pos=$(this).getCursorPosition();
mapping_field_editor.output_preview();
});
this.search_column();
},
validate_columns:function()
{
$('.meta_mapping_box_con[data-field-validated="0"]').each(function(){
var tb=$(this).find('.wt-iew-mapping-tb');
if($(this).find('.wt-iew-mapping-tb').length>0)
{
$(this).attr({'data-field-validated':1});
tb.find('.columns_val').each(function(){
var vl=$.trim($(this).val());
if(vl!="")
{
var html_vl=mapping_field_editor.validate_column_val(vl);
$(this).siblings('[data-wt_iew_popover="1"]').html(html_vl);
}
});
}
});
},
validate_column_val:function(str)
{
const regex = /\{([^}]+)\}/g;
let m;
var out=str;
while ((m = regex.exec(str)) !== null)
{
/* This is necessary to avoid infinite loops with zero-width matches */
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
/* The result can be accessed through the `m`-variable. */
m.forEach((match, groupIndex) => {
/* check date format matching */
var match_arr=match.split(wt_iew_import_basic_params.wt_iew_prefix+'@');
if(match_arr.length==2)/* date format matched */
{
match=match_arr[0];
}
if(!wt_iew_file_head_default.hasOwnProperty(match) && !wt_iew_file_head_meta.hasOwnProperty(match))
{
out=out.replace('{'+match+'}', '<span class="wt_iew_invalid_mapping_field">{'+match+'}</span>');
}
});
}
return out;
},
add_fields:function()
{
this.popover.find('.wt_iew_mapping_field_selector li').unbind('click').click(function(){
var vl=' {'+$(this).attr('data-val')+'} ';
var exp_vl=mapping_field_editor.popover.find('.wt_iew_mapping_field_editor_expression').val();
if(mapping_field_editor.text_area_pos!==null)
{
var new_vl=exp_vl.substr(0, mapping_field_editor.text_area_pos)+vl+exp_vl.substr(mapping_field_editor.text_area_pos);
}else
{
var new_vl=exp_vl+vl;
}
mapping_field_editor.popover.find('.wt_iew_mapping_field_editor_expression').val(new_vl);
mapping_field_editor.output_preview();
})
},
search_column:function()
{
/* my template search */
this.popover.find('.wt_iew_mapping_field_editor_column_search').unbind('keyup').on('keyup',function(){
var vl=$.trim($(this).val());
if(vl!="")
{
vl=vl.toLowerCase();
mapping_field_editor.popover.find('.wt_iew_mapping_field_selector li').hide();
var kk=mapping_field_editor.popover.find('.wt_iew_mapping_field_selector li').filter(function(){
var name=$(this).attr('data-val');
name=name.toLowerCase();
if(name.search(vl)!=-1)
{
return true;
}else
{
return false;
}
});
kk.show();
if(mapping_field_editor.popover.find('.wt_iew_mapping_field_selector li:visible').length==0)
{
mapping_field_editor.popover.find('.wt_iew_mapping_field_selector_no_column').show();
}else
{
mapping_field_editor.popover.find('.wt_iew_mapping_field_selector_no_column').hide();
}
}else
{
mapping_field_editor.popover.find('.wt_iew_mapping_field_selector li').show();
}
});
mapping_field_editor.popover.find('.wt_iew_mapping_field_selector_no_column').hide();
},
output_preview:function()
{
this.popover.find('.wt_iew_mapping_field_editor_er').html('');
const str = this.popover.find('.wt_iew_mapping_field_editor_expression').val();
var out='';
out=this.add_sample_data(str);
out=this.do_arithmetic(out);
this.popover.find('.wt_iew_mapping_field_editor_sample').html(out);
},
add_sample_data:function(str)
{
const regex = /\{([^}]+)\}/g;
let m;
var out=str;
while ((m = regex.exec(str)) !== null) {
/* This is necessary to avoid infinite loops with zero-width matches */
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
/* The result can be accessed through the `m`-variable. */
m.forEach((match, groupIndex) => {
/* check date format matching */
var match_arr=match.split(wt_iew_import_basic_params.wt_iew_prefix+'@');
if(match_arr.length==2)/* date format matched */
{
match=match_arr[0];
}
var sample_vl=' '; /* do not set default value as empty string */
if(wt_iew_file_head_default.hasOwnProperty(match))
{
var sample_vl=$.trim(wt_iew_file_head_default[match]);
}
else if(wt_iew_file_head_meta.hasOwnProperty(match))
{
var sample_vl=$.trim(wt_iew_file_head_meta[match]);
}
if(match_arr.length==2)/* date format matched */
{
match=match_arr.join(wt_iew_import_basic_params.wt_iew_prefix+'@');
if(sample_vl!="")
{
sample_vl=mapping_field_editor.format_date(sample_vl);
}
}
sample_vl=(sample_vl!="" ? sample_vl : '<span class="wt_iew_no_sample_mapping_data">'+match+'</span>');
out=out.replace('{'+match+'}', sample_vl);
});
}
return out;
},
add_zero:function(i)
{
if(i<10)
{
i="0"+i;
}
return i;
},
format_date:function(date_string)
{
var d = new Date(date_string);
if(d instanceof Date && !isNaN(d))
{
date_string=d.getFullYear()+'-'+this.add_zero(d.getMonth()+1)+'-'+this.add_zero(d.getDate())+' '+this.add_zero(d.getHours())+':'+this.add_zero(d.getMinutes())+':'+this.add_zero(d.getSeconds());
}
return date_string;
},
do_arithmetic:function(str)
{
const regex_arith = /\[([0-9()+\-*/. ]+)\]/g;
let m;
var out=str;
while ((m = regex_arith.exec(str)) !== null) {
/* This is necessary to avoid infinite loops with zero-width matches */
if (m.index === regex_arith.lastIndex) {
regex_arith.lastIndex++;
}
try{
eqn='('+m[1]+')';
eval("var eqn_eval = " + eqn.toLowerCase());
out=out.replace(m[0], eqn_eval);
} catch(e) {
mapping_field_editor.popover.find('.wt_iew_mapping_field_editor_er').html(e);
return false;
}
}
return out;
}
}
return wt_iew_basic_import;
})( jQuery );
(function ($, undefined) {
$.fn.getCursorPosition = function() {
var el = $(this).get(0);
var pos = 0;
if('selectionStart' in el) {
pos = el.selectionStart;
} else if('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
}
})(jQuery);
/**
* Dropzone initaiting section
* More info at [www.dropzonejs.com](http://www.dropzonejs.com)
*/
var wt_iew_dropzone=
{
elm:null,
old_file:false,
Set:function()
{
if(typeof Dropzone==='undefined'){
return false;
}
Dropzone.autoDiscover = false;
this.auto_populate();
},
auto_populate:function()
{
var template_val=jQuery.trim(jQuery('#local_file').val());
if(template_val!="")
{
var file_name=template_val.split('/').pop();
this.set_success(file_name);
}
},
set_success:function(file_name)
{
jQuery(".wt_iew_dz_file_success").html(wt_iew_import_basic_params.msgs.upload_done);
jQuery(".wt_iew_dz_remove_link").html(wt_iew_import_basic_params.msgs.remove);
jQuery(".wt_iew_dz_file_name").html(file_name);
jQuery(".dz-message").css({'margin-top':'60px'});
/* register file deleting event */
wt_iew_dropzone.remove_file();
},
init:function(elm_id)
{
if(typeof Dropzone==='undefined'){
return false;
}
this.elm=jQuery("#"+elm_id);
var map_profile =jQuery('.wt-iew-import-template-sele').val();
var ajax_data={
'_wpnonce': wt_iew_basic_params.nonces.main,
'action': "iew_import_ajax_basic",
'import_action': 'upload_import_file',
'map_profile_id':map_profile,
'data_type': 'json',
'file_url': '',
};
var drop_zone_obj = new Dropzone(
"#"+elm_id, {
url:wt_iew_basic_params.ajax_url,
createImageThumbnails:false,
acceptedFiles:wt_iew_import_basic_params.allowed_import_file_type_mime.join(", "),
paramName:'wt_iew_import_file',
dictDefaultMessage:wt_iew_import_basic_params.msgs.drop_upload,
dictInvalidFileType:wt_iew_import_basic_params.msgs.invalid_file,
dictResponseError:wt_iew_import_basic_params.msgs.server_error,
params:ajax_data,
uploadMultiple:false,
parallelUploads:1,
maxFiles:1,
timeout:0,
maxFilesize:wt_iew_import_basic_params.max_import_file_size,
previewTemplate:"<div class=\"dz-preview dz-file-preview\">\n <div class=\"dz-upload-info\"></div> \n <div class=\"dz-details\">\n <div class=\"dz-filename\"><span data-dz-name></span></div>\n </div>\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n </div>",
}
);
drop_zone_obj.on("addedfile", function(file) {
jQuery(".dz-upload-info").html(wt_iew_import_basic_params.msgs.uploading);
jQuery(".dz-message").css({'margin-top':'85px'});
var dropzone_target=wt_iew_dropzone.elm.attr('wt_iew_dropzone_target');
var dropzone_target_elm=jQuery(dropzone_target);
if(dropzone_target_elm.length>0)
{
var file_url=dropzone_target_elm.val();
if(file_url!="")
{
drop_zone_obj.options.params['file_url']=file_url; /* this is to remove the already uploaded file */
}
}
});
drop_zone_obj.on("dragstart", function(file) {
wt_iew_dropzone.elm.addClass('wt_drag_start');
});
drop_zone_obj.on("dragover", function(file) {
wt_iew_dropzone.elm.addClass('wt_drag_start');
});
drop_zone_obj.on("dragleave", function(file) {
wt_iew_dropzone.elm.removeClass('wt_drag_start');
});
drop_zone_obj.on("drop", function(file) {
wt_iew_dropzone.elm.removeClass('wt_drag_start');
});
drop_zone_obj.on("dragend", function(file) {
wt_iew_dropzone.elm.removeClass('wt_drag_start');
});
drop_zone_obj.on("fallback", function(file) {
wt_iew_dropzone.elm.html(wt_iew_import_basic_params.msgs.outdated);
return null;
});
drop_zone_obj.on("error", function(file, message) {
drop_zone_obj.removeFile(file);
wt_iew_notify_msg.error(message);
});
drop_zone_obj.on("success", function(file, response) {
var file_name=file.name;
/* remove file obj */
drop_zone_obj.removeFile(file);
if(wt_iew_dropzone.isJson(response))
{
response=JSON.parse(response);
if(response.status==1)
{
wt_iew_dropzone.set_success(file_name);
var dropzone_target=wt_iew_dropzone.elm.attr('wt_iew_dropzone_target');
var dropzone_target_elm=jQuery(dropzone_target);
if(dropzone_target_elm.length>0)
{
dropzone_target_elm.val(response.url);
}
}else
{
wt_iew_notify_msg.error(response.msg);
}
}else
{
wt_iew_notify_msg.error(wt_iew_basic_params.msgs.error);
}
});
},
remove_file:function()
{
jQuery('.wt_iew_dz_remove_link').unbind('click').click(function(e){
e.stopPropagation();
var dropzone_target=wt_iew_dropzone.elm.attr('wt_iew_dropzone_target');
var mapping_profile =jQuery('.wt-iew-import-template-sele').val();
var dropzone_target_elm=jQuery(dropzone_target);
if(dropzone_target_elm.length>0)
{
var file_url=dropzone_target_elm.val();
if(file_url!="")
{
dropzone_target_elm.val('');
jQuery(".wt_iew_dz_file_success, .wt_iew_dz_remove_link, .wt_iew_dz_file_name").html('');
jQuery(".dz-message").css({'margin-top':'85px'});
jQuery.ajax({
type: 'POST',
url:wt_iew_basic_params.ajax_url,
data:{
'_wpnonce': wt_iew_basic_params.nonces.main,
'action': "iew_import_ajax_basic",
'import_action': 'delete_import_file',
'mapping_profile': mapping_profile,
'data_type': 'json',
'file_url':file_url,
},
dataType:'json'
});
}
}
});
},
isJson:function(str)
{
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
}
wt_iew_dropzone.Set();
var wt_plugin_advt = {
Set: function ()
{
jQuery('.wt-hide-features-post-types').click(function (e) {
e.preventDefault();
var invisible_mtop = '20px';
var visible_mtop = '-200px';
if ('user' === wt_iew_basic_import.to_import) {
invisible_mtop = '60px';
}
if ('order' === wt_iew_basic_import.to_import || 'coupon' === wt_iew_basic_import.to_import || 'subscription' === wt_iew_basic_import.to_import) {
invisible_mtop = '40px';
}
var div_visible = jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_import.to_import).is(':visible');
if (!div_visible) {
jQuery('.wt-you-may-like').css('margin-top', invisible_mtop);
jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_import.to_import).show();
jQuery('.wt-hide-features').html(wt_iew_basic_params.msgs.hide_features);
} else {
jQuery('.wt-you-may-like').css('margin-top', visible_mtop);
jQuery('.wt-ier-gopro-cta-small-' + wt_iew_basic_import.to_import).hide();
jQuery('.wt-hide-features').html(wt_iew_basic_params.msgs.show_features);
}
});
}
};
jQuery(function() {
if(wt_iew_import_basic_params.rerun_id>0)
{
wt_iew_basic_import.to_import=wt_iew_import_basic_params.to_import;
wt_iew_basic_import.import_method=wt_iew_import_basic_params.import_method;
wt_iew_basic_import.rerun_id=wt_iew_import_basic_params.rerun_id;
wt_iew_basic_import.on_rerun=true;
wt_iew_basic_import.is_valid_file=true;
wt_iew_basic_import.temp_import_file=wt_iew_import_basic_params.temp_import_file;
}
wt_iew_basic_import.Set();
wt_plugin_advt.Set();
});
\ No newline at end of file
<?php
/**
* Ajax section of the Import module
*
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Import_Ajax')){
class Wt_Import_Export_For_Woo_Basic_Import_Ajax
{
public $step='';
public $steps=array();
public $step_btns=array();
public $import_method='';
public $to_import='';
protected $step_title='';
protected $step_keys=array();
protected $current_step_index=0;
protected $current_step_number=1;
protected $last_page=false;
protected $total_steps=0;
protected $step_summary='';
protected $step_description='';
protected $mapping_enabled_fields=array();
protected $mapping_templates=array();
protected $selected_template=0;
protected $selected_template_form_data=array();
protected $import_obj=null;
protected $field_group_prefixes=array();
protected $rerun_id=0;
public function __construct($import_obj, $to_import, $steps, $import_method, $selected_template, $rerun_id)
{
$this->import_obj=$import_obj;
$this->to_import=$to_import;
$this->steps=$steps;
$this->import_method=$import_method;
$this->selected_template=$selected_template;
$this->rerun_id=$rerun_id;
/**
* This array is to group the fields in the input file that are not in the default list.
*/
$this->field_group_prefixes=array(
'taxonomies'=>array('tax'),
'meta'=>array('meta'),
'attributes'=>array('attribute', 'attribute_data', 'attribute_default', 'meta:attribute'),
'hidden_meta'=>array('meta:_'),
);
}
/**
* Ajax main function to retrive steps HTML
*/
public function get_steps($out)
{
//sleep(3);
$steps=(is_array($_POST['steps']) ? $_POST['steps'] : array($_POST['steps']));
$steps=Wt_Iew_Sh::sanitize_item($steps, 'text_arr');
$page_html=array();
if($this->selected_template>0) /* taking selected tamplate formdata */
{
$this->get_template_form_data($this->selected_template);
}elseif($this->rerun_id>0)
{
$this->selected_template_form_data=$this->import_obj->form_data;
}
foreach($steps as $step)
{
$method_name=$step.'_page';
if(method_exists($this, $method_name))
{
$page_html[$step]=$this->{$method_name}();
if($step=='method_import' && ($this->selected_template>0 || $this->rerun_id>0))
{
$out['template_data']=$this->selected_template_form_data;
}
}
}
$out['status']=1;
$out['page_html']=$page_html;
return $out;
}
/**
* Delete uploaded import file
*
*/
public function delete_import_file($out)
{
$file_url=(isset($_POST['file_url']) ? esc_url_raw($_POST['file_url']) : '');
$mapping_profile=(isset($_POST['mapping_profile']) ? ($_POST['mapping_profile']) : '');
$out['file_url']=$file_url;
if($file_url!="")
{
if(!$mapping_profile){
$this->import_obj->delete_import_file($file_url);
}
$out['status']=1;
$out['msg']='';
}
return $out;
}
/**
* Upload import file (Drag and drop upload)
*
*/
public function upload_import_file($out)
{
if(isset($_FILES['wt_iew_import_file']))
{
$is_file_type_allowed=false;
if(!in_array($_FILES['wt_iew_import_file']['type'], $this->import_obj->allowed_import_file_type_mime)) /* Not allowed file type. [Bug fix for Windows OS]Then verify it again with file extension */
{
$ext=pathinfo($_FILES['wt_iew_import_file']['name'], PATHINFO_EXTENSION);
if(isset($this->import_obj->allowed_import_file_type_mime[$ext])) /* extension exists. */
{
$is_file_type_allowed=true;
}
}else
{
$is_file_type_allowed=true;
}
if($is_file_type_allowed) /* Allowed file type */
{
@set_time_limit(3600); // 1 hour
$max_bytes=($this->import_obj->max_import_file_size*1000000); //convert to bytes
if($max_bytes>=$_FILES['wt_iew_import_file']['size'])
{
$file_name='local_file_'.time().'_'.sanitize_file_name($_FILES['wt_iew_import_file']['name']); //sanitize the file name, add a timestamp prefix to avoid conflict
$file_path=$this->import_obj->get_file_path($file_name);
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
if(@move_uploaded_file($_FILES['wt_iew_import_file']['tmp_name'], $file_path))
{
$out['msg']='';
$out['status']=1;
$out['url']=$this->import_obj->get_file_url($file_name);
/**
* Check old file exists, and delete it
*/
$file_url=(isset($_POST['file_url']) ? esc_url_raw($_POST['file_url']) : '');
$map_profile_id=(isset($_POST['map_profile_id']) ? ($_POST['map_profile_id']) : '');
if($file_url!="" && !$map_profile_id)
{
$this->import_obj->delete_import_file($file_url);
}
}else
{
$out['msg']=__('Unable to upload file. Please check write permission of your `wp-content` folder.');
}
}else
{
$out['msg']=sprintf(__('File size exceeds the limit. %dMB max'), $this->import_obj->max_import_file_size);
}
}else
{
$out['msg']=sprintf(__('Invalid file type. Only %s are allowed.'), implode(", ", array_values($this->import_obj->allowed_import_file_type)));
}
}
return $out;
}
/**
* Ajax hook to download the input file as temp file and validate its extension.
*/
public function validate_file($out)
{
/* process form data */
$form_data=(isset($_POST['form_data']) ? Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize(($_POST['form_data']))) : array());
$response=$this->import_obj->download_remote_file($form_data);
if($response['response']) /* temp file created. Then delete old temp file if exists */
{
$temp_import_file=(isset($_POST['temp_import_file']) ? sanitize_file_name($_POST['temp_import_file']) : '');
if($temp_import_file!="")
{
$file_path=$this->import_obj->get_file_path($temp_import_file);
if(file_exists($file_path))
{
@unlink($file_path);
}
}
}
$out['status']=($response['response'] ? 1 : 0);
$out['msg']=($response['msg']!="" ? $response['msg'] : $out['msg']);
$out['file_name']=(isset($response['file_name']) ? $response['file_name'] : '');
return $out;
}
/**
* Ajax function to retrive meta step data
*/
public function get_meta_mapping_fields($out)
{
if($this->selected_template>0) /* taking selected tamplate formdata */
{
$this->get_template_form_data($this->selected_template);
}elseif($this->rerun_id>0)
{
$this->selected_template_form_data=$this->import_obj->form_data;
}
/* This is the sample data from input file */
$file_heading_meta_fields=(isset($_POST['file_head_meta']) ? json_decode(stripslashes($_POST['file_head_meta']), true) : array());
//taking current page form data
$meta_step_form_data=(isset($this->selected_template_form_data['meta_step_form_data']) ? $this->selected_template_form_data['meta_step_form_data'] : array());
/* formdata/template data of fields in mapping page */
$form_data_meta_mapping_fields=isset($meta_step_form_data['mapping_fields']) ? $meta_step_form_data['mapping_fields'] : array();
$meta_mapping_screen_fields=$this->_get_meta_mapping_screen_fields($form_data_meta_mapping_fields);
$draggable_tooltip=__("Drag to rearrange the columns");
$module_url=plugin_dir_url(dirname(__FILE__));
/* preparing meta fields. */
$prepared_meta_fields=array();
if($meta_mapping_screen_fields && is_array($meta_mapping_screen_fields))
{
/* loop through mapping fields */
foreach($meta_mapping_screen_fields as $meta_mapping_screen_field_key=>$meta_mapping_screen_field_val)
{
/* decalaring an empty array*/
$temp_arr=array();
/* current field group(tax, meta) formdata */
$current_meta_step_form_data=(isset($form_data_meta_mapping_fields[$meta_mapping_screen_field_key]) ? $form_data_meta_mapping_fields[$meta_mapping_screen_field_key] : array());
/* default field list from post type module */
$mapping_fields=((isset($meta_mapping_screen_field_val['fields']) && is_array($meta_mapping_screen_field_val['fields'])) ? $meta_mapping_screen_field_val['fields'] : array());
/* loop through form data */
foreach($current_meta_step_form_data as $key=>$val_arr) /* looping the template form data */
{
$val=$val_arr[0]; /* normal column val */
$checked=$val_arr[1]; /* import this column? */
if(isset($mapping_fields[$key])) /* found in default field list */
{
$label=(isset($mapping_fields[$key]['title']) ? $mapping_fields[$key]['title'] : '');
$description=(isset($mapping_fields[$key]['description']) ? $mapping_fields[$key]['title'] : '');
$type=(isset($mapping_fields[$key]['type']) ? $mapping_fields[$key]['type'] : '');
unset($mapping_fields[$key]); //remove the field from default list
if(isset($file_heading_meta_fields[$key])) /* also found in file heading list */
{
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
}
$temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
}
elseif(isset($file_heading_meta_fields[$key])) /* found in file heading list */
{
$label=$key;
$description=$this->prepare_field_description($key);
$type='';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
$temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
}
}
/* loop through mapping fields */
if(count($mapping_fields)>0)
{
foreach($mapping_fields as $key=>$val_arr)
{
$label=(isset($val_arr['title']) ? $val_arr['title'] : '');
$description=(isset($val_arr['description']) ? $val_arr['description'] : '');
$type=(isset($val_arr['type']) ? $val_arr['type'] : '');
$val='';
$checked=0; /* import this column? */
if(isset($file_heading_meta_fields[$key]))
{
$checked=1; /* import this column? */
$val='{'.$key.'}';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
}
$temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
}
}
if(count($file_heading_meta_fields)>0)
{
$current_field_group_prefix_arr=(isset($this->field_group_prefixes[$meta_mapping_screen_field_key]) ? $this->field_group_prefixes[$meta_mapping_screen_field_key] : array());
foreach($file_heading_meta_fields as $key=>$sample_val)
{
$is_include=$this->_is_include_meta_in_this_group($current_field_group_prefix_arr, $key);
if($is_include==1)
{
$label=Wt_Iew_Sh::sanitize_item($key);
$description=$this->prepare_field_description($key);
$type='';
$val='{'.$key.'}';
$checked=1; /* import this column? */
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
$temp_arr[$key]=array('label'=>$label, 'description'=>$description, 'val'=>$val, 'checked'=>$checked, 'type'=>$type);
}
}
}
/* adding value to main array */
$prepared_meta_fields[$meta_mapping_screen_field_key]=array('fields'=>$temp_arr, 'checked'=>(isset($meta_mapping_screen_field_val['checked']) && $meta_mapping_screen_field_val['checked']==1 ? 1 : 0) );
}
/* if any columns that not in the above list */
if(count($file_heading_meta_fields)>0)
{
//do something
}
}
/* prepare HTML for meta mapping step */
$meta_html=array();
/* loop through prepared meta fields */
foreach($prepared_meta_fields as $meta_mapping_screen_field_key=>$meta_mapping_screen_field_val)
{
ob_start();
include dirname(plugin_dir_path(__FILE__)).'/views/_import_meta_step_page.php';
$meta_html[$meta_mapping_screen_field_key]=ob_get_clean();
}
$out['status']=1;
$out['meta_html']=$meta_html;
return $out;
}
public function save_template($out)
{
return $this->do_save_template('save', $out);
}
public function save_template_as($out)
{
return $this->do_save_template('save_as', $out);
}
public function update_template($out)
{
return $this->do_save_template('update', $out);
}
/**
* Download the input file and create history entry.
* This is the primary step before Import
* On XML import the file will be converted to CSV (Batch processing)
*/
public function download($out)
{
$this->import_obj->temp_import_file=(isset($_POST['temp_import_file']) ? sanitize_file_name($_POST['temp_import_file']) : '');
$offset=(isset($_POST['offset']) ? floatval($_POST['offset']) : 0);
$import_id=(isset($_POST['import_id']) ? intval($_POST['import_id']) : 0);
$import_method=(isset($_POST['import_method']) ? sanitize_text_field($_POST['import_method']) : $this->import_obj->default_import_method);
if($offset==0)
{
/* process form data */
$form_data=(isset($_POST['form_data']) ? Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize(($_POST['form_data']))) : array());
//sanitize form data
$form_data=Wt_Iew_IE_Basic_Helper::sanitize_formdata($form_data, $this->import_obj);
}else
{
/* no need to process the formdata steps other than first */
$form_data=array();
}
$out=$this->import_obj->process_download($form_data, 'download', $this->to_import, $import_id, $offset);
if($out['response']===true)
{
$import_id=$out['import_id'];
/**
* Prepare default mapping data for quick import
* After preparing update the Formdata in history table
*/
if($import_method=='quick' && $import_id>0 && $out['finished']==3)
{
$this->_prepare_for_quick($import_id);
}
$out['status']=1;
}else
{
$out['status']=0;
}
return $out;
}
/**
* Process the import
*
* @return array
*/
public function import($out)
{
$offset=(isset($_POST['offset']) ? floatval($_POST['offset']) : 0);
$import_id=(isset($_POST['import_id']) ? intval($_POST['import_id']) : 0);
/* no need to send formdata. It will take from history table by `process_action` method */
$form_data=array();
/* do the export process */
$out=$this->import_obj->process_action($form_data, 'import', $this->to_import, '', $import_id, $offset);
if($out['response']===true)
{
$out['status']=1;
}else
{
$out['status']=0;
}
return $out;
}
/**
* Save/Update template (Ajax sub function)
* @param boolean $is_update is update existing template or save as new
* @return array response status, name, id
*/
public function do_save_template($step, $out)
{
$is_update=($step=='update' ? true : false);
/* take template name from post data, if not then create from time stamp */
$template_name=(isset($_POST['template_name']) ? sanitize_text_field($_POST['template_name']) : date('d-M-Y h:i:s A'));
$template_name = stripslashes($template_name);
$out['name']= $template_name;
$out['id']=0;
$out['status']=1;
if($this->to_import!='')
{
global $wpdb;
/* checking: just saved and again click the button so shift the action as update */
if($step=='save' && $this->selected_template>0)
{
$is_update=true;
}
/* checking template with same name exists */
$template_data=$this->get_mapping_template_by_name($template_name);
if($template_data)
{
$is_throw_warn=false;
if($is_update)
{
if($template_data['id']!=$this->selected_template)
{
$is_throw_warn=true;
}
}else
{
$is_throw_warn=true;
}
if($is_throw_warn)
{
$out['status']=0;
if($step=='save_as')
{
$out['msg']=__('Please enter a different name');
}else
{
$out['msg']=__('Template with same name already exists');
}
return $out;
}
}
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
/* process form data */
$form_data=(isset($_POST['form_data']) ? Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize(($_POST['form_data']))) : array());
//sanitize form data
$form_data=Wt_Iew_IE_Basic_Helper::sanitize_formdata($form_data, $this->import_obj);
/* upadte the template */
if($is_update)
{
$update_data=array(
'data'=>maybe_serialize($form_data),
'name'=>$template_name, //may be a rename
);
$update_data_type=array(
'%s',
'%s'
);
$update_where=array(
'id'=>$this->selected_template
);
$update_where_type=array(
'%d'
);
if($wpdb->update($tb, $update_data, $update_where, $update_data_type, $update_where_type)!==false)
{
$out['id']=$this->selected_template;
$out['name']=$template_name;
$out['msg']=__('Template updated successfully');
return $out;
}
}else
{
$insert_data=array(
'template_type'=>'import',
'item_type'=>$this->to_import,
'name'=>$template_name,
'data'=>maybe_serialize($form_data),
);
$insert_data_type=array(
'%s','%s','%s','%s'
);
if($wpdb->insert($tb, $insert_data, $insert_data_type)) //success
{
$out['id']=$wpdb->insert_id;
$out['msg']=__('Template saved successfully');
return $out;
}
}
}
$out['status']=0;
return $out;
}
/*
* Get step information
* @param string $step
*/
public function get_step_info( $step ) {
return isset( $this->steps[ $step ] ) ? $this->steps[ $step ] : array( 'title' => ' ', 'description' => ' ' );
}
/**
* Step 1 (Ajax sub function)
* Built in steps, post type choosing page
*/
public function post_type_page()
{
$post_types=apply_filters('wt_iew_importer_post_types_basic', array());
$post_types=(!is_array($post_types) ? array() : $post_types);
$this->step='post_type';
$this->prepare_step_summary();
$this->prepare_footer_button_list();
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_import_post_type_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}
/**
* Step 2 (Ajax sub function)
* Built in steps, import method choosing page
*/
public function method_import_page()
{
$this->step='method_import';
if($this->to_import!="")
{
/* setting a default import method */
$this->import_method=($this->import_method=='' ? $this->import_obj->default_import_method : $this->import_method);
$this->import_obj->import_method=$this->import_method;
$this->steps=$this->import_obj->get_steps();
$this->prepare_step_summary();
$this->prepare_footer_button_list();
//taking current page form data
$method_import_form_data=(isset($this->selected_template_form_data['method_import_form_data']) ? $this->selected_template_form_data['method_import_form_data'] : array());
$method_import_screen_fields=$this->import_obj->get_method_import_screen_fields($method_import_form_data);
$form_data_import_template=$this->selected_template;
if($this->rerun_id>0)
{
if(isset($method_import_form_data['selected_template']))
{
/* do not set this value to `$this->selected_template` */
$form_data_import_template=$method_import_form_data['selected_template'];
}
}
/* meta field list for quick import */
$this->get_mapping_templates();
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_import_method_import_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Step 3 (Ajax sub function)
* Built in steps, Import mapping page
*/
public function mapping_page()
{
$this->step='mapping';
if($this->to_import!="")
{
$this->prepare_step_summary();
$this->prepare_footer_button_list();
$temp_import_file=(isset($_POST['temp_import_file']) ? sanitize_file_name($_POST['temp_import_file']) : '');
$file_path=$this->import_obj->get_file_path($temp_import_file);
if($temp_import_file!="" && file_exists($file_path))
{
$ext_arr=explode('.', $temp_import_file);
$ext= strtolower(end($ext_arr));
if(isset($this->import_obj->allowed_import_file_type[$ext])) /* file type is in allowed list */
{
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-csvreader.php';
$delimiter=(isset($_POST['delimiter']) ? ($_POST['delimiter']) : ','); //no sanitization
$reader=new Wt_Import_Export_For_Woo_Basic_Csvreader($delimiter);
/* take first two rows in csv and in xml takes column keys and a sample data */
$sample_data=$reader->get_sample_data($file_path, true);
$file_heading_data=$this->process_file_heading_data($sample_data);
$file_heading_default_fields=$file_heading_data['default'];
$file_heading_meta_fields=$file_heading_data['meta'];
//taking current page form data
$mapping_form_data=(isset($this->selected_template_form_data['mapping_form_data']) ? $this->selected_template_form_data['mapping_form_data'] : array());
/* formdata/template data of fields in mapping page */
$form_data_mapping_fields=isset($mapping_form_data['mapping_fields']) ? $mapping_form_data['mapping_fields'] : array();
/**
* default mapping page fields
* Format: 'field_key'=>array('title'=>'', 'description'=>'')
*/
$mapping_fields=array();
$mapping_fields=apply_filters('wt_iew_importer_alter_mapping_fields_basic', $mapping_fields, $this->to_import, $form_data_mapping_fields);
/* meta fields list */
$this->get_mapping_enabled_fields();
/* mapping enabled meta fields */
$form_data_mapping_enabled_fields=(isset($mapping_form_data['mapping_enabled_fields']) ? $mapping_form_data['mapping_enabled_fields'] : array());
}
}
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_import_mapping_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Step 4 (Ajax sub function)
* Built in steps, Advanced settings page
*/
public function advanced_page()
{
$this->step='advanced';
if($this->to_import!="")
{
$this->prepare_step_summary();
$this->prepare_footer_button_list();
//taking current page form data
$advanced_form_data=(isset($this->selected_template_form_data['advanced_form_data']) ? $this->selected_template_form_data['advanced_form_data'] : array());
$advanced_screen_fields=$this->import_obj->get_advanced_screen_fields($advanced_form_data);
ob_start();
$this->prepare_step_header_html();
include_once dirname(plugin_dir_path(__FILE__)).'/views/_import_advanced_page.php';
$this->prepare_step_footer_html();
return ob_get_clean();
}else
{
return '';
}
}
/**
* Prepare description for mapping step fields
*/
protected function prepare_field_description($key)
{
$out='';
if(strpos($key, 'tax:')!==false) /* taxonomy */
{
$column=trim(str_replace('tax:', '', $key));
if(substr($column, 0, 3)!== 'pa_')
{
$out=__('Product taxonomies');
}else
{
$out=__('New taxonomy: ').$column;
}
}
elseif(strpos($key, 'meta:')!==false) /* meta */
{
$column=trim(str_replace('meta:', '', $key));
$out=__('Custom Field: ').$column;
}
elseif(strpos($key, 'attribute:')!==false) /* attribute */
{
$column=trim(str_replace('attribute:', '', $key));
if(substr($column, 0, 3)== 'pa_')
{
$out=__('Taxonomy attributes');
}else
{
$out=__('New attribute: ').$column;
}
}
elseif(strpos($key, 'attribute_data:')!==false) /* attribute data */
{
$column=trim(str_replace('attribute_data:', '', $key));
$out=__('Attribute data: ').$column;
}
elseif(strpos($key, 'attribute_default:')!==false) /* attribute default */
{
$column=trim(str_replace('attribute_default:', '', $key));
$out=__('Attribute default value: ').$column;
}
return $out;
}
/**
* split default mapping fields and meta mapping fields
*/
protected function process_file_heading_data($arr)
{
$default=array();
$meta=array();
foreach($arr as $key=>$v)
{
if(is_array($v))
{
$meta=array_merge($meta, $v);
}else
{
$default[$key]=$v;
}
}
return array('default'=>$default, 'meta'=>$meta);
}
/**
* Get template form data
*/
protected function get_template_form_data($id)
{
$template_data=$this->get_mapping_template_by_id($id);
if($template_data)
{
$decoded_form_data=Wt_Import_Export_For_Woo_Basic_Common_Helper::process_formdata(maybe_unserialize($template_data['data']));
$this->selected_template_form_data=(!is_array($decoded_form_data) ? array() : $decoded_form_data);
}
}
/**
* Taking mapping template by Name
*/
protected function get_mapping_template_by_name($name)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
$qry=$wpdb->prepare("SELECT * FROM $tb WHERE template_type=%s AND item_type=%s AND name=%s",array('import', $this->to_import, $name));
return $wpdb->get_row($qry, ARRAY_A);
}
/**
* Taking mapping template by ID
*/
protected function get_mapping_template_by_id($id)
{
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
$qry=$wpdb->prepare("SELECT * FROM $tb WHERE template_type=%s AND item_type=%s AND id=%d",array('import', $this->to_import, $id));
return $wpdb->get_row($qry, ARRAY_A);
}
/**
* Taking all mapping templates
*/
protected function get_mapping_templates()
{
if($this->to_import=='')
{
return;
}
global $wpdb;
$tb=$wpdb->prefix.Wt_Import_Export_For_Woo_Basic::$template_tb;
$val=$wpdb->get_results("SELECT * FROM $tb WHERE template_type='import' AND item_type='".$this->to_import."' ORDER BY id DESC", ARRAY_A);
//add a filter here for modules to alter the data
$this->mapping_templates=($val ? $val : array());
}
/**
* Get meta field list for mapping page
*
*/
protected function get_mapping_enabled_fields()
{
$mapping_enabled_fields=array(
);
$this->mapping_enabled_fields=apply_filters('wt_iew_importer_alter_mapping_enabled_fields_basic', $mapping_enabled_fields, $this->to_import, array());
}
protected function prepare_step_summary()
{
$step_info= $this->get_step_info($this->step);
$this->step_title=$step_info['title'];
$this->step_keys=array_keys($this->steps);
$this->current_step_index=array_search($this->step, $this->step_keys);
$this->current_step_number=$this->current_step_index+1;
$this->last_page=(!isset($this->step_keys[$this->current_step_index+1]) ? true : false);
$this->total_steps=count($this->step_keys);
$this->step_summary=__(sprintf("Step %d of %d", $this->current_step_number, $this->total_steps));
$this->step_description=$step_info['description'];
}
protected function prepare_step_header_html()
{
include dirname(plugin_dir_path(__FILE__)).'/views/_import_header.php';
}
protected function prepare_step_footer_html()
{
include dirname(plugin_dir_path(__FILE__)).'/views/_import_footer.php';
}
protected function prepare_footer_button_list()
{
$out=array();
$step_keys=$this->step_keys;
$current_index=$this->current_step_index;
$last_page=$this->last_page;
if($current_index!==false) /* step exists */
{
if($current_index>0) //add back button
{
$out['back']=array(
'type'=>'button',
'action_type'=>'step',
'key'=>$step_keys[$current_index-1],
'text'=>'<span class="dashicons dashicons-arrow-left-alt2" style="line-height:27px;"></span> '.__('Back'),
);
}
if(isset($step_keys[$current_index+1])) /* not last step */
{
$next_number=$current_index+2;
$next_key=$step_keys[$current_index+1];
$next_title=$this->steps[$next_key]['title'];
$out['next']=array(
'type'=>'button',
'action_type'=>'step',
'key'=>$next_key,
'text'=>__('Step').' '.$next_number.': '.$next_title.' <span class="dashicons dashicons-arrow-right-alt2" style="line-height:27px;"></span>',
);
if($this->import_method=='quick' || $this->import_method=='template') //Quick Or Template method
{
$out['or']=array(
'type'=>'text',
'text'=>__('Or'),
);
}
}else
{
$last_page=true;
}
if($this->import_method=='quick' || $this->import_method=='template' || $last_page) //template method, or last page, or quick import
{
if($last_page && $this->import_method!='quick') //last page and not quick import
{
if($this->import_method=='template')
{
$out['save']=array(
'key'=>'save',
'icon'=>'',
'type'=>'dropdown_button',
'text'=>__('Save template'),
'items'=>array(
'update'=>array(
'key'=>'update_template',
'text'=>__('Save'), //no prompt
),
'save'=>array(
'key'=>'save_template_as',
'text'=>__('Save As'), //prompt for name
)
)
);
}else
{
$out['save']=array(
'key'=>'save_template',
'icon'=>'',
'type'=>'button',
'text'=>__('Save template'), //prompt for name
);
}
}
$out['download']=array(
'key'=>'download', /* first step of import must be download the input file */
'class'=>'iew_import_btn',
'icon'=>'',
'type'=>'button',
'text'=>__('Import'),
);
}
}
$this->step_btns=apply_filters('wt_iew_importer_alter_footer_btns_basic', $out, $this->step, $this->steps);
}
/**
* Prepare default mapping data for quick import
* After preparing update the Formdata in history table
*/
protected function _prepare_for_quick($import_id)
{
//take history data by import_id
$import_data=Wt_Import_Export_For_Woo_Basic_History::get_history_entry_by_id($import_id);
//processing form data
$form_data=(isset($import_data['data']) ? maybe_unserialize($import_data['data']) : array());
$ext_arr=explode('.', $this->import_obj->temp_import_file);
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-csvreader.php';
$delimiter=(isset($form_data['method_import_form_data']['wt_iew_delimiter']) ? ($form_data['method_import_form_data']['wt_iew_delimiter']) : ',');
$reader=new Wt_Import_Export_For_Woo_Basic_Csvreader($delimiter);
$file_path=$this->import_obj->get_file_path($this->import_obj->temp_import_file);
/* take first two rows in csv and in xml takes column keys and a sample data */
$sample_data=$reader->get_sample_data($file_path, true);
$file_heading_data=$this->process_file_heading_data($sample_data);
$file_heading_default_fields=$file_heading_data['default'];
$file_heading_meta_fields=$file_heading_data['meta'];
/**
* Default mapping fields
* Format: 'field_key'=>array('title'=>'', 'description'=>'')
*/
$mapping_fields=array();
$mapping_fields=apply_filters('wt_iew_importer_alter_mapping_fields_basic', $mapping_fields, $this->to_import, array());
$array_keys_file_heading_default_fields = array_keys($file_heading_default_fields);
$mapping_form_data=array('mapping_fields'=>array(), 'mapping_selected_fields'=>array());
$allowed_field_types=array('start_with', 'end_with', 'contain');
foreach($mapping_fields as $key=>$val_arr)
{
$val='';
$checked=0; /* import this column? */
$type=(isset($val_arr['type']) ? $val_arr['type'] : '');
// if(isset($file_heading_default_fields[$key]))
if($case_key = preg_grep("/^$key$/i", $array_keys_file_heading_default_fields)) //preg_grep used escape from case sensitive check.
{
$checked=1; /* import this column? */
// $val='{'.$key.'}';
$val='{'.array_shift($case_key).'}'; // preg_grep give an array with actual index and value
unset($file_heading_default_fields[$key]); //remove the field from file heading list
}
elseif(isset($file_heading_meta_fields[$key])) /* some meta items will show inside default field list, Eg: yoast */
{
$checked=1; /* import this column? */
$val='{'.$key.'}';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
}else
{
$field_type=(isset($val_arr['field_type']) ? $val_arr['field_type'] : '');
if($field_type!="" && in_array($field_type, $allowed_field_types)) // it may be a different field type
{
foreach ($file_heading_default_fields as $def_key => $def_val)
{
$matched=false;
if($field_type=='start_with' && strpos($def_key, $key)===0)
{
$matched=true;
}
elseif($field_type=='ends_with' && strrpos($def_key, $key)===(strlen($def_key) - strlen($key)))
{
$matched=true;
}
elseif($field_type=='contains' && strpos($def_key, $key)!==false)
{
$matched=true;
}
if($matched)
{
$val='{'.$def_key.'}';
unset($file_heading_default_fields[$def_key]); //remove the field from file heading list
$mapping_form_data['mapping_selected_fields'][$def_key]=$val;
$mapping_form_data['mapping_fields'][$def_key]=array($val, 1, $type); //value, enabled, type
}
}
}else /* unmatched keys */
{
$checked=0;
$val='';
}
}
if($checked==1)
{
$mapping_form_data['mapping_selected_fields'][$key]=$val;
$mapping_form_data['mapping_fields'][$key]=array($val, 1, $type); //value, enabled, type
}
}
/**
* Meta mapping fields
*
*/
$form_data_meta_mapping_fields = array(); // recheck the need of this variable in the below context.
$meta_mapping_screen_fields=$this->_get_meta_mapping_screen_fields($form_data_meta_mapping_fields);
/* preparing meta fields. */
$meta_mapping_form_data=array('mapping_fields'=>array(), 'mapping_selected_fields'=>array());
if($meta_mapping_screen_fields && is_array($meta_mapping_screen_fields))
{
/* loop through mapping fields */
foreach($meta_mapping_screen_fields as $meta_mapping_screen_field_key=>$meta_mapping_screen_field_val)
{
/* decalaring an empty array*/
$temp_arr=array();
$temp_fields_arr=array(); /* this is to store mapping field other details */
/* default field list from post type module */
$mapping_fields=((isset($meta_mapping_screen_field_val['fields']) && is_array($meta_mapping_screen_field_val['fields'])) ? $meta_mapping_screen_field_val['fields'] : array());
/* loop through mapping fields */
if(count($mapping_fields)>0)
{
foreach($mapping_fields as $key=>$val_arr)
{
$val='';
$checked=0; /* import this column? */
$type=(isset($val_arr['type']) ? $val_arr['type'] : '');
if(isset($file_heading_meta_fields[$key]))
{
$checked=1; /* import this column? */
$val='{'.$key.'}';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
}
if($checked==1)
{
$temp_arr[$key]=$val;
$temp_fields_arr[$key]=array($val, 1, $type);
}
}
}
if(count($file_heading_meta_fields)>0)
{
$current_field_group_prefix_arr=(isset($this->field_group_prefixes[$meta_mapping_screen_field_key]) ? $this->field_group_prefixes[$meta_mapping_screen_field_key] : array());
foreach($file_heading_meta_fields as $key=>$sample_val)
{
$is_include=$this->_is_include_meta_in_this_group($current_field_group_prefix_arr, $key);
if($is_include==1)
{
$val='{'.$key.'}';
$checked=1; /* import this column? */
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
$temp_arr[$key]=$val;
$temp_fields_arr[$key]=array($val, 1, '');
}
}
}
/* adding value to main array */
$meta_mapping_form_data['mapping_selected_fields'][$meta_mapping_screen_field_key]=$temp_arr;
$meta_mapping_form_data['mapping_fields'][$meta_mapping_screen_field_key]=$temp_fields_arr;
$mapping_fields=$temp_arr=$temp_fields_arr=null;
unset($temp_arr, $temp_fields_arr, $mapping_fields);
}
/* if any columns that not in the above list */
if(count($file_heading_meta_fields)>0)
{
//do something
}
}
/**
* update form data with prepared mapping form data
*/
$form_data['mapping_form_data']=$mapping_form_data;
$form_data['meta_step_form_data']=$meta_mapping_form_data;
$update_data=array(
'data'=>maybe_serialize($form_data), //formadata
);
$update_data_type=array(
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($import_id, $update_data, $update_data_type);
$mapping_form_data=$meta_mapping_form_data=$form_data=null;
unset($mapping_form_data, $meta_mapping_form_data, $form_data);
}
protected function _get_meta_mapping_screen_fields($form_data_meta_mapping_fields)
{
$this->get_mapping_enabled_fields();
$meta_mapping_screen_fields=array();
foreach($this->mapping_enabled_fields as $field_key=>$field_vl)
{
$field_vl=(!is_array($field_vl) ? array($field_vl, 0) : $field_vl);
$meta_mapping_screen_fields[$field_key]=array(
'title'=>'',
'checked'=>$field_vl[1],
'fields'=>array(),
);
}
/**
* default mapping page fields
* Format: 'field_key'=>array('title'=>'', 'description'=>'')
*/
return apply_filters('wt_iew_importer_alter_meta_mapping_fields_basic', $meta_mapping_screen_fields, $this->to_import, $form_data_meta_mapping_fields);
}
protected function _is_include_meta_in_this_group($current_field_group_prefix_arr, $key)
{
$is_include=0;
foreach ($current_field_group_prefix_arr as $_prefix)
{
if(strpos($key, $_prefix)===0) /* find as first occurrence */
{
if($_prefix=='meta') /* avoid conflict with hidden meta */
{
$name=str_replace('meta:', '', $key);
if(substr($name, 0, 1)!='_') /* not hidden meta */
{
if(strpos($name, 'attribute')!==0) /* its not meta attribute */
{
$is_include=1;
break;
}
}
}else
{
$is_include=1;
break;
}
}
}
return $is_include;
}
}
}
\ No newline at end of file
<?php
/**
* Import section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Import')){
class Wt_Import_Export_For_Woo_Basic_Import
{
public $module_id='';
public static $module_id_static='';
public $module_base='import';
public static $import_dir=WP_CONTENT_DIR.'/webtoffee_import';
public static $import_dir_name='/webtoffee_import';
public $steps=array();
public $allowed_import_file_type=array();
public $max_import_file_size=10; //in MB
private $to_import_id='';
private $to_import='';
private $rerun_id=0;
public $import_method='';
public $import_methods=array();
public $selected_template=0;
public $default_batch_count=0; /* configure this value in `advanced_setting_fields` method */
public $selected_template_data=array();
public $default_import_method=''; /* configure this value in `advanced_setting_fields` method */
public $form_data=array();
public $temp_import_file='';
private $to_process='';
public $allowed_import_file_type_mime=array();
public $step_need_validation_filter=array();
public function __construct()
{
$this->module_id=Wt_Import_Export_For_Woo_Basic::get_module_id($this->module_base);
self::$module_id_static=$this->module_id;
$this->max_import_file_size= (int)wp_max_upload_size()/1000000; //in MB
/* allowed file types */
$this->allowed_import_file_type=array(
'csv'=>__('CSV'),
);
$this->allowed_import_file_type_mime=array(
'csv'=>'text/csv',
);
/* default step list */
$this->steps=array(
'post_type'=>array(
'title'=>__('Select a post type'),
'description'=>__('Use a CSV file to import data. As a first step, select the post type.'),
),
'method_import'=>array(
'title'=>__('Select import method'),
'description'=>__('Choose from the options below to continue with your import: quick import, based on a pre-saved template or a new import with advanced options.'),
),
'mapping'=>array(
'title'=>__('Map import columns'),
'description'=>__('Map the standard columns with your CSV column names.'),
),
'advanced'=>array(
'title'=>__('Advanced options/Batch import'),
'description'=>__('Use advanced options from below to decide on the delimiter options, updates to existing products, batch import count or schedule an import. You can also save the template file for future imports.'),
),
);
$this->import_methods=array(
'quick'=>array('title'=>__('Quick import'), 'description'=> __('Use this option primarily if you exported the input file using the same plugin.')),
'template'=>array('title'=>__('Pre-saved template'), 'description'=> __('Retains the filter parameters and column specifications as per the chosen template and imports data accordingly.')),
'new'=>array('title'=>__('Advanced Import'), 'description'=> __('Imports data after a detailed process of filtration, column selection and advanced options. The configured settings can be saved as a template for future imports.')),
);
$this->step_need_validation_filter=array('method_import', 'mapping', 'advanced');
/* advanced plugin settings */
add_filter('wt_iew_advanced_setting_fields_basic', array($this, 'advanced_setting_fields'));
/* setting default values this method must be below of advanced setting filter */
$this->get_defaults();
/* main ajax hook. The callback function will decide which is to execute. */
add_action('wp_ajax_iew_import_ajax_basic', array($this, 'ajax_main'), 11);
/* Admin menu for import */
add_filter('wt_iew_admin_menu_basic', array($this, 'add_admin_pages'), 10, 1);
}
public function get_defaults()
{
$this->default_import_method= Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('default_import_method');
$this->default_batch_count=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('default_import_batch');
}
/**
* Fields for advanced settings
*
*/
public function advanced_setting_fields($fields)
{
$fields['maximum_execution_time'] = array(
'label' => __("Maximum execution time"),
'type' => 'number',
'value' => ini_get('max_execution_time'), /* Default max_execution_time settings value */
'field_name' => 'maximum_execution_time',
'field_group' => 'advanced_field',
'help_text' => __('The maximum execution time, in seconds(eg:- 300, 600, 1800, 3600). If set to zero, no time limit is imposed. Increasing this will reduce the chance of export/import timeouts.'),
'validation_rule' => array('type' => 'int'),
);
$fields['enable_import_log']=array(
'label'=>__("Generate Import log"),
'type' => 'checkbox',
'checkbox_fields' => array( 1 => __( 'Enable' ) ),
'value' =>1,
'field_name'=>'enable_import_log',
'field_group'=>'advanced_field',
'help_text'=>__("You can view the logs in the <a href=" . admin_url('admin.php?page=wt_import_export_for_woo_basic_history_log') . "><b>Import Logs</b></a> section or in History > View logs."),
'validation_rule'=>array('type'=>'absint'),
);
$import_methods=array_map(function($vl){ return $vl['title']; }, $this->import_methods);
$fields['default_import_method']=array(
'label'=>__("Default Import method"),
'type'=>'select',
'sele_vals'=>$import_methods,
'value' =>'new',
'field_name'=>'default_import_method',
'field_group'=>'advanced_field',
'help_text'=>__('Select the default method of import.'),
);
$fields['default_import_batch']=array(
'label'=>__("Default Import batch count"),
'type'=>'number',
'value' =>10, /* If altering then please also change batch count field help text section */
'field_name'=>'default_import_batch',
'help_text'=>__('Provide the default number of records to be imported in a batch.'),
'validation_rule'=>array('type'=>'absint'),
'attr' => array('min' => 1, 'max' => 50),
);
return $fields;
}
/**
* Fields for Import advanced step
*/
public function get_advanced_screen_fields($advanced_form_data)
{
$advanced_screen_fields=array(
'batch_count'=>array(
'label'=>__("Import in batches of"),
'type'=>'text',
'value'=>$this->default_batch_count,
'field_name'=>'batch_count',
'help_text'=>__('The number of records that the server will process for every iteration within the configured timeout interval. If the import fails due to timeout you can lower this number accordingly and try again.'),
'validation_rule'=>array('type'=>'absint'),
)
);
/* taking advanced fields from post type modules */
$advanced_screen_fields=apply_filters('wt_iew_importer_alter_advanced_fields_basic', $advanced_screen_fields, $this->to_import, $advanced_form_data);
return $advanced_screen_fields;
}
/**
* Fields for Import method step
*/
public function get_method_import_screen_fields($method_import_form_data)
{
$file_from_arr=array(
'local'=>__('Local'),
);
/* taking available remote adapters */
$remote_adapter_names=array();
$remote_adapter_names=apply_filters('wt_iew_importer_remote_adapter_names_basic', $remote_adapter_names);
if($remote_adapter_names && is_array($remote_adapter_names))
{
foreach($remote_adapter_names as $remote_adapter_key => $remote_adapter_vl)
{
$file_from_arr[$remote_adapter_key]=$remote_adapter_vl;
}
}
//prepare file from field type based on remote type adapters
$file_from_field_arr=array(
'label'=>__("Choose file for Import").' [<a href"#" target="_blank" id="sample-csv-file">'. __('Sample CSV').'</a>]',
'type'=>'select',
'tr_class'=>'wt-iew-import-method-options wt-iew-import-method-options-quick wt-iew-import-method-options-new wt-iew-import-method-options-template',
'sele_vals'=>$file_from_arr,
'field_name'=>'file_from',
'default_value'=>'local',
'form_toggler'=>array(
'type'=>'parent',
'target'=>'wt_iew_file_from'
)
);
$method_import_screen_fields=array(
'file_from'=>$file_from_field_arr,
'local_file'=>array(
'label'=>__("Select a file"),
'type'=>'dropzone',
'merge_left'=>true,
'merge_right'=>true,
'tr_id'=>'local_file_tr',
'tr_class'=>$file_from_field_arr['tr_class'], //add tr class from parent.Because we need to toggle the tr when parent tr toggles.
'field_name'=>'local_file',
'html_id'=>'local_file',
'form_toggler'=>array(
'type'=>'child',
'id'=>'wt_iew_file_from',
'val'=>'local',
),
),
);
/* taking import_method fields from other modules */
$method_import_screen_fields=apply_filters('wt_iew_importer_alter_method_import_fields_basic', $method_import_screen_fields, $this->to_import, $method_import_form_data);
$method_import_screen_fields['delimiter']=array(
'label'=>__("Delimiter"),
'type'=>'select',
'value'=>",",
'css_class'=>"wt_iew_delimiter_preset",
'tr_id'=>'delimiter_tr',
'tr_class'=>$file_from_field_arr['tr_class'], //add tr class from parent.Because we need to toggle the tr when parent tr toggles.
'field_name'=>'delimiter_preset',
'sele_vals'=>Wt_Iew_IE_Basic_Helper::_get_csv_delimiters(),
'help_text'=>__('The character used to separate columns in the CSV file. Takes comma (,) by default.'),
'validation_rule'=>array('type'=>'skip'),
'after_form_field'=>'<input type="text" class="wt_iew_custom_delimiter" name="wt_iew_delimiter" value="'.(!empty($method_import_form_data['wt_iew_delimiter']) ? $method_import_form_data['wt_iew_delimiter'] : ",").'" />',
);
return $method_import_screen_fields;
}
/**
* Adding admin menus
*/
public function add_admin_pages($menus)
{
$first = array_slice($menus, 0, 3, true);
$last=array_slice($menus, 3, (count($menus)-1), true);
$menu=array(
$this->module_base=>array(
'submenu',
WT_IEW_PLUGIN_ID_BASIC,
__('Import'),
__('Import'),
apply_filters('wt_import_export_allowed_capability', 'import'),
$this->module_id,
array($this, 'admin_settings_page')
)
);
$menus=array_merge($first, $menu, $last);
return $menus;
}
/**
* Import page
*/
public function admin_settings_page()
{
/**
* Check it is a rerun call
*/
$requested_rerun_id=(isset($_GET['wt_iew_rerun']) ? absint($_GET['wt_iew_rerun']) : 0);
$this->_process_rerun($requested_rerun_id);
if($this->rerun_id>0) /* this is a rerun request. Then validate the file */
{
$response=$this->download_remote_file($this->form_data);
if($response['response']) /* temp file created. */
{
$this->temp_import_file=$response['file_name'];
/* delete temp files other than the current temp file of same rerun id, if exists */
$file_path=$this->get_file_path();
$temp_files = glob($file_path.'/rerun_'.$this->rerun_id.'_*');
if(count($temp_files)>1) /* Other than the current temp file */
{
foreach($temp_files as $key => $temp_file)
{
if(basename($temp_file)!=$this->temp_import_file)
{
@unlink($temp_file); //delete it
}
}
}
}else /* unable to create temp file, then abort the rerun request */
{
$this->rerun_id=0;
$this->form_data=array();
}
}
$this->enqueue_assets();
include plugin_dir_path(__FILE__).'views/main.php';
}
/**
* Validating and Processing rerun action
*/
protected function _process_rerun($rerun_id)
{
if($rerun_id>0)
{
/* check the history module is available */
$history_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules('history');
if(!is_null($history_module_obj))
{
/* check the history entry is for import and also has form_data */
$history_data=$history_module_obj->get_history_entry_by_id($rerun_id);
if($history_data && $history_data['template_type']==$this->module_base)
{
$form_data=maybe_unserialize($history_data['data']);
if($form_data && is_array($form_data))
{
$this->to_import=(isset($form_data['post_type_form_data']) && isset($form_data['post_type_form_data']['item_type']) ? $form_data['post_type_form_data']['item_type'] : '');
if($this->to_import!="")
{
$this->import_method=(isset($form_data['method_import_form_data']) && isset($form_data['method_import_form_data']['method_import']) && $form_data['method_import_form_data']['method_import']!="" ? $form_data['method_import_form_data']['method_import'] : $this->default_import_method);
$this->rerun_id=$rerun_id;
$this->form_data=$form_data;
//process steps based on the import method in the history entry
$this->get_steps();
return true;
}
}
}
}
}
return false;
}
protected function enqueue_assets()
{
if(Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed()){
/* adding dropzone JS */
wp_enqueue_script(WT_IEW_PLUGIN_ID_BASIC.'-dropzone', WT_U_IEW_PLUGIN_URL.'admin/js/dropzone.min.js', array('jquery'), WT_U_IEW_VERSION);
wp_enqueue_script($this->module_id, plugin_dir_url(__FILE__).'assets/js/main.js', array('jquery', 'jquery-ui-sortable', 'jquery-ui-datepicker'), WT_U_IEW_VERSION);
wp_enqueue_style('jquery-ui-datepicker');
//wp_enqueue_media();
wp_enqueue_style(WT_IEW_PLUGIN_ID_BASIC.'-jquery-ui', WT_U_IEW_PLUGIN_URL.'admin/css/jquery-ui.css', array(), WT_U_IEW_VERSION, 'all');
/* check the history module is available */
$history_module_obj=Wt_Import_Export_For_Woo_Basic::load_modules('history');
if(!is_null($history_module_obj))
{
wp_enqueue_script(Wt_Import_Export_For_Woo_Basic::get_module_id('history'),WT_U_IEW_PLUGIN_URL.'admin/modules/history/assets/js/main.js', array('jquery'), WT_U_IEW_VERSION, false);
}
$file_extensions=array_keys($this->allowed_import_file_type_mime);
$file_extensions=array_map(function($vl){
return '.'.$vl;
}, $file_extensions);
$params=array(
'item_type'=>'',
'steps'=>$this->steps,
'rerun_id'=>$this->rerun_id,
'to_import'=>$this->to_import,
'import_method'=>$this->import_method,
'temp_import_file'=>$this->temp_import_file,
'allowed_import_file_type_mime'=>$file_extensions,
'max_import_file_size'=>$this->max_import_file_size,
'wt_iew_prefix'=>Wt_Import_Export_For_Woo_Admin_Basic::$wt_iew_prefix,
'msgs'=>array(
'choosed_template'=>__('Choosed template: '),
'choose_import_method'=>__('Please select an import method.'),
'choose_template'=>__('Please select an import template.'),
'step'=>__('Step'),
'choose_ftp_profile'=>__('Please select an FTP profile.'),
'choose_import_from'=>__('Please choose import from.'),
'choose_a_file'=>__('Please choose an import file.'),
'select_an_import_template'=>__('Please select an import template.'),
'validating_file'=>__('Creating temp file and validating.'),
'processing_file'=>__('Processing input file...'),
'column_not_in_the_list'=>__('This column is not present in the import list. Please tick the checkbox to include.'),
'uploading'=>__('Uploading...'),
'outdated'=>__('You are using an outdated browser. Please upgarde your browser.'),
'server_error'=>__('An error occured.'),
'invalid_file'=>sprintf(__('Invalid file type. Only %s are allowed'), implode(", ", array_values($this->allowed_import_file_type))),
'drop_upload'=>__('Drop files here or click to upload'),
'upload_done'=>sprintf(__('%s Done.'), '<span class="dashicons dashicons-yes-alt" style="color:#3fa847;"></span>'),
'remove'=>__('Remove'),
),
'addons' => array(
'product' => array(
'text' => __( 'View Products' ),
'page_link' => admin_url('edit.php?post_type=product')
),
'product_categories' => array(
'text' => __( 'View Product categories' ),
'page_link' => admin_url('edit-tags.php?taxonomy=product_cat&post_type=product')
),
'product_tags' => array(
'text' => __( 'View Product tags' ),
'page_link' => admin_url('edit-tags.php?taxonomy=product_tag&post_type=product')
),
'product_review' => array(
'text' => __( 'View Product reviews' ),
'page_link' => admin_url('edit-comments.php')
),
'order' => array(
'text' => __( 'View Orders' ),
'page_link' => admin_url('edit.php?post_type=shop_order')
),
'coupon' => array(
'text' => __( 'View Coupons' ),
'page_link' => admin_url('edit.php?post_type=shop_coupon')
),
'user' => array(
'text' => __( 'View Users' ),
'page_link' => admin_url('users.php')
),
'subscription' => array(
'text' => __( 'View Subscriptions' ),
'page_link' => admin_url('edit.php?post_type=shop_subscription')
)
)
);
wp_localize_script($this->module_id, 'wt_iew_import_basic_params', $params);
$this->add_select2_lib(); //adding select2 JS, It checks the availibility of woocommerce
}
}
/**
*
* Enqueue select2 library, if woocommerce available use that
*/
protected function add_select2_lib()
{
/* enqueue scripts */
if(!function_exists('is_plugin_active'))
{
include_once(ABSPATH.'wp-admin/includes/plugin.php');
}
if(is_plugin_active('woocommerce/woocommerce.php'))
{
wp_enqueue_script('wc-enhanced-select');
wp_enqueue_style('woocommerce_admin_styles', WC()->plugin_url().'/assets/css/admin.css');
}else
{
wp_enqueue_style(WT_IEW_PLUGIN_ID_BASIC.'-select2', WT_U_IEW_PLUGIN_URL. 'admin/css/select2.css', array(), WT_U_IEW_VERSION, 'all' );
wp_enqueue_script(WT_IEW_PLUGIN_ID_BASIC.'-select2', WT_U_IEW_PLUGIN_URL.'admin/js/select2.js', array('jquery'), WT_U_IEW_VERSION, false );
}
}
/**
* Get steps
*
*/
public function get_steps()
{
if($this->import_method=='quick') /* if quick import then remove some steps */
{
$out=array(
'post_type'=>$this->steps['post_type'],
'method_import'=>$this->steps['method_import'],
'advanced'=>$this->steps['advanced'],
);
$this->steps=$out;
}
$this->steps=apply_filters('wt_iew_importer_steps_basic', $this->steps, $this->to_import);
return $this->steps;
}
/**
* Download and save file into web server
*
*/
public function download_remote_file($form_data)
{
$out=array(
'response'=>false,
'file_name'=>'',
'msg'=>'',
);
$method_import_form_data=(isset($form_data['method_import_form_data']) ? $form_data['method_import_form_data'] : array());
$file_from=(isset($method_import_form_data['wt_iew_file_from']) ? Wt_Iew_Sh::sanitize_item($method_import_form_data['wt_iew_file_from']) : '');
if($file_from=="")
{
return $out;
}
if($file_from=='local' || $file_from=='url')
{
if($file_from=='local')
{
$file_url=(isset($method_import_form_data['wt_iew_local_file']) ? Wt_Iew_Sh::sanitize_item($method_import_form_data['wt_iew_local_file'], 'url') : '');
$local_file_path=Wt_Iew_IE_Basic_Helper::_get_local_file_path($file_url);
if(!$local_file_path) /* no local file found */
{
$file_url='';
}
}else
{
$file_url=(isset($method_import_form_data['wt_iew_url_file']) ? Wt_Iew_Sh::sanitize_item($method_import_form_data['wt_iew_url_file'], 'url') : '');
}
if($file_url!="") /* file URL not empty */
{
if($this->is_extension_allowed($file_url)) /* file type is in allowed list */
{
$ext_arr=explode('.', $file_url);
$ext=end($ext_arr);
$file_name=$this->get_temp_file_name($ext);
$file_path=$this->get_file_path($file_name);
if($file_path)
{
if($file_from=='local')
{
if(@copy($local_file_path, $file_path))
{
$out=array(
'response'=>true,
'file_name'=>$file_name,
'msg'=>'',
);
}else
{
$out['msg']=__('Unable to create temp file.');
}
}else
{
$file_data=$this->remote_get($file_url);
if(!is_wp_error($file_data) && wp_remote_retrieve_response_code($file_data)==200)
{
$file_data=wp_remote_retrieve_body($file_data);
if(@file_put_contents($file_path, $file_data))
{
$out=array(
'response'=>true,
'file_name'=>$file_name,
'msg'=>'',
);
}else
{
$out['msg']=__('Unable to create temp file.');
}
}else
{
$out['msg']=__('Unable to fetch file data.');
}
}
}else
{
$out['msg']=__('Unable to create temp directory.');
}
}else
{
$out['msg']=__('File type not allowed.');
}
}else
{
$out['msg']=__('File not found.');
}
}else
{
$out['response']=true;
$out=apply_filters('wt_iew_validate_file_basic', $out, $file_from, $method_import_form_data);
if(is_array($out) && isset($out['response']) && $out['response']) /* a form validation hook for remote modules */
{
$remote_adapter=Wt_Import_Export_For_Woo_Basic::get_remote_adapters('import', $file_from);
if(is_null($remote_adapter)) /* adapter object not found */
{
$msg=sprintf('Unable to initailize %s', $file_from);
$out['msg']=__($msg);
$out['response']=false;
}else
{
/* download the file */
$out = $remote_adapter->download($method_import_form_data, $out, $this);
}
}
}
if($out['response']!==false)
{
$file_path=self::get_file_path($out['file_name']);
/**
* Filter to modify the import file before processing.
* @param string $file_name name of the file
* @param string $file_path path of the file
* @return string $file_name name of the new altered file
*/
$out['file_name']=apply_filters('wt_iew_alter_import_file_basic', $out['file_name'], $file_path);
}
return $out;
}
public function remote_get($target_url)
{
global $wp_version;
$def_args = array(
'timeout' => 5,
'redirection' => 5,
'httpversion' => '1.0',
'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url(),
'blocking' => true,
'headers' => array(),
'cookies' => array(),
'body' => null,
'compress' => false,
'decompress' => true,
'sslverify' => false,
'stream' => false,
'filename' => null
);
return wp_remote_get($target_url, $def_args);
}
public function get_log_file_name($history_id)
{
return 'log_'.$history_id.'.log';
}
public function get_temp_file_name($ext)
{
/* adding rerun prefix is to easily identify rerun temp files */
$rerun_prefix=($this->rerun_id>0 ? 'rerun_'.$this->rerun_id.'_' : '');
return $rerun_prefix.'temp_'.$this->to_import.'_'.time().'.'.$ext;
}
/**
* Get given file url.
* If file name is empty then URL will return
*/
public static function get_file_url($file_name="")
{
return WP_CONTENT_URL.self::$import_dir_name.'/'.$file_name;
}
/**
* Checks the file extension is in allowed list
* @param string File name/ URL
* @return boolean
*/
public function is_extension_allowed($file_url)
{
$ext_arr=explode('.', $file_url);
$ext=strtolower(end($ext_arr));
if(isset($this->allowed_import_file_type[$ext])) /* file type is in allowed list */
{
return true;
}
return false;
}
/**
* Delete import file
* @param string File path/ URL
* @return boolean
*/
public function delete_import_file($file_url)
{
$file_path_arr=explode("/", $file_url);
$file_name=end($file_path_arr);
$file_path=$this->get_file_path($file_name);
if(file_exists($file_path))
{
if($this->is_extension_allowed($file_url))/* file type is in allowed list */
{
@unlink($file_path);
return true;
}
}
return false;
}
/**
* Get given temp file path.
* If file name is empty then file path will return
*/
public static function get_file_path($file_name="")
{
if(!is_dir(self::$import_dir))
{
if(!mkdir(self::$import_dir, 0700))
{
return false;
}else
{
$files_to_create=array('.htaccess' => 'deny from all', 'index.php'=>'<?php // Silence is golden');
foreach($files_to_create as $file=>$file_content)
{
if(!file_exists(self::$import_dir.'/'.$file))
{
$fh=@fopen(self::$import_dir.'/'.$file, "w");
if(is_resource($fh))
{
fwrite($fh, $file_content);
fclose($fh);
}
}
}
}
}
return self::$import_dir.'/'.$file_name;
}
/**
* Download and create a temp file. And create a history entry
* @param string $step the action to perform, here 'download'
*
* @return array
*/
public function process_download($form_data, $step, $to_process, $import_id=0, $offset=0)
{
$out=array(
'response'=>false,
'new_offset'=>0,
'import_id'=>0,
'history_id'=>0, //same as that of import id
'total_records'=>0,
'finished'=>0,
'msg'=>'',
);
$this->to_import=$to_process;
if($import_id>0)
{
//take history data by import_id
$import_data=Wt_Import_Export_For_Woo_Basic_History::get_history_entry_by_id($import_id);
if(is_null($import_data)) //no record found so it may be an error
{
return $out;
}else
{
$file_name=(isset($import_data['file_name']) ? $import_data['file_name'] : '');
$file_path=$this->get_file_path($file_name);
if($file_path && file_exists($file_path))
{
$this->temp_import_file=$file_name;
}else
{
$msg='Error occurred while processing the file';
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $msg);
$out['msg']=__($msg);
return $out;
}
}
}else
{
if($offset==0)
{
if($this->temp_import_file!="") /* its a non schedule import */
{
$file_path=$this->get_file_path($this->temp_import_file);
if($file_path && file_exists($file_path))
{
if($this->is_extension_allowed($this->temp_import_file)) /* file type is in allowed list */
{
$import_id=Wt_Import_Export_For_Woo_Basic_History::create_history_entry('', $form_data, $to_process, 'import');
}else
{
return $out;
}
}else
{
$out['msg']=__('Temp file missing.');
return $out;
}
}else /* in scheduled import need to prepare the temp file */
{
$import_id=Wt_Import_Export_For_Woo_Basic_History::create_history_entry('', $form_data, $to_process, 'import');
$response=$this->download_remote_file($form_data);
if(!$response['response']) /* not validated successfully */
{
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $response['msg']);
$out['msg']=$response['msg'];
return $out;
}else
{
$file_path=$this->get_file_path($response['file_name']);
$this->temp_import_file=$response['file_name'];
}
}
}
}
/**
* In XML import we need to convert the file into CSV before processing
* It may be a batched processing for larger files
*/
$ext_arr=explode('.', $this->temp_import_file);
$out=$this->_set_import_file_processing_finished($file_path, $import_id);
return $out;
}
/**
* If the file type is not CSV (Eg: XML) Then the delimiter must be ",".
* Because we are converting XML to CSV
*
*/
protected function _set_csv_delimiter($form_data, $import_id)
{
$form_data['method_import_form_data']['wt_iew_delimiter']=",";
$update_data=array(
'data'=>maybe_serialize($form_data), //formadata
);
$update_data_type=array(
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($import_id, $update_data, $update_data_type);
return $form_data;
}
protected function _set_import_file_processing_finished($file_path, $import_id)
{
/* update total records, temp file name in history table */
$total_records=filesize($file_path); /* in this case we cannot count number of rows */
$update_data=array(
'total'=>$total_records,
'file_name'=>$this->temp_import_file,
);
$update_data_type=array(
'%d',
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($import_id, $update_data, $update_data_type);
return array(
'response'=>true,
'finished'=>3,
'import_id'=>$import_id,
'history_id'=>$import_id, //same as that of import id
'total_records'=>$total_records,
'temp_import_file'=>$this->temp_import_file,
'msg'=>sprintf(__('Importing...(%d processed)'), 0),
);
}
/**
* Do the import process
*/
public function process_action($form_data, $step, $to_process, $file_name='', $import_id=0, $offset=0)
{
$out=array(
'response'=>false,
'new_offset'=>0,
'import_id'=>0,
'history_id'=>0, //same as that of import id
'total_records'=>0,
'offset_count'=>0,
'finished'=>0,
'msg'=>'',
'total_success'=>0,
'total_failed'=>0,
);
$this->to_import=$to_process;
$this->to_process=$to_process;
/* prepare formdata, If this was not first batch */
if($import_id>0)
{
//take history data by import_id
$import_data=Wt_Import_Export_For_Woo_Basic_History::get_history_entry_by_id($import_id);
if(is_null($import_data)) //no record found so it may be an error
{
return $out;
}
//processing form data
$form_data=(isset($import_data['data']) ? maybe_unserialize($import_data['data']) : array());
}
else // No import id so it may be an error
{
return $out;
}
/* setting history_id in Log section */
Wt_Import_Export_For_Woo_Basic_Log::$history_id=$import_id;
$file_name=(isset($import_data['file_name']) ? $import_data['file_name'] : '');
$file_path=$this->get_file_path($file_name);
if($file_path)
{
if(!file_exists($file_path))
{
$msg='Temp file missing';
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $msg);
$out['msg']=__($msg);
return $out;
}
}else
{
$msg='Temp file missing';
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $msg);
$out['msg']=__($msg);
return $out;
}
$default_batch_count=absint(apply_filters('wt_iew_importer_alter_default_batch_count_basic', $this->default_batch_count, $to_process, $form_data));
$default_batch_count=($default_batch_count==0 ? $this->default_batch_count : $default_batch_count);
$batch_count=$default_batch_count;
$csv_delimiter=',';
$total_records=(isset($import_data['total']) ? $import_data['total'] : 0);
$file_ext_arr=explode('.', $file_name);
$file_type= strtolower(end($file_ext_arr));
$file_type=(isset($this->allowed_import_file_type[$file_type]) ? $file_type : 'csv');
if(isset($form_data['advanced_form_data']))
{
$batch_count=(isset($form_data['advanced_form_data']['wt_iew_batch_count']) ? $form_data['advanced_form_data']['wt_iew_batch_count'] : $batch_count);
}
if(isset($form_data['method_import_form_data']) && $file_type=='csv')
{
$csv_delimiter=(isset($form_data['method_import_form_data']['wt_iew_delimiter']) ? $form_data['method_import_form_data']['wt_iew_delimiter'] : $csv_delimiter);
$csv_delimiter=($csv_delimiter=="" ? ',' : $csv_delimiter);
}
include_once WT_U_IEW_PLUGIN_PATH.'admin/classes/class-csvreader.php';
$reader=new Wt_Import_Export_For_Woo_Basic_Csvreader($csv_delimiter);
/* important: prepare deafult mapping formdata for quick import */
$input_data=$reader->get_data_as_batch($file_path, $offset, $batch_count, $this, $form_data);
if(empty($input_data['data_arr'])){
$out['msg']=__('CSV is empty');
return $out;
}
if(!$input_data || !is_array($input_data))
{
$msg='Unable to process the file';
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $msg);
$out['msg']=__($msg);
return $out;
}
/* checking action is finshed */
$is_last_offset=false;
$new_offset=$input_data['offset']; //increase the offset
$out['total_percent']= ceil(($new_offset/$total_records)*100);
if($new_offset>=$total_records) //finished
{
$is_last_offset=true;
}
/**
* In case of non schedule import. Offset row count.
* The real internal offset is in bytes, This offset is total row processed.
*/
$offset_count=(isset($_POST['offset_count']) ? absint($_POST['offset_count']) : 0);
/* giving full data */
$form_data=apply_filters('wt_iew_import_full_form_data_basic', $form_data, $to_process, $step, $this->selected_template_data);
/* in scheduled import. The import method will not available so we need to take it from formdata */
$formdata_import_method=(isset($formdata['method_import_form_data']) && isset($formdata['method_import_form_data']['method_import']) ? $formdata['method_import_form_data']['method_import'] : 'quick');
$this->import_method=($this->import_method=="" ? $formdata_import_method : $this->import_method);
/* no form data to process/Couldnt get any data from csv */
// if($this->import_method == 'quick'){
if(empty($form_data['mapping_form_data']['mapping_fields'])){
$msg='Invalid data/Delimter not right';
//no need to add translation function in message
Wt_Import_Export_For_Woo_Basic_History::record_failure($import_id, $msg);
$out['msg']=__($msg);
return $out;
}
// }
/**
* Import response format
*/
$import_response=array(
'total_success'=>$batch_count,
'total_failed'=>0,
'log_data'=>array(
array('row'=>$offset_count, 'message'=>'', 'status'=>true, 'post_id'=>''),
),
);
$import_response=apply_filters('wt_iew_importer_do_import_basic', $input_data['data_arr'], $to_process, $step, $form_data, $this->selected_template_data, $this->import_method, $offset_count, $is_last_offset);
$out['log_data'] = $import_response['log_data'];
/**
* Writing import log to file
*/
if(!empty($import_response) && is_array($import_response) && Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('enable_import_log')==1)
{
$log_writer=new Wt_Import_Export_For_Woo_Basic_Logwriter();
$log_file_name=$this->get_log_file_name($import_id);
$log_file_path=$this->get_file_path($log_file_name);
$log_data=(isset($import_response['log_data']) && is_array($import_response['log_data']) ? $import_response['log_data'] : array());
$log_writer->write_import_log($log_data, $log_file_path);
}
/* updating completed offset */
$update_data=array(
'offset'=>$offset
);
$update_data_type=array(
'%d'
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($import_id, $update_data, $update_data_type);
/* updating output parameters */
$out['total_records']=$total_records;
$out['import_id']=$import_id;
$out['history_id']=$import_id;
$out['response']=true;
/* In case of non schedule import. total success, totla failed count */
$total_success=(isset($_POST['total_success']) ? absint($_POST['total_success']) : 0);
$total_failed=(isset($_POST['total_failed']) ? absint($_POST['total_failed']) : 0);
$out['total_success']=(isset($import_response['total_success']) ? $import_response['total_success'] : 0)+$total_success;
$out['total_failed']=(isset($import_response['total_failed']) ? $import_response['total_failed'] : 0)+$total_failed;
/* updating action is finshed */
if($is_last_offset) //finished
{
/* delete the temp file */
@unlink($file_path);
$log_summary_msg=$this->generate_log_summary($out, $is_last_offset);
$out['finished']=1; //finished
$log_file_name = '';
$log_path=Wt_Import_Export_For_Woo_Basic_Log::$log_dir;
$log_files = glob($log_path.'/'.$out['history_id'].'_*'.'.log');
if(is_array($log_files) && count($log_files)>0)
{
$log_file_name=basename($log_files[0]);
}
$out['log_file'] = $log_file_name;
$out['msg']=$log_summary_msg;
/* updating finished status */
$update_data=array(
'status'=>Wt_Import_Export_For_Woo_Basic_History::$status_arr['finished'],
'status_text'=>'Finished' //translation function not needed
);
$update_data_type=array(
'%d',
'%s',
);
Wt_Import_Export_For_Woo_Basic_History::update_history_entry($import_id, $update_data, $update_data_type);
}else
{
$rows_processed=$input_data['rows_processed'];
$total_processed=$rows_processed+$offset_count;
$out['offset_count']=$total_processed;
$out['new_offset']=$new_offset;
$log_summary_msg=$this->generate_log_summary($out, $is_last_offset);
$out['msg']=$log_summary_msg;
}
return $out;
}
protected function generate_log_summary($data, $is_last_offset)
{
if($is_last_offset)
{
$msg='<span class="wt_iew_info_box_title">'.__('Finished').'</span>';
$msg.='<span class="wt_iew_popup_close" style="line-height:10px;width:auto" onclick="wt_iew_basic_import.hide_import_info_box();">X</span>';
}else
{
$msg='<span class="wt_iew_info_box_title">'.sprintf(__('Importing...(%d processed)'), $data['offset_count']).'</span>';
}
$msg.='<br />'.__('Total success: ').$data['total_success'].'<br />'.__('Total failed: ').$data['total_failed'];
if($is_last_offset)
{
$msg.='<span class="wt_iew_info_box_finished_text" style="display:block">';
if(Wt_Import_Export_For_Woo_Admin_Basic::module_exists('history'))
{
$msg.='<a class="button button-secondary wt_iew_view_log_btn" style="margin-top:10px;" data-history-id="'. $data['history_id'] .'" onclick="wt_iew_basic_import.hide_import_info_box();">'.__('View Details').'</a></span>';
}
}
return $msg;
}
/**
* Main ajax hook to handle all import related requests
*/
public function ajax_main()
{
include_once plugin_dir_path(__FILE__).'classes/class-import-ajax.php';
if(Wt_Iew_Sh::check_write_access(WT_IEW_PLUGIN_ID_BASIC))
{
/**
* Check it is a rerun call
*/
if(!$this->_process_rerun((isset($_POST['rerun_id']) ? absint($_POST['rerun_id']) : 0)))
{
$this->import_method=(isset($_POST['import_method']) ? Wt_Iew_Sh::sanitize_item($_POST['import_method'], 'text') : '');
$this->to_import=(isset($_POST['to_import']) ? Wt_Iew_Sh::sanitize_item($_POST['to_import'], 'text') : '');
$this->selected_template=(isset($_POST['selected_template']) ? Wt_Iew_Sh::sanitize_item($_POST['selected_template'], 'int') : 0);
}
$this->get_steps();
$ajax_obj=new Wt_Import_Export_For_Woo_Basic_Import_Ajax($this, $this->to_import, $this->steps, $this->import_method, $this->selected_template, $this->rerun_id);
$import_action=Wt_Iew_Sh::sanitize_item($_POST['import_action'], 'text');
$data_type=Wt_Iew_Sh::sanitize_item($_POST['data_type'], 'text');
$allowed_ajax_actions=array('get_steps', 'validate_file', 'get_meta_mapping_fields', 'save_template', 'save_template_as', 'update_template', 'download', 'import', 'upload_import_file', 'delete_import_file');
$out=array(
'status'=>0,
'msg'=>__('Error'),
);
if(method_exists($ajax_obj, $import_action) && in_array($import_action, $allowed_ajax_actions))
{
$out=$ajax_obj->{$import_action}($out);
}
if($data_type=='json')
{
echo json_encode($out);
}
}
exit();
}
public function process_column_val($input_file_data_row, $form_data)
{
$out=array(
'mapping_fields'=>array(),
'meta_mapping_fields'=>array()
);
/**
* Default columns
*/
$mapping_form_data=(isset($form_data['mapping_form_data']) ? $form_data['mapping_form_data'] : array());
$mapping_selected_fields=(isset($mapping_form_data['mapping_selected_fields']) ? $mapping_form_data['mapping_selected_fields'] : array());
$mapping_fields=(isset($mapping_form_data['mapping_fields']) ? $mapping_form_data['mapping_fields'] : array());
/**
* Input date format.
* This will be taken as the global date format for all date fields in the input file.
* If date format is specified in the evaluation section. Then this value will be overriden.
*/
$method_import_form_data=(isset($form_data['method_import_form_data']) ? $form_data['method_import_form_data'] : array());
$input_date_format=(isset($method_import_form_data['wt_iew_date_format']) ? $method_import_form_data['wt_iew_date_format'] : '');
foreach ($mapping_selected_fields as $key => $value)
{
$out['mapping_fields'][$key]=$this->evaluate_data($key, $value, $input_file_data_row, $mapping_fields, $input_date_format);
}
$mapping_form_data=$mapping_fields=$mapping_selected_fields=null;
unset($mapping_form_data, $mapping_fields, $mapping_selected_fields);
/**
* Meta columns
*/
$meta_step_form_data=(isset($form_data['meta_step_form_data']) ? $form_data['meta_step_form_data'] : array());
$mapping_selected_fields=(isset($meta_step_form_data['mapping_selected_fields']) ? $meta_step_form_data['mapping_selected_fields'] : array());
$mapping_fields=(isset($meta_step_form_data['mapping_fields']) ? $meta_step_form_data['mapping_fields'] : array());
foreach ($mapping_selected_fields as $meta_key => $meta_val_arr)
{
$out['meta_mapping_fields'][$meta_key]=array();
$meta_fields_arr=(isset($mapping_fields[$meta_key]) ? $mapping_fields[$meta_key] : array());
foreach ($meta_val_arr as $key => $value)
{
$out['meta_mapping_fields'][$meta_key][$key]=$this->evaluate_data($key, $value, $input_file_data_row, $meta_fields_arr, $input_date_format);
}
}
$meta_step_form_data=$mapping_fields=$mapping_selected_fields=$input_file_data_row=$form_data=null;
unset($meta_step_form_data, $mapping_fields, $mapping_selected_fields, $input_file_data_row, $form_data);
return $out;
}
protected function evaluate_data($key, $value, $data_row, $mapping_fields, $input_date_format)
{
$maping_key = '';
if (preg_match('/{(.*?)}/', $value, $match) == 1) {
$maping_key = $match[1] ? $match[1]:'';
}
$value=$this->add_input_file_data($key, $value, $data_row, $mapping_fields, $input_date_format);
$value= !empty($data_row[$maping_key]) ? $this->do_arithmetic($value) : $value;
$data_row=null;
unset($data_row);
return $value;
}
protected function do_arithmetic($str)
{
$re = '/\[([0-9()+\-*\/. ]+)\]/m';
$matches=array();
$find=array();
$replace=array();
if(preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0))
{
foreach ($matches as $key => $value)
{
if(is_array($value) && count($value)>1)
{
$synatx=$this->validate_syntax($value[1]);
if($synatx)
{
$replace[]=eval('return '.$synatx.';');
}else
{
$replace[]='';
}
$find[]=$value[0];
unset($synatx);
}
}
}
return str_replace($find, $replace, $str);
}
protected function validate_syntax($val)
{
$open_bracket=substr_count($val, '(');
$close_bracket=substr_count($val, ')');
if($close_bracket!=$open_bracket)
{
return false; //invalid
}
//remove whitespaces
$val=str_replace(' ', '', $val);
$re_after='/\b[\+|*|\-|\/]([^0-9\+\-\(])/m';
$re_before='/([^0-9\+\-\)])[\+|*|\-|\/]/m';
$match_after=array();
$match_before=array();
if(preg_match_all($re_after, $val, $match_after, PREG_SET_ORDER, 0) || preg_match_all($re_before, $val, $match_before, PREG_SET_ORDER, 0))
{
return false; //invalid
}
unset($match_after, $match_before, $re_after, $re_before);
/* process + and - symbols */
$val=preg_replace(array('/\+{2,}/m', '/\-{2,}/m'), array('+', '- -'), $val);
return $val;
}
protected function add_input_file_data($key, $str, $data_row, $mapping_fields, $input_date_format)
{
$re = '/\{([^}]+)\}/m';
$matches=array();
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$find=array();
$replace=array();
foreach ($matches as $key => $value)
{
if(is_array($value) && count($value)>1)
{
$data_key=trim($value[1]);
/* Check for date formatting */
$data_key_arr=explode(Wt_Import_Export_For_Woo_Admin_Basic::$wt_iew_prefix."@", $data_key);
$data_format='';
if(count($data_key_arr)==2) /* date format field given while on import */
{
$data_key=$data_key_arr[0]; //first value is the field key
$data_format=$data_key_arr[1]; //second value will be the format
}
/* Pre-defined date field */
if(isset($mapping_fields[$data_key]) && isset($mapping_fields[$data_key][2]) && $mapping_fields[$data_key][2]='date')
{
/**
* Always give preference to evaluation section
* If not specified in evaluation section. Use default format
*/
if($data_format=="")
{
$data_format=$input_date_format;
}
}
$output_val='';
if(isset($data_row[$data_key]))
{
// $output_val=sanitize_text_field($data_row[$data_key]); sanitize_text_field stripping html content
$output_val=($data_row[$data_key]);
}
/**
* This is a date field
*/
if(trim($data_format)!="" && trim($output_val)!="")
{
if(version_compare(PHP_VERSION, '5.6.0', '>='))
{
$date_obj=DateTime::createFromFormat($data_format, $output_val);
if($date_obj)
{
$output_val=$date_obj->format('Y-m-d H:i:s');
}
}else
{
$output_val=date("Y-m-d H:i:s", strtotime(trim(str_replace('/', '-', str_replace('-', '', $output_val)))));
}
}
$replace[]=$output_val;
$find[]=$value[0];
unset($data_key);
}
}
$data_row=null;
unset($data_row);
return str_replace($find, $replace, $str);
}
}
}
Wt_Import_Export_For_Woo_Basic::$loaded_modules['import']=new Wt_Import_Export_For_Woo_Basic_Import();
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_import_main">
<p><?php echo $this->step_description;?></p>
<form class="wt_iew_import_advanced_form">
<table class="form-table wt-iew-form-table">
<?php
Wt_Import_Export_For_Woo_Basic_Common_Helper::field_generator($advanced_screen_fields, $advanced_form_data);
?>
</table>
</form>
</div>
<script type="text/javascript">
/* custom action: other than import, save, update. Eg: schedule */
function wt_iew_custom_action_basic(ajx_dta, action, id)
{
ajx_dta['item_type']=ajx_dta['to_import'];
<?php
do_action('wt_iew_custom_action_basic');
?>
}
</script>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt-iew-plugin-toolbar bottom">
<div style="float:left; padding-top:10px;" class="wt_iew_import_template_name"> </div>
<div style="float:right;">
<div style="float:right;">
<?php
$button_types = array_column(array_values($this->step_btns), 'type');
$last_button_key = array_search('button', array_reverse($button_types, true));
$count = 0;
$button_standard_class = 'media-button';
foreach($this->step_btns as $btnk=>$btnv)
{
$css_class=(isset($btnv['class']) ? $btnv['class'] : '');
$action_type=(isset($btnv['action_type']) ? $btnv['action_type'] : 'non-step');
if($count == $last_button_key){
$button_standard_class = 'button-primary';
}
if($btnv['type']=='button')
{
?>
<button class="button <?php echo $button_standard_class; ?> wt_iew_import_action_btn <?php echo $css_class; ?>" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnv['key'];?>" type="submit">
<?php echo $btnv['text'];?>
</button>
<?php
}
elseif($btnv['type']=='dropdown_button')
{
$btn_arr=(isset($btnv['items']) && is_array($btnv['items']) ? $btnv['items'] : array());
?>
<button type="button" class="button button-primary wt_iew_drp_menu <?php echo $css_class; ?>" data-target="wt_iew_<?php echo $btnk; ?>_drp">
<?php echo $btnv['text'];?> <span class="dashicons dashicons-arrow-down" style="line-height: 28px;"></span>
</button>
<ul class="wt_iew_dropdown <?php echo $css_class; ?>" data-id="wt_iew_<?php echo $btnk; ?>_drp">
<?php
foreach($btn_arr as $btnkk => $btnvv)
{
$field_attr=(isset($btnvv['field_attr']) ? $btnvv['field_attr'] : '');
$action_type=(isset($btnvv['action_type']) ? $btnvv['action_type'] : 'non-step');
?>
<li class="wt_iew_import_action_btn" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnvv['key'];?>" <?php echo $field_attr;?> ><?php echo $btnvv['text'];?></li>
<?php
}
?>
</ul>
<?php
}
elseif($btnv['type']=='hidden_button')
{
?>
<button style="display:none;" class="button button-primary wt_iew_import_action_btn <?php echo $css_class; ?>" data-action-type="<?php echo $action_type; ?>" data-action="<?php echo $btnv['key'];?>" type="submit">
<?php echo $btnv['text'];?>
</button>
<?php
}
elseif($btnv['type']=='text')
{
?>
<span style="line-height:40px; font-weight:bold;" class="<?php echo $css_class; ?>"><?php echo $btnv['text'];?></span>
<?php
}
$count++;
}
?>
</div>
</div>
<span class="spinner" style="margin-top:11px;"></span>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt-iew-settings-header">
<h3>
<?php _e('Import'); ?><?php if($this->step!='post_type'){ ?> <span class="wt_iew_step_head_post_type_name"></span><?php } ?>: <?php echo $this->step_title; ?>
</h3>
<span class="wt_iew_step_info" title="<?php echo $this->step_summary; ?>">
<?php /* step count summary */
echo $this->step_summary;
?>
</span>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<?php
$click_to_use=__('Click to use');
?>
<script type="text/javascript">
var wt_iew_file_head_default=<?php echo json_encode(wt_iew_utf8ize_basic($file_heading_default_fields));?>;
var wt_iew_file_head_meta=<?php echo json_encode(wt_iew_utf8ize_basic($file_heading_meta_fields));?>;
</script>
<!-- Mapping field editor popup -->
<div class="wt_iew_mapping_field_editor_container" data-title="<?php _e('Set value for column:');?> <span class='wt_iew_target_column'></span>" data-module="import">
<div class="wt_iew_mapping_field_editor">
<div class="wt_iew_mapping_field_editor_top">
<p class="wt_iew_mapping_field_editor_info">
<?php esc_html_e('If you want to compute or combine any column values during import you can do it below.'); ?>
(<a target="_blank" href="https://www.webtoffee.com/evaluation-field-in-product-export-import-plugin-for-woocommerce/"><?php esc_html_e('Learn More'); ?>)</a>
<br/><span style="font-size: 95%;color:#6e6d6d;"><b><?php esc_html_e(' Supported operators:'); ?> +, *, /, -, ()</b></span><br/>
<br/><i><span style="font-size: 95%;color:#6e6d6d;"><?php esc_html_e(' Example:'); ?> [{stock}+5] or [{regular_price}+(9/100)*{regular_price}]</span></i>
</p>
<p class="wt_iew_mapping_field_editor_er"></p>
<div class="wt_iew_mapping_field_editor_box">
<textarea class="wt_iew_mapping_field_editor_expression"></textarea>
</div>
</div>
<label class="wt_iew_mapping_popup_label"><?php _e('Input file columns');?></label>
<div class="wt_iew_mapping_field_editor_box">
<input type="text" class="wt_iew_mapping_field_editor_column_search" placeholder="<?php _e('Type here to search');?>"><span style="float: right;position: absolute;top: 15px; left: 25px;" class="dashicons dashicons-search wt-input-column-search"></span>
<div class="wt_iew_mapping_field_selector_box">
<ul class="wt_iew_mapping_field_selector">
<?php
foreach ($file_heading_default_fields as $key => $value)
{
?>
<li title="<?php echo $click_to_use;?>" data-val="<?php echo $key;?>"><?php echo $key;?><br/><span style="color:#cdb2b2;"><?php echo Wt_Iew_IE_Basic_Helper::wt_truncate($value, 80);?></span></li>
<?php
}
foreach ($file_heading_meta_fields as $key => $value)
{
?>
<li title="<?php echo $click_to_use;?>" data-val="<?php echo $key;?>"><?php echo $key;?><br/><span style="color:#cdb2b2;"><?php echo Wt_Iew_IE_Basic_Helper::wt_truncate($value, 80);?></span></li>
<?php
}
?>
</ul>
<div class="wt_iew_mapping_field_selector_no_column"><?php _e('No column found.');?></div>
</div>
</div>
<div class="wt_iew_mapping_field_editor_bottom">
<label><?php _e('Preview');?></label>
<p class="wt_iew_mapping_field_editor_info">
<?php _e('Sample value based on the first record from input file.'); ?>
</p>
<div class="wt_iew_mapping_field_editor_box" style="max-height:80px; overflow:auto; margin-bottom:0px; border:dashed 1px #ccc; padding:5px;">
<div class="wt_iew_mapping_field_editor_sample"></div>
</div>
</div>
</div>
</div>
<!-- Mapping field editor popup -->
<div class="wt_iew_import_main">
<p><?php echo $this->step_description;?></p>
<p class="wt_iew_info_box wt_iew_info">
-- <?php _e('The first row from your input file is considered as a header for mapping columns and hence will NOT BE imported.');?>
<br />
-- <?php _e('Columns are mapped automatically only if a matching header name is found in the input file.');?>
<br/>
-- <?php _e('In the case of empty fields, you can simply click on the respective field and map the corresponding column from your input file.');?>
</p>
<div class="meta_mapping_box">
<div class="meta_mapping_box_hd_nil wt_iew_noselect">
<?php _e('Default fields');?>
<span class="meta_mapping_box_selected_count_box"><span class="meta_mapping_box_selected_count_box_num">0</span> <?php _e(' columns(s) selected'); ?></span>
</div>
<div style="clear:both;"></div>
<div class="meta_mapping_box_con" data-sortable="0" data-loaded="1" data-field-validated="0" data-key="" style="display:inline-block;">
<table class="wt-iew-mapping-tb wt-iew-mapping-tb-imp wt-iew-importer-default-mapping-tb">
<thead>
<tr>
<th>
<input type="checkbox" name="" class="wt_iew_mapping_checkbox_main">
</th>
<th width="35%"><span class="wt_iew_step_head_post_type_name"></span> <?php esc_html_e( 'fields' );?></th>
<th><?php esc_html_e( 'File columns' );?></th>
<th><?php esc_html_e( 'Transform' );?></th>
</tr>
</thead>
<tbody>
<?php
$draggable_tooltip=__("Drag to rearrange the columns");
$tr_count=0;
foreach($form_data_mapping_fields as $key=>$val_arr) /* looping the template form data */
{
$val=$val_arr[0]; /* normal column val */
$checked=$val_arr[1]; /* import this column? */
if(isset($mapping_fields[$key])) /* found in default field list */
{
$label=(isset($mapping_fields[$key]['title']) ? $mapping_fields[$key]['title'] : '');
$description=(isset($mapping_fields[$key]['description']) ? $mapping_fields[$key]['description'] : '');
$type=(isset($mapping_fields[$key]['type']) ? $mapping_fields[$key]['type'] : '');
unset($mapping_fields[$key]); //remove the field from default list
if(isset($file_heading_default_fields[$key])) /* also found in file heading list */
{
unset($file_heading_default_fields[$key]); //remove the field from file heading list
}
include "_import_mapping_tr_html.php";
$tr_count++;
}
elseif(isset($file_heading_default_fields[$key])) /* found in file heading list */
{
$label=$key;
$description=$key;
$type='';
unset($file_heading_default_fields[$key]); //remove the field from file heading list
include "_import_mapping_tr_html.php";
$tr_count++;
}
elseif(isset($file_heading_meta_fields[$key])) /* some meta items will show inside default field list, Eg: yoast */
{
$label=$key;
$description=$key;
$type='';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
include "_import_mapping_tr_html.php";
$tr_count++;
}
}
/**
* ####Important####
* The similar code also done in Default mapping preparation step for quick import.
* If any updates done please update there also
* Method _prepare_for_quick in import ajax class
*/
if(count($mapping_fields)>0)
{
$array_keys_file_heading_default_fields = array_keys($file_heading_default_fields);
$allowed_field_types=array('start_with', 'end_with', 'contain');
foreach($mapping_fields as $key=>$val_arr)
{
$label=(isset($val_arr['title']) ? $val_arr['title'] : '');
$description=(isset($val_arr['description']) ? $val_arr['description'] : '');
$type=(isset($val_arr['type']) ? $val_arr['type'] : '');
$val='';
$checked=0; /* import this column? */
// if(isset($file_heading_default_fields[$key]))
if($case_key = preg_grep("/^$key$/i", $array_keys_file_heading_default_fields)) //preg_grep used escape from case sensitive check.
{
$checked=1; /* import this column? */
// $val='{'.$key.'}';
$val='{'.array_shift($case_key).'}'; // preg_grep give an array with actual index and value
unset($file_heading_default_fields[$key]); //remove the field from file heading list
unset($array_keys_file_heading_default_fields[$key]);
include "_import_mapping_tr_html.php";
$tr_count++;
}
elseif(isset($file_heading_meta_fields[$key])) /* some meta items will show inside default field list, Eg: yoast */
{
$checked=1; /* import this column? */
$val='{'.$key.'}';
unset($file_heading_meta_fields[$key]); //remove the field from file heading list
include "_import_mapping_tr_html.php";
$tr_count++;
}else
{
$field_type=(isset($val_arr['field_type']) ? $val_arr['field_type'] : '');
if($field_type!="" && in_array($field_type, $allowed_field_types)) // it may be a different field type
{
foreach ($file_heading_default_fields as $def_key => $def_val)
{
$matched=false;
if($field_type=='start_with' && strpos($def_key, $key)===0)
{
$matched=true;
}
elseif($field_type=='ends_with' && strrpos($def_key, $key)===(strlen($def_key) - strlen($key)))
{
$matched=true;
}
elseif($field_type=='contains' && strpos($def_key, $key)!==false)
{
$matched=true;
}
if($matched)
{
$checked=1; // import this column?
$val='{'.$def_key.'}';
$label=$def_key;
$key_backup=$key;
$key=$def_key;
unset($file_heading_default_fields[$def_key]); //remove the field from file heading list
include "_import_mapping_tr_html.php";
$tr_count++;
$key=$key_backup;
}
}
}else /* unmatched keys */
{
$checked=0; /* import this column? */
$val='';
include "_import_mapping_tr_html.php";
$tr_count++;
}
}
}
}
if(count($file_heading_default_fields)>0) /* show the remaining items */
{
/*
foreach($file_heading_default_fields as $key=>$sample_val)
{
$label=$key;
$description=$key;
$val='{'.$key.'}';
$checked=1;
include "_import_mapping_tr_html.php";
$tr_count++;
}
*/
}
if($tr_count==0)
{
?>
<tr>
<td colspan="3" style="text-align:center;">
<?php _e('No fields found.'); ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
<div style="clear:both;"></div>
<?php
if($this->mapping_enabled_fields)
{
foreach($this->mapping_enabled_fields as $mapping_enabled_field_key=>$mapping_enabled_field)
{
$mapping_enabled_field=(!is_array($mapping_enabled_field) ? array($mapping_enabled_field, 0) : $mapping_enabled_field);
if(count($form_data_mapping_enabled_fields)>0)
{
if(in_array($mapping_enabled_field_key, $form_data_mapping_enabled_fields))
{
$mapping_enabled_field[1]=1;
}else
{
$mapping_enabled_field[1]=0;
}
}
?>
<div class="meta_mapping_box">
<div class="meta_mapping_box_hd wt_iew_noselect">
<span class="dashicons dashicons-arrow-right"></span>
<?php echo $mapping_enabled_field[0];?>
<span class="meta_mapping_box_selected_count_box"><span class="meta_mapping_box_selected_count_box_num">0</span> <?php _e(' columns(s) selected'); ?></span>
</div>
<div style="clear:both;"></div>
<div class="meta_mapping_box_con" data-sortable="0" data-loaded="0" data-field-validated="0" data-key="<?php echo $mapping_enabled_field_key;?>"></div>
</div>
<div style="clear:both;"></div>
<?php
}
}
?>
</div>
<script type="text/javascript">
var wt_iew_file_head_remaining_meta=<?php echo json_encode(wt_iew_utf8ize_basic($file_heading_meta_fields));?>;
</script>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<tr id="columns_<?php echo $key;?>">
<td>
<input type="checkbox" name="columns_key[]" class="columns_key wt_iew_mapping_checkbox_sub" value="<?php echo $key;?>" <?php echo ($checked==1 ? 'checked' : ''); ?>>
</td>
<td>
<label class="wt_iew_mapping_column_label"><?php echo $label;?></label>
</td>
<td>
<input type="hidden" name="columns_val[]" class="columns_val" value="<?php echo $val;?>" data-type="<?php echo $type;?>">
<span data-wt_iew_popover="1" data-title="" data-content-container=".wt_iew_mapping_field_editor_container" class="wt_iew_mapping_field_val"><?php echo $val;?></span>
</td>
<td>
<span style="margin-left:20px;cursor:pointer" data-wt_iew_popover="1" data-title="" data-content-container=".wt_iew_mapping_field_editor_container" class="dashicons dashicons-edit wt-iew-tips" data-wt-iew-tip="<span class='wt_iew_tooltip_span'><?php _e('Use expression');?></span>"></span>
</td>
</tr>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<table class="wt-iew-mapping-tb wt-iew-importer-meta-mapping-tb wt-iew-mapping-tb-imp" data-field-type="<?php echo $meta_mapping_screen_field_key; ?>"> <thead>
<tr>
<th>
<?php
$is_checked=$meta_mapping_screen_field_val['checked'];
$checked_attr=($is_checked==1 ? ' checked="checked"' : '');
?>
<input type="checkbox" name="" class="wt_iew_mapping_checkbox_main" <?php echo $checked_attr; ?>>
</th>
<th width="35%"><span class="wt_iew_step_head_post_type_name"></span> <?php esc_html_e( 'fields' );?></th>
<th><?php _e('File columns');?></th>
<th><?php esc_html_e( 'Transform' );?></th>
</tr>
</thead>
<tbody>
<?php
$tr_count=0;
foreach($meta_mapping_screen_field_val['fields'] as $key=>$val_arr)
{
extract($val_arr);
include "_import_mapping_tr_html.php";
$tr_count++;
}
if($tr_count==0)
{
?>
<tr>
<td colspan="3" style="text-align:center;">
<?php _e('No fields found.'); ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_import_main">
<p><?php //echo $this->step_description;?></p>
<div class="wt_iew_warn wt_iew_method_import_wrn" style="display:none;">
<?php _e('Please select an import template.');?>
</div>
<table class="form-table wt-iew-form-table">
<tr>
<th><label><?php _e('Import method');?></label></th>
<td colspan="2" style="width:75%;">
<div class="wt_iew_radio_block">
<?php
if(empty($this->mapping_templates)){
unset($this->import_obj->import_methods['template']);
}
foreach($this->import_obj->import_methods as $key => $value)
{
?>
<p>
<input type="radio" value="<?php echo $key;?>" id="wt_iew_import_<?php echo $key;?>_import" name="wt_iew_import_method_import" <?php echo ($this->import_method==$key ? 'checked="checked"' : '');?>><b><label for="wt_iew_import_<?php echo $key;?>_import"><?php echo $value['title']; ?></label></b> <br />
<span><label for="wt_iew_import_<?php echo $key;?>_import"><?php echo $value['description']; ?></label></span>
</p>
<?php
}
?>
</div>
</td>
</tr>
<tr><div id="user-required-field-message" class="updated" style="margin-left:0px;display: none;background: #dceff4;"><p><?php _e('Ensure the import file has the user\'s email ID for a successful import. Use default column name <b>user_email</b> or map the column accordingly if you are using a custom column name.'); ?></p></div></tr>
<tr class="wt-iew-import-method-options wt-iew-import-method-options-template wt-iew-import-template-sele-tr" style="display:none;">
<th><label><?php _e('Import template');?></label></th>
<td>
<select class="wt-iew-import-template-sele">
<option value="0">-- <?php _e('Select a template'); ?> --</option>
<?php
foreach($this->mapping_templates as $mapping_template)
{
?>
<option value="<?php echo $mapping_template['id'];?>" <?php echo ($form_data_import_template==$mapping_template['id'] ? ' selected="selected"' : ''); ?>>
<?php echo $mapping_template['name'];?>
</option>
<?php
}
?>
</select>
</td>
<td>
</td>
</tr>
</table>
<form class="wt_iew_import_method_import_form">
<table class="form-table wt-iew-form-table">
<?php
Wt_Import_Export_For_Woo_Basic_Common_Helper::field_generator($method_import_screen_fields, $method_import_form_data);
?>
</table>
</form>
</div>
<script type="text/javascript">
/* remote file modules can hook */
function wt_iew_set_file_from_fields(file_from)
{
<?php
do_action('wt_iew_importer_file_from_js_fn');
?>
}
function wt_iew_set_validate_file_info(file_from)
{
<?php
do_action('wt_iew_importer_set_validate_file_info');
?>
}
</script>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_import_main">
<p><?php echo $this->step_description;?></p>
<div class="wt_iew_warn wt_iew_post_type_wrn" style="display:none;">
<?php _e('Please select a post type');?>
</div>
<table class="form-table wt-iew-form-table">
<tr>
<th><label><?php _e( 'Select a post type to import', 'users-customers-import-export-for-wp-woocommerce' ); ?></label></th>
<td>
<select name="wt_iew_import_post_type">
<option value="">-- <?php _e( 'Select post type', 'users-customers-import-export-for-wp-woocommerce' ); ?> --</option>
<?php
$item_type = isset($item_type) ? $item_type : 'user';
foreach($post_types as $key=>$value)
{
?>
<option value="<?php echo $key;?>" <?php echo ($item_type==$key ? 'selected' : '');?>><?php echo $value;?></option>
<?php
}
?>
</select>
</td>
<td></td>
</tr>
</table>
<br/>
<?php
$wt_iew_post_types = array(
'product' => array(
'message' => __('The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Products.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_review' => array(
'message' => __('The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product reviews.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_categories' => array(
'message' => __('The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product categories.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'product_tags' => array(
'message' => __('The <b>Product Import Export for WooCommerce Add-On</b> is required to export WooCommerce Product tags.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=product-import-export-for-woo')
),
'order' => array(
'message' => __('The <b>Order Export & Order Import for WooCommerce Add-On</b> is required to export WooCommerce Orders.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=order-import-export-for-woocommerce')
),
'coupon' => array(
'message' => __('The <b>Order Export & Order Import for WooCommerce Add-On</b> is required to export WooCommerce Coupons.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => admin_url('plugin-install.php?tab=plugin-information&plugin=order-import-export-for-woocommerce')
),
'subscription' => array(
'message' => __('The <b>Order, Coupon, Subscription Export Import for WooCommerce</b> premium is required to import WooCommerce Subscriptions.', 'users-customers-import-export-for-wp-woocommerce' ),
'link' => esc_url( 'https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp_post_type&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=' . WT_U_IEW_VERSION )
)
);
foreach ($wt_iew_post_types as $wt_iew_post_type => $wt_iew_post_type_detail) { ?>
<div class="wt_iew_free_addon wt_iew_free_addon_warn <?php echo 'wt_iew_type_'.$wt_iew_post_type; ?>" style="display:none">
<p><?php echo $wt_iew_post_type_detail['message']; ?></p>
<?php
$install_now = esc_html( 'Install now for free', 'users-customers-import-export-for-wp-woocommerce' );
$is_pro = false;
if( 'subscription' === $wt_iew_post_type ){
$install_now = esc_html( 'Get the plugin', 'users-customers-import-export-for-wp-woocommerce' );
$is_pro = true;
}
?>
<a target="_blank" href="<?php echo $wt_iew_post_type_detail['link']; ?>"><?php esc_attr_e( $install_now ); ?></a>
</div>
<?php
}
?>
</div>
\ No newline at end of file
<?php
/**
* Main view file of import section
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
?>
<?php
do_action('wt_iew_importer_before_head');
$wf_admin_view_path=plugin_dir_path(WT_U_IEW_PLUGIN_FILENAME).'admin/views/';
?>
<style type="text/css">
.wt_iew_import_step{ display:none; }
.wt_iew_import_step_loader{ width:100%; height:400px; text-align:center; line-height:400px; font-size:14px; }
.wt_iew_import_step_main{ float:left; box-sizing:border-box; padding:15px; padding-bottom:0px; width:95%; margin:30px 2.5%; background:#fff; box-shadow:0px 2px 2px #ccc; border:solid 1px #efefef; }
.wt_iew_import_main{ padding:20px 0px; }
select[name=wt_iew_file_from]{visibility: hidden;}
.wt-something-went-wrong-wrap{position: absolute; margin-top: 150px; left:25%;color:#FFF;width:450px;height:275px;background: #FFF;padding: 25px; text-align: center;border: 1px solid #B32D2E;border-radius: 10px;box-shadow: 0px 0px 2px 2px #cdc8c8;}
</style>
<div class="wt_iew_view_log wt_iew_popup" style="text-align:left">
<div class="wt_iew_popup_hd">
<span style="line-height:40px;" class="dashicons dashicons-media-text"></span>
<span class="wt_iew_popup_hd_label"><?php _e('History Details');?></span>
<div class="wt_iew_popup_close">X</div>
</div>
<div class="wt_iew_log_container" style="padding:25px;">
</div>
</div>
<div class="wt_iew_import_progress_wrap wt_iew_popup">
<div class="wt_iew_popup_hd wt_iew_import_progress_header">
<span style="line-height:40px;" class="dashicons dashicons-media-text"></span>
<span class="wt_iew_popup_hd_label"><?php _e('Import progress');?></span>
<div class="wt_iew_popup_close">X</div>
</div>
<div class="wt_iew_import_progress_content" style="max-height:620px;overflow: auto;">
<table id="wt_iew_import_progress" class="widefat_importer widefat wt_iew_import_progress wp-list-table fixed striped history_list_tb log_list_tb">
<thead>
<tr>
<th style="width:15%" class="row"><?php _e( 'Row' ); ?></th>
<th style="width:20%"><?php _e( 'Item' ); ?></th>
<th style="width:50%"><?php _e( 'Message' ); ?></th>
<th style="width:20%" class="reason"><?php _e( 'Status' ); ?></th>
</tr>
</thead>
<tbody id="wt_iew_import_progress_tbody"></tbody>
</table>
</div>
<br/>
<div id="wt_iew_import_progress_end"></div>
<div class="progressa">
<div class="progressab" style="background-color: rgb(178, 222, 75);width:5px; "></div>
</div>
<div class="wt-iew-import-completed" style="display:none;border-top: 1px outset;">
<h3><?php _e('Import Completed'); ?><span style="color:green" class="dashicons dashicons-yes-alt"></span></h3>
<div class="wt-iew-import-results">
<div class="wt-iew-import-result-row">
<div class="wt-iew-import-results-total wt-iew-import-result-column"><?php _e('Total records identified'); ?>:<span id="wt-iew-import-results-total-count"></span></div>
<div style="color:green" class="wt-iew-import-results-imported wt-iew-import-result-column"><?php _e('Imported successfully'); ?>:<span id="wt-iew-import-results-imported-count"></span></div>
<div style="color:red" class="wt-iew-import-results-failed wt-iew-import-result-column"><?php _e('Failed/Skipped'); ?>:<span id="wt-iew-import-results-failed-count"></span></div>
</div>
</div>
</div>
<div class="wt-iew-plugin-toolbar bottom" style="padding:5px;margin-left:-10px;">
<div style="float: left">
<div class="wt-iew-import-time" style="display:none;padding-left: 40px;margin-top:10px;" ><?php _e( 'Time taken to complete' );?>:<span id="wt-iew-import-time-taken"></span></div>
</div>
<div style="float:right;">
<div style="float:right;">
<a target="_blank" href="#" class="button button-primary wt_iew_view_imported_items" data-log-file="" style="display:none" type="button" style="margin-right:10px;"><?php _e( 'View Item' );?></a>
<button class="button button-primary wt_iew_view_log_btn" data-log-file="" style="display:none" type="button" style="margin-right:10px;"><?php _e( 'View Log' );?></button>
<button class="button button-primary wt_iew_popup_cancel_btn" type="button" style="margin-right:10px;"><?php _e( 'Cancel' );?></button>
<button class="button button-primary wt_iew_popup_close_btn" style="display:none" type="button" style="margin-right:10px;"><?php _e( 'Close' );?></button>
</div>
</div>
</div>
</div>
<?php
Wt_Iew_IE_Basic_Helper::debug_panel($this->module_base);
?>
<?php include WT_U_IEW_PLUGIN_PATH."/admin/views/_save_template_popup.php"; ?>
<h2 class="wt_iew_page_hd"><?php _e('Import'); ?><span class="wt_iew_post_type_name"></span></h2>
<span class="wt-webtoffee-icon" style="float: <?php echo (!is_rtl()) ? 'right' : 'left'; ?>; padding-<?php echo (!is_rtl()) ? 'right' : 'left'; ?>:30px; margin-top: -25px;">
<?php _e('Developed by'); ?> <a target="_blank" href="https://www.webtoffee.com">
<img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/webtoffee-logo_small.png';?>" style="max-width:100px;">
</a>
</span>
<?php
if($requested_rerun_id>0 && $this->rerun_id==0)
{
?>
<div class="wt_iew_warn wt_iew_rerun_warn">
<?php _e('Unable to handle Re-Run request.');?>
</div>
<?php
}
?>
<div class="wt_iew_loader_info_box"></div>
<div class="wt_iew_overlayed_loader"></div>
<div class="wt_iew_import_step_main_wrapper" style="width:68%; float: left">
<div class="wt-something-went-wrong" style="position:relative;display:none;">
<div class="wt-something-went-wrong-wrap">
<p class="wt_iew_popup_close" style="float:right;margin-top: -15px !important;margin-right: -15px !important;line-height: 0;"><a href="javascript:void(0)"><img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/wt-close-button.png';?>"/></a></p>
<img src="<?php echo WT_U_IEW_PLUGIN_URL.'/assets/images/wt-error-icon.png';?>"/>
<h3><?php esc_html_e('Something went wrong'); ?></h3>
<p style="color:#000;text-align: left;"><?php esc_html_e('We are unable to complete your request.Try reducing the import batch count to 5 or less and increasing the Maximum execution time in the '); ?><a target="_blank" href="<?php echo admin_url('admin.php?page=wt_import_export_for_woo_basic') ?>"><?php esc_html_e('General settings'); ?></a>.</p>
<p style="color:#000;text-align: left;"><?php esc_html_e(' If not resolved, contact the');?> <a target="_blank" href="https://www.webtoffee.com/contact/"><?php esc_html_e('support team'); ?></a> <?php esc_html_e('with the');?> <a target="_blank" href="<?php echo admin_url('admin.php?page=wc-status&tab=logs') ?>"><?php esc_html_e('WooCommerce fatal error log'); ?></a>, <?php esc_html_e('if any'); ?>.</p>
<br/>
<a href="javascript:void(0)" onclick='wt_iew_basic_import.refresh_import_page();' class="button button-primary"><?php esc_html_e('Try again'); ?></a>
</div>
</div>
<div class="wt_iew_import_step_main" style = "width:100%; float: left">
<?php
foreach($this->steps as $stepk=>$stepv)
{
?>
<div class="wt_iew_import_step wt_iew_import_step_<?php echo $stepk;?>" data-loaded="0"></div>
<?php
}
?>
</div>
</div>
<?php
include $wf_admin_view_path."market.php";
?>
<script type="text/javascript">
/* external modules can hook */
function wt_iew_importer_validate_basic(action, action_type, is_previous_step)
{
var is_continue=true;
<?php
do_action('wt_iew_importer_validate_basic');
?>
return is_continue;
}
function wt_iew_importer_reset_form_data_basic()
{
<?php
do_action('wt_iew_importer_reset_form_data_basic');
?>
}
</script>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
global $wpdb;
$columns = array(
'ID' => 'ID',
'customer_id' => 'customer_id',
'user_login' => 'user_login',
'user_pass' => 'user_pass',
'user_nicename' => 'user_nicename',
'user_email' => 'user_email',
'user_url' => 'user_url',
'user_registered' => 'user_registered',
'display_name' => 'display_name',
'first_name' => 'first_name',
'last_name' => 'last_name',
'user_status' => 'user_status',
'roles' => 'roles'
);
// default meta
$columns['nickname'] = 'nickname';
$columns['first_name'] = 'first_name';
$columns['last_name'] = 'last_name';
$columns['description'] = 'description';
$columns['rich_editing'] = 'rich_editing';
$columns['syntax_highlighting'] = 'syntax_highlighting';
$columns['admin_color'] = 'admin_color';
$columns['use_ssl'] = 'use_ssl';
$columns['show_admin_bar_front'] = 'show_admin_bar_front';
$columns['locale'] = 'locale';
$columns[$wpdb->prefix.'user_level'] = $wpdb->prefix.'user_level';
$columns['dismissed_wp_pointers'] = 'dismissed_wp_pointers';
$columns['show_welcome_panel'] = 'show_welcome_panel';
$columns['session_tokens'] = 'session_tokens';
$columns['last_update'] = 'last_update';
if (!function_exists( 'is_plugin_active' ) )
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
if( is_plugin_active( 'woocommerce/woocommerce.php' ) ):
$columns['total_spent'] = 'total_spent';
$columns['billing_first_name'] = 'billing_first_name';
$columns['billing_last_name'] = 'billing_last_name';
$columns['billing_company'] = 'billing_company';
$columns['billing_email'] = 'billing_email';
$columns['billing_phone'] = 'billing_phone';
$columns['billing_address_1'] = 'billing_address_1';
$columns['billing_address_2'] = 'billing_address_2';
$columns['billing_postcode'] = 'billing_postcode';
$columns['billing_city'] = 'billing_city';
$columns['billing_state'] = 'billing_state';
$columns['billing_country'] = 'billing_country';
$columns['shipping_first_name'] = 'shipping_first_name';
$columns['shipping_last_name'] = 'shipping_last_name';
$columns['shipping_company'] = 'shipping_company';
$columns['shipping_phone'] = 'shipping_phone';
$columns['shipping_address_1'] = 'shipping_address_1';
$columns['shipping_address_2'] = 'shipping_address_2';
$columns['shipping_postcode'] = 'shipping_postcode';
$columns['shipping_city'] = 'shipping_city';
$columns['shipping_state'] = 'shipping_state';
$columns['shipping_country'] = 'shipping_country';
endif;
/*
global $wpdb;
$meta_keys = $wpdb->get_col("SELECT distinct(meta_key) FROM $wpdb->usermeta");
foreach ($meta_keys as $meta_key) {
if (empty($columns[$meta_key])) {
$columns['meta:'.$meta_key] = 'meta:'.$meta_key; // adding an extra prefix for identifying meta while import process
}
}
*/
return apply_filters('hf_csv_customer_post_columns', $columns);
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
$columns = array(
'ID' => array('title'=>'ID','description'=>'Customer/User ID'),
'customer_id' => array('title'=>'Customer ID','description'=>'Customer ID'),
'user_login' => array('title'=>'User Login','description'=>'User Login'),
'user_pass' => array('title'=>'user_pass','description'=>'user_pass'),
'user_nicename' => array('title'=>'user_nicename','description'=>'user_nicename'),
'user_email' => array('title'=>'user_email','description'=>'user_email'),
'user_url' => array('title'=>'user_url','description'=>'user_url'),
'user_registered' => array('title'=>'user_registered','description'=>'user_registered'),
'display_name' => array('title'=>'display_name','description'=>'display_name'),
'first_name' => array('title'=>'first_name','description'=>'first_name'),
'last_name' => array('title'=>'last_name','description'=>'last_name'),
'user_status' => array('title'=>'user_status','description'=>'user_status'),
'roles' => array('title'=>'roles','description'=>'roles'),
);
// default meta
$columns['nickname'] = array('title'=>'nickname','description'=>'');
$columns['first_name'] = array('title'=>'first_name','description'=>'');
$columns['last_name'] = array('title'=>'last_name','description'=>'');
$columns['description'] = array('title'=>'description','description'=>'');
$columns['rich_editing'] = array('title'=>'rich_editing','description'=>'');
$columns['syntax_highlighting'] = array('title'=>'syntax_highlighting','description'=>'');
$columns['admin_color'] = array('title'=>'admin_color','description'=>'');
$columns['use_ssl'] = array('title'=>'use_ssl','description'=>'');
$columns['show_admin_bar_front'] = array('title'=>'show_admin_bar_front','description'=>'');
$columns['locale'] = array('title'=>'locale','description'=>'');
$columns['wp_user_level'] = array('title'=>'wp_user_level','description'=>'');
$columns['dismissed_wp_pointers'] = array('title'=>'dismissed_wp_pointers','description'=>'');
$columns['show_welcome_panel'] = array('title'=>'show_welcome_panel','description'=>'');
$columns['session_tokens'] = array('title'=>'session_tokens','description'=>'');
$columns['last_update'] = array('title'=>'last_update','description'=>'');
if( is_plugin_active( 'woocommerce/woocommerce.php' ) ):
$columns['total_spent'] = array('title'=>'total_spent','description'=>'');
$columns['billing_first_name'] = array('title'=>'Billing first name','description'=>'');
$columns['billing_last_name'] = array('title'=>'Billing last name','description'=>'');
$columns['billing_company'] = array('title'=>'Billing company','description'=>'');
$columns['billing_email'] = array('title'=>'Billing email','description'=>'');
$columns['billing_phone'] = array('title'=>'Billing phone','description'=>'');
$columns['billing_address_1'] = array('title'=>'Billing address 1','description'=>'');
$columns['billing_address_2'] = array('title'=>'Billing address 2','description'=>'');
$columns['billing_postcode'] = array('title'=>'Billing postcode','description'=>'');
$columns['billing_city'] = array('title'=>'Billing city','description'=>'');
$columns['billing_state'] = array('title'=>'Billing state','description'=>'');
$columns['billing_country'] = array('title'=>'Billing country','description'=>'');
$columns['shipping_first_name'] = array('title'=>'Shipping first name','description'=>'');
$columns['shipping_last_name'] = array('title'=>'Shipping last name','description'=>'');
$columns['shipping_company'] = array('title'=>'Shipping company','description'=>'');
$columns['shipping_phone'] = array('title'=>'Shipping phone','description'=>'');
$columns['shipping_address_1'] = array('title'=>'Shipping address 1','description'=>'');
$columns['shipping_address_2'] = array('title'=>'Shipping address 2','description'=>'');
$columns['shipping_postcode'] = array('title'=>'Shipping postcode','description'=>'');
$columns['shipping_city'] = array('title'=>'Shipping city','description'=>'');
$columns['shipping_state'] = array('title'=>'Shipping state','description'=>'');
$columns['shipping_country'] = array('title'=>'Shipping country','description'=>'');
endif;
//global $wpdb;
//
//$meta_keys = $wpdb->get_col("SELECT distinct(meta_key) FROM $wpdb->usermeta WHERE meta_key NOT IN ('wp_capabilities')");
//
//foreach ($meta_keys as $meta_key) {
// if (empty($columns[$meta_key])) {
// $columns['meta:'.$meta_key] = array('title'=>'meta:'.$meta_key,'description'=>'');
// }
//}
return apply_filters('hf_csv_customer_import_columns', $columns);
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
class Wt_Import_Export_For_Woo_Basic_User_Bulk_Export {
/**
* Customer Exporter
* @param array $user_IDS [optional]<p>Array of User Id.</p>
*/
public static function do_export($user_IDS = array(), $ftp = null) {
global $wpdb;
$csv_columns = include_once( __DIR__ . '/../data/data-user-columns.php' );
$user_columns_name = !empty($_POST['columns_name']) ? $_POST['columns_name'] : $csv_columns;
$export_columns = !empty($_POST['columns']) ? $_POST['columns'] : array();
$delimiter = !empty($_POST['delimiter']) ? $_POST['delimiter'] : ',';
$wpdb->hide_errors();
@set_time_limit(0);
if (function_exists('apache_setenv'))
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ob_end_clean();
$file_name = apply_filters('wt_iew_product_bulk_export_user_filename', 'user_export_' . date('Y-m-d-h-i-s') . '.csv');
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Pragma: no-cache');
header('Expires: 0');
$fp = fopen('php://output', 'w');
$args = array(
'fields' => 'ID'
);
if (!empty($user_IDS)) {
$args['include'] = $user_IDS; // An array of user IDs to include. Default empty array.
}
$users = get_users($args);
// Variable to hold the CSV data we're exporting
$row = array();
// Export header rows
foreach ($csv_columns as $column => $value) {
if (!$export_columns || in_array($column, $export_columns)) {
$temp_head = esc_attr($user_columns_name[$column]);
$row[] = $temp_head;
}
}
$row = array_map('Wt_Import_Export_For_Woo_Basic_User_Bulk_Export::wrap_column', apply_filters('wt_user_alter_csv_header', $row));
fwrite($fp, implode($delimiter, $row) . "\n");
$header_row = $row;
unset($row);
// Loop users
foreach ($users as $user) {
$data = self::get_customers_csv_row($user, $export_columns, $csv_columns, $header_row);
$data = apply_filters('hf_customer_csv_exclude_admin', $data);
$row = array_map('Wt_Import_Export_For_Woo_Basic_User_Bulk_Export::wrap_column', $data);
fwrite($fp, implode($delimiter, $row) . "\n");
unset($row);
unset($data);
}
fclose($fp);
exit;
}
public static function format_data($data) {
//if (!is_array($data));
//$data = (string) urldecode($data);
$enc = mb_detect_encoding($data, 'UTF-8, ISO-8859-1', true);
$data = ( $enc == 'UTF-8' ) ? $data : utf8_encode($data);
return $data;
}
/**
* Wrap a column in quotes for the CSV
* @param string data to wrap
* @return string wrapped data
*/
public static function wrap_column($data) {
return '"' . str_replace('"', '""', $data) . '"';
}
/**
* Get the customer data for a single CSV row
* @since 3.0
* @param int $customer_id
* @param array $export_columns - user selected columns / all
* @return array $meta_keys customer/user meta data
*/
public static function get_customers_csv_row($id, $export_columns, $csv_columns, $header_row) {
$user = get_user_by('id', $id);
$customer_data = array();
foreach ($csv_columns as $key) {
if (!$export_columns || in_array($key, $export_columns)) {
$key = trim(str_replace('meta:', '', $key));
if ($key == 'roles') {
$user_roles = (!empty($user->roles)) ? $user->roles : array();
$customer_data['roles'] = implode(', ', $user_roles);
continue;
}
if ( 'session_tokens' == $key ) {
$customer_data[$key] = !empty($user->{$key}) ? base64_encode(json_encode(maybe_unserialize($user->{$key}))) : '';
continue;
}
if ($key != 'customer_id') {
$customer_data[$key] = !empty($user->{$key}) ? maybe_serialize($user->{$key}) : '';
} else {
$customer_data[$key] = !empty($user->ID) ? maybe_serialize($user->ID) : '';
}
} else {
continue;
}
}
/*
* CSV Customer Export Row.
* Filter the individual row data for the customer export
* @since 3.0
* @param array $customer_data
*/
return apply_filters('hf_customer_csv_export_data', $customer_data, $header_row);
}
}
<?php
if (!defined('WPINC')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_basic_User_Export')){
class Wt_Import_Export_For_Woo_basic_User_Export {
public $parent_module = null;
public function __construct($parent_object) {
$this->parent_module = $parent_object;
}
public function prepare_header() {
$export_columns = $this->parent_module->get_selected_column_names();
return apply_filters('hf_csv_customer_post_columns', $export_columns);
}
/**
* Prepare data that will be exported.
*/
public function prepare_data_to_export($form_data, $batch_offset) {
$export_user_roles = !empty($form_data['filter_form_data']['wt_iew_roles']) ? $form_data['filter_form_data']['wt_iew_roles'] : array();
$export_sortby = !empty($form_data['filter_form_data']['wt_iew_sort_columns']) ? $form_data['filter_form_data']['wt_iew_sort_columns'] : array('user_login');
$export_sort_order = !empty($form_data['filter_form_data']['wt_iew_order_by']) ? $form_data['filter_form_data']['wt_iew_order_by'] : 'ASC';
$user_ids = !empty($form_data['filter_form_data']['wt_iew_email']) ? $form_data['filter_form_data']['wt_iew_email'] : array(); // user email fields return user ids
$export_start_date = !empty($form_data['filter_form_data']['wt_iew_date_from']) ? $form_data['filter_form_data']['wt_iew_date_from'] : '';
$export_end_date = !empty($form_data['filter_form_data']['wt_iew_date_to']) ? $form_data['filter_form_data']['wt_iew_date_to'] : '';
$v_export_guest_user = ( !empty( $form_data['advanced_form_data']['wt_iew_export_guest_user'] ) && ( 'Yes' === $form_data['advanced_form_data']['wt_iew_export_guest_user'] || $form_data['advanced_form_data']['wt_iew_export_guest_user'] == 1 ) ) ? true : false;
$export_limit = !empty($form_data['filter_form_data']['wt_iew_limit']) ? intval($form_data['filter_form_data']['wt_iew_limit']) : 999999999; //user limit
$current_offset = !empty($form_data['filter_form_data']['wt_iew_offset']) ? intval($form_data['filter_form_data']['wt_iew_offset']) : 0; //user offset
$batch_count = !empty($form_data['advanced_form_data']['wt_iew_batch_count']) ? $form_data['advanced_form_data']['wt_iew_batch_count'] : Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings('default_export_batch');
$real_offset = ($current_offset + $batch_offset);
if($batch_count<=$export_limit)
{
if(($batch_offset+$batch_count)>$export_limit) //last offset
{
$limit=$export_limit-$batch_offset;
}else
{
$limit=$batch_count;
}
}else
{
$limit=$export_limit;
}
$data_array = array();
if ($batch_offset < $export_limit)
{
$sortby_check = array_intersect($export_sortby, array('ID', 'user_registered', 'user_email', 'user_login', 'user_nicename'));
if (empty($sortby_check)) {
$wt_export_sortby = $export_sortby[0];
$args = array(
'fields' => 'ID', // exclude standard wp_users fields from get_users query -> get Only ID##
'role__in' => $export_user_roles, //An array of role names. Matched users must have at least one of these roles. Default empty array.
'number' => $limit,
'offset' => $real_offset,
'orderby' => 'meta_value',
'meta_key' => $wt_export_sortby,
'order' => $export_sort_order,
'date_query' => array(
array(
'after' => $export_start_date,
'before' => $export_end_date,
'inclusive' => true
)),
);
} else {
$args = array(
'fields' => 'ID', // exclude standard wp_users fields from get_users query -> get Only ID##
'role__in' => $export_user_roles, //An array of role names. Matched users must have at least one of these roles. Default empty array.
'number' => $limit,
'offset' => $real_offset,
'orderby' => $export_sortby,
'order' => $export_sort_order,
'date_query' => array(
array(
'after' => $export_start_date,
'before' => $export_end_date,
'inclusive' => true
)),
);
}
if (!empty($user_ids)) {
$args['include'] = $user_ids;
}
$users = get_users($args);
/**
* taking total records
*/
$total_records=0;
if($batch_offset==0) //first batch
{
$total_item_args=$args;
$total_item_args['fields'] = 'ids';
$total_item_args['number']=$export_limit; //user given limit
$total_item_args['offset']=$current_offset; //user given offset
$total_record_count = get_users($total_item_args);
$total_records=count($total_record_count);
set_transient( 'wt_total_order_count', $total_records, 60*60*1); // 1 hour
}
// Loop users
foreach ($users as $user) {
$data = self::get_customers_csv_row($user);
$data_array[] = apply_filters('hf_customer_csv_exclude_admin', $data);
}
$is_last_offset = false;
$last_batch_count = $real_offset + $batch_count;
if($last_batch_count>=get_transient('wt_total_order_count')) //finished
{
$is_last_offset=true;
delete_transient('wt_total_order_count');
}
if($is_last_offset) //last batch
{
if ($v_export_guest_user) {
$query_args = array(
'fields' => 'ids',
'post_type' => 'shop_order',
'post_status' => 'any',
'posts_per_page' => -1,
);
$query_args['meta_query'] = array(array(
'key' => '_customer_user',
'value' => 0,
'compare' => '',
));
$query = new WP_Query($query_args);
$order_ids = $query->posts;
$guest_email_list = array();
foreach ($order_ids as $order_id) {
$order = new WC_Order($order_id);
if($order->get_billing_email()){
$user = get_user_by('email', $order->get_billing_email());
if (!isset($user->ID)) {
if(!in_array($order->get_billing_email(), $guest_email_list)){
$data = self::get_guest_customers_csv_row($order);
$data_array[] = apply_filters('hf_customer_csv_exclude_admin', $data);
$guest_email_list[] = $order->get_billing_email();
}
}
}
}
}
}
$return['total'] = $total_records;
$return['data'] = $data_array;
return $return;
}
}
public function get_customers_csv_row($id) {
global $wpdb;
$csv_columns = $this->parent_module->get_selected_column_names();
$user = get_user_by('id', $id);
$customer_data = array();
foreach ($csv_columns as $key => $value) {
$key = trim(str_replace('meta:', '', $key));
if ($key == 'roles') {
$user_roles = (!empty($user->roles)) ? $user->roles : array();
$customer_data['roles'] = implode(', ', $user_roles);
continue;
}
if ($key == 'customer_id') {
$customer_data[$key] = !empty($user->ID) ? maybe_serialize($user->ID) : '';
continue;
}
if ($key == 'session_tokens') {
$customer_data[$key] = !empty($user->{$key}) ? base64_encode(json_encode(maybe_unserialize($user->{$key}))) : '';
continue;
}
if ( 'total_spent' === $key ) {
$customer_data[$key] = !empty($user->ID) ? wc_get_customer_total_spent($user->ID) : '';
continue;
}
if($key == $wpdb->prefix.'user_level'){
$customer_data[$key] = (!empty($user->{$key})) ? $user->{$key} : 0;
continue;
}
$customer_data[$key] = isset($user->{$key}) ? maybe_serialize($user->{$key}) : '';
}
/*
* CSV Customer Export Row.
* Filter the individual row data for the customer export
* @since 3.0
* @param array $customer_data
*/
return apply_filters('hf_customer_csv_export_data', $customer_data, $csv_columns);
}
/**
* CSV Guest Customer Export Row
*
* @param WC_Order $order Order object.
* @return array $customer_data
*/
public function get_guest_customers_csv_row($order) {
$customer_data = array();
$csv_columns = $this->parent_module->get_selected_column_names();
$key_array = array('user_email', 'billing_first_name', 'billing_last_name', 'billing_company', 'billing_email', 'billing_phone', 'billing_address_1', 'billing_address_2', 'billing_postcode', 'billing_city', 'billing_state', 'billing_country', 'shipping_first_name', 'shipping_last_name', 'shipping_company', 'shipping_phone', 'shipping_address_1', 'shipping_address_2', 'shipping_postcode', 'shipping_city', 'shipping_state', 'shipping_country', 'shipping_method');
foreach ( $csv_columns as $key ) {
$data = '';
if ( in_array( $key, $key_array ) ) {
if ( 'user_email' === $key ) {
$customer_data[$key] = $order->get_billing_email();
continue;
}
$method_name = "get_{$key}";
if( is_callable( array( $order, $method_name ) ) ){
$data = $order->$method_name();
}
if ( !empty( $data ) ) {
$data = maybe_serialize( $order->$method_name() );
} else {
$data = '';
}
$customer_data[$key] = $data;
} else {
$customer_data[$key] = '';
}
}
/*
* CSV Guest Customer Export Row.
* Filter the individual row data for the Guest customer export
* @since 3.0
* @param array $customer_data
*/
return apply_filters('wt_guest_customer_export_data', $customer_data, $csv_columns);
}
}
}
<?php
if (!defined('WPINC')) {
exit;
}
use Automattic\WooCommerce\Admin\ReportsSync;
if(!class_exists('Wt_Import_Export_For_Woo_basic_User_Import')){
class Wt_Import_Export_For_Woo_basic_User_Import {
public $parent_module = null;
public $parsed_data = array();
var $merge;
public $merge_with = 'id';
public $found_action = 'skip';
public $id_conflict = 'skip';
public $is_user_exist = false;
// Results
var $import_results = array();
var $row;
var $post_defaults; // Default post data
var $postmeta_defaults; // default post meta
var $postmeta_allowed; // post meta validation
public function __construct($parent_object) {
$this->parent_module = $parent_object;
$this->user_all_fields = include plugin_dir_path( __FILE__).'../data/data-user-columns.php';
$this->user_base_fields = array_slice($this->user_all_fields, 0, 13);
$this->user_meta_fields = array_slice($this->user_all_fields, 13);
}
public function hf_log_data_change($content = 'review-csv-import', $data = '') {
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', $data);
}
public function prepare_data_to_import($import_data,$form_data, $batch_offset, $is_last_batch){
$this->merge_with = !empty($form_data['advanced_form_data']['wt_iew_merge_with']) ? $form_data['advanced_form_data']['wt_iew_merge_with'] : 'email';
$this->found_action = !empty($form_data['advanced_form_data']['wt_iew_found_action']) ? $form_data['advanced_form_data']['wt_iew_found_action'] : 'skip';
$this->use_same_password = isset($form_data['advanced_form_data']['wt_iew_use_same_password']) ? $form_data['advanced_form_data']['wt_iew_use_same_password'] : 1;
wp_defer_term_counting(true);
wp_defer_comment_counting(true);
wp_suspend_cache_invalidation(true);
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Preparing for import.");
$success = 0;
$failed = 0;
$msg = 'User imported successfully.';
foreach ($import_data as $key => $data) {
$row = $batch_offset+$key+1;
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Row :$row - Parsing item.");
$parsed_data = $this->parse_users($data);
if (!is_wp_error($parsed_data)){
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Row :$row - Processing item.");
$result = $this->process_users($parsed_data,$data);
if(!is_wp_error($result)){
if($this->is_user_exist){
$msg = 'User updated successfully.';
}
$this->import_results[$row] = array('row'=>$row, 'message'=>$msg, 'status'=>true, 'status_msg' => __( 'Success' ), 'post_id'=>$result['id'], 'post_link' => Wt_Import_Export_For_Woo_basic_User::get_item_link_by_id($result['id']));
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Row :$row - ".$msg);
$success++;
}else{
$this->import_results[$row] = array('row'=>$row, 'message'=>$result->get_error_message(), 'status'=>false, 'status_msg' => __( 'Failed/Skipped' ), 'post_id'=>'', 'post_link' => array( 'title' => __( 'Untitled' ), 'edit_url' => false ) );
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Row :$row - Processing failed. Reason: ".$result->get_error_message());
$failed++;
}
}else{
$this->import_results[$row] = array('row'=>$row, 'message'=>$parsed_data->get_error_message(), 'status'=>false, 'status_msg' => __( 'Failed/Skipped' ), 'post_id'=>'', 'post_link' => array( 'title' => __( 'Untitled' ), 'edit_url' => false ) );
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->parent_module->module_base, 'import', "Row :$row - Parsing failed. Reason: ".$parsed_data->get_error_message());
$failed++;
}
unset($data, $parsed_data);
}
wp_suspend_cache_invalidation(false);
wp_defer_term_counting(false);
wp_defer_comment_counting(false);
$import_response=array(
'total_success'=>$success,
'total_failed'=>$failed,
'log_data'=>$this->import_results,
);
if($is_last_batch){
/**
* Regenerate data for reports section.
*
* @param int|bool $days Number of days to import.
* @param bool $skip_existing Skip existing records.
* @return string
*/
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
$days = false; // Initiate now.
$skip_existing = 1;
ReportsSync::regenerate_report_data( $days, $skip_existing );
}
}
return $import_response;
}
/**
* Parse users
* @param array $item
* @return array
*/
public function parse_users( $data ) {
try{
$data = apply_filters('wt_user_importer_pre_parse_data', $data);
$item = $data['mapping_fields'];
foreach ($data['meta_mapping_fields'] as $value) {
$item = array_merge($item,$value);
}
global $wpdb;
$this->is_user_exist = false;
$this->merge = false;
$id = $user_id = isset($item['ID']) && !empty($item['ID']) ? absint($item['ID']) : 0;
$id_found_with_id = '';
if($id && 'id' == $this->merge_with){
$id_found_with_id = get_userdata($id);
if ($id_found_with_id) {
$this->is_user_exist = true;
$user_id = $id;
}
}
$email = isset($item['user_email']) && '' != $item['user_email'] ? trim($item['user_email']) : '';
$id_found_with_email = '';
if(!empty($email) && 'email' == $this->merge_with){
if (is_email($email) && false !== email_exists($email)) {
$id_found_with_email = email_exists($email);
$this->is_user_exist = true;
$user_id = $id_found_with_email;
}
}
$username = isset($item['user_login']) && '' != $item['user_login'] ? trim($item['user_login']) : '';
$id_found_with_username = '';
if(!empty($username) && 'username' == $this->merge_with){
if (false !== username_exists($username)) {
$id_found_with_username = username_exists($username);
$this->is_user_exist = true;
$user_id = $id_found_with_username;
}
}
if($this->is_user_exist){
if('skip' == $this->found_action){
if($id && $id_found_with_id ){
throw new Exception(sprintf('User with same ID already exists. ID: %d',$id ));
}elseif($email && $id_found_with_email ){
throw new Exception(sprintf('User with same Email already exists. Email: %s',$email ));
}elseif($username && $id_found_with_username ){
throw new Exception(sprintf('User with same Username already exists. Username: %s',$username ));
}else{
throw new Exception('User already exists.');
}
}elseif('update' == $this->found_action){
$this->merge = true;
}
}
// if(!$this->is_user_exist && $this->skip_new){
// throw new Exception('Skipping new item' );
// }
if (!$this->is_user_exist) {
$create_user_without_email = apply_filters('wt_create_user_without_email', FALSE); // create user without email address
if (empty($email) && $create_user_without_email === FALSE) {
$this->hf_log_data_change('user-csv-import', __('> skipped: cannot insert user without email.'));
unset($item);
return new WP_Error('parse-error', __('> skipped: cannot insert user without email.'));
} elseif (!is_email($email) && $create_user_without_email === FALSE) {
$this->hf_log_data_change('user-csv-import', sprintf(__('> skipped: Email is not valid. %s'), $item['user_email']));
unset($item);
return new WP_Error('parse-error', __('> skipped: Email is not valid.'));
}
}
$user_meta = $user_details = array();
$user_details['ID'] = $user_id;
foreach ($this->user_base_fields as $key => $value) {
if(in_array($key, array('ID'))){ // ID alreay set
continue;
}
if(isset($item[$value]))
$user_details[$key] = trim($item[$value]);
//$user_details[$key] = isset( $item[$value] ) ? $item[$value] : "" ;
}
foreach ($this->user_meta_fields as $key => $value){
$user_meta[] = array( 'key' => $key, 'value' => isset( $item[$key] ) ? trim($item[$key]) : "" );
}
// the $user_details array will now contain the necessary name-value pairs for the wp_users table, and also any meta data in the 'usermeta' array
$parsed_details = array();
$parsed_details['user_details'] = $user_details;
$parsed_details['user_meta'] = $user_meta;
return $parsed_details;
} catch (Exception $e) {
return new WP_Error('woocommerce_product_importer_error', $e->getMessage(), array('status' => $e->getCode()));
}
}
/**
* Create new posts based on import information
*/
private function process_users($post, $parsed_item) {
try{
global $wpdb;
$this->hf_log_data_change('user-csv-import', __('Processing users.'));
$user_id = !empty($post['user_details']['ID']) && $post['user_details']['ID'] ? $post['user_details']['ID'] : 0;
// user exists when importing & merge not ticked
$new_added = false;
if ($user_id && $this->merge) {
$current_user = get_current_user_id();
if ($current_user == $user_id) {
$usr_msg = 'This user is currently logged in hence we cannot update.';
$this->hf_log_data_change('user-csv-import', sprintf(__('> &#8220;%s&#8221;' . $usr_msg), $user_id), true);
unset($post);
return new WP_Error( 'parse-error',sprintf(__('> &#8220;%s&#8221;' . $usr_msg), $user_id));
}
$user_id = $this->hf_update_customer($user_id, $post);
} else {
$user_id = $this->hf_create_customer($post);
$new_added = true;
if (is_wp_error($user_id)) {
$this->hf_log_data_change('user-csv-import', sprintf(__('> Error inserting %s: %s'), 1, $user_id->get_error_message()), true);
//$skipped++;
unset($post);
return new WP_Error( 'parse-error',sprintf(__('> Error inserting %s: %s'), 1, $user_id->get_error_message()));
} elseif (empty($user_id)) {
//$skipped++;
unset($post);
return new WP_Error( 'parse-error',__('An error occurred with the customer information provided.'));
}
}
if ($this->merge && !$new_added)
$out_msg = "User updated successfully. ID:$user_id";
else
$out_msg = "User imported successfully. ID:$user_id";
$this->hf_log_data_change('user-csv-import', sprintf(__('> &#8220;%s&#8221;' . $out_msg), $user_id), true);
$this->hf_log_data_change('user-csv-import', sprintf(__('> Finished importing user %s'), $user_id ));
do_action('wt_customer_csv_import_data', $parsed_item, $user_id);
unset($post);
return $result = array(
'id' => $user_id,
'updated' => $this->merge,
);
} catch (Exception $e) {
return new WP_Error('woocommerce_product_importer_error', $e->getMessage(), array('status' => $e->getCode()));
}
}
public function hf_create_customer($data) {
$customer_email = (!empty($data['user_details']['user_email']) ) ? $data['user_details']['user_email'] : '';
$username = (!empty($data['user_details']['user_login']) ) ? $data['user_details']['user_login'] : '';
$customer_id = (!empty($data['user_details']['customer_id']) ) ? $data['user_details']['customer_id'] : '';
$insertion_id = (!empty($data['user_details']['ID']) ) ? $data['user_details']['ID'] : '';
$merge_empty_cells = apply_filters('wt_user_import_empty_csv_column', FALSE);
if('email' == $this->merge_with){
$insertion_id = '';
}
if (!empty($data['user_details']['user_pass'])) {
$password = ($this->use_same_password) ? $data['user_details']['user_pass'] : wp_hash_password($data['user_details']['user_pass']);
$password_generated = false;
} else {
$password = wp_generate_password(12, true);
$password_generated = true;
}
$found_customer = false;
$create_user_without_email = apply_filters('wt_create_user_without_email', FALSE); // create user without email address
if (is_email($customer_email) || $create_user_without_email === TRUE) {
$maybe_username = $username;
// Not in test mode, create a user account for this email
if (empty($username)) {
$maybe_username = explode('@', $customer_email);
$maybe_username = sanitize_user($maybe_username[0]);
}
$counter = 1;
$username = $maybe_username;
while (username_exists($username)) {
$username = $maybe_username . $counter;
$counter++;
}
if (!$this->is_user_exist && $insertion_id) {
global $wpdb;
$insertion_id = (int) $insertion_id;
$username = sanitize_user($username);
$customer_email = sanitize_email($customer_email);
if($password_generated && !$this->use_same_password){
$password = wp_hash_password($password);
}
$result = $wpdb->insert($wpdb->users, array('ID' => $insertion_id, 'user_login' => $username, 'user_email' => $customer_email, 'user_pass' => $password));
if ($result) {
$found_customer = $insertion_id;
}
}
if(!$found_customer) {
$found_customer = wp_create_user($username, $password, $customer_email);
}
$user_data = array('ID' => $found_customer, 'user_login' => $username, 'user_email' => $customer_email);
if (!$password_generated) {
$user_data['user_pass'] = $password;
}
if (!is_wp_error($found_customer)) {
wp_insert_user($user_data);
$wp_user_object = new WP_User($found_customer);
if ( ! function_exists( 'get_editable_roles' ) ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
}
$roles = get_editable_roles();
$new_roles_str = str_replace(' ', '', strtolower(isset($data['user_details']['roles']) ? $data['user_details']['roles'] : ''));
if(empty($new_roles_str)){
$new_roles_str = get_option('default_role');
}
$new_roles = explode(',', $new_roles_str);
$new_roles = array_intersect($new_roles, array_keys($roles));
$roles_to_remove = array();
$user_roles = array_intersect(array_values($wp_user_object->roles), array_keys($roles));
if (!$new_roles) {
// If there are no roles, delete all of the user's roles
$roles_to_remove = $user_roles;
} else {
$roles_to_remove = array_diff($user_roles, $new_roles);
}
array_push($roles_to_remove, 'subscriber');
if (!empty($new_roles)) {
foreach ($roles_to_remove as $_role) {
$wp_user_object->remove_role($_role); //remove the default role before adding new roles
}
// Make sure that we don't call $wp_user_object->add_role() any more than it's necessary
$_new_roles = array_diff($new_roles, array_intersect(array_values($wp_user_object->roles), array_keys($roles)));
foreach ($_new_roles as $_role) {
$wp_user_object->add_role($_role);
}
}
$meta_array = array();
foreach ($data['user_meta'] as $meta) {
$meta_array[$meta['key']] = $meta['value'];
}
$user_nicename = (!empty($data['user_details']['user_nicename'])) ? $data['user_details']['user_nicename'] : '';
$website = (!empty($data['user_details']['user_url'])) ? $data['user_details']['user_url'] : '';
$user_registered = (!empty($data['user_details']['user_registered'])) ? $data['user_details']['user_registered'] : '';
$display_name = (!empty($data['user_details']['display_name'])) ? $data['user_details']['display_name'] : '';
$first_name = (!empty($data['user_details']['first_name'])) ? $data['user_details']['first_name'] : '';
$last_name = (!empty($data['user_details']['last_name'])) ? $data['user_details']['last_name'] : '';
$user_status = (!empty($data['user_details']['user_status'])) ? $data['user_details']['user_status'] : '';
wp_update_user(array(
'ID' => $found_customer,
'user_nicename' => $user_nicename,
'user_url' => $website,
'user_registered' => $user_registered,
'display_name' => $display_name,
'first_name' => $first_name,
'last_name' => $last_name,
'user_status' => $user_status,
)
);
//unset($this->user_meta_fields['role']);
// update user meta data
global $wpdb;
foreach ($this->user_meta_fields as $key => $meta) {
if (($key == $wpdb->prefix.'capabilities') || (in_array($key, $this->user_base_fields))) { continue;
}
$key = trim(str_replace('meta:', '', $key));
// $meta = trim(str_replace('meta:', '', $meta));
$meta_value = (!empty($meta_array[$key]) ) ? maybe_unserialize($meta_array[$key]) : '';
if ($key == $wpdb->prefix.'user_level' && $meta_value == ''){
$meta_value = 0;
}
if ('session_tokens' == $key) {
if (!empty($meta_array[$key]) ) {
$session_json = base64_decode($meta_array[$key]);
$meta_value = json_decode($session_json, true);
}
}
if (empty($meta_value) && !$merge_empty_cells) {
continue;
}
update_user_meta($found_customer, $key, $meta_value);
}
}
} else {
$found_customer = new WP_Error('hf_invalid_customer', sprintf(__('User could not be created without Email.'), $customer_id));
}
return apply_filters('xa_user_impexp_alter_user_meta', $found_customer, $this->user_meta_fields, $meta_array);
}
public function hf_update_customer($found_customer, $data) {
$meta_array = array();
if ($found_customer) {
$wp_user_object = new WP_User($found_customer);
$roles = get_editable_roles();
$new_rolse_input = isset($data['user_details']['roles']) ? strtolower($data['user_details']['roles']) : '';
$new_roles_str = str_replace(' ', '', $new_rolse_input);
$new_roles = explode(',', $new_roles_str);
$new_roles = array_intersect($new_roles, array_keys($roles));
$roles_to_remove = array();
$user_roles = array_intersect(array_values($wp_user_object->roles), array_keys($roles));
$merge_empty_cells = apply_filters('wt_user_import_empty_csv_column', FALSE);
if (!$new_roles) {
// If there are no roles, delete all of the user's roles
$roles_to_remove = $user_roles;
} else {
$roles_to_remove = array_diff($user_roles, $new_roles);
}
if (!empty($new_roles)) {
foreach ($roles_to_remove as $_role) {
$wp_user_object->remove_role($_role); //remove the default role before adding new roles
}
// Make sure that we don't call $wp_user_object->add_role() any more than it's necessary
$_new_roles = array_diff($new_roles, array_intersect(array_values($wp_user_object->roles), array_keys($roles)));
foreach ($_new_roles as $_role) {
$wp_user_object->add_role($_role);
}
}
foreach ($data['user_meta'] as $meta) {
$meta_array[$meta['key']] = $meta['value'];
}
// update user meta data
global $wpdb;
foreach ($this->user_meta_fields as $key => $meta) {
if (($key == $wpdb->prefix.'capabilities') || (in_array($key, $this->user_base_fields))) { continue;
}
$key = trim(str_replace('meta:', '', $key));
// $meta = trim(str_replace('meta:', '', $meta));
$meta_value = (!empty($meta_array[$key]) ) ? maybe_unserialize($meta_array[$key]) : '';
if ($key == $wpdb->prefix.'user_level' && $meta_value == ''){
$meta_value = 0;
}
if (empty($meta_value) && !$merge_empty_cells) {
continue;
}
update_user_meta($found_customer, $key, $meta_value);
}
$user_data = array(
'ID' => $found_customer
);
if (isset($data['user_details']['user_nicename'])) {
$user_data['user_nicename'] = $data['user_details']['user_nicename'];
}
$email_updated = false;
//added when implement merge with user id use for update email
if (isset($data['user_details']['user_email']) && !empty($data['user_details']['user_email'])) {
if ($wp_user_object->user_email != $data['user_details']['user_email']) {
$email_updated = true;
$customer_email = $data['user_details']['user_email'];
}
$user_data['user_email'] = $data['user_details']['user_email'];
}
if (isset($data['user_details']['user_url'])) {
$user_data['user_url'] = $data['user_details']['user_url'];
}
if (isset($data['user_details']['user_registered'])) {
$user_data['user_registered'] = $data['user_details']['user_registered'];
}
if (isset($data['user_details']['user_pass'])) {
$user_data['user_pass'] = $data['user_details']['user_pass'];
}
if (isset($data['user_details']['display_name'])) {
$user_data['display_name'] = $data['user_details']['display_name'];
}
if (isset($data['user_details']['first_name'])) {
$user_data['first_name'] = $data['user_details']['first_name'];
}
if (isset($data['user_details']['last_name'])) {
$user_data['last_name'] = $data['user_details']['last_name'];
}
if (isset($data['user_details']['user_status'])) {
$user_data['user_status'] = $data['user_details']['user_status'];
}
add_filter('send_password_change_email', '__return_false'); // for preventing sending password change notification mail on by wp_update_user.
if (sizeof($user_data) > 1) {
wp_update_user($user_data);
}
if ($this->use_same_password && isset($data['user_details']['user_pass']) && !empty($data['user_details']['user_pass'])) {
$password = $data['user_details']['user_pass'];
$user_data = array_merge($user_data, array('user_login' => $wp_user_object->user_login, 'user_email' => ( $email_updated ) ? $customer_email : $wp_user_object->user_email, 'user_url' =>$wp_user_object->user_url));
$user_data['user_pass'] = $password;
$user_default_meta = array('nickname','first_name','last_name','display_name','description','rich_editing','syntax_highlighting','comment_shortcuts','admin_color','use_ssl','show_admin_bar_front','locale');
foreach ($user_default_meta as $meta_key => $meta) {
$user_data[$meta] = $wp_user_object->$meta;
}
wp_insert_user($user_data);
}
} else {
$found_customer = new WP_Error('hf_invalid_customer', sprintf(__('User could not be found with given Email or username.'), $customer_email));
}
return apply_filters('xa_user_impexp_alter_user_meta', $found_customer, $this->user_meta_fields, $meta_array);
}
}
}
<?php
/**
* Product section of the plugin
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
if(!class_exists('Wt_Import_Export_For_Woo_basic_User')){
class Wt_Import_Export_For_Woo_basic_User {
public $module_id = '';
public static $module_id_static = '';
public $module_base = 'user';
public $module_name = 'User Import Export for WordPress/WooCommerce';
public $min_base_version= '1.0.0'; /* Minimum `Import export plugin` required to run this add on plugin */
private $all_meta_keys = array();
private $found_meta = array();
private $found_hidden_meta = array();
private $selected_column_names = null;
public function __construct()
{
/**
* Checking the minimum required version of `Import export plugin` plugin available
*/
if(!Wt_Import_Export_For_Woo_Basic_Common_Helper::check_base_version($this->module_base, $this->module_name, $this->min_base_version))
{
return;
}
$this->module_id = Wt_Import_Export_For_Woo_Basic::get_module_id($this->module_base);
self::$module_id_static = $this->module_id;
add_filter('wt_iew_exporter_post_types_basic', array($this, 'wt_iew_exporter_post_types'), 10, 1);
add_filter('wt_iew_importer_post_types_basic', array($this, 'wt_iew_exporter_post_types'), 10, 1);
add_filter('wt_iew_exporter_alter_filter_fields_basic', array($this, 'exporter_alter_filter_fields'), 10, 3);
add_filter('wt_iew_exporter_alter_mapping_fields_basic', array($this, 'exporter_alter_mapping_fields'), 10, 3);
add_filter('wt_iew_importer_alter_mapping_fields_basic', array($this, 'get_importer_post_columns'), 10, 3);
add_filter('wt_iew_exporter_alter_advanced_fields_basic', array($this, 'exporter_alter_advanced_fields'), 10, 3);
add_filter('wt_iew_importer_alter_advanced_fields_basic', array($this, 'importer_alter_advanced_fields'), 10, 3);
add_filter('wt_iew_exporter_alter_meta_mapping_fields_basic', array($this, 'exporter_alter_meta_mapping_fields'), 10, 3);
add_filter('wt_iew_exporter_alter_mapping_enabled_fields_basic', array($this, 'exporter_alter_mapping_enabled_fields'), 10, 3);
add_filter('wt_iew_importer_alter_mapping_enabled_fields_basic', array($this, 'exporter_alter_mapping_enabled_fields'), 10, 3);
add_filter('wt_iew_exporter_do_export_basic', array($this, 'exporter_do_export'), 10, 7);
add_filter('wt_iew_importer_do_import_basic', array($this, 'importer_do_import'), 10, 8);
add_filter('wt_iew_importer_steps_basic', array($this, 'importer_steps'), 10, 2);
add_action('admin_footer', array($this, 'wt_add_user_bulk_actions'));
add_action('load-users.php', array($this, 'wt_process_user_bulk_actions'));
}
public function wt_add_user_bulk_actions() {
global $post_type, $post_status;
$screen = get_current_screen();
if ( "users" === $screen->id && !is_plugin_active( 'wt-import-export-for-woo/wt-import-export-for-woo.php' ) ){ // Only add to users.php page
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
var $downloadUsers = $('<option>').val('wt_ier_download_users').text('<?php _e('Export to CSV') ?>');
$('select[name^="action"]').append($downloadUsers);
});
</script>
<?php
}
}
/**
* user page bulk export action
*
*/
public function wt_process_user_bulk_actions() {
global $typenow;
$wp_list_table = _get_list_table('WP_Posts_List_Table');
$action = $wp_list_table->current_action();
if (!in_array($action, array('wt_ier_download_users'))) {
return;
}
// security check
check_admin_referer('bulk-users');
if (isset($_REQUEST['users'])) {
$user_ids = array_map('absint', $_REQUEST['users']);
}
if (empty($user_ids)) {
return;
}
if ($action == 'wt_ier_download_users') {
include_once( 'export/class-wt-customerimpexpcsv-basic-exporter.php' );
Wt_Import_Export_For_Woo_Basic_User_Bulk_Export::do_export($user_ids);
}
}
/**
* Altering advanced step description
*/
public function importer_steps($steps, $base)
{
if($this->module_base==$base)
{
$steps['advanced']['description']=__('Use advanced options from below to retain user passwords or not, set batch import count. You can also save the template file for future imports.');
}
return $steps;
}
public function importer_do_import($import_data, $base, $step, $form_data, $selected_template_data, $method_import, $batch_offset, $is_last_batch) {
if ($this->module_base != $base) {
return $import_data;
}
if(0 == $batch_offset){
$memory = size_format(wt_let_to_num_basic(ini_get('memory_limit')));
$wp_memory = size_format(wt_let_to_num_basic(WP_MEMORY_LIMIT));
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->module_base, 'import', '---[ New import started at '.date('Y-m-d H:i:s').' ] PHP Memory: ' . $memory . ', WP Memory: ' . $wp_memory);
}
include plugin_dir_path(__FILE__) . 'import/import.php';
$import = new Wt_Import_Export_For_Woo_basic_User_Import($this);
$response = $import->prepare_data_to_import($import_data,$form_data, $batch_offset, $is_last_batch);
if($is_last_batch){
Wt_Import_Export_For_Woo_Basic_Logwriter::write_log($this->module_base, 'import', '---[ Import ended at '.date('Y-m-d H:i:s').']---');
}
return $response;
}
public function exporter_do_export($export_data, $base, $step, $form_data, $selected_template_data, $method_export, $batch_offset) {
if ($this->module_base != $base) {
return $export_data;
}
switch ($method_export) {
case 'quick':
$this->set_export_columns_for_quick_export($form_data);
break;
case 'template':
case 'new':
$this->set_selected_column_names($form_data);
break;
default:
break;
}
include plugin_dir_path(__FILE__) . 'export/export.php';
$export = new Wt_Import_Export_For_Woo_basic_User_Export($this);
$header_row = $export->prepare_header();
$data_row = $export->prepare_data_to_export($form_data, $batch_offset);
$export_data = array(
'head_data' => $header_row,
'body_data' => $data_row['data'],
);
if(isset($data_row['total']) && !empty($data_row['total'])){
$export_data['total'] = $data_row['total'];
}
return $export_data;
}
/*
* Setting default export columns for quick export
*/
public function set_export_columns_for_quick_export($form_data) {
$post_columns = self::get_user_post_columns();
$this->selected_column_names = array_combine(array_keys($post_columns), array_keys($post_columns));
if (isset($form_data['method_export_form_data']['mapping_enabled_fields']) && !empty($form_data['method_export_form_data']['mapping_enabled_fields'])) {
foreach ($form_data['method_export_form_data']['mapping_enabled_fields'] as $value) {
$additional_quick_export_fields[$value] = array('fields' => array());
}
$export_additional_columns = $this->exporter_alter_meta_mapping_fields($additional_quick_export_fields, $this->module_base, array());
foreach ($export_additional_columns as $value) {
$this->selected_column_names = array_merge($this->selected_column_names, $value['fields']);
}
}
}
/**
* Adding current post type to export list
*
*/
public function wt_iew_exporter_post_types($arr) {
$arr['user'] = __('Users');
if (class_exists('woocommerce')) {
$arr['order'] = __('Order', 'users-customers-import-export-for-wp-woocommerce');
$arr['coupon'] = __('Coupon', 'users-customers-import-export-for-wp-woocommerce');
$arr['product'] = __('Product', 'users-customers-import-export-for-wp-woocommerce');
$arr['product_review'] = __('Product Review', 'users-customers-import-export-for-wp-woocommerce');
$arr['product_categories'] = __('Product Categories', 'users-customers-import-export-for-wp-woocommerce');
$arr['product_tags'] = __('Product Tags', 'users-customers-import-export-for-wp-woocommerce');
$arr['user'] = __('User/Customer', 'users-customers-import-export-for-wp-woocommerce');
$arr['subscription'] = __('Subscription', 'users-customers-import-export-for-wp-woocommerce');
}
return $arr;
}
public static function get_user_sort_columns() {
$sort_columns = array('ID'=>'ID', 'user_registered'=>'user_registered','user_email'=> 'user_email', 'user_login'=>'user_login', 'user_nicename'=>'user_nicename','user_url'=>'user_url');
return apply_filters('wt_iew_export_user_sort_columns', $sort_columns);
}
public static function get_user_roles() {
global $wp_roles;
$roles = array();
foreach ( $wp_roles->role_names as $role => $name ) {
$roles[esc_attr( $role )] = esc_html( $name );
}
return apply_filters('wt_iew_export_user_roles', $roles);
}
public static function get_user_post_columns() {
return include plugin_dir_path(__FILE__) . 'data/data-user-columns.php';
}
public function get_importer_post_columns($fields, $base, $step_page_form_data) {
if ($base != $this->module_base) {
return $fields;
}
$colunm = include plugin_dir_path(__FILE__) . 'data/data/data-wf-reserved-fields-pair.php';
// $colunm = array_map(function($vl){ return array('title'=>$vl, 'description'=>$vl); }, $arr);
return $colunm;
}
public function exporter_alter_mapping_enabled_fields($mapping_enabled_fields, $base, $form_data_mapping_enabled_fields) {
if ($base != $this->module_base) {
return $mapping_enabled_fields;
}
$mapping_enabled_fields = array();
return $mapping_enabled_fields;
}
public function exporter_alter_meta_mapping_fields($fields, $base, $step_page_form_data) {
if ($base != $this->module_base) {
return $fields;
}
foreach ($fields as $key => $value) {
switch ($key) {
default:
break;
}
}
return $fields;
}
public function importer_alter_meta_mapping_fields($fields, $base, $step_page_form_data) {
if ($base != $this->module_base) {
return $fields;
}
$fields=$this->exporter_alter_meta_mapping_fields($fields, $base, $step_page_form_data);
$out=array();
foreach ($fields as $key => $value)
{
$value['fields']=array_map(function($vl){ return array('title'=>$vl, 'description'=>$vl); }, $value['fields']);
$out[$key]=$value;
}
return $out;
}
public function wt_get_found_meta() {
if (!empty($this->found_meta)) {
return $this->found_meta;
}
// Loop products and load meta data
$found_meta = array();
// Some of the values may not be usable (e.g. arrays of arrays) but the worse
// that can happen is we get an empty column.
$all_meta_keys = $this->wt_get_all_meta_keys();
$csv_columns = self::get_user_post_columns();
foreach ($all_meta_keys as $meta) {
if (!$meta || (substr((string) $meta, 0, 1) == '_') || in_array($meta, array_keys($csv_columns)) || in_array('meta:' . $meta, array_keys($csv_columns)))
continue;
$found_meta[] = $meta;
}
$found_meta = array_diff($found_meta, array_keys($csv_columns));
$this->found_meta = $found_meta;
return $this->found_meta;
}
public function wt_get_all_meta_keys() {
if (!empty($this->all_meta_keys)) {
return $this->all_meta_keys;
}
$all_meta_pkeys = self::get_all_metakeys();
$this->all_meta_keys = $all_meta_pkeys;
return $this->all_meta_keys;
}
/**
* Get a list of all the meta keys for a post type. This includes all public, private,
* used, no-longer used etc. They will be sorted once fetched.
*/
public static function get_all_metakeys() {
global $wpdb;
return apply_filters('wt_alter_user_meta_data', $wpdb->get_col("SELECT distinct(meta_key) FROM $wpdb->usermeta WHERE meta_key NOT IN ('".$wpdb->prefix."capabilities')"));
}
public function wt_get_found_hidden_meta() {
if (!empty($this->found_hidden_meta)) {
return $this->found_hidden_meta;
}
// Loop products and load meta data
$found_hidden_meta = array();
// Some of the values may not be usable (e.g. arrays of arrays) but the worse
// that can happen is we get an empty column.
$all_meta_keys = $this->wt_get_all_meta_keys();
$csv_columns = self::get_user_post_columns();
foreach ($all_meta_keys as $meta) {
if (!$meta || (substr((string) $meta, 0, 1) != '_') || in_array($meta, array_keys($csv_columns)) || in_array('meta:' . $meta, array_keys($csv_columns)))
continue;
$found_hidden_meta[] = $meta;
}
$found_hidden_meta = array_diff($found_hidden_meta, array_keys($csv_columns));
$this->found_hidden_meta = $found_hidden_meta;
return $this->found_hidden_meta;
}
public function set_selected_column_names($full_form_data) {
if (is_null($this->selected_column_names)) {
if (isset($full_form_data['mapping_form_data']['mapping_selected_fields']) && !empty($full_form_data['mapping_form_data']['mapping_selected_fields'])) {
$this->selected_column_names = $full_form_data['mapping_form_data']['mapping_selected_fields'];
}
if (isset($full_form_data['meta_step_form_data']['mapping_selected_fields']) && !empty($full_form_data['meta_step_form_data']['mapping_selected_fields'])) {
$export_additional_columns = $full_form_data['meta_step_form_data']['mapping_selected_fields'];
foreach ($export_additional_columns as $value) {
$this->selected_column_names = array_merge($this->selected_column_names, $value);
}
}
}
return $full_form_data;
}
public function get_selected_column_names() {
return $this->selected_column_names;
}
public function exporter_alter_mapping_fields($fields, $base, $mapping_form_data) {
if ($base != $this->module_base) {
return $fields;
}
$fields = self::get_user_post_columns();
return $fields;
}
/**
* Customize the items in filter export page
*/
public function exporter_alter_filter_fields($fields, $base, $filter_form_data) {
if ($this->module_base != $base) {
return $fields;
}
/* altering help text of default fields */
$fields['limit']['label']=__('Total number of users to export');
$fields['limit']['help_text']=__('Exports specified number of users. e.g. Entering 500 with a skip count of 10 will export users from 11th to 510th position.');
$fields['offset']['label']=__('Skip first <i>n</i> users');
$fields['offset']['help_text']=__('Skips specified number of users from the beginning of the database. e.g. Enter 10 to skip first 10 users from export.');
$fields['email'] = array(
'label' => __('User email'),
'placeholder' => __('All users'),
'field_name' => 'email',
'sele_vals' => '',
'type' => 'multi_select',
'help_text' => __('Input the user name or email to specify the users.'),
'css_class' => 'wc-enhanced-select wt-user-search',
'validation_rule' => array('type'=>'text_arr')
);
if(is_plugin_active('woocommerce/woocommerce.php'))
{
$fields['email']['help_text']=__('Input the customer name or email to specify the customers.');
$fields['email']['css_class']='wc-customer-search';
}
$fields['roles'] = array(
'label' => __('User role'),
'placeholder' => __('Any role'),
'field_name' => 'roles',
'sele_vals' => self::get_user_roles(),
'help_text' => __('Input specific roles to export information pertaining to all users with the respective role/s.'),
'type' => 'multi_select',
'css_class' => 'wc-enhanced-select',
'validation_rule' => array('type'=>'text_arr')
);
$fields['date_from'] = array(
'label' => __('Registered date from'),
'placeholder' => __('Date from'),
'field_name' => 'date_from',
'sele_vals' => '',
'help_text' => __('Date on which the user registered. Export users registered on and after the specified date.'),
'type' => 'text',
'css_class' => 'wt_iew_datepicker',
);
$fields['date_to'] = array(
'label' => __('Registered date to'),
'placeholder' => __('Date to'),
'field_name' => 'date_to',
'sele_vals' => '',
'help_text' => __('Export users registered upto the specified date.'),
'type' => 'text',
'css_class' => 'wt_iew_datepicker',
);
$fields['sort_columns'] = array(
'label' => __('Sort columns'),
'placeholder' => __('user_login'),
'field_name' => 'sort_columns',
'sele_vals' => self::get_user_sort_columns(),
'help_text' => __('Sort the exported data based on the selected columns in order specified. Defaulted to ascending order.'),
'type' => 'multi_select',
'css_class' => 'wc-enhanced-select',
'validation_rule' => array('type'=>'text_arr')
);
$fields['order_by'] = array(
'label' => __('Sort by'),
'placeholder' => __('ASC'),
'field_name' => 'order_by',
'sele_vals' => array('ASC' => 'Ascending', 'DESC' => 'Descending'),
'help_text' => __('Defaulted to Ascending. Applicable to above selected columns in the order specified.'),
'type' => 'select',
);
return $fields;
}
public function exporter_alter_advanced_fields($fields, $base, $advanced_form_data) {
if ($this->module_base != $base) {
return $fields;
}
unset($fields['export_shortcode_tohtml']);
$out = array();
$out['header_empty_row'] = array(
'tr_html' => '<tr id="header_empty_row"><th></th><td></td></tr>'
);
if ( class_exists( 'woocommerce' ) ){
$out['export_guest_user'] = array(
'label' => __("Export guest users"),
'type' => 'checkbox',
'merge_right' => true,
'checkbox_fields' => array( 1 => __( 'Enable' ) ),
'value' => 0,
'field_name' => 'export_guest_user',
'help_text' => __('Enabling this option will include all guest customers in the export.'),
'tip_description' => __( 'Guest users here means the users who checked out from the site without creating an account, provided that the store settings allow guest user checkout. These user details won’t be available in the wp_user table from where our plugin export the user data. Thus we are extracting minimal data like address, email, etc, and whatever data that we can get from the woocommerce order details. Obviously, for these users, the columns like password, username, user created date, etc will be empty.' ),
);
}
foreach ($fields as $fieldk => $fieldv) {
$out[$fieldk] = $fieldv;
}
return $out;
}
public function importer_alter_advanced_fields($fields, $base, $advanced_form_data) {
if ($this->module_base != $base) {
return $fields;
}
$out = array();
$out['header_empty_row'] = array(
'tr_html' => '<tr id="header_empty_row"><th></th><td></td></tr>'
);
$out['found_action_merge'] = array(
'label' => __("If User exists"),
'type' => 'radio',
'radio_fields' => array(
'skip' => __('Skip'),
'update' => __('Update'),
// 'import' => __('Import as new item'),
),
'value' => 'skip',
'merge_right' => true,
'field_name' => 'found_action',
'help_text_conditional'=>array(
array(
'help_text'=> __('Retains the user in the store as is and skips the matching user from the input file.'),
'condition'=>array(
array('field'=>'wt_iew_found_action', 'value'=>'skip')
)
),
array(
'help_text'=> __('Update user as per data from the input file'),
'condition'=>array(
array('field'=>'wt_iew_found_action', 'value'=>'update')
)
)
),
'form_toggler'=>array(
'type'=>'parent',
'target'=>'wt_iew_found_action'
)
);
$out['use_same_password'] = array(
'label' => __("Retain user passwords"),
'type' => 'radio',
'radio_fields' => array(
'1' => __('Yes'),
'0' => __('No')
),
'value' => '1',
'merge_right' => true,
'field_name' => 'use_same_password',
'help_text' => __("WordPress encrypts passwords and stores the hashed value in database."),
'help_text_conditional'=>array(
array(
'help_text'=> __('Choose ‘Yes’ to import hashed passwords(that were exported from another WordPress install) as is.'),
'condition'=>array(
array('field'=>'wt_iew_use_same_password', 'value'=>'1')
)
),
array(
'help_text'=> __('Choose ‘No’ to import a plaintext password.'),
'condition'=>array(
array('field'=>'wt_iew_use_same_password', 'value'=>'0')
)
)
),
);
foreach ($fields as $fieldk => $fieldv) {
$out[$fieldk] = $fieldv;
}
return $out;
}
public function get_item_by_id($id) {
$post = array();
$post['edit_url'] = get_edit_user_link($id);
$user_info = get_userdata($id);
if($user_info){
$post['title'] = $user_info->user_login;
}
return $post;
}
public static function get_item_link_by_id($id) {
$post = array();
$post['edit_url'] = get_edit_user_link($id);
$user_info = get_userdata($id);
if($user_info){
$post['title'] = $user_info->user_login;
}
return $post;
}
}
}
new Wt_Import_Export_For_Woo_basic_User();
<?php
if (!defined('ABSPATH')) {
exit;
}
foreach($form_fields as $key=>$value)
{
/* setting default value form fields list array */
$vl=(isset($value['value']) ? $value['value'] : '');
$vl=($vl=='' && isset($value['default_value']) ? $value['default_value'] : $vl);
$type=(isset($value['type']) ? $value['type'] : 'text');
$css_class=(isset($value['css_class']) ? $value['css_class'] : '');
$html_id=(isset($value['html_id']) ? ' id="'.$value['html_id'].'" ' : '');
$tr_id=(isset($value['tr_id']) ? ' id="'.$value['tr_id'].'" ' : '');
$tr_class=(isset($value['tr_class']) ? $value['tr_class'] : '');
$td_class1=(isset($value['td_class1']) ? $value['td_class1'] : '');
$td_class2=(isset($value['td_class2']) ? $value['td_class2'] : '');
$td_class3=(isset($value['td_class3']) ? $value['td_class3'] : '');
$tr_html=(isset($value['tr_html']) ? $value['tr_html'] : '');
$field_html=(isset($value['field_html']) ? $value['field_html'] : '');
$help_text=(isset($value['help_text']) ? $value['help_text'] : '');
$placeholder=(isset($value['placeholder']) ? $value['placeholder'] : '');
$attr_arr=(isset($value['attr']) ? $value['attr'] : array());
$after_form_field_html=(isset($value['after_form_field_html']) ? $value['after_form_field_html'] : ''); /* after form field `td` */
$after_form_field=(isset($value['after_form_field']) ? $value['after_form_field'] : ''); /* after form field */
$before_form_field=(isset($value['before_form_field']) ? $value['before_form_field'] : '');
$merge_left=(isset($value['merge_left']) ? $value['merge_left'] : false); /* merge field td with left td */
$merge_right=(isset($value['merge_right']) ? $value['merge_right'] : false); /* merge field td with right td */
$tip_description = ! empty( $value['tip_description'] ) ? $value['tip_description'] : '';
$colspan=1;
if($merge_left)
{
$colspan++;
}
if($merge_right)
{
$colspan++;
}
$colspan_attr='';
if($colspan>1)
{
$colspan_attr=' colspan="'.$colspan.'"';
}
/**
* conditional help texts
* !!Important: Using OR mixed with AND then add OR conditions first.
*/
$conditional_help_html='';
if(isset($value['help_text_conditional']) && is_array($value['help_text_conditional']))
{
foreach ($value['help_text_conditional'] as $help_text_config)
{
if(is_array($help_text_config))
{
$condition_attr='';
if(is_array($help_text_config['condition']))
{
$previous_type=''; /* this for avoiding fields without glue */
foreach ($help_text_config['condition'] as $condition)
{
if(is_array($condition))
{
if($previous_type!='field')
{
$condition_attr.='['.$condition['field'].'='.$condition['value'].']';
$previous_type='field';
}
}else
{
if(is_string($condition))
{
$condition=strtoupper($condition);
if(($condition=='AND' || $condition=='OR') && $previous_type!='glue')
{
$condition_attr.='['.$condition.']';
$previous_type='glue';
}
}
}
}
}
$conditional_help_html.='<span class="wt-iew_form_help wt-iew_conditional_help_text" data-iew-help-condition="'.esc_attr($condition_attr).'">'.$help_text_config['help_text'].'</span>';
}
}
}
$form_toggler_p_class="";
$form_toggler_register="";
$form_toggler_child="";
if(isset($value['form_toggler']))
{
if($value['form_toggler']['type']=='parent')
{
$form_toggler_p_class="wt_iew_form_toggler";
$form_toggler_register=' wf_frm_tgl-target="'.$value['form_toggler']['target'].'"';
}
elseif($value['form_toggler']['type']=='child')
{
$form_toggler_child=' wf_frm_tgl-id="'.$value['form_toggler']['id'].'" wf_frm_tgl-val="'.$value['form_toggler']['val'].'" '.(isset($value['form_toggler']['chk']) ? 'wf_frm_tgl-chk="'.$value['form_toggler']['chk'].'"' : '').(isset($value['form_toggler']['depth']) ? ' wf_frm_tgl-lvl="'.$value['form_toggler']['depth'].'"' : '');
}else
{
$form_toggler_child=' wf_frm_tgl-id="'.$value['form_toggler']['id'].'" wf_frm_tgl-val="'.$value['form_toggler']['val'].'" '.(isset($value['form_toggler']['chk']) ? 'wf_frm_tgl-chk="'.$value['form_toggler']['chk'].'"' : '').(isset($value['form_toggler']['depth']) ? ' wf_frm_tgl-lvl="'.$value['form_toggler']['depth'].'"' : '');
$form_toggler_p_class="wt_iew_form_toggler";
$form_toggler_register=' wf_frm_tgl-target="'.$value['form_toggler']['target'].'"';
}
}
$field_group_attr=(isset($value['field_group']) ? ' data-field-group="'.$value['field_group'].'" ' : '');
$tr_class.=(isset($value['field_group']) ? ' wt_iew_field_group_children ' : ''); //add an extra class to tr when field grouping enabled
if($type=='image_export')
{
$css_class.=' wt_iew_separate_image_export';
}
$attr='';
$has_class_attr=0;
$css_attr_value='';
foreach ($attr_arr as $attr_key => $attr_value)
{
if($attr_key=='class')
{
$attr_value.=" ".$form_toggler_p_class." ".$css_class;
$form_toggler_p_class='';
$css_class='';
$has_class_attr=1;
$css_attr_value=$attr_value;
}
$attr.=$attr_key.'="'.$attr_value.'" ';
}
$css_class.=($form_toggler_p_class!="" ? ' '.$form_toggler_p_class : '');
$css_attr=($css_class!="" ? ' class="'.$css_class.'"' : '');
if($tr_html=="")
{
$form_field_name = isset($value['field_name']) ? $value['field_name'] : '';
$form_data_key=(substr($form_field_name,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$form_field_name;
/* checking field value exist in form data array */
if(isset($form_data[$form_data_key]))
{
$vl=$form_data[$form_data_key];
}
if($type=='field_group_head') //heading for field group
{
$visibility=(isset($value['show_on_default']) ? $value['show_on_default'] : 0);
?>
<tr <?php echo $tr_id.$field_group_attr;?> class="<?php echo $tr_class;?>">
<td colspan="3" class="wt_iew_field_group">
<div class="wt_iew_field_group_hd">
<?php echo isset($value['head']) ? $value['head'] : ''; ?>
<div class="wt_iew_field_group_toggle_btn" data-id="<?php echo isset($value['group_id']) ? $value['group_id'] : ''; ?>" data-visibility="<?php echo $visibility; ?>"><span class="dashicons dashicons-arrow-<?php echo ($visibility==1 ? 'down' : 'right'); ?>"></span></div>
</div>
<div class="wt_iew_field_group_content">
<table></table>
</div>
</td>
</tr>
<?php
}else
{
?>
<tr <?php echo $tr_id.$field_group_attr;?> class="<?php echo $tr_class;?>" <?php echo $form_toggler_child; ?>>
<?php
if(!$merge_left) /* if merge left not enabled */
{
?>
<th class="<?php echo $td_class1;?>">
<label><?php echo isset($value['label']) ? $value['label'] : ''; ?></label>
<?php
if ( $tip_description ) : ?>
<span class="dashicons dashicons-editor-help wt-iew-tips"
data-wt-iew-tip="
<span class='wt_iew_tooltip_span'><?php echo wp_kses_post( $tip_description );?> </span>">
</span>
<?php endif; ?>
</th>
<?php
}
?>
<td <?php echo $colspan_attr;?> class="<?php echo $td_class2;?>">
<?php
if($field_html=='')
{
echo $before_form_field;
if($type=='text' || $type=='number' || $type=='password')
{
?>
<input placeholder="<?php echo $placeholder;?>" type="<?php echo $type; ?>" <?php echo $html_id;?> <?php echo $css_attr;?> name="<?php echo $form_data_key;?>" value="<?php echo $vl;?>" <?php echo $attr;?> >
<?php
}
if($type=='textarea')
{
?>
<textarea placeholder="<?php echo $placeholder;?>" <?php echo $html_id;?> <?php echo $css_attr;?> name="<?php echo $form_data_key;?>" <?php echo $attr;?> ><?php echo $vl;?></textarea>
<?php
}
elseif($type=='multi_select')
{
$sele_vals=(isset($value['sele_vals']) && is_array($value['sele_vals']) ? $value['sele_vals'] : array());
$vl=(is_array($vl) ? $vl : array($vl));
$vl=array_filter($vl);
?>
<select <?php echo $html_id;?> <?php echo $css_attr;?> data-placeholder="<?php echo $placeholder;?>" name="<?php echo $form_data_key;?>" multiple="multiple" <?php echo $attr;?> >
<?php
foreach($sele_vals as $sele_val=>$sele_lbl)
{
?>
<option value="<?php echo $sele_val;?>" <?php echo (in_array($sele_val,$vl) ? 'selected' : ''); ?>><?php echo $sele_lbl;?></option>
<?php
}
/* in the case of ajax product search selectbox */
if($has_class_attr==1)
{
$css_class_arr=explode(" ", $css_attr_value);
}else
{
$css_class_arr=explode(" ", $css_class);
}
if(in_array('wc-product-search', $css_class_arr))
{
foreach($vl as $single_vl)
{
$single_vl=(int) $single_vl;
if($single_vl>0)
{
$product=wc_get_product($single_vl);
?>
<option value="<?php echo $single_vl;?>" selected><?php echo $product->get_title();?></option>
<?php
}
}
}
if(in_array('wc-customer-search', $css_class_arr) || in_array('wt-user-search', $css_class_arr) ){
foreach($vl as $single_vl)
{
$single_vl=(int) $single_vl;
if($single_vl>0)
{
$user=get_user_by( 'id', $single_vl);
if(!is_object($user))
continue;
?>
<option value="<?php echo $single_vl;?>" selected><?php echo sprintf(
/* translators: $1: user name, $2 user id, $3: user email */
esc_html__( '%1$s (#%2$s &ndash; %3$s)'),
$user->first_name . ' ' . $user->last_name,
$user->ID,
$user->user_email
);?></option>
<?php
}
}
}
?>
</select>
<?php
}
elseif($type=='select')
{
$sele_vals=(isset($value['sele_vals']) && is_array($value['sele_vals']) ? $value['sele_vals'] : array());
$vl=(is_array($vl) ? $vl : array($vl));
?>
<select <?php echo $html_id;?> <?php echo $css_attr;?> data-placeholder="<?php echo $placeholder;?>" name="<?php echo $form_data_key;?>" <?php echo $attr;?> <?php echo $form_toggler_register;?> >
<?php
foreach($sele_vals as $sele_val=>$sele_lbl)
{
$sele_lbl_txt=(is_array($sele_lbl) ? ( isset($sele_lbl['value']) ? $sele_lbl['value'] : (isset($sele_lbl[0]) ? $sele_lbl[0] : '' ) ) : $sele_lbl);
/* check any extra data to append */
$sele_extra_attr='';
if(is_array($sele_lbl))
{
foreach($sele_lbl as $sele_lblk=>$sele_lblv)
{
if($sele_lblk=='value')
{
continue;
}
$sele_extra_attr.=' data-'.$sele_lblk.'="'.$sele_lblv.'"';
}
}
?>
<option value="<?php echo $sele_val;?>" <?php echo (in_array($sele_val,$vl) ? 'selected' : ''); ?> <?php echo $sele_extra_attr; ?> ><?php echo $sele_lbl_txt;?></option>
<?php
}
?>
</select>
<?php
}
elseif($type=='radio') //radio button
{
?>
<div class="wt_form_radio_block">
<?php
$radio_fields=isset($value['radio_fields']) ? $value['radio_fields'] : array();
foreach ($radio_fields as $rad_vl=>$rad_label)
{
?>
<input <?php echo $css_attr;?> type="radio" id="<?php echo $form_data_key.'_'.$rad_vl;?>" name="<?php echo $form_data_key;?>" value="<?php echo $rad_vl;?>" <?php echo ($vl==$rad_vl) ? ' checked="checked"' : ''; ?> <?php echo $attr;?> <?php echo $form_toggler_register;?> /> <?php echo $rad_label; ?>
&nbsp;&nbsp;
<?php
}
?>
</div>
<?php
}
elseif($type=='image_export') //image export radio button
{
?>
<div class="wt_form_radio_block">
<?php
$radio_fields=array(
'Yes' => __('Yes'),
'No' => __('No')
);
foreach ($radio_fields as $rad_vl=>$rad_label)
{
?>
<input <?php echo $css_attr;?> type="radio" id="<?php echo $form_data_key.'_'.$rad_vl;?>" name="<?php echo $form_data_key;?>" value="<?php echo $rad_vl;?>" <?php echo ($vl==$rad_vl) ? ' checked="checked"' : ''; ?> <?php echo $attr;?> <?php echo $form_toggler_register;?> /> <?php echo $rad_label; ?>
&nbsp;&nbsp;
<?php
}
?>
</div>
<?php
}
elseif($type=='checkbox') //checkbox
{
?>
<div class="wt_form_checkbox_block">
<?php
$checkbox_fields=isset($value['checkbox_fields']) ? $value['checkbox_fields'] : array();
foreach ($checkbox_fields as $chk_vl=>$chk_label)
{
if( 'Yes' === $vl){
$vl = 1;
}
if( 'No' === $vl){
$vl = 0;
}
?>
<input <?php echo $css_attr;?> type="checkbox" id="<?php echo $form_data_key.'_'.$chk_vl;?>" name="<?php echo $form_data_key;?>" value="<?php echo $chk_vl;?>" <?php echo ($vl==$chk_vl) ? ' checked="checked"' : ''; ?> <?php echo $attr;?> <?php echo $form_toggler_register;?> /> <?php echo $chk_label; ?>
&nbsp;&nbsp;
<?php
}?>
</div>
<?php
}elseif($type=='uploader')
{
$field_id=(isset($value['html_id']) ? $value['html_id'] : $form_data_key);
?>
<div class="wt_iew_file_attacher_dv">
<input <?php echo ($html_id!="" ? $html_id : 'id="'.$field_id.'"');?> placeholder="<?php echo $placeholder;?>" <?php echo $css_attr;?> type="text" name="<?php echo $form_data_key; ?>" value="<?php echo $vl; ?>" <?php echo $attr;?>/>
<input type="button" name="upload_file" data-wt_iew_file_attacher_title="<?php _e('Choose a file.'); ?>" data-wt_iew_file_attacher_button_text="<?php _e('Select'); ?>" class="wf_button button button-primary wt_iew_file_attacher" wt_iew_file_attacher_target="#<?php echo $field_id; ?>" value="<?php _e('Upload'); ?>" />
</div>
<?php
}elseif($type=='dropzone') /* dropzone file uploader */
{
$dropzone_id=(isset($value['dropzone']) ? $value['dropzone'] : $form_data_key.'_dropzone');
$field_id=(isset($value['html_id']) ? $value['html_id'] : $form_data_key);
?>
<input <?php echo $css_attr;?> type="hidden" name="<?php echo $form_data_key; ?>" value="<?php echo $vl; ?>" <?php echo $attr;?> <?php echo ($html_id!="" ? $html_id : 'id="'.$field_id.'"');?>/>
<div id="<?php echo $dropzone_id;?>" class="wt_iew_dropzone" wt_iew_dropzone_target="#<?php echo $field_id; ?>">
<div class="dz-message">
<?php _e('Drag and Drop'); ?>
<?php _e('or'); ?>
<?php _e(' Click and Upload');?>
<br /><br /><div class="wt_iew_dz_file_success"></div> <br />
<div class="wt_iew_dz_file_name"></div> <br />
<div class="wt_iew_dz_remove_link"></div> <br />
</div>
</div>
<?php
}
echo $after_form_field;
}else
{
echo $field_html;
}
echo $conditional_help_html;
if($help_text!="")
{
?>
<span class="wt-iew_form_help"><?php echo $help_text;?></span>
<?php
}
?>
</td>
<?php
if(!$merge_right) /* if merge right not enabled */
{
?>
<td class="<?php echo $td_class3;?>">
<?php echo $after_form_field_html; ?>
</td>
<?php
}
?>
</tr>
<?php
}
}else
{
echo $tr_html;
}
}
?>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
$wf_admin_view_path=WT_U_IEW_PLUGIN_PATH.'admin/views/';
$wf_img_path=WT_U_IEW_PLUGIN_URL.'images/';
?>
<div class="wrap" id="<?php echo WT_IEW_PLUGIN_ID_BASIC;?>">
<h2 class="wp-heading-inline">
<?php _e('Import Export for WooCommerce');?>
</h2>
<div class="nav-tab-wrapper wp-clearfix wt-iew-tab-head">
<?php
$tab_head_arr=array(
'wt-advanced'=>__('General'),
'wt-help'=>__('Help Guide'),
'wt-pro-upgrade'=>__('Pro Upgrade'),
'wt-other-solutions' => __('Other Solutions')
);
if(isset($_GET['debug']))
{
$tab_head_arr['wt-debug']='Debug';
}
Wt_Import_Export_For_Woo_Basic::generate_settings_tabhead($tab_head_arr);
?>
</div>
<div class="wt-iew-tab-container">
<?php
//inside the settings form
$setting_views_a=array(
'wt-advanced'=>'admin-settings-advanced.php',
);
//outside the settings form
$setting_views_b=array(
'wt-help'=>'admin-settings-help.php',
'wt-other-solutions'=>'admin-settings-other-solutions.php'
);
$setting_views_b['wt-pro-upgrade']='admin-settings-marketing.php';
if(isset($_GET['debug']))
{
$setting_views_b['wt-debug']='admin-settings-debug.php';
}
?>
<form method="post" class="wt_iew_settings_form_basic">
<?php
// Set nonce:
if (function_exists('wp_nonce_field'))
{
wp_nonce_field(WT_IEW_PLUGIN_ID_BASIC);
}
foreach ($setting_views_a as $target_id=>$value)
{
$settings_view=$wf_admin_view_path.$value;
if(file_exists($settings_view))
{
include $settings_view;
}
}
?>
<?php
//settings form fields for module
do_action('wt_iew_plugin_settings_form');?>
</form>
<?php
foreach ($setting_views_b as $target_id=>$value)
{
$settings_view=$wf_admin_view_path.$value;
if(file_exists($settings_view))
{
include $settings_view;
}
}
?>
<?php do_action('wt_iew_plugin_out_settings_form');?>
</div>
<?php //include $wf_admin_view_path."market.php"; ?>
</div>
\ No newline at end of file
<?php
/**
* Template saving popup HTML for Import/Export
*
* @link
*
* @package Wt_Import_Export_For_Woo
*/
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt_iew_template_name wt_iew_popup" data-save-label="<?php _e('Save');?>" data-saveas-label="<?php _e('Save as');?>">
<div class="wt_iew_popup_hd">
<span style="line-height:40px;" class="dashicons dashicons-edit"></span>
<span class="wt_iew_popup_hd_label"></span>
<div class="wt_iew_popup_close">X</div>
</div>
<div class="wt_iew_warn_box">
<div class="wt_iew_warn wt_iew_template_name_wrn">
<?php _e('Please enter name');?>
</div>
</div>
<div class="wt_iew_template_name_box">
<label class="wt_iew_template_name_label"><?php _e('Template name');?></label>
<input type="text" name="wt_iew_template_name_field" class="wt_iew_text_field wt_iew_template_name_field">
<div class="wt_iew_popup_footer">
<button type="button" name="" class="button-secondary wt_iew_popup_cancel">
<?php _e('Cancel');?>
</button>
<button type="button" name="" class="button-primary wt_iew_template_create_btn"></button>
</div>
</div>
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<div class="wt-iew-tab-content" data-id="<?php echo $target_id;?>">
<?php
$fields=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings_fields();
$advanced_settings=Wt_Import_Export_For_Woo_Basic_Common_Helper::get_advanced_settings();
?>
<table class="form-table wt-iew-form-table">
<?php
Wt_Import_Export_For_Woo_Basic_Common_Helper::field_generator($fields, $advanced_settings);
?>
</table>
<?php
include "admin-settings-pre-saved-templates.php";
?>
<?php
include "admin-settings-save-button.php";
?>
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<div class="wt-iew-tab-content" data-id="<?php echo $target_id;?>">
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<div class="wt-iew-tab-content" data-id="<?php echo $target_id;?>">
<ul class="wt_iew_sub_tab">
<li style="border-left:none; padding-left: 0px;" data-target="help-links"><a><?php _e('Help Links'); ?></a></li>
<li data-target="help-doc"><a><?php _e('Sample CSV');?></a></li>
</ul>
<div class="wt_iew_sub_tab_container">
<div class="wt_iew_sub_tab_content" data-id="help-links" style="display:block;">
<!--<h3><?php //_e('Help Links'); ?></h3>-->
<ul class="wf-help-links">
<li>
<img src="<?php echo WT_U_IEW_PLUGIN_URL;?>assets/images/documentation.png">
<h3><?php _e('Documentation'); ?></h3>
<p><?php _e('Refer to our documentation to set up and get started.'); ?></p>
<a target="_blank" href="https://www.webtoffee.com/user-import-export-plugin-wordpress-user-guide/" class="button button-primary">
<?php _e('Documentation'); ?>
</a>
</li>
<li>
<img src="<?php echo WT_U_IEW_PLUGIN_URL;?>assets/images/support.png">
<h3><?php _e('Help and Support'); ?></h3>
<p><?php _e('We would love to help you on any queries or issues.'); ?></p>
<a target="_blank" href="https://www.webtoffee.com/support/" class="button button-primary">
<?php _e('Contact Us'); ?>
</a>
</li>
</ul>
</div>
<div class="wt_iew_sub_tab_content" data-id="help-doc">
<h3><?php //_e( 'Help Docs' ); ?></h3>
<ul class="wf-help-links">
<?php do_action( 'wt_user_addon_basic_help_content' ); ?>
<?php do_action( 'wt_order_addon_basic_help_content' ); ?>
<?php do_action( 'wt_coupon_addon_basic_help_content' ); ?>
<?php do_action( 'wt_product_addon_basic_help_content' ); ?>
</ul>
</div>
</div>
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
?>
<div class="wt-iew-tab-content" data-id="<?php echo $target_id;?>">
<div class="wt-ier-wrapper">
<h2 class="wt-ier-page-title"><?php _e('One stop solution for all your import-export needs.');?></h2>
<p class="wt-ier-subp"><?php _e('Upgrade to the premium version and get access to the advanced features with premium support.');?></p>
<div class="wt-ier-row">
<div class="wt-ier-col-12 wt-ier-col-lg-4 wt-ier-lg-4 wt-ier-mb-lg-0">
<div class="wt-ier-p-5 wt-ier-box-wrapper wt-ier-box-highlight">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/product-ie.svg" class="wt-ier-thumbnails">
<h3 class="wt-ier-plugin-name"><?php _e('PRODUCT IMPORT EXPORT PLUGIN FOR WOOCOMMERCE');?></h3>
<p class="wt-ier-p"><?php _e('Imports and exports all product types and reviews. Supports both CSV and XML file formats.');?></p>
<div class="wt-ier-d-sm-flex wt-ier-btn-group">
<a href="https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=<?php echo WT_U_IEW_VERSION; ?>" target="_blank" class="wt-ier-primary-btn wt-ier-btn"><?php _e('Get Premium');?></a>
<a href="" class="wt-ier-secondary-btn wt-ier-btn" data-toggle="modal" data-target="#wt-ier-comparison-modal-product"><?php _e('Compare with basic');?></a>
</div>
</div>
</div>
<div class="wt-ier-col-12 wt-ier-col-lg-4 wt-ier-lg-4 wt-ier-mb-lg-0">
<div class="wt-ier-p-5 wt-ier-box-wrapper wt-ier-box-highlight">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/customer-ie.svg" class="wt-ier-thumbnails">
<h3 class="wt-ier-plugin-name"><?php _e('WORDPRESS USERS & WOOCOMMERCE CUSTOMERS IMPORT EXPORT');?></h3>
<p class="wt-ier-p"><?php _e('Import and export all your WordPress User and WooCommerce Customer data in CSV/XML file formats.');?></p>
<div class="wt-ier-d-sm-flex wt-ier-btn-group">
<a href="https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=User_Import_Export&utm_content=<?php echo WT_U_IEW_VERSION; ?>" class="wt-ier-primary-btn wt-ier-btn" target="_blank"><?php _e('Get Premium');?></a>
<a href="" class="wt-ier-secondary-btn wt-ier-btn" data-toggle="modal" data-target="#wt-ier-comparison-modal-customer"><?php _e('Compare with basic');?></a>
</div>
</div>
</div>
<div class="wt-ier-col-12 wt-ier-col-lg-4 wt-ier-lg-4 wt-ier-mb-lg-0">
<div class="wt-ier-p-5 wt-ier-box-wrapper wt-ier-box-highlight">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/order-ie.svg" class="wt-ier-thumbnails">
<h3 class="wt-ier-plugin-name"><?php _e('ORDER, COUPON, SUBSCRIPTION EXPORT IMPORT FOR WOOCOMMERCE');?></h3>
<p class="wt-ier-p"><?php _e('Export or Import WooCommerce orders, Coupons and Subscriptions.');?></p>
<div class="wt-ier-d-sm-flex wt-ier-btn-group">
<a href="https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=<?php echo WT_U_IEW_VERSION; ?>" class="wt-ier-primary-btn wt-ier-btn" target="_blank"><?php _e('Get Premium');?></a>
<a href="" class="wt-ier-secondary-btn wt-ier-btn" data-toggle="modal" data-target="#wt-ier-comparison-modal-order"><?php _e('Compare with basic');?></a>
</div>
</div>
</div>
</div>
<!--------product imp-exp comparison table --------->
<div id="wt-ier-comparison-modal-product" class="wt-ier-modal">
<div class="wt-ier-modal-content">
<div class="wt-ier-resposive-table">
<table class="wt-ier-table">
<thead>
<tr class="wt-ier-top-tr">
<td></td>
<td colspan="3"><span class="wt-ier-close">&times;</span></td>
</tr>
<tr>
<th><?php _e('Features');?></th>
<th><?php _e('Free');?></th>
<th><img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/pre-icon.svg" class="wt-ier-pre-icon"><?php _e('Premium');?></th>
<th><?php _e('Import Export Suite');?></th>
</tr>
</thead>
<tbody>
<tr>
<td><?php _e('Import and export');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Categories');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Orders');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Coupons');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Categories');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Orders');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Coupons');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Categories');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Tags');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Orders');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Coupons');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported product types');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Simple Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Grouped Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('External/Affiliate Products');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Variable product');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Simple subscription');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Variable subscription');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WooCommerce Bookings');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Custom Products');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Simple Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Grouped Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('External/Affiliate Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Variable product');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Simple subscription');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Variable subscription');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Bookings');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Custom Products');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Simple Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Grouped Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('External/Affiliate Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Variable product');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Simple subscription');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Variable subscription');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Bookings');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Custom Products');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported file types');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported import methods');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From URL');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Automatic scheduled import & export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export custom fields ( metadata )');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export hidden meta');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Bulk delete products');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Option to import products as new item during post id conflicts');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Export to FTP/SFTP');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Set CSV delimiter for export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Export images as a separate zip');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Convert shortcodes to HTML on export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Custom export filename');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!--------customer imp-exp comparison table --------->
<div id="wt-ier-comparison-modal-customer" class="wt-ier-modal">
<div class="wt-ier-modal-content">
<div class="wt-ier-resposive-table">
<table class="wt-ier-table">
<thead>
<tr class="wt-ier-top-tr">
<td></td>
<td colspan="3"><span class="wt-ier-close">&times;</span></td>
</tr>
<tr>
<th><?php _e('Features');?></th>
<th><?php _e('Free');?></th>
<th><img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/pre-icon.svg" class="wt-ier-pre-icon"><?php _e('Premium');?></th>
<th><?php _e('Import Export Suite');?></th>
</tr>
</thead>
<tbody>
<tr>
<td><?php _e('Import and export');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Customers');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Products');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Categories');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Orders');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Coupons');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Subscriptions');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Customers');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Products');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Categories');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Orders');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Coupons');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Subscriptions');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Customers');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Categories');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Tags');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Orders');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Coupons');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Subscriptions');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported file types');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported import methods');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From URL');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Automatic scheduled import & export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export custom fields ( metadata )');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export hidden meta');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Option to email new users on import');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Export to FTP/SFTP');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Set CSV delimiter for export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Custom export filename');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!--------order imp-exp comparison table --------->
<div id="wt-ier-comparison-modal-order" class="wt-ier-modal">
<div class="wt-ier-modal-content">
<div class="wt-ier-resposive-table">
<table class="wt-ier-table">
<thead>
<tr class="wt-ier-top-tr">
<td></td>
<td colspan="3"><span class="wt-ier-close">&times;</span></td>
</tr>
<tr>
<th><?php _e('Features');?></th>
<th><?php _e('Free');?></th>
<th><img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/pre-icon.svg" class="wt-ier-pre-icon"><?php _e('Premium');?></th>
<th><?php _e('Import Export Suite');?></th>
</tr>
</thead>
<tbody>
<tr>
<td><?php _e('Import and export');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Orders');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Coupons');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Products');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Categories');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Orders');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Coupons');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Products');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Categories');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('Product Tags');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Orders');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Coupons');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Subscriptions');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Products');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Reviews');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Categories');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Product Tags');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WordPress Users');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('WooCommerce Customers');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported file types');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('CSV');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('XML');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Supported import methods');?></td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From URL');?></li>
<li><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
<td>
<ul>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('Local');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('FTP/SFTP');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From URL');?></li>
<li><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span> <?php _e('From existing files');?></li>
</ul>
</td>
</tr>
<tr>
<td><?php _e('Automatic scheduled import & export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export custom fields ( metadata )');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Import & export hidden meta');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Email customers on order status update');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Create customers on order import');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Bulk delete orders/coupons/subcriptions');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Export to FTP/SFTP');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Set CSV delimiter for export');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
<tr>
<td><?php _e('Custom export filename');?></td>
<td><span style="color:red; line-height:inherit;" class="dashicons dashicons-dismiss"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
<td><span style="color:#36D144; line-height:inherit;" class="dashicons dashicons-yes-alt"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!--------comparison table ends here--------->
<div class=" wt-ier-box-wrapper wt-ier-mt-5 wt-ier-suite">
<div class="wt-ier-row wt-ier-p-5">
<div class="wt-ier-col-12 wt-ier-col-lg-6">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/suite.svg" class="wt-ier-thumbnails">
<h2 class="wt-ier-page-title"><?php _e('Import Export Suite for WooCommerce');?></h2>
<p class="wt-ier-p"><?php _e('WooCommerce Import Export Suite is an all-in-one bundle of plugins with which you can import and export WooCommerce products, product reviews, orders, customers, coupons and subscriptions.');?></p>
<a href="https://www.webtoffee.com/product/woocommerce-import-export-suite/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Import_Export_Suite&utm_content=<?php echo WT_U_IEW_VERSION; ?>" class="wt-ier-primary-btn" target="_blank"><?php _e('Get Premium');?></a>
</div>
</div>
</div>
</div>
<script>
jQuery("a[data-toggle=modal]").click(function(e){
e.preventDefault();
var target=jQuery(this).attr('data-target');
jQuery(target).css('display','block');
});
jQuery(document).click(function (e) {
if (jQuery(e.target).is('.wt-ier-modal')) {
jQuery('.wt-ier-modal').css('display','none');
}
});
jQuery(".wt-ier-close").click(function (e) {
jQuery(this).closest('.wt-ier-modal').css('display','none');
});
</script>
</div>
\ No newline at end of file
<?php
if ( ! defined( 'WPINC' ) ) {die;
}
?>
<style>
.wt_card_margin {margin-bottom: 0.0rem;width : 31%;height : 300px;float: left;margin: 10px 150px 20px 15px;}
.card {margin: 10px 10px 20px 10px;padding-left:px;border: 0;box-shadow: 0px 0px 10px 0px rgba(82, 63, 105, 0.1);-webkit-box-shadow: 0px 0px 10px 0px rgba(82, 63, 105, 0.1);-moz-box-shadow: 0px 0px 10px 0px rgba(82, 63, 105, 0.1);-ms-box-shadow: 0px 0px 10px 0px rgba(82, 63, 105, 0.1);}
.card {height: 360px;position: relative;display: flex;flex-direction: column;min-width: 0;word-wrap: break-word;background-color: #ffffff;background-clip: border-box;border: 1px solid #e6e4e9;border-radius: 8px;}
.wt_heading_1{text-align:center;font-style: normal;font-weight: bold;font-size: 82px;}
.wt_heading_2{text-align:center;font-style: normal;font-weight: normal;font-size: 17px;}
.wt_widget{padding-left:-100px;}
.wt_widget .wt_widget_title_wrapper {display: flex;}
.wt_widget .wt_buttons {display: flex;}
.wt_widget_column_1 img {width: 60px;height: 60px;}
.wt_widget_column_1{padding-top:18px;}
.wt_widget_title_wrapper .wt_widget_column_2{align:top;}
.wt_widget_column_2{font-size: 15px;text-align: top;padding-left:10px; width:100%;height:100px;}
.wt_widget_column_3{;text-align:left;vertical-align: text-top;position: relative;height:170px;}
.wt_installed_button{padding-left:10px;}
.wt_free_button{padding-left:10px;}
.wt_free_btn_a{}
.wt_get_premium_btn {text-align:center;padding: 6px 1px 0px 1px;height:25px; width:100%; background: linear-gradient(90.67deg, #2608DF -34.86%, #3284FF 115.74%);box-shadow: 0px 4px 13px rgb(46 80 242 / 39%);border-radius: 5px;display: inline-block;font-style: normal;font-size: 12px;line-height: 18px;color: #FFFFFF;text-decoration: none;}
.wt_get_premium_btn:hover {box-shadow: 0px 3px 13px rgb(46 80 242 / 50%);text-decoration: none;transform: translateY(2px);transition: all .2s ease;color: #FFFFFF;}
.wt_installed_btn{height:30px;width:109px; border-style: solid;border-color: #2A2EEA;border-radius: 5px;color: #2A2EEA;}
.wt_free_btn{height:30px;width:109px; border-style: solid;border-color: #2A2EEA;border-radius: 5px;color: #2A2EEA;cursor: pointer;}
</style>
<div class="wt-iew-tab-content" data-id="<?php echo esc_attr($target_id);?>">
<div class="wt_row">
<div clas="wt_headings">
<h1 class="wt_heading_1"><?php _e('More Plugins To Make Your Store Stand Out', 'users-customers-import-export-for-wp-woocommerce'); ?></h1>
<h2 class="wt_heading_2"><?php _e('Check out our other plugins that are perfectly suited for WooCommerce store needs.', 'users-customers-import-export-for-wp-woocommerce'); ?></h2>
</div>
<div class="wt_column">
<?php
/* image location for the logos */
$wt_admin_img_path = WT_U_IEW_PLUGIN_URL . 'assets/images/other_solutions';
/* Plugin lists array */
$plugins=array(
'product_feed_sync' => array(
'title' => __('WebToffee WooCommerce Product Feed & Sync Manager', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Generate WooCommerce product feeds for Google Merchant Center and Facebook Business Manager. Use the Facebook catalog sync manager to sync WooCommerce products with Facebook and Instagram shops.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'product-feed-sync.png',
'premium_url' => 'https://www.webtoffee.com/product/product-catalog-sync-for-facebook/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=WooCommerce_Product_Feed',
'basic_url' => 'https://wordpress.org/plugins/webtoffee-product-feed/',
'pro_plugin' => 'webtoffee-product-feed-pro/webtoffee-product-feed-pro.php',
'basic_plugin' => 'webtoffee-product-feed/webtoffee-product-feed.php',
),
'request_quote' => array(
'title' => __('WebToffee Woocommerce Request a Quote', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Configure a fully optimized WooCommerce quote request set up in your store. Allow customers to request quotes and store managers to respond to them. Hide product prices, set up email alerts, and more.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'request-quote.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-request-a-quote/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Request_Quote',
'basic_url' => '',
'pro_plugin' => 'wt-woo-request-quote/wt-woo-request-quote.php',
'basic_plugin' => '',
),
'diplay_discount' => array(
'title' => __('Display Discounts for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Display the WooCommerce coupon deals available for each product on the respective product pages. Make use of multiple coupon layouts & display options to fully optimize the look & feel of the coupons.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'display-discounts.png',
'premium_url' => 'https://www.webtoffee.com/product/display-woocommerce-discounts/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Display_Discounts',
'basic_url' => '',
'pro_plugin' => 'wt-display-discounts-for-woocommerce/wt-display-discounts-for-woocommerce.php',
'basic_plugin' => '',
),
'best_sellers_plugin' => array(
'title' => __('WebToffee WooCommerce Best Sellers', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Highlight top-selling products on your WooCommerce store using best seller labels, sliders, and custom seals. You can display ranking positions for best-seller products in different categories.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'bestsellers_plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-best-sellers/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=WooCommerce_Best_Sellers',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-best-seller/wt-woocommerce-best-sellers.php',
'basic_plugin' => '',
),
'giftcards_plugin' => array(
'title' => __('WebToffee WooCommerce Gift Cards', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Create and manage advanced gift cards for WooCommerce stores. Enable your customers to buy, redeem, and share gift cards from your store.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'giftcards_plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-gift-cards/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=WooCommerce_Gift_Cards',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-gift-cards/wt-woocommerce-gift-cards.php',
'basic_plugin' => '',
),
'fbt_plugins' => array(
'title' => __('Frequently Bought Together for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Boost the visibility of the products by displaying them as ‘Frequently bought together’ items in your store. You may also set up discounts for Frequently Bought Together bundles with this plugin.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'fbt_plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-frequently-bought-together/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Frequently_Bought_Together',
'basic_url' => '',
'pro_plugin' => 'wt-frequently-bought-together/wt-frequently-bought-together.php',
'basic_plugin' => '',
),
'gdpr_cookie_consent_plugin' => array(
'title' => __('GDPR Cookie Consent Plugin (CCPA Ready)', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('The plugin helps you get compliant with GDPR, CCPA, and other major cookie laws. You can create and manage cookie consent banners, scan website cookies, and generate cookie policies with this plugin.','users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'gdpr-cookie-concent-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/gdpr-cookie-consent/?utm_source=other_solution_page&utm_medium=_free_plugin_&utm_campaign=GDPR',
'basic_url' => 'https://wordpress.org/plugins/cookie-law-info/',
'pro_plugin' => 'webtoffee-gdpr-cookie-consent/cookie-law-info.php',
'basic_plugin' => 'cookie-law-info/cookie-law-info.php',
),
'product_import_export_plugin' => array(
'title' => __('Product Import Export Plugin For WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Seamlessly import/export your WooCommerce products including simple, variable, custom products and subscriptions. You may also import and export product images, tags, categories, reviews, and ratings.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'product-import-export-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Product_Import_Export',
'basic_url' => 'https://wordpress.org/plugins/product-import-export-for-woo/',
'pro_plugin' => 'wt-import-export-for-woo-product/wt-import-export-for-woo-product.php',
'basic_plugin' => 'product-import-export-for-woo/product-import-export-for-woo.php',
),
'customers_import_export_plugin' => array(
'title' => __('WordPress Users & WooCommerce Customers Import Export', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Easily import and export your WordPress users and WooCommerce customers using the Import Export plugin for WooCommerce. The plugin supports the use of CSV, XML, TSV, XLS, and XLSX file formats.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'user-import-export-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=User_Import_Export',
'basic_url' => 'https://wordpress.org/plugins/users-customers-import-export-for-wp-woocommerce/',
'pro_plugin' => 'wt-import-export-for-woo-user/wt-import-export-for-woo-user.php',
'basic_plugin' => 'users-customers-import-export-for-wp-woocommerce/users-customers-import-export-for-wp-woocommerce.php',
),
'order_import_export_plugin' => array(
'title' => __('Order, Coupon, Subscription Export Import for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Export and Import your WooCommerce orders, subscriptions, and discount coupons using a single Import Export plugin. You may customize the export and import files with advanced filters and settings.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'order-import-export-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Order_Import_Export',
'basic_url' => 'https://wordpress.org/plugins/order-import-export-for-woocommerce/',
'pro_plugin' => 'wt-import-export-for-woo-order/wt-import-export-for-woo-order.php',
'basic_plugin' => 'order-import-export-for-woocommerce/order-import-export-for-woocommerce.php',
),
'import_export_suit' => array(
'title' => __('Import Export Suite for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('An all-in-one plugin to import and export WooCommerce store data. You can import and export products, product reviews, orders, customers, discount coupons, and subscriptions using this single plugin.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'suite-1-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-import-export-suite/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Import_Export_Suite',
'basic_url' => '',
'pro_plugin' => array(
'product' => 'wt-import-export-for-woo-product/wt-import-export-for-woo-product.php',
'user' => 'wt-import-export-for-woo-user/wt-import-export-for-woo-user.php',
'order' => 'wt-import-export-for-woo-order/wt-import-export-for-woo-order.php',
),
'basic_plugin' => '',
),
'smart_coupons_plugin' => array(
'title' => __('Smart Coupons for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Create coupons to offer discounts and free products to your customers with Smart Coupons for WooCommerce. You can set up BOGO coupons, giveaways, gift cards, store credits, and more with this plugin.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'smart-coupons-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/smart-coupons-for-woocommerce/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=smart_coupons',
'basic_url' => 'https://wordpress.org/plugins/wt-smart-coupons-for-woocommerce/',
'pro_plugin' => 'wt-smart-coupon-pro/wt-smart-coupon-pro.php',
'basic_plugin' => 'wt-smart-coupon/wt-smart-coupon.php',
),
'url_coupons_plugin' => array(
'title' => __('URL Coupons for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Generate custom URLs and QR codes for every discount coupon in your WooCommerce store. These unique coupons are easy to share and can even be set to add new products to the cart upon application.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'url-coupons-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/url-coupons-for-woocommerce/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=URL_Coupons',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-gift-cards/wt-woocommerce-gift-cards.php',
'basic_plugin' => '',
),
'paypal_express_checkout_plugin' => array(
'title' => __('PayPal Express Checkout Payment Gateway for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Offer a fast checkout experience to your customers with PayPal Payment Gateway. You can set up the PayPal Express Checkout option on the product pages to reduce the clicks to complete the checkout.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt-paypal-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/paypal-express-checkout-gateway-for-woocommerce/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Paypal',
'basic_url' => 'https://wordpress.org/plugins/express-checkout-paypal-payment-gateway-for-woocommerce/',
'pro_plugin' => 'eh-paypal-express-checkout /eh-paypal-express-checkout.php',
'basic_plugin' => 'express-checkout-paypal-payment-gateway-for-woocommerce/express-checkout-paypal-payment-gateway-for-woocommerce.php',
),
'stripe_paymet_gateway_plugin' => array(
'title' => __('WooCommerce Stripe Payment Gateway', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Ensure a fast and secure checkout experience for your users with WooCommerce Stripe Payment Gateway. Stripe accepts credit/debit cards and offers integrations with Apple Pay, SEPA, Alipay, and more.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'stripe-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-stripe-payment-gateway/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Stripe',
'basic_url' => 'https://wordpress.org/plugins/payment-gateway-stripe-and-woocommerce-integration/',
'pro_plugin' => 'eh-stripe-payment-gateway/stripe-payment-gateway.php',
'basic_plugin' => 'payment-gateway-stripe-and-woocommerce-integration/payment-gateway-stripe-and-woocommerce-integration.php',
),
'subscriptions_for_woocommerce_plugin' => array(
'title' => __('Subscriptions for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Enable subscriptions on your WooCommerce store to sell products (physical and digital) and services that require accepting recurring payments. Supports both simple and variable subscription products.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'subscription-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-subscriptions/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Subscriptions',
'basic_url' => '',
'pro_plugin' => 'xa-woocommerce-subscriptions/xa-woocommerce-subscriptions.php',
'basic_plugin' => '',
),
'sequential_order_plugin' => array(
'title' => __('Sequential Order Numbers for WooCommerce', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Number your WooCommerce orders in a custom, sequential & manageable format. The Sequential Order Number plugin lets your orders follow a custom & unique numbering sequence suitable for your business.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'Sequential-order-number-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-sequential-order-numbers/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Sequential_Order_Numbers',
'basic_url' => 'https://wordpress.org/plugins/wt-woocommerce-sequential-order-numbers/',
'pro_plugin' => 'wt-woocommerce-sequential-order-numbers-pro/wt-advanced-order-number-pro.php',
'basic_plugin' => 'wt-woocommerce-sequential-order-numbers/wt-advanced-order-number.php',
),
'wt_ipc_addon' => array(
'title' => __('WooCommerce PDF Invoices, Packing Slips and Credit Notes', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Easily generate & print fully customized PDF Invoices, Packing Slips, and Credit Notes for your orders. Automatically send the documents to the recipients by attaching them to the order status emails.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt_ipc_logo.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-pdf-invoices-packing-slips/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=PDF_invoice',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-invoice-addon/wt-woocommerce-invoice-addon.php',
'basic_plugin' => '',
),
'wt_sdd_addon' => array(
'title' => __('WooCommerce Shipping Labels, Dispatch Labels and Delivery Notes', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Automatically generate WooCommerce Shipping Labels, Dispatch Labels, and Delivery Notes with custom settings and layouts. Customize the label sizes and add extra product or order fields as required.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt_sdd_logo.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-shipping-labels-delivery-notes/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Shipping_Label',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-shippinglabel-addon/wt-woocommerce-shippinglabel-addon.php',
'basic_plugin' => '',
),
'wt_pl_addon' => array(
'title' => __('WooCommerce Picklists', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Customize, generate and print WooCommerce picklists for all orders on your store and automatically attach them to the order status emails. Add product variation data and other fields to the document.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt_pl_logo.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-picklist/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Picklist',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-picklist-addon/wt-woocommerce-picklist-addon.php',
'basic_plugin' => '',
),
'wt_pi_addon' => array(
'title' => __('WooCommerce Proforma Invoices', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Automate the generation of WooCommerce proforma invoices when new orders are placed and send them to your customers via order emails. Customize the layout and content of the invoice as per your needs.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt_pi_logo.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-proforma-invoice/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Proforma_Invoice',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-proforma-addon/wt-woocommerce-proforma-addon.php',
'basic_plugin' => '',
),
'wt_al_addon' => array(
'title' => __('WooCommerce Address Labels', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('Generate address labels for all orders in your store and easily print them in bulk. Customize the label layout and create labels of different types (shipping, billing, return, from address) with ease.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'wt_al_logo.png',
'premium_url' => 'https://www.webtoffee.com/product/woocommerce-address-label/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=Address_Label',
'basic_url' => '',
'pro_plugin' => 'wt-woocommerce-addresslabel-addon/wt-woocommerce-addresslabel-addon.php',
'basic_plugin' => '',
),
'backup_and_migration_plugin' => array(
'title' => __('WordPress Backup and Migration', 'users-customers-import-export-for-wp-woocommerce'),
'description' => __('A complete WordPress backup and migration plugin to easily back up and migrate your WordPress website and database. This fast and flexible backup solution makes creating and restoring backups easy.', 'users-customers-import-export-for-wp-woocommerce'),
'image_url' => 'WordPress-backup-and-migration-plugin.png',
'premium_url' => 'https://www.webtoffee.com/product/wordpress-backup-and-migration/?utm_source=other_solution_page&utm_medium=free_plugin&utm_campaign=WordPress_Backup',
'basic_url' => 'https://wordpress.org/plugins/wp-migration-duplicator/',
'pro_plugin' => 'wp-migration-duplicator-pro/wp-migration-duplicator-pro.php',
'basic_plugin' => 'wp-migration-duplicator/wp-migration-duplicator.php',
),
);
foreach ($plugins as $key => $value)
{
if(isset($value['pro_plugin'])){
if(is_array($value['pro_plugin']) && isset($value['pro_plugin']['product']) && isset($value['pro_plugin']['user']) && isset($value['pro_plugin']['order']))
{
if(is_plugin_active($value['pro_plugin']['product']) && is_plugin_active($value['pro_plugin']['user']) && is_plugin_active($value['pro_plugin']['order'])){
continue;
}
}
else
{
if(is_plugin_active($value['pro_plugin']))
{
continue;
}
}
}
?>
<div class="card wt_card_margin">
<div class="wt_widget">
<div class="wt_widget_title_wrapper">
<div class="wt_widget_column_1">
<img src="<?php echo esc_url($wt_admin_img_path . '/' . $value['image_url']);?>">
</div>
<div class="wt_widget_column_2">
<h4 class="card-title">
<?php echo esc_html($value['title']); ?>
</h4>
</div>
</div>
<div class="wt_widget_column_3">
<p class="">
<?php echo esc_html($value['description']); ?>
</p>
</div>
<div class="wt_buttons">
<div class="wt_premium_button" style="width: 100%;">
<a href="<?php echo esc_url($value['premium_url']); ?>" class="wt_get_premium_btn" target="_blank"><img src="<?php echo esc_url($wt_admin_img_path . '/promote_crown.png');?>" style="width: 10px;height: 10px;"><?php _e(' Get Premium','users-customers-import-export-for-wp-woocommerce'); ?></a>
</div>
<?php
if(is_plugin_active($value['basic_plugin']))
{
?>
<div class="wt_installed_button">
<button class="wt_installed_btn">
<?php _e('Installed','users-customers-import-export-for-wp-woocommerce'); ?>
</button>
</div>
<?php
}elseif(isset($value['basic_plugin']) && "" !== $value['basic_plugin'] && !is_plugin_active($value['basic_plugin'])
&& isset($value['basic_url']) && "" !== $value['basic_url'] && isset($value['pro_plugin']) && is_string($value['pro_plugin']) && "" !== $value['pro_plugin'] && !is_plugin_active($value['pro_plugin']))
{
?>
<div class="wt_free_button">
<a class="wt_free_btn_a" href="<?php echo esc_url($value['basic_url']); ?>" target="_blank">
<button class="wt_free_btn">
<?php _e('Get Free Plugin','users-customers-import-export-for-wp-woocommerce'); ?>
</button>
</a>
</div>
<?php } ?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
</div>
<?php
if (!defined('WPINC')) {
die;
}
global $wpdb;
$tb = $wpdb->prefix . Wt_Import_Export_For_Woo_Basic::$template_tb;
$val = $wpdb->get_results("SELECT * FROM $tb ORDER BY id DESC", ARRAY_A);
$pre_saved_templates = ($val ? $val : array());
if (!empty($pre_saved_templates)):
?>
<style>
.wt_ier_template_list_table {
width: 50%;
border-spacing: 0px;
border-collapse: collapse;
margin-top: 15px;
}
.wt_ier_template_list_table th {
padding: 5px 5px;
background: #f9f9f9;
color: #333;
text-align: center;
border: solid 1px #e1e1e1;
font-weight: bold;
}
.wt_ier_template_list_table td {
padding: 5px 5px;
background: #fff;
color: #000;
text-align: center;
border: solid 1px #e1e1e1;
}
</style>
<div class="wt-ier-import-export-templates">
<h3><?php _e('Import export pre-saved templates'); ?></h3>
<div class="wt_ier_template_list_table_data">
<table class="wt_ier_template_list_table">
<thead>
<tr>
<th style="width:50px;">#</th>
<th><?php _e('Name'); ?></th>
<th><?php _e('Item'); ?></th>
<th><?php _e('Type'); ?></th>
<th><?php _e('Action'); ?></th>
</tr>
</thead>
<tbody>
<?php
$num = 1;
foreach ($pre_saved_templates as $key => $value):
?>
<tr data-row-id="<?php echo absint($value['id']); ?>">
<td><?php echo $num; ?></td>
<td><?php echo $value['name']; ?></td>
<td><?php echo $value['item_type']; ?></td>
<td><?php echo $value['template_type']; ?></td>
<td><button data-id="<?php echo absint($value['id']); ?>" title="<?php _e('Delete'); ?>" class="button button-secondary wt_ier_delete_template"><span><?php _e('Delete'); ?></span></button></td>
</tr>
<?php
$num++;
endforeach;
?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
\ No newline at end of file
<?php
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
$settings_button_title=isset($settings_button_title) ? $settings_button_title : 'Update Settings';
$before_button_text=isset($before_button_text) ? $before_button_text : '';
$after_button_text=isset($after_button_text) ? $after_button_text : '';
?>
<div style="clear: both;"></div>
<div class="wt-iew-plugin-toolbar bottom">
<div class="left">
</div>
<div class="right">
<?php echo $before_button_text; ?>
<input type="submit" name="wt_iew_update_admin_settings_form" value="<?php _e($settings_button_title); ?>" class="button button-primary" style="float:right;"/>
<?php echo $after_button_text; ?>
<span class="spinner" style="margin-top:11px"></span>
</div>
</div>
\ No newline at end of file
<?php
if (!defined('ABSPATH')) {
exit;
}
?>
<div class="wt-import-export-upsell-wrapper market-box table-box-main">
<div class="ier-premium-upgrade wt-ierpro-sidebar">
<div class="ier_pro_plugins_section_small">
<div class="wt-import-export-upsell-small-wrapper market-box table-box-main wt-ier-advt-order wt-ier-advt-coupon wt-ier-advt-subscription" style="display:none;">
<div class="ier-premium-upgrade wt-ierpro-sidebar">
<div class="wt-ierpro-header">
<div class="wt-ierpro-name-small">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/gopro/order-ie.svg" alt="featured img" width="36" height="36">
<h4 class="wt-ier-product-name-small"><?php _e('Order, Coupon, Subscription Import Export for WooCommerce'); ?></h4>
</div>
<p class="wt-ierpro-name-small-p"><?php _e('Get the most from premium version Get the most from premium version'); ?></p>
<div class="wt-hide-features-view-plugin">
<div style="float:left;margin-left: 5px;margin-right: 75px;">
<a class="wt-hide-features wt-hide-features-post-types wt-hide-features-order wt-hide-features-coupon wt-hide-features-subscription" href="#"><?php _e('Show features'); ?></a><span style="color:#3176FD;font-size: 18px;" class="dashicons dashicons-arrow-down-alt"></span>
</div>
<div style="float:right;">
<a class="wt-view-plugin" href="<?php echo esc_url("https://www.webtoffee.com/product/order-import-export-plugin-for-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Order_Import_Export&utm_content=" . WT_U_IEW_VERSION); ?>"><?php _e('View plugin'); ?> <span style="font-size: 18px;" class="dashicons dashicons-arrow-right-alt"></span></a>
</div>
</div>
<div class="wt-ier-product-features wt-ier-gopro-cta-small wt-ierpro-features wt-ier-gopro-cta-small-order wt-ier-gopro-cta-small-coupon wt-ier-gopro-cta-small-subscription" style="display:none;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Import & export in Excel, XML, CSV, and TSV formats'); ?></li>
<li><?php _e('Advanced filters and customizations for better control'); ?></li>
<li><?php _e('Customize and send emails to new users on import'); ?></li>
<li><?php _e('Export and import custom fields and third-party plugin fields '); ?></li>
<li><?php _e('Schedule automated import & export '); ?></li>
</ul>
</div>
</div>
</div>
</div>
<div class="wt-import-export-upsell-small-wrapper market-box table-box-main wt-ier-advt-product wt-ier-advt-product_categories wt-ier-advt-product_review wt-ier-advt-product_tags" style="display:none;">
<div class="ier-premium-upgrade wt-ierpro-sidebar">
<div class="wt-ierpro-header">
<div class="wt-ierpro-name-small">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/gopro/product-ie.svg" alt="featured img" width="36" height="36">
<h4 class="wt-ier-product-name-small"><?php _e('Product Import Export Plugin For WooCommerce'); ?></h4>
</div>
<p class="wt-ierpro-name-small-p"><?php _e('Get the most from premium version Get the most from premium version'); ?></p>
<div class="wt-hide-features-view-plugin">
<div style="float:left;margin-left: 5px;margin-right: 75px;">
<a class="wt-hide-features wt-hide-features-post-types wt-hide-features-product wt-hide-features-product_categories wt-hide-features-prroduct_tags wt-hide-features-prroduct_review" href="#"><?php _e('Show features'); ?></a><span style="color:#3176FD;font-size: 18px;" class="dashicons dashicons-arrow-down-alt"></span>
</div>
<div style="float:right;">
<a class="wt-view-plugin" href="<?php echo esc_url("https://www.webtoffee.com/product/product-import-export-woocommerce/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Product_Import_Export&utm_content=" . WT_U_IEW_VERSION); ?>"><?php _e('View plugin'); ?> <span style="font-size: 18px;" class="dashicons dashicons-arrow-right-alt"></span></a>
</div>
</div>
<div class="wt-ier-product-features wt-ier-gopro-cta-small wt-ierpro-features wt-ier-gopro-cta-small-product wt-ier-gopro-cta-small-product_review wt-ier-gopro-cta-small-product_tags wt-ier-gopro-cta-small-product_categories" style="display:none;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Export and import variable products, subscription'); ?></li>
<li><?php _e('Import & export in Excel, XML, CSV, and TSV formats'); ?></li>
<li><?php _e('Schedule automated import & export'); ?></li>
<li><?php _e('Advanced filters and customizations for better control'); ?></li>
<li><?php _e('Export product images in a separate zip file'); ?></li>
</ul>
</div>
</div>
</div>
</div>
<div class="wt-import-export-upsell-small-wrapper market-box table-box-main wt-ier-advt-user">
<div class="ier-premium-upgrade wt-ierpro-sidebar">
<div class="wt-ierpro-header">
<div class="wt-ierpro-name-small">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/gopro/user-ie.svg" alt="featured img" width="36" height="36">
<h4 class="wt-ier-product-name-small"><?php _e('WordPress Users & WooCommerce Customers Import Export'); ?></h4>
</div>
<p class="wt-ierpro-name-small-p"><?php _e('Get the most from premium version Get the most from premium version'); ?></p>
<div class="wt-hide-features-view-plugin">
<div style="float:left;margin-left: 5px;margin-right: 75px;">
<a class="wt-hide-features wt-hide-features-post-types wt-hide-features-user" href="#"><?php _e('Show features'); ?></a><span style="color:#3176FD;font-size: 18px;" class="dashicons dashicons-arrow-down-alt"></span>
</div>
<div style="float:right;">
<a class="wt-view-plugin" href="<?php echo esc_url("https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=User_Import_Export&utm_content=" . WT_U_IEW_VERSION); ?>"><?php _e('View plugin'); ?> <span style="font-size: 18px;" class="dashicons dashicons-arrow-right-alt"></span></a>
</div>
</div>
<div class="wt-ier-product-features wt-ier-gopro-cta-small wt-ierpro-features wt-ier-gopro-cta-small-user" style="display:none;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Import & export in Excel, XML, CSV, and TSV formats'); ?></li>
<li><?php _e('Advanced filters and customizations for better control'); ?></li>
<li><?php _e('Customize and send emails to new users on import'); ?></li>
<li><?php _e('Export and import custom fields and third-party plugin fields '); ?></li>
<li><?php _e('Schedule automated import & export '); ?></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<p style="font-size:16px;font-weight:500;margin-top: -200px;padding:2px 4px;" class="wt-you-may-like"><?php _e('Want to export/import all WooCommerce data?'); ?></p>
<div class="wt-ierpro-header">
<div class="wt-ierpro-name">
<div style="float: left"><img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/gopro/suite.svg" alt="featured img" width="36" height="36"></div>
<div style="float: right">
<h4 class="wt-ier-product-name"><?php _e('Import Export Suite for WooCommerce'); ?></h4>
</div>
</div>
<div class="wt-ier-all-in-one-text">
<p class="wt-ier-all-in-one-text-sp"><?php esc_html_e('An All-In-One Plugin To Import & Export All Your WooCommerce Store Data'); ?></p>
</div>
<div class="wt-ier-order wt-ier-coupon wt-ier-gopro-cta wt-ierpro-features">
<div class="wt-ier-suite-main-points">
<div class="wt-ier-suite-sub-points-left" style="float:left;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Products'); ?></li>
<li><?php _e('Orders '); ?></li>
<li><?php _e('Subscriptions '); ?></li>
<li><?php _e('Coupons '); ?></li>
</ul>
</div>
<div class="wt-ier-suite-sub-points-right" style="float: right;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Customers'); ?></li>
<li><?php _e('WordPress Users'); ?></li>
<li><?php _e('Categories & Tags '); ?></li>
<li><?php _e('Reviews'); ?></li>
</ul>
</div>
</div>
</div>
<div class="wt-ierpro-mainfeatures">
<div class="wt-ierpro-btn-wrapper">
<a href="<?php echo esc_url("https://www.webtoffee.com/product/woocommerce-import-export-suite/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=Import_Export_Suite&utm_content=" . WT_U_IEW_VERSION); ?>" class="wt-ierpro-blue-btn-suite" target="_blank"><?php _e('GET THE PLUGIN'); ?> <span style="font-size: 18px;" class="dashicons dashicons-arrow-right-alt"></span></a>
</div>
</div>
</div>
<div class="wt-cs-rating-money-back">
<div class="wt-money-back">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/wt-money-back.svg" alt="alt"/>
<p><?php echo sprintf(__('You are covered by our %s 30-day money back guarantee %s'), '<b>', '</b>'); ?></p>
</div>
<div class="wt-cs-rating">
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/upgrade/wt-satisfaction-rating.svg"" alt="alt"/>
<p><?php echo sprintf(__('Supported by a team with %s %s customer satisfaction %s score'), '<b>', '99%', '</b>'); ?></p>
</div>
</div>
</div>
</div>
\ No newline at end of file
<svg width="18" height="15" viewBox="0 0 18 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.3764 1.74463C15.5229 1.76076 14.814 2.59947 14.8574 3.55108C14.8718 4.08334 15.1033 4.53495 15.4505 4.8414C13.6566 7.51882 11.8338 7.7285 9.72168 3.29302C10.4739 2.87366 10.8935 1.80915 10.3437 0.744629C10.0833 0.2285 9.54807 -0.0295643 9.0128 0.00269373C8.99834 0.00269373 8.99834 0.00269373 8.98387 0.00269373C8.98387 0.00269373 8.9694 0.00269373 8.95494 0.00269373C8.41967 -0.0134353 7.89886 0.2285 7.62399 0.744629C7.07426 1.80915 7.49379 2.87366 8.24606 3.29302C6.13391 7.7285 4.3111 7.51882 2.51722 4.8414C2.86442 4.53495 3.09589 4.06721 3.11036 3.55108C3.13929 2.59947 2.44489 1.76076 1.59135 1.74463C0.708872 1.7285 0 2.50269 0 3.48656C0 4.43818 0.694405 5.2285 1.56241 5.2285C1.62028 5.2285 1.69261 5.2285 1.75048 5.21237L2.34362 11.6962C2.38702 12.2124 2.77762 12.5995 3.24056 12.5995H8.98387H14.7272C15.1901 12.5995 15.5807 12.2124 15.6241 11.6962L16.2173 5.21237C16.2751 5.2285 16.333 5.2285 16.4053 5.2285C17.2589 5.2285 17.9677 4.45431 17.9677 3.48656C17.9677 2.50269 17.2444 1.7285 16.3764 1.74463Z" fill="#007FFF"/>
<rect x="2.45898" y="13.5484" width="13.0201" height="1.45161" rx="0.725806" fill="#007FFF"/>
</svg>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M7.91834 15.111C7.26143 14.9525 6.59362 14.8298 5.95033 14.6273C5.03053 14.3379 4.23313 13.8144 3.51161 13.1736C3.06407 12.7767 2.99422 12.3332 3.32053 11.9597C3.6414 11.5925 4.09127 11.6048 4.54173 11.9936C7.72881 14.7437 12.5037 13.634 14.0049 9.74467C14.9177 7.37984 14.4799 5.17853 12.7137 3.37231C10.921 1.53982 8.70854 1.07238 6.33521 2.0102C4.04574 2.91488 2.808 4.70443 2.59512 7.18788C2.58617 7.29259 2.59395 7.39886 2.59395 7.54787C2.81111 7.54787 3.00006 7.53082 3.18472 7.5518C3.51784 7.58944 3.68908 7.9012 3.50247 8.17923C3.0526 8.84784 2.58676 9.50664 2.09991 10.1484C1.90533 10.4043 1.63291 10.3752 1.44339 10.1184C0.981639 9.49095 0.527488 8.85842 0.0927893 8.21236C-0.122225 7.89296 0.0538711 7.57983 0.441481 7.54905C0.615049 7.53532 0.790565 7.54669 0.909649 7.54669C1.07135 6.74025 1.15754 5.95851 1.38735 5.22402C2.42273 1.91314 5.57673 -0.247975 8.98621 0.0224092C12.6662 0.314557 15.4407 2.97075 15.9252 6.53202C15.9379 6.62515 15.9745 6.71476 16 6.80652V8.28668C15.9745 8.37765 15.9396 8.46707 15.9249 8.55981C15.4802 11.357 13.9827 13.3595 11.4041 14.48C10.6695 14.799 9.84472 14.9071 9.06113 15.1118L7.91834 15.111Z" fill="#007FFF"/>
<path d="M8.97734 10.9693C8.91897 11.4006 9.09682 11.9553 8.44341 12.0555C8.08226 12.1108 7.95112 11.8724 7.83553 11.0428C7.46583 10.9699 7.09184 10.9126 6.72641 10.8189C6.26077 10.6995 6.04906 10.3722 6.15219 9.98459C6.2631 9.56754 6.58864 9.44441 7.093 9.54538C7.54232 9.63625 7.99916 9.68405 8.45742 9.68813C8.81254 9.69009 9.14021 9.52519 9.21104 9.12501C9.28304 8.71737 8.99953 8.49758 8.68216 8.33935C8.45236 8.22406 8.20407 8.14661 7.96882 8.04131C7.63472 7.89191 7.28427 7.76681 6.97644 7.57172C5.74512 6.79331 5.78268 5.14709 7.04513 4.41398C7.31113 4.25947 7.61196 4.16575 7.9194 4.03418C7.95676 3.63772 7.82717 3.11108 8.45489 3.0303C8.79892 2.98598 8.92403 3.20048 9.05596 3.97007C9.35775 4.02438 9.66734 4.05987 9.96583 4.13869C10.3665 4.24437 10.5523 4.58103 10.4478 4.952C10.3527 5.28983 10.0314 5.43806 9.63523 5.37355C9.24918 5.31081 8.85573 5.25591 8.46637 5.2616C8.14667 5.26552 7.83534 5.38943 7.76587 5.76785C7.70166 6.11765 7.94937 6.30137 8.21128 6.42666C8.73665 6.67861 9.29102 6.87488 9.80686 7.14428C10.7103 7.61486 11.0609 8.36954 10.8576 9.31893C10.7214 9.95263 10.3299 10.3895 9.76424 10.6677C9.52373 10.7865 9.26143 10.8622 8.97734 10.9693Z" fill="#007FFF"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="15.1111" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="43" height="21" viewBox="0 0 43 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="6" width="36.1395" height="21" rx="2" fill="#6E6ADD"/>
<path d="M0 9.8125L6 5V16L0 9.8125Z" fill="#6E6ADD"/>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="76" height="76" rx="5" fill="#1478F9"/>
<path d="M25.8978 19.5478H23.4603C22.5005 19.5478 21.9185 20.1267 21.9185 21.0713V55.9915C21.9185 56.9787 22.4944 57.5454 23.4907 57.5454C26.5985 57.5454 34.2919 57.5454 37.4028 57.5454V60.3881C34.2035 60.3881 26.5467 60.3881 23.3475 60.3729C21.2787 60.3485 19.7949 59.1298 19.1794 57.061C19.155 56.9817 19.1794 56.8751 19.0758 56.8385V20.2547C19.2982 18.7039 20.194 17.671 21.5621 16.9854C21.9277 16.8026 22.3268 16.827 22.7016 16.7203H25.8978V19.5478Z" fill="white"/>
<path d="M42.6373 19.5444H44.179C44.4594 19.5444 44.5447 19.6084 44.5416 19.9009C44.5264 21.595 44.5416 23.289 44.5416 24.9831C44.5416 26.8569 45.7299 28.03 47.6129 28.03C49.3069 28.03 51.001 28.03 52.6951 28.03C52.9662 28.03 53.0394 28.094 53.0333 28.3682C53.0333 29.5595 53.0333 49.9401 53.0333 49.9401L55.876 49.8913C55.876 49.8913 55.8486 28.6302 55.876 26.994C55.8904 26.687 55.8373 26.3806 55.7204 26.0963C55.6035 25.812 55.4258 25.5569 55.1996 25.3487C52.5833 22.7589 49.9783 20.1558 47.3844 17.5396C47.0794 17.2071 46.7185 16.9307 46.318 16.723H42.6617L42.6373 19.5444Z" fill="white"/>
<path d="M36.2424 19.5475H32.0743V16.72H36.2424V19.5475Z" fill="white"/>
<path d="M30.3616 11.0312C30.9313 11.2811 31.1294 11.7107 31.1294 12.3292C31.1142 17.1646 31.1294 18.0726 31.1111 22.9049C31.1111 23.2096 31.2025 23.2644 31.4767 23.2583C32.3177 23.2583 33.1586 23.2583 33.9996 23.2583C34.2175 23.2359 34.4369 23.2827 34.6267 23.3921C34.8165 23.5015 34.967 23.6679 35.0568 23.8677C35.1407 24.056 35.1658 24.2652 35.1288 24.468C35.0919 24.6708 34.9946 24.8576 34.8496 25.0042C33.2246 26.9562 31.5996 28.9093 29.9746 30.8633C29.4506 31.488 28.7863 31.488 28.2653 30.8633C26.62 28.8991 24.9778 26.9298 23.3385 24.9555C23.202 24.8081 23.1123 24.6234 23.0808 24.425C23.0493 24.2266 23.0775 24.0232 23.1617 23.8408C23.2459 23.6584 23.3823 23.5051 23.5538 23.4003C23.7252 23.2955 23.9239 23.244 24.1246 23.2523C24.9991 23.2523 25.8705 23.2523 26.7419 23.2523C27.0192 23.2523 27.1075 23.2005 27.1075 22.8988C27.1075 18.0665 27.1075 17.1585 27.1075 12.3231C27.1075 11.7137 27.3025 11.275 27.8723 11.0251L30.3616 11.0312Z" fill="white"/>
<path d="M38.2285 25.7721C37.6588 25.5253 37.4607 25.0927 37.4607 24.4742C37.479 19.6388 37.4607 19.2945 37.479 14.4469C37.479 14.1422 37.3907 14.0874 37.1134 14.0935C36.2725 14.1117 35.4315 14.0935 34.5906 14.0935C34.3744 14.1171 34.1562 14.0726 33.9666 13.966C33.777 13.8595 33.6255 13.6963 33.5333 13.4993C33.4453 13.3066 33.4188 13.0915 33.4575 12.8832C33.4962 12.6749 33.5982 12.4836 33.7496 12.3354C35.3797 10.3854 37.0037 8.42627 38.6246 6.47627C39.1487 5.85166 39.8129 5.85166 40.337 6.47627C41.9823 8.44455 43.6236 10.4138 45.2607 12.3842C45.3968 12.5319 45.4861 12.7167 45.5173 12.9151C45.5486 13.1136 45.5204 13.3168 45.4363 13.4993C45.3523 13.6817 45.2161 13.8352 45.045 13.9404C44.8738 14.0456 44.6754 14.0978 44.4746 14.0904C43.6032 14.0904 42.7288 14.0904 41.8574 14.0904C41.5801 14.0904 41.4918 14.1453 41.4918 14.4438C41.4918 19.2762 41.4918 19.6235 41.4918 24.4711C41.4918 25.0805 41.2968 25.5223 40.727 25.7691L38.2285 25.7721Z" fill="white"/>
<path d="M34.4413 39.2188H14.1369C12.508 39.2188 11.1875 40.5392 11.1875 42.1681V62.4725C11.1875 64.1014 12.508 65.4219 14.1369 65.4219H34.4413C36.0701 65.4219 37.3906 64.1014 37.3906 62.4725V42.1681C37.3906 40.5392 36.0701 39.2188 34.4413 39.2188Z" fill="white"/>
<path d="M63.6269 43.1451H43.8375C43.2553 43.1451 42.7833 43.6171 42.7833 44.1994V52.2066C42.7833 52.7888 43.2553 53.2608 43.8375 53.2608H63.6269C64.2092 53.2608 64.6812 52.7888 64.6812 52.2066V44.1994C64.6812 43.6171 64.2092 43.1451 63.6269 43.1451Z" fill="white"/>
<path d="M46.9974 51.296C46.6408 51.105 46.3523 50.808 46.1717 50.446C45.97 50.0253 45.8718 49.5625 45.8853 49.0962V47.2681C45.8714 46.8017 45.9697 46.3388 46.1717 45.9183C46.3513 45.5548 46.64 45.2565 46.9974 45.0652C47.4004 44.8548 47.8501 44.75 48.3045 44.7605C48.6972 44.7543 49.085 44.8476 49.4319 45.0317C49.7681 45.2203 50.0503 45.492 50.2515 45.8208C50.4817 46.2036 50.6339 46.6282 50.6994 47.07H49.3923C49.3517 46.8691 49.2753 46.6772 49.1668 46.5033C49.0716 46.357 48.9445 46.2341 48.7951 46.1438C48.645 46.0611 48.4759 46.0191 48.3045 46.0219C48.0923 46.0146 47.882 46.064 47.6952 46.1651C47.5283 46.2636 47.3962 46.4116 47.3174 46.5886C47.2243 46.7995 47.1796 47.0285 47.1863 47.2589V49.087C47.1796 49.3155 47.2244 49.5425 47.3174 49.7513C47.3957 49.9278 47.528 50.075 47.6952 50.1717C47.8811 50.2753 48.0919 50.3259 48.3045 50.318C48.4779 50.3211 48.649 50.2791 48.8012 50.1961C48.9524 50.1095 49.0801 49.9871 49.1729 49.8396C49.2806 49.6649 49.355 49.4717 49.3923 49.2699H50.6933C50.6239 49.7116 50.4698 50.1358 50.2393 50.5191C50.04 50.8476 49.7586 51.1185 49.4228 51.3052C49.0779 51.4919 48.6906 51.5864 48.2985 51.5794C47.8482 51.5925 47.4015 51.4952 46.9974 51.296V51.296Z" fill="#188DDB"/>
<path d="M53.0149 51.4908C52.7186 51.4294 52.4303 51.3344 52.1556 51.2074C51.8973 51.0886 51.6548 50.9381 51.4335 50.7595L52.0185 49.7205C52.2846 49.9357 52.5869 50.1019 52.9113 50.2111C53.246 50.3242 53.5969 50.3818 53.9503 50.3817C54.2824 50.3999 54.6131 50.3273 54.907 50.1715C55.0119 50.1139 55.0989 50.0286 55.1586 49.9249C55.2182 49.8212 55.2482 49.703 55.2452 49.5834V49.5834C55.2494 49.5065 55.2384 49.4294 55.2128 49.3568C55.1872 49.2841 55.1474 49.2172 55.0959 49.1599C54.9853 49.0514 54.849 48.9728 54.6998 48.9314C54.4947 48.8732 54.2861 48.8284 54.0752 48.7973H54.0447H54.0203H53.9198C53.5421 48.7414 53.17 48.6527 52.8077 48.5322C52.509 48.4232 52.2485 48.2294 52.0581 47.9747C51.8335 47.6435 51.7263 47.2466 51.7535 46.8473V46.8473C51.7458 46.456 51.8516 46.0708 52.0581 45.7383C52.2603 45.4243 52.5538 45.1797 52.8991 45.0375C53.3219 44.8676 53.775 44.7857 54.2306 44.7968C54.4776 44.7975 54.7238 44.8251 54.9649 44.879C55.2167 44.9357 55.4626 45.0163 55.6992 45.1197C55.9377 45.2227 56.1653 45.3493 56.3786 45.4976L55.8454 46.564C55.5965 46.3896 55.3248 46.2501 55.038 46.1496C54.779 46.0556 54.506 46.0061 54.2306 46.0033C53.9205 45.9854 53.6112 46.0506 53.3348 46.1922C53.2409 46.2464 53.1631 46.3247 53.1096 46.419C53.056 46.5132 53.0286 46.6201 53.0301 46.7285V46.7285C53.0255 46.8123 53.0377 46.8961 53.066 46.9751C53.0943 47.0541 53.138 47.1267 53.1946 47.1886C53.3098 47.3021 53.451 47.3858 53.606 47.4323C53.8302 47.5006 54.0581 47.5566 54.2885 47.5999H54.325H54.3646H54.4164H54.4682C54.831 47.6656 55.1862 47.7676 55.5285 47.9046C55.8146 48.0231 56.0609 48.2208 56.2385 48.4744C56.4459 48.7922 56.5462 49.168 56.5249 49.5469V49.5469C56.5335 49.9335 56.4275 50.3141 56.2202 50.6407C56.0072 50.9555 55.7032 51.1979 55.3488 51.3354C54.9099 51.505 54.442 51.5868 53.9716 51.5761C53.6506 51.5816 53.3298 51.553 53.0149 51.4908V51.4908Z" fill="#188DDB"/>
<path d="M56.863 44.8334H58.161L59.5808 49.291L61.0037 44.8334H62.2987L60.0744 51.5121H59.0903L56.863 44.8334Z" fill="#188DDB"/>
<path d="M53.2157 55.3704L53.2157 57.7392C53.2157 58.6719 52.6457 59.2374 51.7156 59.2374L17.3294 59.2374C16.3573 59.2374 15.7993 58.6778 15.7993 57.7096C15.7993 54.6894 15.7993 54.0231 15.7993 51L13 51C13 54.109 13 54.7397 13.015 57.8487C13.039 59.8592 14.2391 61.3012 16.2763 61.8993C16.3543 61.923 16.4593 61.8993 16.4953 62L52.5197 62C54.0468 61.7838 55.0639 60.9133 55.739 59.5839C55.919 59.2285 55.895 58.8406 56 58.4764L56 55.3704L53.2157 55.3704Z" fill="white"/>
<path d="M20.8352 46.7451H27.6403C27.7399 46.7542 27.8402 46.741 27.9341 46.7067C28.028 46.6723 28.1131 46.6176 28.1834 46.5464C28.2536 46.4752 28.3071 46.3893 28.3402 46.295C28.3733 46.2006 28.385 46.1001 28.3746 46.0007C28.3746 45.1163 28.3746 44.2331 28.3746 43.351C28.385 43.2516 28.3733 43.1511 28.3402 43.0567C28.3071 42.9623 28.2536 42.8765 28.1834 42.8053C28.1131 42.7341 28.028 42.6794 27.9341 42.645C27.8402 42.6106 27.7399 42.5975 27.6403 42.6065C27.2173 42.6065 26.7909 42.6065 26.368 42.6065C26.3135 42.6162 26.2573 42.6053 26.2104 42.5759C26.1636 42.5465 26.1292 42.5007 26.1142 42.4475C25.9935 42.162 25.8054 41.91 25.566 41.7132C25.2524 41.4709 24.886 41.3062 24.4966 41.2327H23.8943C23.8943 41.2665 23.8571 41.2733 23.83 41.28C23.4974 41.3448 23.1863 41.4917 22.9251 41.7074C22.6639 41.9232 22.4607 42.2009 22.3343 42.5152C22.2971 42.6065 22.2362 42.6167 22.1516 42.6133H20.8386C20.7387 42.6037 20.638 42.6165 20.5437 42.6506C20.4494 42.6847 20.3638 42.7394 20.2932 42.8106C20.2226 42.8819 20.1687 42.9679 20.1355 43.0626C20.1022 43.1572 20.0904 43.258 20.1009 43.3578C20.1009 44.2421 20.1009 45.1242 20.1009 46.004C20.091 46.1032 20.1032 46.2033 20.1365 46.2973C20.1698 46.3912 20.2234 46.4766 20.2936 46.5474C20.3637 46.6182 20.4487 46.6727 20.5423 46.7068C20.6359 46.741 20.7359 46.7541 20.8352 46.7451Z" fill="#1A8FDB"/>
<path d="M32.5134 45.4592C32.5274 45.2629 32.4991 45.0659 32.4305 44.8814C32.3619 44.6969 32.2546 44.5293 32.1157 44.3898C31.9769 44.2503 31.8097 44.1422 31.6256 44.0728C31.4414 44.0033 31.2445 43.9741 31.0481 43.9872C30.6759 43.9872 30.3003 43.9872 29.9281 43.9872C29.7893 43.9872 29.7487 44.021 29.7521 44.1632C29.7521 44.7587 29.7521 45.3543 29.7521 45.9499C29.7561 46.1588 29.7311 46.3672 29.6776 46.5692C29.562 47.0293 29.2911 47.4355 28.9107 47.7191C28.5304 48.0027 28.0638 48.1463 27.5897 48.1258H20.8963C20.6945 48.1304 20.493 48.1077 20.2973 48.0581C19.8344 47.9447 19.4247 47.6751 19.1374 47.2947C18.8501 46.9144 18.7028 46.4465 18.7204 45.9702C18.7204 45.3611 18.7204 44.7486 18.7204 44.1395C18.7204 44.0041 18.6832 43.9737 18.5546 43.9771C18.2162 43.9771 17.8778 43.9771 17.5191 43.9771C16.5039 43.9771 15.9591 44.5286 15.9591 45.5303V61.736C15.9591 62.7343 16.5073 63.2859 17.4988 63.2859H30.9669C31.9618 63.2859 32.51 62.7377 32.51 61.7394V45.4592H32.5134ZM24.0264 56.2066C23.1128 57.1203 22.2025 58.034 21.2854 58.9443C21.2222 59.0108 21.1461 59.0638 21.0618 59.1C20.9774 59.1362 20.8866 59.1549 20.7948 59.1549C20.703 59.1549 20.6121 59.1362 20.5278 59.1C20.4434 59.0638 20.3673 59.0108 20.3041 58.9443C19.8394 58.4931 19.3882 58.0419 18.9505 57.5907C18.8872 57.5265 18.8371 57.4504 18.8032 57.3669C18.7693 57.2833 18.7521 57.1939 18.7528 57.1037C18.7534 57.0135 18.7718 56.9243 18.8069 56.8412C18.842 56.7582 18.8931 56.6828 18.9573 56.6195C19.0215 56.5562 19.0976 56.5061 19.1811 56.4722C19.2647 56.4382 19.3541 56.4211 19.4443 56.4217C19.5345 56.4224 19.6236 56.4407 19.7067 56.4758C19.7898 56.5109 19.8652 56.562 19.9285 56.6263C20.1755 56.8631 20.4225 57.1034 20.656 57.3572C20.7677 57.4756 20.832 57.4858 20.9538 57.3572C21.6306 56.6499 22.348 55.9529 23.0519 55.2558C23.1338 55.1574 23.2421 55.0843 23.3639 55.0449C23.4858 55.0056 23.6163 55.0016 23.7404 55.0335C23.8644 55.0654 23.9768 55.1319 24.0646 55.2251C24.1524 55.3184 24.2119 55.4346 24.2362 55.5603C24.2362 55.6077 24.2362 55.6584 24.2566 55.6889C24.255 55.7862 24.2338 55.8823 24.1942 55.9712C24.1547 56.0602 24.0976 56.1402 24.0264 56.2066ZM24.0264 50.6976C23.1162 51.6045 22.2126 52.5148 21.299 53.4047C21.2355 53.4768 21.1574 53.5344 21.0698 53.5739C20.9823 53.6134 20.8874 53.6339 20.7914 53.6339C20.6954 53.6339 20.6004 53.6134 20.5129 53.5739C20.4254 53.5344 20.3473 53.4768 20.2838 53.4047C19.8326 52.9535 19.3814 52.5024 18.9302 52.0512C18.8667 51.9869 18.8164 51.9108 18.7823 51.8272C18.7481 51.7436 18.7308 51.654 18.7313 51.5637C18.7317 51.4733 18.75 51.384 18.785 51.3007C18.82 51.2174 18.8711 51.1418 18.9353 51.0783C18.9995 51.0147 19.0756 50.9644 19.1593 50.9303C19.2429 50.8962 19.3324 50.8788 19.4228 50.8793C19.5131 50.8798 19.6025 50.8981 19.6858 50.9331C19.7691 50.9681 19.8446 51.0191 19.9082 51.0833C20.1451 51.3135 20.3819 51.5436 20.6053 51.7838C20.7305 51.9226 20.8049 51.9395 20.9437 51.7838C21.6205 51.08 22.3153 50.384 23.0282 49.6959C23.1115 49.5994 23.2203 49.5285 23.3422 49.4911C23.464 49.4537 23.5939 49.4516 23.717 49.4848C23.84 49.518 23.9512 49.5853 24.0377 49.679C24.1241 49.7726 24.1824 49.8887 24.2058 50.014C24.216 50.0574 24.2228 50.1015 24.2261 50.146C24.2335 50.2489 24.2189 50.3522 24.1833 50.4491C24.1477 50.5459 24.0919 50.6341 24.0197 50.7077L24.0264 50.6976ZM29.0178 57.7768C28.1334 57.7768 27.2491 57.7768 26.3648 57.7768C26.1821 57.7768 26.007 57.7042 25.8778 57.5751C25.7487 57.446 25.6761 57.2708 25.6761 57.0882C25.6761 56.9055 25.7487 56.7304 25.8778 56.6012C26.007 56.4721 26.1821 56.3995 26.3648 56.3995H29.0178C29.2004 56.3995 29.3756 56.4721 29.5047 56.6012C29.6339 56.7304 29.7064 56.9055 29.7064 57.0882C29.7064 57.2708 29.6339 57.446 29.5047 57.5751C29.3756 57.7042 29.2004 57.7768 29.0178 57.7768V57.7768ZM29.0178 52.261H26.358C26.1753 52.261 26.0002 52.1884 25.871 52.0593C25.7419 51.9301 25.6694 51.755 25.6694 51.5723C25.6694 51.3897 25.7419 51.2145 25.871 51.0854C26.0002 50.9562 26.1753 50.8837 26.358 50.8837C26.8013 50.8837 27.248 50.8837 27.7116 50.8837C28.1752 50.8837 28.588 50.8837 29.0245 50.8837C29.2072 50.8837 29.3823 50.9562 29.5115 51.0854C29.6406 51.2145 29.7132 51.3897 29.7132 51.5723C29.7132 51.755 29.6406 51.9301 29.5115 52.0593C29.3823 52.1884 29.2072 52.261 29.0245 52.261H29.0178Z" fill="#1A8FDB"/>
<rect x="37.3907" y="30.6875" width="11.8828" height="2.4375" rx="1.21875" fill="white"/>
<rect x="37.3907" y="34.9531" width="8.83594" height="2.4375" rx="1.21875" fill="white"/>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:471)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M70.9062 -1H5.09375C1.72826 -1 -1 1.72826 -1 5.09375V70.9062C-1 74.2717 1.72826 77 5.09375 77H70.9062C74.2717 77 77 74.2717 77 70.9062V5.09375C77 1.72826 74.2717 -1 70.9062 -1Z" fill="#1E9BE9"/>
<path d="M26.2824 16.7548H23.9074C22.9723 16.7548 22.4052 17.3188 22.4052 18.2391V52.264C22.4052 53.2258 22.9663 53.778 23.9371 53.778C26.9652 53.778 34.4613 53.778 37.4924 53.778V56.5479C34.3752 56.5479 26.9147 56.5479 23.7976 56.533C21.7818 56.5093 20.336 55.3218 19.7363 53.306C19.7126 53.2288 19.7363 53.1249 19.6354 53.0893V17.4435C19.8521 15.9324 20.7249 14.926 22.0579 14.258C22.4141 14.0799 22.803 14.1037 23.1682 13.9998H26.2824V16.7548Z" fill="white"/>
<path d="M42.5927 16.752H44.0948C44.368 16.752 44.4511 16.8143 44.4481 17.0993C44.4333 18.75 44.4481 20.4006 44.4481 22.0512C44.4481 23.877 45.6059 25.02 47.4406 25.02C49.0912 25.02 50.7419 25.02 52.3925 25.02C52.6567 25.02 52.728 25.0823 52.722 25.3495C52.722 26.5103 52.722 46.3682 52.722 46.3682L55.4919 46.3207C55.4919 46.3207 55.4652 25.6048 55.4919 24.0106C55.5059 23.7114 55.4541 23.4129 55.3403 23.1359C55.2264 22.8589 55.0532 22.6103 54.8328 22.4075C52.2836 19.884 49.7454 17.3477 47.218 14.7986C46.9208 14.4746 46.5692 14.2053 46.1789 14.0029H42.6164L42.5927 16.752Z" fill="white"/>
<path d="M36.3614 16.7548H32.3001V13.9998H36.3614V16.7548Z" fill="white"/>
<path d="M30.6315 8.45735C31.1866 8.70079 31.3796 9.11938 31.3796 9.72204C31.3648 14.4334 31.3796 15.3181 31.3618 20.0266C31.3618 20.3234 31.4509 20.3769 31.718 20.3709C32.5374 20.3709 33.3568 20.3709 34.1762 20.3709C34.3885 20.3491 34.6023 20.3947 34.7873 20.5012C34.9722 20.6078 35.1188 20.77 35.2063 20.9647C35.2881 21.1481 35.3125 21.352 35.2765 21.5496C35.2405 21.7471 35.1457 21.9292 35.0045 22.072C33.4211 23.974 31.8378 25.877 30.2545 27.7809C29.7438 28.3895 29.0966 28.3895 28.589 27.7809C26.9859 25.8671 25.3857 23.9483 23.7885 22.0245C23.6555 21.8809 23.5681 21.701 23.5374 21.5077C23.5067 21.3143 23.5342 21.1162 23.6162 20.9385C23.6982 20.7607 23.8312 20.6114 23.9982 20.5093C24.1653 20.4072 24.3589 20.357 24.5545 20.365C25.4065 20.365 26.2555 20.365 27.1046 20.365C27.3748 20.365 27.4609 20.3145 27.4609 20.0206C27.4609 15.3122 27.4609 14.4275 27.4609 9.7161C27.4609 9.12235 27.6509 8.69485 28.206 8.45142L30.6315 8.45735Z" fill="white"/>
<path d="M38.297 22.82C37.7418 22.5796 37.5489 22.158 37.5489 21.5554C37.5667 16.8439 37.5489 16.5085 37.5667 11.7852C37.5667 11.4883 37.4806 11.4349 37.2104 11.4408C36.3911 11.4586 35.5717 11.4408 34.7523 11.4408C34.5417 11.4639 34.3291 11.4205 34.1443 11.3167C33.9596 11.2129 33.812 11.0538 33.7222 10.8619C33.6364 10.6742 33.6106 10.4645 33.6483 10.2616C33.686 10.0586 33.7854 9.87225 33.9329 9.72785C35.5212 7.82785 37.1036 5.91895 38.6829 4.01895C39.1936 3.41035 39.8407 3.41035 40.3514 4.01895C41.9545 5.93676 43.5537 7.85556 45.1489 9.77535C45.2814 9.91935 45.3684 10.0994 45.3989 10.2927C45.4293 10.4861 45.4019 10.6841 45.32 10.8619C45.2381 11.0396 45.1054 11.1892 44.9386 11.2917C44.7719 11.3942 44.5785 11.445 44.3829 11.4379C43.5339 11.4379 42.6818 11.4379 41.8328 11.4379C41.5626 11.4379 41.4765 11.4913 41.4765 11.7822C41.4765 16.4907 41.4765 16.8291 41.4765 21.5524C41.4765 22.1461 41.2865 22.5766 40.7314 22.8171L38.297 22.82Z" fill="white"/>
<path d="M34.6839 41.1907H14.7488C13.1616 41.1907 11.875 42.4773 11.875 44.0644V62.061C11.875 63.6481 13.1616 64.9347 14.7488 64.9347H34.6839C36.271 64.9347 37.5577 63.6481 37.5577 62.061V44.0644C37.5577 42.4773 36.271 41.1907 34.6839 41.1907Z" fill="white"/>
<path d="M62.7623 41.5625H43.4803C42.913 41.5625 42.4531 42.0224 42.4531 42.5897V50.3916C42.4531 50.9589 42.913 51.4188 43.4803 51.4188H62.7623C63.3296 51.4188 63.7895 50.9589 63.7895 50.3916V42.5897C63.7895 42.0224 63.3296 41.5625 62.7623 41.5625Z" fill="white"/>
<path d="M46.5587 49.5038C46.2104 49.3174 45.9291 49.0268 45.7542 48.6726C45.5572 48.2639 45.4615 47.8138 45.4751 47.3604V45.5791C45.4616 45.1247 45.5573 44.6737 45.7542 44.264C45.9291 43.9098 46.2104 43.6191 46.5587 43.4327C46.9513 43.2277 47.3895 43.1256 47.8323 43.1358C48.2149 43.1298 48.5927 43.2207 48.9307 43.4C49.2583 43.5839 49.5332 43.8486 49.7293 44.169C49.9536 44.542 50.1019 44.9556 50.1657 45.3861H48.8921C48.8526 45.1904 48.7782 45.0034 48.6724 44.834C48.5797 44.6914 48.4558 44.5716 48.3103 44.4836C48.164 44.4031 47.9992 44.3622 47.8323 44.3649C47.6255 44.3578 47.4205 44.406 47.2385 44.5044C47.0759 44.6004 46.9472 44.7446 46.8704 44.9171C46.7798 45.1226 46.7361 45.3457 46.7428 45.5702V47.3515C46.7362 47.574 46.7799 47.7952 46.8704 47.9986C46.9467 48.1707 47.0756 48.3141 47.2385 48.4083C47.4197 48.5092 47.6251 48.5585 47.8323 48.5508C48.0012 48.5539 48.1679 48.513 48.3162 48.4321C48.4636 48.3477 48.5879 48.2284 48.6784 48.0847C48.7833 47.9145 48.8558 47.7263 48.8921 47.5296H50.1598C50.0922 47.96 49.942 48.3734 49.7174 48.7468C49.5232 49.0669 49.249 49.3308 48.9218 49.5127C48.5855 49.6938 48.2082 49.7848 47.8263 49.7769C47.3877 49.7921 46.9522 49.6983 46.5587 49.5038V49.5038Z" fill="#007FFF"/>
<path d="M52.4219 49.6938C52.1332 49.6341 51.8523 49.5414 51.5847 49.4177C51.333 49.3019 51.0967 49.1553 50.8811 48.9813L51.4511 47.969C51.7104 48.1787 52.0049 48.3405 52.3209 48.4469C52.6471 48.5571 52.989 48.6133 53.3333 48.6132C53.6569 48.631 53.9792 48.5601 54.2655 48.4083C54.3677 48.3523 54.4525 48.2691 54.5106 48.1681C54.5687 48.067 54.5979 47.9519 54.595 47.8354V47.8354C54.5991 47.7604 54.5884 47.6853 54.5634 47.6145C54.5385 47.5437 54.4998 47.4785 54.4495 47.4227C54.3418 47.317 54.209 47.2404 54.0636 47.2001C53.8638 47.1433 53.6605 47.0997 53.455 47.0694H53.4253H53.4016H53.3036C52.9355 47.0172 52.5728 46.9317 52.22 46.8141C51.929 46.7078 51.6752 46.5191 51.4897 46.2708C51.2708 45.9481 51.1663 45.5614 51.1928 45.1724V45.1724C51.1849 44.792 51.288 44.4175 51.4897 44.0947C51.6862 43.7877 51.9722 43.5483 52.3091 43.409C52.7211 43.2434 53.1625 43.1636 53.6064 43.1744C53.8471 43.1752 54.087 43.2021 54.3219 43.2546C54.5673 43.3098 54.8069 43.3884 55.0374 43.4891C55.2697 43.5895 55.4915 43.7128 55.6994 43.8572L55.1799 44.8963C54.9373 44.7264 54.6726 44.5905 54.3931 44.4926C54.1408 44.4009 53.8748 44.3528 53.6064 44.3501C53.3043 44.3325 53.0029 44.3961 52.7336 44.5341C52.6421 44.5869 52.5664 44.6632 52.5142 44.755C52.462 44.8469 52.4353 44.951 52.4367 45.0566V45.0566C52.4323 45.1382 52.4442 45.2199 52.4717 45.2969C52.4992 45.3739 52.5419 45.4446 52.597 45.5049C52.7093 45.6155 52.8469 45.697 52.9978 45.7424C53.2163 45.809 53.4383 45.8635 53.6628 45.9057H53.6984H53.737H53.7875H53.838C54.1915 45.9697 54.5376 46.0691 54.8711 46.2026C55.1498 46.318 55.3898 46.5106 55.5628 46.7577C55.7649 47.0674 55.8627 47.4335 55.8419 47.8027C55.8507 48.1795 55.7473 48.5505 55.545 48.8685C55.3375 49.1753 55.0413 49.4114 54.6959 49.5454C54.2681 49.7096 53.8122 49.7883 53.3541 49.7769C53.0413 49.7823 52.7288 49.7545 52.4219 49.6938V49.6938Z" fill="#007FFF"/>
<path d="M56.1716 43.2072H57.4363L58.8198 47.5504L60.2062 43.2072H61.4679L59.3007 49.7147H58.3418L56.1716 43.2072Z" fill="#007FFF"/>
<path d="M20.9449 44.5312H14.5469V48.5417H17.96V58.4844H28.9794V48.7421H32.3594V44.5312H25.8772C25.6196 44.9467 25.2628 45.2904 24.8394 45.531C24.4159 45.7716 23.9395 45.9014 23.4534 45.9086C22.9674 45.9157 22.4874 45.8 22.0572 45.572C21.627 45.3439 21.2603 45.0109 20.9908 44.6032L20.9449 44.5312Z" fill="#26A8F6"/>
<rect x="24.1078" y="52.782" width="9.32434" height="9.55177" fill="white"/>
<path d="M34.5269 52.1475H23.1557V55.5588H23.7243V61.8129C23.7243 62.1145 23.8441 62.4038 24.0573 62.617C24.2706 62.8303 24.5598 62.9501 24.8614 62.9501H32.8212C33.1228 62.9501 33.412 62.8303 33.6252 62.617C33.8385 62.4038 33.9583 62.1145 33.9583 61.8129V55.5588H34.5269V52.1475ZM24.2928 53.2846H33.3897V54.4217H24.2928V53.2846ZM32.8212 61.8129H24.8614V55.5588H32.8212V61.8129ZM29.4098 56.1274V59.0668L30.8824 57.5999L31.6841 58.4016L28.8413 61.2444L25.9985 58.4016L26.8002 57.5942L28.2727 59.0668V56.1274H29.4098Z" fill="#358CDB"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M53.0575 55.5157L53.0575 53.1407L55.8125 53.1407L55.8125 56.2549C55.7722 56.3967 55.7511 56.542 55.7299 56.6876C55.6966 56.9171 55.6632 57.1473 55.5542 57.3652C54.8863 58.6982 53.8798 59.571 52.3688 59.7877L35.9219 59.7877L35.9219 57.0179L51.5731 57.0179C52.4934 57.0179 53.0575 56.4508 53.0575 55.5157Z" fill="white"/>
<rect x="33.5469" y="30.2812" width="15.4375" height="2.375" rx="1.1875" fill="white"/>
<rect x="33.5469" y="34.4375" width="11.5781" height="2.375" rx="1.1875" fill="white"/>
</g>
<defs>
<clipPath id="clip0_214:471">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:534)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M70.8281 -1H4.17188C2.53499 -1 0.965152 -0.349751 -0.1923 0.8077C-1.34975 1.96515 -2 3.53499 -2 5.17188L-2 71.8281C-2 73.465 -1.34975 75.0348 -0.1923 76.1923C0.965152 77.3498 2.53499 78 4.17188 78H70.8281C72.465 78 74.0348 77.3498 75.1923 76.1923C76.3498 75.0348 77 73.465 77 71.8281V5.17188C77 3.53499 76.3498 1.96515 75.1923 0.8077C74.0348 -0.349751 72.465 -1 70.8281 -1Z" fill="#5351D4"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.8494 14.3173C24.0525 14.1141 24.328 14 24.6153 14H44.9793C45.5775 14 46.0625 14.485 46.0625 15.0832V18.1161H43.8961V16.1664H25.064L16.1664 25.064V55.1613H22.8822V57.3277H15.0832C14.485 57.3277 14 56.8427 14 56.2445V24.6153C14 24.328 14.1141 24.0525 14.3173 23.8494L23.8494 14.3173ZM30.0312 20.7158C30.0312 20.1176 30.5162 19.6326 31.1144 19.6326H51.4785C51.7741 19.6326 52.0569 19.7534 52.2612 19.9671L61.7933 29.9324C61.9861 30.134 62.0937 30.4022 62.0937 30.6812V61.0106C62.0937 61.6088 61.6088 62.0938 61.0106 62.0938H35.8805V59.9274H59.9274V31.1158L51.0156 21.799H32.1976V29.8146H30.0312V20.7158Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M50.6429 30.9251V21.1567H52.7462V29.815H60.9487V32.0351H51.6946C51.1138 32.0351 50.6429 31.5381 50.6429 30.9251Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.3096 25.1412V14.8588H24.0311V23.9727H15.145V26.3097H25.1704C25.7996 26.3097 26.3096 25.7865 26.3096 25.1412Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.403 43.0528L26.403 51.3127L23.8694 51.3127C23.467 51.3127 23.1042 51.5527 22.9502 51.9208C22.7962 52.289 22.8813 52.7127 23.1658 52.9944L30.3296 60.0876C30.7182 60.4724 31.3481 60.4724 31.7367 60.0876L38.9005 52.9944C39.185 52.7127 39.2701 52.289 39.1161 51.9208C38.9621 51.5527 38.5989 51.3127 38.1965 51.3127L35.6414 51.3127L35.6414 43.0528C35.6414 42.0273 34.7973 41.1959 33.756 41.1959L28.2884 41.1959C27.2471 41.1959 26.403 42.0273 26.403 43.0528Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.5417 43.6332L46.5417 35.3732L49.0753 35.3732C49.4777 35.3732 49.8405 35.1332 49.9945 34.7651C50.1485 34.397 50.0634 33.9732 49.7789 33.6915L42.6151 26.5983C42.2265 26.2136 41.5966 26.2136 41.208 26.5983L34.0442 33.6915C33.7597 33.9732 33.6746 34.397 33.8286 34.7651C33.9826 35.1332 34.3458 35.3732 34.7482 35.3732L37.3033 35.3732L37.3033 43.6332C37.3033 44.6587 38.1474 45.49 39.1887 45.49L44.6563 45.49C45.6976 45.49 46.5417 44.6587 46.5417 43.6332Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_214:534">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M3.14868 7.11195C3.13058 7.27931 3.10619 7.43562 3.09675 7.59192C3.01648 8.7898 3.29751 9.98418 3.90327 11.0196C4.40986 11.9003 5.13497 12.6346 6.00811 13.151C6.77239 13.6081 7.63064 13.8841 8.51739 13.9578C9.74326 14.0676 10.9722 13.7837 12.0268 13.1471C12.933 12.6138 13.6867 11.8549 14.215 10.9438C14.5699 10.3399 14.791 9.68547 14.9704 9.01367C15.0436 8.73737 15.1718 8.6687 15.4425 8.74528C15.8532 8.86132 16.2648 8.9742 16.6747 9.09182C16.8856 9.15261 16.9611 9.28682 16.9108 9.49365C16.6503 10.5412 16.26 11.5319 15.6424 12.4232C14.525 14.0344 13.0418 15.1554 11.1573 15.6803C8.55201 16.405 6.16627 15.8919 4.0512 14.2199C2.58608 13.061 1.67333 11.5272 1.26416 9.69888C1.03987 8.7099 1.01552 7.68584 1.19256 6.68725C1.21065 6.58541 1.17997 6.5491 1.08397 6.52462C0.809358 6.45436 0.537896 6.37306 0.266431 6.29491C-0.0239181 6.21202 -0.0852938 5.97282 0.132665 5.75889C1.05748 4.84842 1.98361 3.939 2.91105 3.03064C3.11563 2.83013 3.35955 2.89249 3.43037 3.16721C3.75823 4.43713 4.08373 5.7081 4.40686 6.98012C4.47453 7.24458 4.28883 7.41905 4.02209 7.348C3.78052 7.28327 3.53975 7.21301 3.29818 7.14591C3.2549 7.13328 3.20848 7.12537 3.14868 7.11195Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M8.47776 6.22241e-05C8.70044 -0.007832 8.81375 0.0932141 8.83499 0.315831C8.87591 0.756329 8.91788 1.19656 8.96089 1.63653C8.9845 1.87336 8.88221 2.00835 8.64143 2.03124C8.53048 2.0423 8.41953 2.05492 8.30859 2.06123C8.104 2.07386 7.98126 1.98782 7.95922 1.78731C7.90677 1.31049 7.86218 0.833166 7.82546 0.355302C7.8113 0.172946 7.9191 0.0624212 8.10401 0.034002H8.13154L8.47776 6.22241e-05Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M14.9365 7.04011C14.9365 6.82302 15.0097 6.71408 15.1954 6.68645C15.6675 6.61804 16.1396 6.55568 16.6117 6.49937C16.65 6.49314 16.6892 6.49491 16.7268 6.50457C16.7643 6.51424 16.7995 6.53158 16.8301 6.55551C16.8607 6.57945 16.886 6.60947 16.9045 6.64369C16.923 6.6779 16.9342 6.71558 16.9375 6.75435C16.9616 6.88698 16.9805 7.02038 16.9941 7.15458C17.0122 7.34956 16.9273 7.47036 16.7337 7.50193C16.2663 7.57035 15.7976 7.63244 15.3276 7.68823C15.1348 7.71112 15.0184 7.61719 14.9829 7.42299C14.9617 7.28642 14.9499 7.14669 14.9365 7.04011Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M5.95115 2.8419C5.87954 2.78507 5.77174 2.73769 5.72689 2.65559C5.49634 2.23641 5.27838 1.81013 5.06357 1.38226C5.04352 1.34909 5.03062 1.31206 5.02569 1.27358C5.02077 1.2351 5.02393 1.19601 5.03497 1.15883C5.04602 1.12165 5.0647 1.08719 5.08982 1.05769C5.11494 1.02819 5.14593 1.0043 5.18081 0.987552C5.3079 0.911818 5.43927 0.843543 5.57424 0.783085C5.60605 0.76516 5.64119 0.753999 5.67748 0.750282C5.71377 0.746565 5.75044 0.750373 5.7852 0.76148C5.81996 0.772586 5.85207 0.790739 5.87954 0.814827C5.907 0.838916 5.92924 0.868421 5.94485 0.901498C6.1754 1.33173 6.40202 1.76355 6.61368 2.20326C6.63228 2.24901 6.64012 2.29847 6.63657 2.34776C6.63302 2.39705 6.61819 2.44485 6.59322 2.48745C6.43821 2.66981 6.20609 2.74007 5.95115 2.8419Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M16.1737 4.42399C16.1139 4.50293 16.0675 4.60397 15.9864 4.65212C15.5804 4.89447 15.1673 5.12578 14.7519 5.35314C14.7199 5.37427 14.6838 5.38842 14.646 5.39469C14.6082 5.40096 14.5695 5.3992 14.5324 5.38952C14.4953 5.37985 14.4607 5.36249 14.4307 5.33855C14.4008 5.3146 14.3761 5.2846 14.3584 5.25051C14.2779 5.12549 14.2049 4.99579 14.1397 4.8621C14.1207 4.83084 14.1082 4.79601 14.1032 4.75974C14.0981 4.72347 14.1005 4.68653 14.1102 4.65123C14.12 4.61593 14.1368 4.58302 14.1598 4.55452C14.1827 4.52602 14.2112 4.50256 14.2436 4.48556C14.6685 4.2369 15.0957 3.99374 15.5301 3.76402C15.5732 3.7452 15.6202 3.73675 15.6672 3.73935C15.7142 3.74196 15.7599 3.75554 15.8007 3.77902C15.9841 3.9369 16.0746 4.16111 16.1737 4.42399Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M14.3337 2.08334C14.3032 2.16044 14.2656 2.23446 14.2211 2.30438C13.9352 2.67278 13.6467 3.03698 13.3556 3.39695C13.3334 3.43037 13.3044 3.45866 13.2705 3.47998C13.2365 3.5013 13.1985 3.51514 13.1588 3.52059C13.1192 3.52604 13.0788 3.52297 13.0405 3.51159C13.0021 3.50021 12.9665 3.48078 12.9362 3.45458C12.8188 3.37099 12.7063 3.28058 12.5994 3.18381C12.5682 3.16073 12.5421 3.13127 12.523 3.09739C12.5039 3.06351 12.4922 3.02597 12.4885 2.98721C12.4849 2.94845 12.4894 2.90936 12.5019 2.87249C12.5144 2.83563 12.5345 2.80183 12.5609 2.7733C12.852 2.39911 13.1468 2.02783 13.4453 1.65943C13.5696 1.50786 13.7191 1.49443 13.8757 1.6089C13.9863 1.68655 14.0915 1.77175 14.1904 1.86388C14.2456 1.93185 14.2936 2.0054 14.3337 2.08334V2.08334Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M11.7426 0.693164C11.7198 0.772107 11.6899 0.878675 11.6584 0.985247C11.5522 1.3468 11.4483 1.70836 11.3374 2.06833C11.2587 2.31305 11.1367 2.37779 10.8944 2.30516C10.7787 2.27121 10.6583 2.242 10.5481 2.20016C10.379 2.13779 10.3066 2.0115 10.3561 1.83625C10.4868 1.37101 10.6237 0.907614 10.7669 0.446065C10.776 0.410629 10.7922 0.377428 10.8145 0.348447C10.8368 0.319467 10.8647 0.295321 10.8965 0.277465C10.9284 0.259609 10.9635 0.248401 10.9998 0.244547C11.036 0.240692 11.0727 0.244263 11.1076 0.255031C11.2562 0.289722 11.4028 0.332671 11.5467 0.383698C11.6733 0.429484 11.7402 0.524228 11.7426 0.693164Z" fill="#007FFF" stroke="white" stroke-width="0.25"/>
<path d="M8.53825 8.46115C9.13206 9.05446 9.82003 9.62228 10.092 9.35037C10.481 8.96145 10.7211 8.62241 11.5793 9.31212C12.4372 10.0014 11.7781 10.4612 11.4012 10.8378C10.966 11.2728 9.344 10.861 7.74075 9.25849C6.13787 7.65555 5.72711 6.03387 6.16262 5.59882C6.53962 5.22153 6.99726 4.56295 7.68673 5.42067C8.37657 6.2784 8.03784 6.51842 7.64809 6.90772C7.37726 7.17962 7.94481 7.86745 8.53825 8.46115Z" fill="#007FFF" stroke="#007FFF" stroke-width="0.5"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="17" height="16" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="36" height="36" fill="url(#pattern0)"/>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0" transform="scale(0.00390625)"/>
</pattern>
<image id="image0" width="256" height="256" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="9" fill="#5DDF62"/>
<path d="M4.5 9L7.5 12L13.5 6" stroke="white" stroke-width="2.5" stroke-linecap="round"/>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:505)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M73.4375 -4H2.5625C-1.06187 -4 -4 -1.06187 -4 2.5625V73.4375C-4 77.0619 -1.06187 80 2.5625 80H73.4375C77.0619 80 80 77.0619 80 73.4375V2.5625C80 -1.06187 77.0619 -4 73.4375 -4Z" fill="#8349E6"/>
<path d="M52.9805 55.3193L52.9805 57.6943C52.9805 58.6294 52.4165 59.1965 51.4962 59.1965L17.4713 59.1965C16.5094 59.1965 15.9573 58.6354 15.9573 57.6646C15.9573 54.6365 15.9573 53.9685 15.9573 50.9374L13.1874 50.9374C13.1874 54.0546 13.1874 54.6869 13.2023 57.8041C13.226 59.8199 14.4135 61.2657 16.4293 61.8654C16.5065 61.8891 16.6104 61.8654 16.646 61.9663L52.2918 61.9663C53.8029 61.7496 54.8093 60.8768 55.4773 59.5438C55.6554 59.1876 55.6316 58.7987 55.7355 58.4335L55.7355 55.3193L52.9805 55.3193Z" fill="white"/>
<path d="M26.4073 20.1926H24.0323C23.0971 20.1926 22.5301 20.7567 22.5301 21.677V55.7018C22.5301 56.6637 23.0912 57.2159 24.062 57.2159C27.0901 57.2159 34.5862 57.2159 37.6173 57.2159V59.9857C34.5001 59.9857 27.0396 59.9857 23.9224 59.9709C21.9067 59.9472 20.4609 58.7597 19.8612 56.7439C19.8374 56.6667 19.8612 56.5628 19.7603 56.5272V20.8814C19.977 19.3703 20.8498 18.3639 22.1828 17.6959C22.539 17.5178 22.9279 17.5415 23.2931 17.4376H26.4073V20.1926Z" fill="white"/>
<path d="M42.7176 20.1895H44.2198C44.4929 20.1895 44.576 20.2518 44.5731 20.5368C44.5582 22.1875 44.5731 23.8381 44.5731 25.4887C44.5731 27.3145 45.7309 28.4575 47.5656 28.4575C49.2162 28.4575 50.8668 28.4575 52.5174 28.4575C52.7817 28.4575 52.8529 28.5198 52.847 28.787C52.847 29.9478 52.847 49.8057 52.847 49.8057L55.6168 49.7582C55.6168 49.7582 55.5901 29.0423 55.6168 27.4481C55.6308 27.1489 55.5791 26.8504 55.4652 26.5734C55.3513 26.2964 55.1781 26.0478 54.9577 25.845C52.4086 23.3215 49.8703 20.7852 47.3429 18.2361C47.0458 17.9121 46.6941 17.6428 46.3038 17.4404H42.7413L42.7176 20.1895Z" fill="white"/>
<path d="M36.4862 20.1925H32.425V17.4375H36.4862V20.1925Z" fill="white"/>
<path d="M30.7567 11.8947C31.3118 12.1382 31.5048 12.5568 31.5048 13.1594C31.49 17.8708 31.5048 18.7555 31.487 23.4639C31.487 23.7608 31.576 23.8143 31.8432 23.8083C32.6626 23.8083 33.482 23.8083 34.3014 23.8083C34.5137 23.7864 34.7275 23.832 34.9124 23.9386C35.0974 24.0452 35.244 24.2074 35.3315 24.4021C35.4132 24.5855 35.4377 24.7894 35.4017 24.9869C35.3657 25.1845 35.2708 25.3666 35.1296 25.5094C33.5463 27.4114 31.963 29.3144 30.3796 31.2183C29.869 31.8269 29.2218 31.8269 28.7142 31.2183C27.111 29.3045 25.5109 27.3857 23.9137 25.4619C23.7807 25.3183 23.6933 25.1384 23.6626 24.9451C23.6319 24.7517 23.6593 24.5536 23.7414 24.3759C23.8234 24.1981 23.9564 24.0487 24.1234 23.9466C24.2905 23.8445 24.484 23.7943 24.6796 23.8024C25.5317 23.8024 26.3807 23.8024 27.2298 23.8024C27.4999 23.8024 27.586 23.7519 27.586 23.458C27.586 18.7496 27.586 17.8649 27.586 13.1535C27.586 12.5597 27.776 12.1322 28.3312 11.8888L30.7567 11.8947Z" fill="white"/>
<path d="M38.4219 26.2575C37.8668 26.0171 37.6738 25.5955 37.6738 24.9929C37.6916 20.2814 37.6738 19.946 37.6916 15.2227C37.6916 14.9258 37.6055 14.8724 37.3354 14.8783C36.516 14.8961 35.6966 14.8783 34.8772 14.8783C34.6666 14.9014 34.454 14.858 34.2693 14.7542C34.0845 14.6504 33.9369 14.4913 33.8471 14.2994C33.7613 14.1117 33.7355 13.902 33.7732 13.6991C33.811 13.4961 33.9104 13.3097 34.0579 13.1654C35.6462 11.2654 37.2285 9.35645 38.8079 7.45645C39.3185 6.84785 39.9657 6.84785 40.4763 7.45645C42.0794 9.37426 43.6786 11.2931 45.2738 13.2129C45.4064 13.3568 45.4934 13.5369 45.5238 13.7302C45.5543 13.9236 45.5268 14.1216 45.4449 14.2994C45.363 14.4771 45.2303 14.6267 45.0636 14.7292C44.8968 14.8317 44.7035 14.8825 44.5079 14.8754C43.6588 14.8754 42.8068 14.8754 41.9577 14.8754C41.6876 14.8754 41.6015 14.9288 41.6015 15.2197C41.6015 19.9282 41.6015 20.2666 41.6015 24.9899C41.6015 25.5836 41.4115 26.0141 40.8563 26.2546L38.4219 26.2575Z" fill="white"/>
<path d="M34.8089 44.6283H14.8738C13.2866 44.6283 12 45.9149 12 47.502V65.4986C12 67.0857 13.2866 68.3724 14.8738 68.3724H34.8089C36.396 68.3724 37.6827 67.0857 37.6827 65.4986V47.502C37.6827 45.9149 36.396 44.6283 34.8089 44.6283Z" fill="white"/>
<path d="M63.1694 43.1854H43.8874C43.3201 43.1854 42.8602 43.6453 42.8602 44.2126V52.0145C42.8602 52.5818 43.3201 53.0417 43.8874 53.0417H63.1694C63.7367 53.0417 64.1966 52.5818 64.1966 52.0145V44.2126C64.1966 43.6453 63.7367 43.1854 63.1694 43.1854Z" fill="white"/>
<path d="M46.966 51.1268C46.6177 50.9404 46.3364 50.6498 46.1614 50.2956C45.9644 49.8869 45.8687 49.4369 45.8824 48.9834V47.2022C45.8685 46.7477 45.9642 46.2966 46.1614 45.887C46.3364 45.5328 46.6177 45.2422 46.966 45.0558C47.3586 44.8508 47.7968 44.7487 48.2396 44.7589C48.6221 44.7529 49 44.8438 49.338 45.0231C49.6655 45.2069 49.9405 45.4716 50.1366 45.792C50.3609 46.165 50.5092 46.5787 50.573 47.0092H49.2994C49.2599 46.8134 49.1855 46.6264 49.0797 46.457C48.9869 46.3144 48.8631 46.1947 48.7175 46.1067C48.5713 46.0262 48.4065 45.9852 48.2396 45.9879C48.0326 45.9794 47.8273 46.0276 47.6458 46.1275C47.4832 46.2234 47.3545 46.3677 47.2777 46.5401C47.187 46.7456 47.1434 46.9688 47.15 47.1933V48.9745C47.1435 49.1971 47.1871 49.4183 47.2777 49.6217C47.354 49.7937 47.4829 49.9371 47.6458 50.0314C47.827 50.1323 48.0323 50.1816 48.2396 50.1739C48.4084 50.1769 48.5752 50.136 48.7235 50.0551C48.8708 49.9708 48.9952 49.8515 49.0856 49.7078C49.1906 49.5375 49.2631 49.3493 49.2994 49.1526H50.5671C50.4995 49.5831 50.3493 49.9964 50.1247 50.3698C49.9305 50.6899 49.6563 50.9539 49.3291 51.1358C48.9928 51.3168 48.6154 51.4078 48.2336 51.4C47.795 51.4151 47.3594 51.3213 46.966 51.1268V51.1268Z" fill="#8B51E8"/>
<path d="M52.8291 51.3169C52.5404 51.2571 52.2595 51.1645 51.9919 51.0408C51.7402 50.925 51.5039 50.7784 51.2883 50.6044L51.8583 49.592C52.117 49.8018 52.4118 49.9628 52.7282 50.067C53.0538 50.1796 53.396 50.2368 53.7405 50.2362C54.0641 50.254 54.3864 50.1832 54.6727 50.0314C54.7749 49.9753 54.8597 49.8922 54.9179 49.7911C54.976 49.6901 55.0052 49.575 55.0022 49.4584V49.4584C55.0064 49.3834 54.9956 49.3084 54.9707 49.2376C54.9457 49.1668 54.907 49.1016 54.8568 49.0458C54.7491 48.94 54.6163 48.8634 54.4708 48.8231C54.271 48.7664 54.0677 48.7228 53.8622 48.6925H53.8326H53.8088H53.7108C53.3427 48.6402 52.98 48.5548 52.6272 48.4372C52.3362 48.3309 52.0824 48.1421 51.8969 47.8939C51.6781 47.5712 51.5735 47.1845 51.6 46.7954V46.7954C51.5925 46.4141 51.6957 46.0388 51.8969 45.7148C52.0939 45.4089 52.3798 45.1706 52.7163 45.032C53.1283 44.8664 53.5697 44.7866 54.0136 44.7975C54.2543 44.7982 54.4942 44.8251 54.7291 44.8776C55.2214 44.9877 55.6886 45.1891 56.1066 45.4714L55.5871 46.5134C55.3445 46.3435 55.0798 46.2077 54.8004 46.1097C54.5481 46.0181 54.2821 45.9699 54.0136 45.9672C53.7115 45.9496 53.4102 46.0132 53.1408 46.1512C53.0493 46.204 52.9736 46.2803 52.9214 46.3721C52.8692 46.464 52.8425 46.5681 52.844 46.6737V46.6737C52.8395 46.7554 52.8514 46.8371 52.8789 46.914C52.9065 46.991 52.9491 47.0617 53.0043 47.122C53.1165 47.2326 53.2541 47.3142 53.4051 47.3595C53.6236 47.4261 53.8456 47.4806 54.0701 47.5228H54.1057H54.1443H54.1947H54.2452C54.5987 47.5868 54.9448 47.6862 55.2783 47.8197C55.557 47.9351 55.797 48.1277 55.9701 48.3748C56.1721 48.6845 56.2699 49.0506 56.2491 49.4198C56.2575 49.7966 56.1542 50.1674 55.9522 50.4856C55.7447 50.7924 55.4485 51.0285 55.1032 51.1625C54.6753 51.3267 54.2194 51.4054 53.7613 51.394C53.4487 51.4014 53.1362 51.3755 52.8291 51.3169V51.3169Z" fill="#8B51E8"/>
<path d="M56.5787 44.8302H57.8434L59.2269 49.1735L60.6133 44.8302H61.875L59.7078 51.3377H58.7489L56.5787 44.8302Z" fill="#8B51E8"/>
<path d="M20.6807 55.4937H20.0454C19.1811 55.4643 18.3201 55.6119 17.515 55.9274C16.7099 56.2429 15.9778 56.7196 15.3636 57.3283L15.1885 57.5332V63.5627H18.1572V60.1368L18.558 59.6855L18.7391 59.4747C19.6894 58.5035 20.87 57.7886 22.171 57.3966C21.5218 56.9007 21.0107 56.2465 20.6866 55.4966L20.6807 55.4937Z" fill="#6329DB"/>
<path d="M34.7646 57.3046C34.1515 56.6944 33.4195 56.2167 32.6142 55.9011C31.8088 55.5855 30.9472 55.4388 30.0828 55.4699C29.8181 55.4704 29.5535 55.4843 29.2902 55.5115C28.9577 56.2158 28.4571 56.8275 27.8325 57.2927C29.222 57.6782 30.4809 58.4333 31.4752 59.4777L31.6563 59.6826L32.0511 60.1338V63.5627H34.9189V57.5065L34.7646 57.3046Z" fill="#6329DB"/>
<path d="M20.0247 54.0716H20.2503C20.1453 53.1709 20.3034 52.259 20.7053 51.4462C21.1073 50.6333 21.736 49.9542 22.5155 49.4908C22.0898 48.8377 21.4244 48.3782 20.6629 48.2116C19.9013 48.0449 19.1048 48.1845 18.4453 48.6002C18.0067 48.8726 17.6474 49.2555 17.4033 49.7105C17.1552 50.1639 17.0298 50.6741 17.0394 51.1908C17.049 51.7076 17.1934 52.2128 17.4582 52.6566C17.7229 53.1004 18.099 53.4674 18.5491 53.7213C18.9993 53.9752 19.5079 54.1072 20.0247 54.1043V54.0716Z" fill="#6329DB"/>
<path d="M29.7324 53.5253C29.7414 53.6925 29.7414 53.8599 29.7324 54.0271C29.8717 54.0508 30.0127 54.0628 30.154 54.0627H30.2906C31.067 54.0242 31.7974 53.6826 32.3248 53.1114C32.8521 52.5402 33.1344 51.7849 33.1109 51.0078C33.0923 50.2329 32.7713 49.496 32.2166 48.9545C31.6618 48.4131 30.9173 48.1101 30.1421 48.1104C29.6274 48.111 29.1217 48.2454 28.6747 48.5004C28.2276 48.7554 27.8545 49.1223 27.592 49.565C28.2512 49.9949 28.7933 50.5819 29.1695 51.2732C29.5457 51.9644 29.7442 52.7383 29.7473 53.5253H29.7324Z" fill="#6329DB"/>
<path d="M24.9557 56.7881C25.6016 56.7881 26.233 56.5966 26.77 56.2377C27.3071 55.8789 27.7256 55.3689 27.9728 54.7722C28.22 54.1754 28.2846 53.5188 28.1586 52.8854C28.0326 52.2519 27.7216 51.67 27.2649 51.2133C26.8082 50.7566 26.2263 50.4456 25.5928 50.3196C24.9594 50.1936 24.3028 50.2583 23.706 50.5054C23.1093 50.7526 22.5993 51.1711 22.2405 51.7082C21.8816 52.2452 21.6901 52.8766 21.6901 53.5225C21.6901 54.3886 22.0342 55.2192 22.6466 55.8316C23.259 56.444 24.0897 56.7881 24.9557 56.7881Z" fill="#6329DB"/>
<path d="M25.1278 58.5218C24.1768 58.4823 23.2276 58.6361 22.3377 58.9739C21.4478 59.3117 20.6356 59.8265 19.9503 60.4871L19.7692 60.689V65.2906C19.7733 65.5168 19.8447 65.7368 19.9742 65.9223C20.1038 66.1079 20.2856 66.2507 20.4966 66.3326C20.6361 66.3888 20.7856 66.4161 20.9359 66.4127H29.3019C29.4522 66.4158 29.6017 66.3886 29.7413 66.3326C30.0202 66.224 30.246 66.011 30.3706 65.7388C30.4305 65.601 30.4627 65.4527 30.4656 65.3024V60.7038L30.2905 60.4871C29.6098 59.8243 28.8005 59.308 27.9126 58.97C27.0247 58.632 26.0769 58.4795 25.1278 58.5218V58.5218Z" fill="#6329DB"/>
<path d="M33.0781 32.8281H48.5156" stroke="white"/>
<path d="M33.0781 36.0938H48.5156" stroke="white"/>
<path d="M38.125 32.8281L38.125 39.6563" stroke="white"/>
<path d="M44.0625 32.8281L44.0625 39.6563" stroke="white"/>
<path d="M33.0781 39.6562H48.5156" stroke="white"/>
</g>
<defs>
<clipPath id="clip0_214:505">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="18" height="15" viewBox="0 0 18 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.3764 1.74463C15.5229 1.76076 14.814 2.59947 14.8574 3.55108C14.8718 4.08334 15.1033 4.53495 15.4505 4.8414C13.6566 7.51882 11.8338 7.7285 9.72168 3.29302C10.4739 2.87366 10.8935 1.80915 10.3437 0.744629C10.0833 0.2285 9.54807 -0.0295643 9.0128 0.00269373C8.99834 0.00269373 8.99834 0.00269373 8.98387 0.00269373C8.98387 0.00269373 8.9694 0.00269373 8.95494 0.00269373C8.41967 -0.0134353 7.89886 0.2285 7.62399 0.744629C7.07426 1.80915 7.49379 2.87366 8.24606 3.29302C6.13391 7.7285 4.3111 7.51882 2.51722 4.8414C2.86442 4.53495 3.09589 4.06721 3.11036 3.55108C3.13929 2.59947 2.44489 1.76076 1.59135 1.74463C0.708872 1.7285 0 2.50269 0 3.48656C0 4.43818 0.694405 5.2285 1.56241 5.2285C1.62028 5.2285 1.69261 5.2285 1.75048 5.21237L2.34362 11.6962C2.38702 12.2124 2.77762 12.5995 3.24056 12.5995H8.98387H14.7272C15.1901 12.5995 15.5807 12.2124 15.6241 11.6962L16.2173 5.21237C16.2751 5.2285 16.333 5.2285 16.4053 5.2285C17.2589 5.2285 17.9677 4.45431 17.9677 3.48656C17.9677 2.50269 17.2444 1.7285 16.3764 1.74463Z" fill="white"/>
<rect x="2.45898" y="13.5483" width="13.0201" height="1.45161" rx="0.725806" fill="white"/>
</svg>
<svg width="112" height="82" viewBox="0 0 112 82" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M23.3438 52.874L30.2262 30.5085L54.0251 51.7273L59.4742 51.1539L76.966 30.5085L89.5822 51.1539L76.6773 61.5803H45.4226L23.3438 52.874Z" fill="#FFA000"/>
<path d="M102.381 27.4384L75.9367 41.3863L55.0677 18.5389L36.362 41.0264L10.54 27.4445L17.453 69.3431C17.5391 69.8503 17.8024 70.3105 18.1959 70.6418C18.5894 70.9732 19.0877 71.1542 19.6021 71.1527H93.3411C93.8544 71.1516 94.3507 70.969 94.7422 70.637C95.1337 70.3051 95.3951 69.8453 95.4801 69.3391L102.381 27.4384Z" fill="#FFC107"/>
<path d="M56.473 79.8305C76.8349 79.8305 93.3415 74.9759 93.3415 68.9873C93.3415 62.9988 76.8349 58.1442 56.473 58.1442C36.1111 58.1442 19.6045 62.9988 19.6045 68.9873C19.6045 74.9759 36.1111 79.8305 56.473 79.8305Z" fill="#FFA000"/>
<path d="M56.473 82C37.0699 82 17.4351 77.5269 17.4351 68.9874C17.4351 60.4478 37.0699 55.9747 56.473 55.9747C75.8761 55.9747 95.5109 60.4478 95.5109 68.9874C95.5109 77.5269 75.8801 82 56.473 82ZM56.473 60.3116C33.7009 60.3116 21.7719 65.9518 21.7719 68.9874C21.7719 72.023 33.6907 77.6591 56.473 77.6591C79.2553 77.6591 91.172 72.0189 91.172 68.9833C91.172 65.9477 79.2533 60.3116 56.473 60.3116Z" fill="#FFD54F"/>
<path d="M56.4625 52.319C59.9278 52.319 62.7371 49.5098 62.7371 46.0444C62.7371 42.5791 59.9278 39.7699 56.4625 39.7699C52.9972 39.7699 50.188 42.5791 50.188 46.0444C50.188 49.5098 52.9972 52.319 56.4625 52.319Z" fill="#FFD54F"/>
<path d="M63.0586 47.9028C62.1945 44.7554 59.7709 45.0665 58.4717 45.4873C61.5967 44.4707 61.3365 42.2708 60.938 40.9655C61.3446 42.2708 62.7679 44.4789 65.4578 43.3504C63.2742 44.2755 62.3938 45.4812 63.0586 47.9028Z" fill="white"/>
<path d="M53.1525 10.5443C53.1525 8.57208 49.8526 5.27216 47.8804 5.27216C49.8526 5.27216 53.1525 1.97223 53.1525 0C53.1525 1.97223 56.4525 5.27216 58.4247 5.27216C56.4525 5.27623 53.1525 8.57208 53.1525 10.5443Z" fill="#FFD83B"/>
<path d="M5.27215 66.8524C5.27215 64.8802 1.9702 61.5803 0 61.5803C1.9702 61.5803 5.27215 58.2783 5.27215 56.3081C5.27215 58.2783 8.57208 61.5803 10.5443 61.5803C8.58021 61.5803 5.27215 64.8802 5.27215 66.8524Z" fill="#FFD83B"/>
<path d="M31.1693 25.9073C31.1693 25.2181 30.0164 24.0652 29.3271 24.0652C30.0164 24.0652 31.1693 22.9124 31.1693 22.2231C31.1693 22.9124 32.3221 24.0652 33.0114 24.0652C32.3221 24.0652 31.1693 25.2201 31.1693 25.9073Z" fill="#FFD83B"/>
<path d="M81.0443 25.9073C81.0443 25.2181 79.8914 24.0652 79.2021 24.0652C79.8914 24.0652 81.0443 22.9124 81.0443 22.2231C81.0443 22.9124 82.1971 24.0652 82.8864 24.0652C82.1971 24.0652 81.0443 25.2201 81.0443 25.9073Z" fill="#FFD83B"/>
<path d="M8.95618 19.8199C8.95618 18.4435 6.6505 16.1357 5.27197 16.1357C6.6505 16.1357 8.95618 13.8301 8.95618 12.4515C8.95618 13.8301 11.2619 16.1357 12.6404 16.1357C11.2619 16.1378 8.95618 18.4435 8.95618 19.8199Z" fill="#FFD83B"/>
<path d="M107.891 20.2509C107.891 18.8724 105.584 16.5647 104.207 16.5647C105.584 16.5647 107.891 14.259 107.891 12.8805C107.891 14.259 110.197 16.5647 111.575 16.5647C110.197 16.5667 107.891 18.8724 107.891 20.2509Z" fill="#FFD83B"/>
<path d="M106.419 70.3395C106.419 68.5848 103.481 65.6468 101.727 65.6468C103.481 65.6468 106.419 62.7088 106.419 60.9541C106.419 62.7088 109.357 65.6468 111.112 65.6468C109.357 65.663 106.419 68.5929 106.419 70.3395Z" fill="#FFD83B"/>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:505)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M73.4375 -4H2.5625C-1.06187 -4 -4 -1.06187 -4 2.5625V73.4375C-4 77.0619 -1.06187 80 2.5625 80H73.4375C77.0619 80 80 77.0619 80 73.4375V2.5625C80 -1.06187 77.0619 -4 73.4375 -4Z" fill="#8349E6"/>
<path d="M52.9805 55.3193L52.9805 57.6943C52.9805 58.6294 52.4165 59.1965 51.4962 59.1965L17.4713 59.1965C16.5094 59.1965 15.9573 58.6354 15.9573 57.6646C15.9573 54.6365 15.9573 53.9685 15.9573 50.9374L13.1874 50.9374C13.1874 54.0546 13.1874 54.6869 13.2023 57.8041C13.226 59.8199 14.4135 61.2657 16.4293 61.8654C16.5065 61.8891 16.6104 61.8654 16.646 61.9663L52.2918 61.9663C53.8029 61.7496 54.8093 60.8768 55.4773 59.5438C55.6554 59.1876 55.6316 58.7987 55.7355 58.4335L55.7355 55.3193L52.9805 55.3193Z" fill="white"/>
<path d="M26.4073 20.1926H24.0323C23.0971 20.1926 22.5301 20.7567 22.5301 21.677V55.7018C22.5301 56.6637 23.0912 57.2159 24.062 57.2159C27.0901 57.2159 34.5862 57.2159 37.6173 57.2159V59.9857C34.5001 59.9857 27.0396 59.9857 23.9224 59.9709C21.9067 59.9472 20.4609 58.7597 19.8612 56.7439C19.8374 56.6667 19.8612 56.5628 19.7603 56.5272V20.8814C19.977 19.3703 20.8498 18.3639 22.1828 17.6959C22.539 17.5178 22.9279 17.5415 23.2931 17.4376H26.4073V20.1926Z" fill="white"/>
<path d="M42.7176 20.1895H44.2198C44.4929 20.1895 44.576 20.2518 44.5731 20.5368C44.5582 22.1875 44.5731 23.8381 44.5731 25.4887C44.5731 27.3145 45.7309 28.4575 47.5656 28.4575C49.2162 28.4575 50.8668 28.4575 52.5174 28.4575C52.7817 28.4575 52.8529 28.5198 52.847 28.787C52.847 29.9478 52.847 49.8057 52.847 49.8057L55.6168 49.7582C55.6168 49.7582 55.5901 29.0423 55.6168 27.4481C55.6308 27.1489 55.5791 26.8504 55.4652 26.5734C55.3513 26.2964 55.1781 26.0478 54.9577 25.845C52.4086 23.3215 49.8703 20.7852 47.3429 18.2361C47.0458 17.9121 46.6941 17.6428 46.3038 17.4404H42.7413L42.7176 20.1895Z" fill="white"/>
<path d="M36.4862 20.1925H32.425V17.4375H36.4862V20.1925Z" fill="white"/>
<path d="M30.7567 11.8947C31.3118 12.1382 31.5048 12.5568 31.5048 13.1594C31.49 17.8708 31.5048 18.7555 31.487 23.4639C31.487 23.7608 31.576 23.8143 31.8432 23.8083C32.6626 23.8083 33.482 23.8083 34.3014 23.8083C34.5137 23.7864 34.7275 23.832 34.9124 23.9386C35.0974 24.0452 35.244 24.2074 35.3315 24.4021C35.4132 24.5855 35.4377 24.7894 35.4017 24.9869C35.3657 25.1845 35.2708 25.3666 35.1296 25.5094C33.5463 27.4114 31.963 29.3144 30.3796 31.2183C29.869 31.8269 29.2218 31.8269 28.7142 31.2183C27.111 29.3045 25.5109 27.3857 23.9137 25.4619C23.7807 25.3183 23.6933 25.1384 23.6626 24.9451C23.6319 24.7517 23.6593 24.5536 23.7414 24.3759C23.8234 24.1981 23.9564 24.0487 24.1234 23.9466C24.2905 23.8445 24.484 23.7943 24.6796 23.8024C25.5317 23.8024 26.3807 23.8024 27.2298 23.8024C27.4999 23.8024 27.586 23.7519 27.586 23.458C27.586 18.7496 27.586 17.8649 27.586 13.1535C27.586 12.5597 27.776 12.1322 28.3312 11.8888L30.7567 11.8947Z" fill="white"/>
<path d="M38.4219 26.2575C37.8668 26.0171 37.6738 25.5955 37.6738 24.9929C37.6916 20.2814 37.6738 19.946 37.6916 15.2227C37.6916 14.9258 37.6055 14.8724 37.3354 14.8783C36.516 14.8961 35.6966 14.8783 34.8772 14.8783C34.6666 14.9014 34.454 14.858 34.2693 14.7542C34.0845 14.6504 33.9369 14.4913 33.8471 14.2994C33.7613 14.1117 33.7355 13.902 33.7732 13.6991C33.811 13.4961 33.9104 13.3097 34.0579 13.1654C35.6462 11.2654 37.2285 9.35645 38.8079 7.45645C39.3185 6.84785 39.9657 6.84785 40.4763 7.45645C42.0794 9.37426 43.6786 11.2931 45.2738 13.2129C45.4064 13.3568 45.4934 13.5369 45.5238 13.7302C45.5543 13.9236 45.5268 14.1216 45.4449 14.2994C45.363 14.4771 45.2303 14.6267 45.0636 14.7292C44.8968 14.8317 44.7035 14.8825 44.5079 14.8754C43.6588 14.8754 42.8068 14.8754 41.9577 14.8754C41.6876 14.8754 41.6015 14.9288 41.6015 15.2197C41.6015 19.9282 41.6015 20.2666 41.6015 24.9899C41.6015 25.5836 41.4115 26.0141 40.8563 26.2546L38.4219 26.2575Z" fill="white"/>
<path d="M34.8089 44.6283H14.8738C13.2866 44.6283 12 45.9149 12 47.502V65.4986C12 67.0857 13.2866 68.3724 14.8738 68.3724H34.8089C36.396 68.3724 37.6827 67.0857 37.6827 65.4986V47.502C37.6827 45.9149 36.396 44.6283 34.8089 44.6283Z" fill="white"/>
<path d="M63.1694 43.1854H43.8874C43.3201 43.1854 42.8602 43.6453 42.8602 44.2126V52.0145C42.8602 52.5818 43.3201 53.0417 43.8874 53.0417H63.1694C63.7367 53.0417 64.1966 52.5818 64.1966 52.0145V44.2126C64.1966 43.6453 63.7367 43.1854 63.1694 43.1854Z" fill="white"/>
<path d="M46.966 51.1268C46.6177 50.9404 46.3364 50.6498 46.1614 50.2956C45.9644 49.8869 45.8687 49.4369 45.8824 48.9834V47.2022C45.8685 46.7477 45.9642 46.2966 46.1614 45.887C46.3364 45.5328 46.6177 45.2422 46.966 45.0558C47.3586 44.8508 47.7968 44.7487 48.2396 44.7589C48.6221 44.7529 49 44.8438 49.338 45.0231C49.6655 45.2069 49.9405 45.4716 50.1366 45.792C50.3609 46.165 50.5092 46.5787 50.573 47.0092H49.2994C49.2599 46.8134 49.1855 46.6264 49.0797 46.457C48.9869 46.3144 48.8631 46.1947 48.7175 46.1067C48.5713 46.0262 48.4065 45.9852 48.2396 45.9879C48.0326 45.9794 47.8273 46.0276 47.6458 46.1275C47.4832 46.2234 47.3545 46.3677 47.2777 46.5401C47.187 46.7456 47.1434 46.9688 47.15 47.1933V48.9745C47.1435 49.1971 47.1871 49.4183 47.2777 49.6217C47.354 49.7937 47.4829 49.9371 47.6458 50.0314C47.827 50.1323 48.0323 50.1816 48.2396 50.1739C48.4084 50.1769 48.5752 50.136 48.7235 50.0551C48.8708 49.9708 48.9952 49.8515 49.0856 49.7078C49.1906 49.5375 49.2631 49.3493 49.2994 49.1526H50.5671C50.4995 49.5831 50.3493 49.9964 50.1247 50.3698C49.9305 50.6899 49.6563 50.9539 49.3291 51.1358C48.9928 51.3168 48.6154 51.4078 48.2336 51.4C47.795 51.4151 47.3594 51.3213 46.966 51.1268V51.1268Z" fill="#8B51E8"/>
<path d="M52.8291 51.3169C52.5404 51.2571 52.2595 51.1645 51.9919 51.0408C51.7402 50.925 51.5039 50.7784 51.2883 50.6044L51.8583 49.592C52.117 49.8018 52.4118 49.9628 52.7282 50.067C53.0538 50.1796 53.396 50.2368 53.7405 50.2362C54.0641 50.254 54.3864 50.1832 54.6727 50.0314C54.7749 49.9753 54.8597 49.8922 54.9179 49.7911C54.976 49.6901 55.0052 49.575 55.0022 49.4584V49.4584C55.0064 49.3834 54.9956 49.3084 54.9707 49.2376C54.9457 49.1668 54.907 49.1016 54.8568 49.0458C54.7491 48.94 54.6163 48.8634 54.4708 48.8231C54.271 48.7664 54.0677 48.7228 53.8622 48.6925H53.8326H53.8088H53.7108C53.3427 48.6402 52.98 48.5548 52.6272 48.4372C52.3362 48.3309 52.0824 48.1421 51.8969 47.8939C51.6781 47.5712 51.5735 47.1845 51.6 46.7954V46.7954C51.5925 46.4141 51.6957 46.0388 51.8969 45.7148C52.0939 45.4089 52.3798 45.1706 52.7163 45.032C53.1283 44.8664 53.5697 44.7866 54.0136 44.7975C54.2543 44.7982 54.4942 44.8251 54.7291 44.8776C55.2214 44.9877 55.6886 45.1891 56.1066 45.4714L55.5871 46.5134C55.3445 46.3435 55.0798 46.2077 54.8004 46.1097C54.5481 46.0181 54.2821 45.9699 54.0136 45.9672C53.7115 45.9496 53.4102 46.0132 53.1408 46.1512C53.0493 46.204 52.9736 46.2803 52.9214 46.3721C52.8692 46.464 52.8425 46.5681 52.844 46.6737V46.6737C52.8395 46.7554 52.8514 46.8371 52.8789 46.914C52.9065 46.991 52.9491 47.0617 53.0043 47.122C53.1165 47.2326 53.2541 47.3142 53.4051 47.3595C53.6236 47.4261 53.8456 47.4806 54.0701 47.5228H54.1057H54.1443H54.1947H54.2452C54.5987 47.5868 54.9448 47.6862 55.2783 47.8197C55.557 47.9351 55.797 48.1277 55.9701 48.3748C56.1721 48.6845 56.2699 49.0506 56.2491 49.4198C56.2575 49.7966 56.1542 50.1674 55.9522 50.4856C55.7447 50.7924 55.4485 51.0285 55.1032 51.1625C54.6753 51.3267 54.2194 51.4054 53.7613 51.394C53.4487 51.4014 53.1362 51.3755 52.8291 51.3169V51.3169Z" fill="#8B51E8"/>
<path d="M56.5787 44.8302H57.8434L59.2269 49.1735L60.6133 44.8302H61.875L59.7078 51.3377H58.7489L56.5787 44.8302Z" fill="#8B51E8"/>
<path d="M20.6807 55.4937H20.0454C19.1811 55.4643 18.3201 55.6119 17.515 55.9274C16.7099 56.2429 15.9778 56.7196 15.3636 57.3283L15.1885 57.5332V63.5627H18.1572V60.1368L18.558 59.6855L18.7391 59.4747C19.6894 58.5035 20.87 57.7886 22.171 57.3966C21.5218 56.9007 21.0107 56.2465 20.6866 55.4966L20.6807 55.4937Z" fill="#6329DB"/>
<path d="M34.7646 57.3046C34.1515 56.6944 33.4195 56.2167 32.6142 55.9011C31.8088 55.5855 30.9472 55.4388 30.0828 55.4699C29.8181 55.4704 29.5535 55.4843 29.2902 55.5115C28.9577 56.2158 28.4571 56.8275 27.8325 57.2927C29.222 57.6782 30.4809 58.4333 31.4752 59.4777L31.6563 59.6826L32.0511 60.1338V63.5627H34.9189V57.5065L34.7646 57.3046Z" fill="#6329DB"/>
<path d="M20.0247 54.0716H20.2503C20.1453 53.1709 20.3034 52.259 20.7053 51.4462C21.1073 50.6333 21.736 49.9542 22.5155 49.4908C22.0898 48.8377 21.4244 48.3782 20.6629 48.2116C19.9013 48.0449 19.1048 48.1845 18.4453 48.6002C18.0067 48.8726 17.6474 49.2555 17.4033 49.7105C17.1552 50.1639 17.0298 50.6741 17.0394 51.1908C17.049 51.7076 17.1934 52.2128 17.4582 52.6566C17.7229 53.1004 18.099 53.4674 18.5491 53.7213C18.9993 53.9752 19.5079 54.1072 20.0247 54.1043V54.0716Z" fill="#6329DB"/>
<path d="M29.7324 53.5253C29.7414 53.6925 29.7414 53.8599 29.7324 54.0271C29.8717 54.0508 30.0127 54.0628 30.154 54.0627H30.2906C31.067 54.0242 31.7974 53.6826 32.3248 53.1114C32.8521 52.5402 33.1344 51.7849 33.1109 51.0078C33.0923 50.2329 32.7713 49.496 32.2166 48.9545C31.6618 48.4131 30.9173 48.1101 30.1421 48.1104C29.6274 48.111 29.1217 48.2454 28.6747 48.5004C28.2276 48.7554 27.8545 49.1223 27.592 49.565C28.2512 49.9949 28.7933 50.5819 29.1695 51.2732C29.5457 51.9644 29.7442 52.7383 29.7473 53.5253H29.7324Z" fill="#6329DB"/>
<path d="M24.9557 56.7881C25.6016 56.7881 26.233 56.5966 26.77 56.2377C27.3071 55.8789 27.7256 55.3689 27.9728 54.7722C28.22 54.1754 28.2846 53.5188 28.1586 52.8854C28.0326 52.2519 27.7216 51.67 27.2649 51.2133C26.8082 50.7566 26.2263 50.4456 25.5928 50.3196C24.9594 50.1936 24.3028 50.2583 23.706 50.5054C23.1093 50.7526 22.5993 51.1711 22.2405 51.7082C21.8816 52.2452 21.6901 52.8766 21.6901 53.5225C21.6901 54.3886 22.0342 55.2192 22.6466 55.8316C23.259 56.444 24.0897 56.7881 24.9557 56.7881Z" fill="#6329DB"/>
<path d="M25.1278 58.5218C24.1768 58.4823 23.2276 58.6361 22.3377 58.9739C21.4478 59.3117 20.6356 59.8265 19.9503 60.4871L19.7692 60.689V65.2906C19.7733 65.5168 19.8447 65.7368 19.9742 65.9223C20.1038 66.1079 20.2856 66.2507 20.4966 66.3326C20.6361 66.3888 20.7856 66.4161 20.9359 66.4127H29.3019C29.4522 66.4158 29.6017 66.3886 29.7413 66.3326C30.0202 66.224 30.246 66.011 30.3706 65.7388C30.4305 65.601 30.4627 65.4527 30.4656 65.3024V60.7038L30.2905 60.4871C29.6098 59.8243 28.8005 59.308 27.9126 58.97C27.0247 58.632 26.0769 58.4795 25.1278 58.5218V58.5218Z" fill="#6329DB"/>
<path d="M33.0781 32.8281H48.5156" stroke="white"/>
<path d="M33.0781 36.0938H48.5156" stroke="white"/>
<path d="M38.125 32.8281L38.125 39.6563" stroke="white"/>
<path d="M44.0625 32.8281L44.0625 39.6563" stroke="white"/>
<path d="M33.0781 39.6562H48.5156" stroke="white"/>
</g>
<defs>
<clipPath id="clip0_214:505">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.2043 25C21.9706 25 27.4326 19.4167 27.4326 12.5C27.4326 5.58333 21.9299 0 15.2043 0C8.43803 0 2.97607 5.58333 2.97607 12.5C2.97607 19.4167 8.43803 25 15.2043 25Z" fill="black"/>
<path d="M15.2043 25C21.9706 25 27.4326 19.4167 27.4326 12.5C27.4326 5.58333 21.9299 0 15.2043 0C8.43803 0 2.97607 5.58333 2.97607 12.5C2.97607 19.4167 8.43803 25 15.2043 25Z" fill="url(#paint0_linear)"/>
<path d="M29.5516 9.08325H0.48913C0.203804 9.08325 0 9.29159 0 9.58325V15.9166C0 16.1666 0.203804 16.4166 0.48913 16.4166H29.5516C29.7962 16.4166 30.0408 16.2083 30.0408 15.9166V9.58325C30 9.29159 29.7962 9.08325 29.5516 9.08325Z" fill="black"/>
<path d="M29.5516 9.08325H0.48913C0.203804 9.08325 0 9.29159 0 9.58325V15.9166C0 16.1666 0.203804 16.4166 0.48913 16.4166H29.5516C29.7962 16.4166 30.0408 16.2083 30.0408 15.9166V9.58325C30 9.29159 29.7962 9.08325 29.5516 9.08325Z" fill="url(#paint1_linear)"/>
<path d="M5.50282 13.6666V12.0833L5.99195 13.0416H6.44032L6.92945 12.0833V13.6666H7.41858V11.0833H6.92945L6.23652 12.5416L5.54358 11.0833H5.09521V13.6666H5.50282ZM8.72293 13.7083C9.29358 13.7083 9.61967 13.3333 9.61967 12.8333V12.5416C9.61967 12.0416 9.29358 11.6666 8.72293 11.6666C8.15228 11.6666 7.82619 12.0416 7.82619 12.5416V12.8333C7.86695 13.3333 8.19304 13.7083 8.72293 13.7083ZM8.72293 13.3333C8.43761 13.3333 8.31532 13.1249 8.31532 12.8749V12.5416C8.31532 12.2916 8.43761 12.0833 8.72293 12.0833C9.00826 12.0833 9.13054 12.2916 9.13054 12.5416V12.8749C9.13054 13.1249 9.00826 13.3333 8.72293 13.3333ZM10.5572 13.6666V12.5416C10.5572 12.2916 10.6795 12.1666 10.924 12.1666C11.1686 12.1666 11.2501 12.3333 11.2501 12.5416V13.6666H11.7392V12.4583C11.7392 11.9999 11.4947 11.7083 11.0871 11.7083C10.8017 11.7083 10.6387 11.7916 10.5164 11.9999V11.7916H10.068V13.7083H10.5572V13.6666ZM13.0436 13.7083C13.4512 13.7083 13.7773 13.4583 13.8588 13.1249H13.4104C13.3697 13.2499 13.2474 13.3749 13.0436 13.3749C12.7583 13.3749 12.636 13.1666 12.636 12.9583V12.9166H13.8588V12.5833C13.8588 12.1249 13.5735 11.7499 13.0028 11.7499C12.4322 11.7499 12.1468 12.1249 12.1468 12.6249V12.8749C12.1468 13.4166 12.5137 13.7083 13.0436 13.7083ZM13.4104 12.5416H12.636C12.636 12.2916 12.7583 12.0833 13.0436 12.0833C13.2881 12.0833 13.4104 12.2499 13.4104 12.4999V12.5416ZM15.0001 14.3333L15.8153 11.7916H15.3262L14.9593 13.1666L14.5517 11.7916H14.0626L14.7148 13.7083L14.511 14.3749H15.0001V14.3333ZM18.2202 13.6666C18.7093 13.6666 19.0762 13.3749 19.0762 12.9583C19.0762 12.6249 18.8724 12.4166 18.6278 12.3333C18.7909 12.2499 18.9539 12.0416 18.9539 11.7499C18.9539 11.3749 18.6686 11.0833 18.2202 11.0833H17.0789V13.6666H18.2202ZM18.0572 12.1666H17.5273V11.4999H18.0572C18.261 11.4999 18.3833 11.6249 18.3833 11.8333C18.3833 11.9999 18.3017 12.1666 18.0572 12.1666ZM18.1795 13.2499H17.5273V12.5416H18.1387C18.3833 12.5416 18.5055 12.6666 18.5055 12.8749C18.5463 13.1249 18.424 13.2499 18.1795 13.2499ZM20.0545 13.7083C20.2583 13.7083 20.5028 13.6249 20.5843 13.4999V13.6666H21.0735V12.4583C21.0735 11.9999 20.7474 11.7083 20.299 11.7083C19.8914 11.7083 19.6061 11.9166 19.4838 12.2916H19.9322C19.9729 12.2083 20.0952 12.1249 20.2583 12.1249C20.4621 12.1249 20.5843 12.2499 20.5843 12.4166V12.6666C20.5028 12.5833 20.3398 12.4999 20.0952 12.4999C19.6468 12.4999 19.3208 12.7083 19.3208 13.1249C19.3615 13.4999 19.6468 13.7083 20.0545 13.7083ZM20.1767 13.3749C19.9729 13.3749 19.8099 13.2916 19.8099 13.0833C19.8099 12.9166 19.9729 12.7916 20.1767 12.7916C20.3805 12.7916 20.5436 12.8749 20.5436 13.0416C20.5843 13.2499 20.4213 13.3749 20.1767 13.3749ZM22.3778 13.7083C22.867 13.7083 23.2338 13.3749 23.2338 12.9583H22.7854C22.7447 13.1666 22.6632 13.2916 22.3778 13.2916C22.0925 13.2916 21.9702 13.1249 21.9702 12.8333V12.5416C21.9702 12.2916 22.0925 12.0833 22.3778 12.0833C22.6224 12.0833 22.7447 12.2499 22.7854 12.4166H23.2338C23.2338 11.9583 22.867 11.6666 22.3778 11.6666C21.8072 11.6666 21.4811 12.0416 21.4811 12.5416V12.8333C21.4811 13.3333 21.8072 13.7083 22.3778 13.7083ZM24.1713 13.6666V12.7499L24.7827 13.6666H25.3534L24.7012 12.6666L25.3534 11.7499H24.7827L24.1713 12.6249V10.9583H23.6822V13.6666H24.1713Z" fill="white"/>
<path d="M10.8421 6.45833C10.7198 6.45833 10.5975 6.41667 10.516 6.375C10.4345 6.33333 10.353 6.25 10.2715 6.20833C10.2307 6.125 10.1899 6.04167 10.1899 5.91667H10.4753C10.4753 5.95833 10.516 6.04167 10.516 6.08333C10.5568 6.125 10.5975 6.16667 10.6383 6.16667C10.6791 6.20833 10.7606 6.20833 10.8421 6.20833C10.9236 6.20833 10.9644 6.20833 11.0459 6.16667C11.0867 6.125 11.1682 6.08333 11.1682 6.04167C11.209 6 11.209 5.95833 11.209 5.875C11.209 5.79167 11.209 5.75 11.1682 5.70833C11.1274 5.66667 11.0867 5.625 11.0459 5.58333C10.9644 5.54167 10.9236 5.54167 10.8421 5.54167H10.6791V5.29167H10.8421C10.9236 5.29167 10.9644 5.29167 11.0459 5.25C11.0867 5.20833 11.1274 5.20833 11.1682 5.125C11.209 5.08333 11.209 5.04167 11.209 4.95833C11.209 4.91667 11.209 4.83333 11.1682 4.79167C11.1274 4.75 11.0867 4.70833 11.0459 4.66667C11.0052 4.625 10.9236 4.625 10.8829 4.625C10.8014 4.625 10.7606 4.625 10.7198 4.66667C10.6791 4.70833 10.6383 4.70833 10.5975 4.75C10.5568 4.79167 10.5568 4.83333 10.5568 4.91667H10.2715C10.2715 4.79167 10.3122 4.70833 10.353 4.625C10.3937 4.54167 10.4753 4.5 10.5975 4.45833C10.6791 4.41667 10.8014 4.375 10.9236 4.375C11.0459 4.375 11.1682 4.41667 11.2497 4.45833C11.3312 4.5 11.4128 4.58333 11.4535 4.66667C11.4943 4.75 11.535 4.83333 11.535 4.91667C11.535 5.04167 11.4943 5.125 11.4535 5.20833C11.4128 5.29167 11.3312 5.33333 11.209 5.375C11.3312 5.375 11.4128 5.45833 11.4943 5.54167C11.5758 5.625 11.6166 5.70833 11.6166 5.83333C11.6166 5.95833 11.5758 6.04167 11.535 6.125C11.4943 6.20833 11.4128 6.29167 11.2905 6.33333C11.0867 6.45833 10.9644 6.45833 10.8421 6.45833Z" fill="white"/>
<path d="M12.5132 6.45837C12.3502 6.45837 12.2279 6.41671 12.1464 6.33337C12.0649 6.25004 11.9834 6.12504 11.9018 6.00004C11.8611 5.83337 11.8203 5.66671 11.8203 5.45837C11.8203 5.25004 11.8611 5.08337 11.9018 4.91671C11.9426 4.75004 12.0241 4.66671 12.1464 4.58337C12.2687 4.50004 12.391 4.45837 12.5132 4.45837C12.6763 4.45837 12.7986 4.50004 12.8801 4.58337C13.0024 4.66671 13.0431 4.79171 13.1247 4.91671C13.1654 5.08337 13.2062 5.25004 13.2062 5.45837C13.2062 5.66671 13.1654 5.83337 13.1247 6.00004C13.0839 6.16671 13.0024 6.25004 12.8801 6.33337C12.7986 6.41671 12.6763 6.45837 12.5132 6.45837ZM12.5132 6.20837C12.6355 6.20837 12.7578 6.12504 12.7986 6.00004C12.8801 5.87504 12.9209 5.70837 12.9209 5.45837C12.9209 5.29171 12.9209 5.16671 12.8801 5.04171C12.8393 4.91671 12.7986 4.83337 12.7578 4.79171C12.7171 4.75004 12.6355 4.70837 12.554 4.70837C12.4317 4.70837 12.3094 4.79171 12.2687 4.91671C12.1872 5.04171 12.1464 5.20837 12.1464 5.45837C12.1464 5.62504 12.1464 5.75004 12.1872 5.87504C12.2279 6.00004 12.2687 6.08337 12.3094 6.12504C12.3502 6.20837 12.4317 6.20837 12.5132 6.20837Z" fill="white"/>
<path d="M14.837 6.45829H14.2256V4.54163H14.837C15.0408 4.54163 15.1631 4.58329 15.3261 4.66663C15.4484 4.74996 15.5707 4.83329 15.6115 4.99996C15.693 5.12496 15.7337 5.33329 15.7337 5.49996C15.7337 5.70829 15.693 5.87496 15.6115 5.99996C15.5299 6.12496 15.4484 6.24996 15.2854 6.33329C15.2038 6.41663 15.0408 6.45829 14.837 6.45829ZM14.5109 6.16663H14.837C15 6.16663 15.0816 6.12496 15.2038 6.08329C15.2854 6.04163 15.3669 5.95829 15.4076 5.83329C15.4484 5.70829 15.4892 5.58329 15.4892 5.45829C15.4892 5.29163 15.4484 5.16663 15.4076 5.08329C15.3669 4.95829 15.2854 4.91663 15.2038 4.83329C15.1223 4.79163 15 4.74996 14.8778 4.74996H14.5517V6.16663H14.5109Z" fill="white"/>
<path d="M16.5087 6.45846C16.4271 6.45846 16.3456 6.45846 16.2641 6.41679C16.1826 6.37512 16.1418 6.33346 16.1011 6.25012C16.0603 6.16679 16.0195 6.12512 16.0195 6.00012C16.0195 5.91679 16.0195 5.83346 16.0603 5.79179C16.1011 5.75012 16.1418 5.70846 16.1826 5.66679C16.2233 5.62512 16.3049 5.62512 16.3456 5.58346C16.4271 5.58346 16.4679 5.54179 16.5494 5.54179C16.6309 5.54179 16.7125 5.54179 16.7532 5.50012C16.794 5.50012 16.8347 5.50012 16.8755 5.45846C16.9163 5.45846 16.9163 5.41679 16.9163 5.37512C16.9163 5.29179 16.8755 5.20846 16.8347 5.16679C16.794 5.12512 16.7125 5.08346 16.6309 5.08346C16.5494 5.08346 16.4679 5.12512 16.4271 5.16679C16.3864 5.20846 16.3456 5.25012 16.3049 5.29179L16.0603 5.25012C16.1011 5.16679 16.1418 5.08346 16.1826 5.04179C16.2233 5.00012 16.3049 4.95846 16.3864 4.91679C16.4679 4.87512 16.5494 4.87512 16.6309 4.87512C16.6717 4.87512 16.7532 4.87512 16.794 4.87512C16.8755 4.87512 16.9163 4.91679 16.957 4.95846C16.9978 5.00012 17.0386 5.04179 17.0793 5.12512C17.1201 5.20846 17.1201 5.29179 17.1201 5.37512V6.33346H16.8347V6.25012C16.8347 6.29179 16.794 6.33346 16.7532 6.37512C16.7125 6.41679 16.6717 6.45846 16.6309 6.45846C16.6717 6.45846 16.5902 6.45846 16.5087 6.45846ZM16.5494 6.25012C16.6309 6.25012 16.6717 6.25012 16.7532 6.20846C16.794 6.16679 16.8347 6.12512 16.8755 6.08346C16.9163 6.04179 16.9163 6.00012 16.9163 5.91679V5.75012C16.9163 5.75012 16.8755 5.75012 16.8755 5.79179C16.8347 5.79179 16.8347 5.79179 16.794 5.83346C16.7532 5.83346 16.7125 5.83346 16.6717 5.83346C16.6309 5.83346 16.5902 5.83346 16.5902 5.83346C16.5494 5.83346 16.4679 5.83346 16.4271 5.87512C16.3864 5.87512 16.3456 5.91679 16.3049 5.95846C16.3049 5.95846 16.3049 6.00012 16.3049 6.04179C16.3049 6.12512 16.3456 6.16679 16.3864 6.20846C16.4271 6.20846 16.5087 6.25012 16.5494 6.25012Z" fill="white"/>
<path d="M17.6896 6.95833C17.6489 6.95833 17.6081 6.95833 17.5673 6.95833C17.5266 6.95833 17.5266 6.95833 17.4858 6.95833L17.5673 6.70833C17.6489 6.75 17.6896 6.75 17.7711 6.70833C17.8119 6.70833 17.8527 6.625 17.8934 6.54167L17.9342 6.45833L17.4043 5H17.6896L18.0565 6.125L18.4233 5H18.7086L18.138 6.625C18.0972 6.70833 18.0565 6.75 18.0157 6.83333C17.9749 6.875 17.9342 6.91667 17.8527 6.95833C17.8527 6.95833 17.7711 6.95833 17.6896 6.95833Z" fill="white"/>
<path d="M20.0546 5.33325L19.8101 5.37492C19.8101 5.33325 19.7693 5.29159 19.7693 5.29159C19.7285 5.24992 19.7285 5.24992 19.6878 5.20825C19.647 5.20825 19.6063 5.16659 19.5247 5.16659C19.4432 5.16659 19.3617 5.16659 19.3209 5.20825C19.2802 5.24992 19.2394 5.29159 19.2394 5.33325C19.2394 5.37492 19.2394 5.41659 19.2802 5.45825C19.3209 5.49992 19.3617 5.49992 19.4432 5.54159L19.6878 5.58325C19.8101 5.62492 19.9323 5.66659 19.9731 5.70825C20.0546 5.79159 20.0546 5.87492 20.0546 5.95825C20.0546 6.04159 20.0139 6.12492 19.9731 6.20825C19.9323 6.29159 19.8508 6.33325 19.7693 6.37492C19.6878 6.41659 19.5655 6.41659 19.484 6.41659C19.3209 6.41659 19.1986 6.37492 19.0764 6.33325C18.9948 6.24992 18.9133 6.16659 18.8726 6.04159L19.1579 5.99992C19.1579 6.08325 19.1986 6.12492 19.2802 6.16659C19.3209 6.20825 19.4024 6.20825 19.484 6.20825C19.5655 6.20825 19.647 6.20825 19.6878 6.16659C19.7285 6.12492 19.7693 6.08325 19.7693 6.04159C19.7693 5.99992 19.7693 5.95825 19.7285 5.91659C19.6878 5.87492 19.647 5.87492 19.5655 5.83325L19.3209 5.79159C19.1986 5.74992 19.0764 5.70825 19.0356 5.62492C18.9541 5.54159 18.9541 5.45825 18.9541 5.37492C18.9541 5.29159 18.9948 5.20825 19.0356 5.16659C19.0764 5.08325 19.1579 5.04159 19.2394 4.99992C19.3209 4.95825 19.4025 4.95825 19.5247 4.95825C19.6878 4.95825 19.8101 4.99992 19.8916 5.04159C19.9731 5.12492 20.0139 5.24992 20.0546 5.33325Z" fill="white"/>
<path d="M9.98625 18.375C9.98625 18.3334 9.94549 18.25 9.90472 18.2084C9.86396 18.1667 9.8232 18.125 9.78244 18.0834C9.74168 18.0417 9.70092 18.0417 9.66016 18C9.6194 18 9.53788 17.9584 9.49711 17.9584C9.37483 17.9584 9.29331 18 9.21179 18.0417C9.13027 18.0834 9.04874 18.1667 9.00798 18.2917C8.96722 18.4584 8.96722 18.5834 8.96722 18.75C8.96722 18.9167 9.00798 19.0417 9.04874 19.1667C9.08951 19.2917 9.17103 19.375 9.25255 19.4167C9.33407 19.4584 9.45635 19.5 9.53788 19.5C9.66016 19.5 9.74168 19.4584 9.8232 19.4167C9.90473 19.375 9.94549 19.3334 9.98625 19.25C10.027 19.1667 10.0678 19.0834 10.0678 18.9584H10.1493H9.6194V18.7084H10.3531V18.9167C10.3531 19.0834 10.3123 19.2084 10.2716 19.3334C10.1901 19.4584 10.1085 19.5417 9.98625 19.625C9.86396 19.7084 9.74168 19.7084 9.57864 19.7084C9.41559 19.7084 9.25255 19.6667 9.13027 19.5834C9.00798 19.5 8.8857 19.375 8.84494 19.25C8.76342 19.0834 8.72266 18.9167 8.72266 18.7084C8.72266 18.5417 8.76342 18.4167 8.80418 18.2917C8.84494 18.1667 8.8857 18.0834 8.96722 18C9.04874 17.9167 9.13027 17.8334 9.25255 17.7917C9.37483 17.75 9.45635 17.7084 9.57864 17.7084C9.66016 17.7084 9.78244 17.7084 9.86396 17.75C9.94549 17.7917 10.027 17.8334 10.1085 17.875C10.1901 17.9167 10.2308 18 10.2716 18.0834C10.3123 18.1667 10.3531 18.25 10.3531 18.3334H9.98625V18.375Z" fill="white"/>
<path d="M11.5349 19.0832V18.2499H11.8202V19.7082H11.5349V19.4582C11.4942 19.5415 11.4534 19.5832 11.3719 19.6665C11.2904 19.7082 11.2088 19.7499 11.0866 19.7499C11.005 19.7499 10.9235 19.7499 10.842 19.7082C10.7605 19.6665 10.7197 19.6249 10.6789 19.5415C10.6382 19.4582 10.6382 19.3749 10.6382 19.2499V18.3332H10.9235V19.2082C10.9235 19.2915 10.9643 19.3749 11.005 19.4582C11.0458 19.4999 11.1273 19.5415 11.2088 19.5415C11.2496 19.5415 11.3311 19.5415 11.3719 19.4999C11.4126 19.4582 11.4534 19.4165 11.4942 19.3749C11.5349 19.2499 11.5349 19.1665 11.5349 19.0832Z" fill="white"/>
<path d="M12.5946 19.7083C12.5131 19.7083 12.4316 19.7083 12.35 19.6667C12.2685 19.625 12.2278 19.5833 12.187 19.5C12.1462 19.4167 12.1055 19.375 12.1055 19.25C12.1055 19.1667 12.1055 19.0833 12.1462 19.0417C12.187 19 12.2278 18.9583 12.2685 18.9167C12.3093 18.875 12.3908 18.875 12.4316 18.8333C12.5131 18.8333 12.5538 18.7917 12.6354 18.7917C12.7169 18.7917 12.7984 18.7917 12.8392 18.75C12.8799 18.75 12.9207 18.75 12.9614 18.7083C13.0022 18.7083 13.0022 18.6667 13.0022 18.625C13.0022 18.5417 12.9614 18.4583 12.9207 18.4167C12.8799 18.375 12.7984 18.3333 12.7169 18.3333C12.6354 18.3333 12.5538 18.375 12.5131 18.4167C12.4723 18.4583 12.4316 18.5 12.3908 18.5417L12.1462 18.5C12.187 18.4167 12.2278 18.3333 12.2685 18.2917C12.3093 18.25 12.3908 18.2083 12.4723 18.1667C12.5538 18.125 12.6354 18.125 12.7169 18.125C12.7576 18.125 12.8392 18.125 12.8799 18.125C12.9614 18.125 13.0022 18.1667 13.043 18.2083C13.0837 18.25 13.1245 18.2917 13.1653 18.375C13.206 18.4583 13.206 18.5417 13.206 18.625V19.5833H13.043V19.375C13.043 19.4167 13.0022 19.4583 12.9614 19.5C12.9207 19.5417 12.8799 19.5833 12.8392 19.5833C12.7576 19.7083 12.6761 19.7083 12.5946 19.7083ZM12.6761 19.5C12.7576 19.5 12.7984 19.5 12.8799 19.4583C12.9207 19.4167 12.9614 19.375 13.0022 19.3333C13.043 19.2917 13.043 19.25 13.043 19.1667V19C13.043 19 13.0022 19 13.0022 19.0417C12.9614 19.0417 12.9614 19.0417 12.9207 19.0833C12.8799 19.0833 12.8392 19.0833 12.7984 19.0833C12.7576 19.0833 12.7169 19.0833 12.7169 19.0833C12.6761 19.0833 12.5946 19.0833 12.5538 19.125C12.5131 19.125 12.4723 19.1667 12.4316 19.2083C12.3908 19.25 12.3908 19.2917 12.3908 19.3333C12.3908 19.4167 12.4316 19.4583 12.4723 19.5C12.5131 19.5 12.5946 19.5 12.6761 19.5Z" fill="white"/>
<path d="M13.6548 19.7082V18.2499H13.9401V18.4999C13.9809 18.4165 14.0216 18.3749 14.0624 18.3332C14.1439 18.2915 14.1847 18.2499 14.2662 18.2499H14.307C14.3477 18.2499 14.3477 18.2499 14.3477 18.2499V18.4999H14.307C14.2662 18.4999 14.2662 18.4999 14.2254 18.4999C14.1439 18.4999 14.1032 18.4999 14.0624 18.5415C14.0216 18.5832 13.9809 18.6249 13.9401 18.6665C13.8994 18.7082 13.8993 18.7915 13.8993 18.8332V19.7082H13.6548Z" fill="white"/>
<path d="M15.0819 19.7083C15.0004 19.7083 14.9189 19.7083 14.8373 19.6667C14.7558 19.625 14.7151 19.5833 14.6743 19.5C14.6335 19.4167 14.5928 19.375 14.5928 19.25C14.5928 19.1667 14.5928 19.0833 14.6335 19.0417C14.6743 19 14.7151 18.9583 14.7558 18.9167C14.7966 18.875 14.8781 18.875 14.9189 18.8333C15.0004 18.8333 15.0411 18.7917 15.1227 18.7917C15.2042 18.7917 15.2857 18.7917 15.3265 18.75C15.3672 18.75 15.408 18.75 15.4488 18.7083C15.4895 18.7083 15.4895 18.6667 15.4895 18.625C15.4895 18.5417 15.4488 18.4583 15.408 18.4167C15.3672 18.375 15.2857 18.3333 15.2042 18.3333C15.1227 18.3333 15.0411 18.375 15.0004 18.4167C14.9596 18.4583 14.9189 18.5 14.8781 18.5417L14.6335 18.5C14.6743 18.4167 14.7151 18.3333 14.7558 18.2917C14.7966 18.25 14.8781 18.2083 14.9596 18.1667C15.0411 18.125 15.1227 18.125 15.2042 18.125C15.2449 18.125 15.3265 18.125 15.3672 18.125C15.4488 18.125 15.4895 18.1667 15.5303 18.2083C15.571 18.25 15.6118 18.2917 15.6526 18.375C15.6933 18.4583 15.6933 18.5417 15.6933 18.625V19.5833H15.4895V19.375C15.4895 19.4167 15.4488 19.4583 15.408 19.5C15.3672 19.5417 15.3265 19.5833 15.2857 19.5833C15.2042 19.7083 15.1634 19.7083 15.0819 19.7083ZM15.1227 19.5C15.2042 19.5 15.2449 19.5 15.3265 19.4583C15.3672 19.4167 15.408 19.375 15.4488 19.3333C15.4895 19.2917 15.4895 19.25 15.4895 19.1667V19C15.4895 19 15.4488 19 15.4488 19.0417C15.408 19.0417 15.408 19.0417 15.3672 19.0833C15.3265 19.0833 15.2857 19.0833 15.2449 19.0833C15.2042 19.0833 15.1634 19.0833 15.1634 19.0833C15.1227 19.0833 15.0411 19.0833 15.0004 19.125C14.9596 19.125 14.9189 19.1667 14.8781 19.2083C14.8373 19.25 14.8373 19.2917 14.8373 19.3333C14.8373 19.4167 14.8781 19.4583 14.9189 19.5C15.0004 19.5 15.0411 19.5 15.1227 19.5Z" fill="white"/>
<path d="M16.3859 18.8332V19.7082H16.1006V18.2499H16.3452V18.4999C16.3859 18.4165 16.4267 18.3749 16.5082 18.3332C16.5897 18.2915 16.6712 18.2499 16.7528 18.2499C16.8343 18.2499 16.9158 18.2499 16.9973 18.2915C17.0789 18.3332 17.1196 18.3749 17.1604 18.4582C17.2011 18.5415 17.2011 18.6249 17.2011 18.7499V19.6665H16.9158V18.7915C16.9158 18.6665 16.875 18.6249 16.8343 18.5415C16.7935 18.4999 16.712 18.4582 16.6305 18.4582C16.549 18.4582 16.5082 18.4582 16.4674 18.4999C16.4267 18.5415 16.3859 18.5832 16.3452 18.6249C16.4267 18.7082 16.3859 18.7499 16.3859 18.8332Z" fill="white"/>
<path d="M18.3423 18.25V18.4583H17.5679V18.25H18.3423ZM17.7717 17.9166H18.057V19.2916C18.057 19.3333 18.057 19.375 18.0978 19.4166C18.0978 19.4583 18.1385 19.4583 18.1793 19.4583C18.22 19.4583 18.22 19.4583 18.2608 19.4583C18.3016 19.4583 18.3016 19.4583 18.3016 19.4583H18.3423L18.3831 19.7083C18.3831 19.7083 18.3423 19.7083 18.3016 19.7083C18.2608 19.7083 18.22 19.7083 18.1793 19.7083C18.0978 19.7083 18.057 19.7083 17.9755 19.6666C17.894 19.625 17.8532 19.5833 17.8124 19.5416C17.7717 19.5 17.7717 19.4166 17.7717 19.3333V17.9166Z" fill="white"/>
<path d="M19.2388 19.7083C19.1166 19.7083 18.9943 19.6666 18.872 19.625C18.7905 19.5833 18.7089 19.4583 18.6274 19.375C18.5867 19.25 18.5459 19.125 18.5459 19C18.5459 18.8333 18.5867 18.7083 18.6274 18.625C18.6682 18.5 18.7497 18.4166 18.872 18.375C18.9535 18.2916 19.0758 18.2916 19.1981 18.2916C19.2796 18.2916 19.3611 18.2916 19.4426 18.3333C19.5242 18.375 19.5649 18.4166 19.6465 18.4583C19.6872 18.5 19.7687 18.5833 19.7687 18.6666C19.8095 18.75 19.8095 18.875 19.8095 19V19.0833H18.6682V18.875H19.5649C19.5649 18.7916 19.5649 18.75 19.5242 18.6666C19.4834 18.625 19.4426 18.5833 19.4019 18.5416C19.3611 18.5 19.2796 18.5 19.1981 18.5C19.1166 18.5 19.035 18.5 18.9943 18.5416C18.9535 18.5833 18.9127 18.625 18.872 18.7083C18.8312 18.75 18.8312 18.8333 18.8312 18.9166V19.0833C18.8312 19.1666 18.8312 19.25 18.872 19.3333C18.9127 19.4166 18.9535 19.4583 18.9943 19.5C19.035 19.5416 19.1166 19.5416 19.1981 19.5416C19.2388 19.5416 19.2796 19.5416 19.3611 19.5C19.4019 19.5 19.4426 19.4583 19.4834 19.4166C19.5242 19.375 19.5242 19.3333 19.5649 19.2916L19.8095 19.3333C19.7687 19.4166 19.7687 19.5 19.6872 19.5416C19.6465 19.5833 19.5649 19.625 19.4834 19.6666C19.4426 19.7083 19.3611 19.7083 19.2388 19.7083Z" fill="white"/>
<path d="M20.7466 19.7083C20.6244 19.7083 20.5021 19.6666 20.3798 19.625C20.2983 19.5833 20.2168 19.4583 20.1352 19.375C20.0945 19.25 20.0537 19.125 20.0537 19C20.0537 18.8333 20.0945 18.7083 20.1352 18.625C20.176 18.5 20.2575 18.4166 20.3798 18.375C20.4613 18.2916 20.5836 18.2916 20.7059 18.2916C20.7874 18.2916 20.8689 18.2916 20.9505 18.3333C21.032 18.375 21.0727 18.4166 21.1543 18.4583C21.195 18.5 21.2765 18.5833 21.2765 18.6666C21.3173 18.75 21.3173 18.875 21.3173 19V19.0833H20.176V18.875H21.032C21.032 18.7916 21.032 18.75 20.9912 18.6666C20.9504 18.625 20.9097 18.5833 20.8689 18.5416C20.8282 18.5 20.7466 18.5 20.6651 18.5C20.5836 18.5 20.5021 18.5 20.4613 18.5416C20.4206 18.5833 20.3798 18.625 20.339 18.7083C20.3798 18.75 20.3798 18.7916 20.3798 18.875V19.0416C20.3798 19.125 20.3798 19.2083 20.4206 19.2916C20.4613 19.375 20.5021 19.4166 20.5428 19.4583C20.5836 19.5 20.6651 19.5 20.7466 19.5C20.7874 19.5 20.8282 19.5 20.9097 19.4583C20.9504 19.4583 20.9912 19.4166 21.032 19.375C21.0727 19.3333 21.0727 19.2916 21.1135 19.25L21.3581 19.2916C21.3173 19.375 21.3173 19.4583 21.2358 19.5C21.195 19.5416 21.1135 19.5833 21.032 19.625C20.9504 19.7083 20.8689 19.7083 20.7466 19.7083Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear" x1="13.4206" y1="0.621958" x2="17.1739" y2="24.6911" gradientUnits="userSpaceOnUse">
<stop stop-color="#72D0FF"/>
<stop offset="1" stop-color="#349EFA"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="-3.41209" y1="12.7435" x2="13.6943" y2="12.7435" gradientUnits="userSpaceOnUse">
<stop stop-color="#9795E7"/>
<stop offset="1" stop-color="#544EFA"/>
</linearGradient>
</defs>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 8.8688L7.7376 6.6056L6.6056 7.7376L8.8688 10L6.6056 12.2624L7.7376 13.3944L10 11.1312L12.2624 13.3944L13.3944 12.2624L11.1312 10L13.3944 7.7376L12.2624 6.6056L10 8.8688Z" fill="url(#paint0_linear)"/>
<circle cx="10" cy="10" r="9.5" stroke="#E71313"/>
<defs>
<linearGradient id="paint0_linear" x1="10" y1="2" x2="10" y2="18" gradientUnits="userSpaceOnUse">
<stop stop-color="#F91F1F"/>
<stop offset="1" stop-color="#DA0B0B"/>
</linearGradient>
</defs>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="76" height="76" rx="5" fill="#1478F9"/>
<path d="M25.8978 19.5478H23.4603C22.5005 19.5478 21.9185 20.1267 21.9185 21.0713V55.9915C21.9185 56.9787 22.4944 57.5454 23.4907 57.5454C26.5985 57.5454 34.2919 57.5454 37.4028 57.5454V60.3881C34.2035 60.3881 26.5467 60.3881 23.3475 60.3729C21.2787 60.3485 19.7949 59.1298 19.1794 57.061C19.155 56.9817 19.1794 56.8751 19.0758 56.8385V20.2547C19.2982 18.7039 20.194 17.671 21.5621 16.9854C21.9277 16.8026 22.3268 16.827 22.7016 16.7203H25.8978V19.5478Z" fill="white"/>
<path d="M42.6373 19.5444H44.179C44.4594 19.5444 44.5447 19.6084 44.5416 19.9009C44.5264 21.595 44.5416 23.289 44.5416 24.9831C44.5416 26.8569 45.7299 28.03 47.6129 28.03C49.3069 28.03 51.001 28.03 52.6951 28.03C52.9662 28.03 53.0394 28.094 53.0333 28.3682C53.0333 29.5595 53.0333 49.9401 53.0333 49.9401L55.876 49.8913C55.876 49.8913 55.8486 28.6302 55.876 26.994C55.8904 26.687 55.8373 26.3806 55.7204 26.0963C55.6035 25.812 55.4258 25.5569 55.1996 25.3487C52.5833 22.7589 49.9783 20.1558 47.3844 17.5396C47.0794 17.2071 46.7185 16.9307 46.318 16.723H42.6617L42.6373 19.5444Z" fill="white"/>
<path d="M36.2424 19.5475H32.0743V16.72H36.2424V19.5475Z" fill="white"/>
<path d="M30.3616 11.0312C30.9313 11.2811 31.1294 11.7107 31.1294 12.3292C31.1142 17.1646 31.1294 18.0726 31.1111 22.9049C31.1111 23.2096 31.2025 23.2644 31.4767 23.2583C32.3177 23.2583 33.1586 23.2583 33.9996 23.2583C34.2175 23.2359 34.4369 23.2827 34.6267 23.3921C34.8165 23.5015 34.967 23.6679 35.0568 23.8677C35.1407 24.056 35.1658 24.2652 35.1288 24.468C35.0919 24.6708 34.9946 24.8576 34.8496 25.0042C33.2246 26.9562 31.5996 28.9093 29.9746 30.8633C29.4506 31.488 28.7863 31.488 28.2653 30.8633C26.62 28.8991 24.9778 26.9298 23.3385 24.9555C23.202 24.8081 23.1123 24.6234 23.0808 24.425C23.0493 24.2266 23.0775 24.0232 23.1617 23.8408C23.2459 23.6584 23.3823 23.5051 23.5538 23.4003C23.7252 23.2955 23.9239 23.244 24.1246 23.2523C24.9991 23.2523 25.8705 23.2523 26.7419 23.2523C27.0192 23.2523 27.1075 23.2005 27.1075 22.8988C27.1075 18.0665 27.1075 17.1585 27.1075 12.3231C27.1075 11.7137 27.3025 11.275 27.8723 11.0251L30.3616 11.0312Z" fill="white"/>
<path d="M38.2285 25.7721C37.6588 25.5253 37.4607 25.0927 37.4607 24.4742C37.479 19.6388 37.4607 19.2945 37.479 14.4469C37.479 14.1422 37.3907 14.0874 37.1134 14.0935C36.2725 14.1117 35.4315 14.0935 34.5906 14.0935C34.3744 14.1171 34.1562 14.0726 33.9666 13.966C33.777 13.8595 33.6255 13.6963 33.5333 13.4993C33.4453 13.3066 33.4188 13.0915 33.4575 12.8832C33.4962 12.6749 33.5982 12.4836 33.7496 12.3354C35.3797 10.3854 37.0037 8.42627 38.6246 6.47627C39.1487 5.85166 39.8129 5.85166 40.337 6.47627C41.9823 8.44455 43.6236 10.4138 45.2607 12.3842C45.3968 12.5319 45.4861 12.7167 45.5173 12.9151C45.5486 13.1136 45.5204 13.3168 45.4363 13.4993C45.3523 13.6817 45.2161 13.8352 45.045 13.9404C44.8738 14.0456 44.6754 14.0978 44.4746 14.0904C43.6032 14.0904 42.7288 14.0904 41.8574 14.0904C41.5801 14.0904 41.4918 14.1453 41.4918 14.4438C41.4918 19.2762 41.4918 19.6235 41.4918 24.4711C41.4918 25.0805 41.2968 25.5223 40.727 25.7691L38.2285 25.7721Z" fill="white"/>
<path d="M34.4413 39.2188H14.1369C12.508 39.2188 11.1875 40.5392 11.1875 42.1681V62.4725C11.1875 64.1014 12.508 65.4219 14.1369 65.4219H34.4413C36.0701 65.4219 37.3906 64.1014 37.3906 62.4725V42.1681C37.3906 40.5392 36.0701 39.2188 34.4413 39.2188Z" fill="white"/>
<path d="M63.6269 43.1451H43.8375C43.2553 43.1451 42.7833 43.6171 42.7833 44.1994V52.2066C42.7833 52.7888 43.2553 53.2608 43.8375 53.2608H63.6269C64.2092 53.2608 64.6812 52.7888 64.6812 52.2066V44.1994C64.6812 43.6171 64.2092 43.1451 63.6269 43.1451Z" fill="white"/>
<path d="M46.9974 51.296C46.6408 51.105 46.3523 50.808 46.1717 50.446C45.97 50.0253 45.8718 49.5625 45.8853 49.0962V47.2681C45.8714 46.8017 45.9697 46.3388 46.1717 45.9183C46.3513 45.5548 46.64 45.2565 46.9974 45.0652C47.4004 44.8548 47.8501 44.75 48.3045 44.7605C48.6972 44.7543 49.085 44.8476 49.4319 45.0317C49.7681 45.2203 50.0503 45.492 50.2515 45.8208C50.4817 46.2036 50.6339 46.6282 50.6994 47.07H49.3923C49.3517 46.8691 49.2753 46.6772 49.1668 46.5033C49.0716 46.357 48.9445 46.2341 48.7951 46.1438C48.645 46.0611 48.4759 46.0191 48.3045 46.0219C48.0923 46.0146 47.882 46.064 47.6952 46.1651C47.5283 46.2636 47.3962 46.4116 47.3174 46.5886C47.2243 46.7995 47.1796 47.0285 47.1863 47.2589V49.087C47.1796 49.3155 47.2244 49.5425 47.3174 49.7513C47.3957 49.9278 47.528 50.075 47.6952 50.1717C47.8811 50.2753 48.0919 50.3259 48.3045 50.318C48.4779 50.3211 48.649 50.2791 48.8012 50.1961C48.9524 50.1095 49.0801 49.9871 49.1729 49.8396C49.2806 49.6649 49.355 49.4717 49.3923 49.2699H50.6933C50.6239 49.7116 50.4698 50.1358 50.2393 50.5191C50.04 50.8476 49.7586 51.1185 49.4228 51.3052C49.0779 51.4919 48.6906 51.5864 48.2985 51.5794C47.8482 51.5925 47.4015 51.4952 46.9974 51.296V51.296Z" fill="#188DDB"/>
<path d="M53.0149 51.4908C52.7186 51.4294 52.4303 51.3344 52.1556 51.2074C51.8973 51.0886 51.6548 50.9381 51.4335 50.7595L52.0185 49.7205C52.2846 49.9357 52.5869 50.1019 52.9113 50.2111C53.246 50.3242 53.5969 50.3818 53.9503 50.3817C54.2824 50.3999 54.6131 50.3273 54.907 50.1715C55.0119 50.1139 55.0989 50.0286 55.1586 49.9249C55.2182 49.8212 55.2482 49.703 55.2452 49.5834V49.5834C55.2494 49.5065 55.2384 49.4294 55.2128 49.3568C55.1872 49.2841 55.1474 49.2172 55.0959 49.1599C54.9853 49.0514 54.849 48.9728 54.6998 48.9314C54.4947 48.8732 54.2861 48.8284 54.0752 48.7973H54.0447H54.0203H53.9198C53.5421 48.7414 53.17 48.6527 52.8077 48.5322C52.509 48.4232 52.2485 48.2294 52.0581 47.9747C51.8335 47.6435 51.7263 47.2466 51.7535 46.8473V46.8473C51.7458 46.456 51.8516 46.0708 52.0581 45.7383C52.2603 45.4243 52.5538 45.1797 52.8991 45.0375C53.3219 44.8676 53.775 44.7857 54.2306 44.7968C54.4776 44.7975 54.7238 44.8251 54.9649 44.879C55.2167 44.9357 55.4626 45.0163 55.6992 45.1197C55.9377 45.2227 56.1653 45.3493 56.3786 45.4976L55.8454 46.564C55.5965 46.3896 55.3248 46.2501 55.038 46.1496C54.779 46.0556 54.506 46.0061 54.2306 46.0033C53.9205 45.9854 53.6112 46.0506 53.3348 46.1922C53.2409 46.2464 53.1631 46.3247 53.1096 46.419C53.056 46.5132 53.0286 46.6201 53.0301 46.7285V46.7285C53.0255 46.8123 53.0377 46.8961 53.066 46.9751C53.0943 47.0541 53.138 47.1267 53.1946 47.1886C53.3098 47.3021 53.451 47.3858 53.606 47.4323C53.8302 47.5006 54.0581 47.5566 54.2885 47.5999H54.325H54.3646H54.4164H54.4682C54.831 47.6656 55.1862 47.7676 55.5285 47.9046C55.8146 48.0231 56.0609 48.2208 56.2385 48.4744C56.4459 48.7922 56.5462 49.168 56.5249 49.5469V49.5469C56.5335 49.9335 56.4275 50.3141 56.2202 50.6407C56.0072 50.9555 55.7032 51.1979 55.3488 51.3354C54.9099 51.505 54.442 51.5868 53.9716 51.5761C53.6506 51.5816 53.3298 51.553 53.0149 51.4908V51.4908Z" fill="#188DDB"/>
<path d="M56.863 44.8334H58.161L59.5808 49.291L61.0037 44.8334H62.2987L60.0744 51.5121H59.0903L56.863 44.8334Z" fill="#188DDB"/>
<path d="M53.2157 55.3704L53.2157 57.7392C53.2157 58.6719 52.6457 59.2374 51.7156 59.2374L17.3294 59.2374C16.3573 59.2374 15.7993 58.6778 15.7993 57.7096C15.7993 54.6894 15.7993 54.0231 15.7993 51L13 51C13 54.109 13 54.7397 13.015 57.8487C13.039 59.8592 14.2391 61.3012 16.2763 61.8993C16.3543 61.923 16.4593 61.8993 16.4953 62L52.5197 62C54.0468 61.7838 55.0639 60.9133 55.739 59.5839C55.919 59.2285 55.895 58.8406 56 58.4764L56 55.3704L53.2157 55.3704Z" fill="white"/>
<path d="M20.8352 46.7451H27.6403C27.7399 46.7542 27.8402 46.741 27.9341 46.7067C28.028 46.6723 28.1131 46.6176 28.1834 46.5464C28.2536 46.4752 28.3071 46.3893 28.3402 46.295C28.3733 46.2006 28.385 46.1001 28.3746 46.0007C28.3746 45.1163 28.3746 44.2331 28.3746 43.351C28.385 43.2516 28.3733 43.1511 28.3402 43.0567C28.3071 42.9623 28.2536 42.8765 28.1834 42.8053C28.1131 42.7341 28.028 42.6794 27.9341 42.645C27.8402 42.6106 27.7399 42.5975 27.6403 42.6065C27.2173 42.6065 26.7909 42.6065 26.368 42.6065C26.3135 42.6162 26.2573 42.6053 26.2104 42.5759C26.1636 42.5465 26.1292 42.5007 26.1142 42.4475C25.9935 42.162 25.8054 41.91 25.566 41.7132C25.2524 41.4709 24.886 41.3062 24.4966 41.2327H23.8943C23.8943 41.2665 23.8571 41.2733 23.83 41.28C23.4974 41.3448 23.1863 41.4917 22.9251 41.7074C22.6639 41.9232 22.4607 42.2009 22.3343 42.5152C22.2971 42.6065 22.2362 42.6167 22.1516 42.6133H20.8386C20.7387 42.6037 20.638 42.6165 20.5437 42.6506C20.4494 42.6847 20.3638 42.7394 20.2932 42.8106C20.2226 42.8819 20.1687 42.9679 20.1355 43.0626C20.1022 43.1572 20.0904 43.258 20.1009 43.3578C20.1009 44.2421 20.1009 45.1242 20.1009 46.004C20.091 46.1032 20.1032 46.2033 20.1365 46.2973C20.1698 46.3912 20.2234 46.4766 20.2936 46.5474C20.3637 46.6182 20.4487 46.6727 20.5423 46.7068C20.6359 46.741 20.7359 46.7541 20.8352 46.7451Z" fill="#1A8FDB"/>
<path d="M32.5134 45.4592C32.5274 45.2629 32.4991 45.0659 32.4305 44.8814C32.3619 44.6969 32.2546 44.5293 32.1157 44.3898C31.9769 44.2503 31.8097 44.1422 31.6256 44.0728C31.4414 44.0033 31.2445 43.9741 31.0481 43.9872C30.6759 43.9872 30.3003 43.9872 29.9281 43.9872C29.7893 43.9872 29.7487 44.021 29.7521 44.1632C29.7521 44.7587 29.7521 45.3543 29.7521 45.9499C29.7561 46.1588 29.7311 46.3672 29.6776 46.5692C29.562 47.0293 29.2911 47.4355 28.9107 47.7191C28.5304 48.0027 28.0638 48.1463 27.5897 48.1258H20.8963C20.6945 48.1304 20.493 48.1077 20.2973 48.0581C19.8344 47.9447 19.4247 47.6751 19.1374 47.2947C18.8501 46.9144 18.7028 46.4465 18.7204 45.9702C18.7204 45.3611 18.7204 44.7486 18.7204 44.1395C18.7204 44.0041 18.6832 43.9737 18.5546 43.9771C18.2162 43.9771 17.8778 43.9771 17.5191 43.9771C16.5039 43.9771 15.9591 44.5286 15.9591 45.5303V61.736C15.9591 62.7343 16.5073 63.2859 17.4988 63.2859H30.9669C31.9618 63.2859 32.51 62.7377 32.51 61.7394V45.4592H32.5134ZM24.0264 56.2066C23.1128 57.1203 22.2025 58.034 21.2854 58.9443C21.2222 59.0108 21.1461 59.0638 21.0618 59.1C20.9774 59.1362 20.8866 59.1549 20.7948 59.1549C20.703 59.1549 20.6121 59.1362 20.5278 59.1C20.4434 59.0638 20.3673 59.0108 20.3041 58.9443C19.8394 58.4931 19.3882 58.0419 18.9505 57.5907C18.8872 57.5265 18.8371 57.4504 18.8032 57.3669C18.7693 57.2833 18.7521 57.1939 18.7528 57.1037C18.7534 57.0135 18.7718 56.9243 18.8069 56.8412C18.842 56.7582 18.8931 56.6828 18.9573 56.6195C19.0215 56.5562 19.0976 56.5061 19.1811 56.4722C19.2647 56.4382 19.3541 56.4211 19.4443 56.4217C19.5345 56.4224 19.6236 56.4407 19.7067 56.4758C19.7898 56.5109 19.8652 56.562 19.9285 56.6263C20.1755 56.8631 20.4225 57.1034 20.656 57.3572C20.7677 57.4756 20.832 57.4858 20.9538 57.3572C21.6306 56.6499 22.348 55.9529 23.0519 55.2558C23.1338 55.1574 23.2421 55.0843 23.3639 55.0449C23.4858 55.0056 23.6163 55.0016 23.7404 55.0335C23.8644 55.0654 23.9768 55.1319 24.0646 55.2251C24.1524 55.3184 24.2119 55.4346 24.2362 55.5603C24.2362 55.6077 24.2362 55.6584 24.2566 55.6889C24.255 55.7862 24.2338 55.8823 24.1942 55.9712C24.1547 56.0602 24.0976 56.1402 24.0264 56.2066ZM24.0264 50.6976C23.1162 51.6045 22.2126 52.5148 21.299 53.4047C21.2355 53.4768 21.1574 53.5344 21.0698 53.5739C20.9823 53.6134 20.8874 53.6339 20.7914 53.6339C20.6954 53.6339 20.6004 53.6134 20.5129 53.5739C20.4254 53.5344 20.3473 53.4768 20.2838 53.4047C19.8326 52.9535 19.3814 52.5024 18.9302 52.0512C18.8667 51.9869 18.8164 51.9108 18.7823 51.8272C18.7481 51.7436 18.7308 51.654 18.7313 51.5637C18.7317 51.4733 18.75 51.384 18.785 51.3007C18.82 51.2174 18.8711 51.1418 18.9353 51.0783C18.9995 51.0147 19.0756 50.9644 19.1593 50.9303C19.2429 50.8962 19.3324 50.8788 19.4228 50.8793C19.5131 50.8798 19.6025 50.8981 19.6858 50.9331C19.7691 50.9681 19.8446 51.0191 19.9082 51.0833C20.1451 51.3135 20.3819 51.5436 20.6053 51.7838C20.7305 51.9226 20.8049 51.9395 20.9437 51.7838C21.6205 51.08 22.3153 50.384 23.0282 49.6959C23.1115 49.5994 23.2203 49.5285 23.3422 49.4911C23.464 49.4537 23.5939 49.4516 23.717 49.4848C23.84 49.518 23.9512 49.5853 24.0377 49.679C24.1241 49.7726 24.1824 49.8887 24.2058 50.014C24.216 50.0574 24.2228 50.1015 24.2261 50.146C24.2335 50.2489 24.2189 50.3522 24.1833 50.4491C24.1477 50.5459 24.0919 50.6341 24.0197 50.7077L24.0264 50.6976ZM29.0178 57.7768C28.1334 57.7768 27.2491 57.7768 26.3648 57.7768C26.1821 57.7768 26.007 57.7042 25.8778 57.5751C25.7487 57.446 25.6761 57.2708 25.6761 57.0882C25.6761 56.9055 25.7487 56.7304 25.8778 56.6012C26.007 56.4721 26.1821 56.3995 26.3648 56.3995H29.0178C29.2004 56.3995 29.3756 56.4721 29.5047 56.6012C29.6339 56.7304 29.7064 56.9055 29.7064 57.0882C29.7064 57.2708 29.6339 57.446 29.5047 57.5751C29.3756 57.7042 29.2004 57.7768 29.0178 57.7768V57.7768ZM29.0178 52.261H26.358C26.1753 52.261 26.0002 52.1884 25.871 52.0593C25.7419 51.9301 25.6694 51.755 25.6694 51.5723C25.6694 51.3897 25.7419 51.2145 25.871 51.0854C26.0002 50.9562 26.1753 50.8837 26.358 50.8837C26.8013 50.8837 27.248 50.8837 27.7116 50.8837C28.1752 50.8837 28.588 50.8837 29.0245 50.8837C29.2072 50.8837 29.3823 50.9562 29.5115 51.0854C29.6406 51.2145 29.7132 51.3897 29.7132 51.5723C29.7132 51.755 29.6406 51.9301 29.5115 52.0593C29.3823 52.1884 29.2072 52.261 29.0245 52.261H29.0178Z" fill="#1A8FDB"/>
<rect x="37.3907" y="30.6875" width="11.8828" height="2.4375" rx="1.21875" fill="white"/>
<rect x="37.3907" y="34.9531" width="8.83594" height="2.4375" rx="1.21875" fill="white"/>
</svg>
<svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.04889 1.80188L5.85389 5.14988L9.24389 0.975878C9.33881 0.859188 9.45884 0.765417 9.59503 0.701548C9.73123 0.63768 9.88007 0.605359 10.0305 0.606993C10.1809 0.608626 10.329 0.644173 10.4638 0.710986C10.5986 0.777798 10.7165 0.874154 10.8089 0.992878L14.0439 5.14888L17.9719 1.75288C18.1261 1.61979 18.3174 1.53699 18.52 1.51556C18.7226 1.49413 18.9269 1.5351 19.1056 1.63298C19.2843 1.73085 19.4288 1.88097 19.5198 2.06324C19.6108 2.24551 19.644 2.45123 19.6149 2.65288L18.1149 12.9999H1.92189L0.398888 2.69988C0.368636 2.49711 0.401433 2.28995 0.492839 2.10645C0.584245 1.92294 0.729841 1.77197 0.909909 1.67397C1.08998 1.57597 1.29581 1.53568 1.49954 1.55856C1.70327 1.58144 1.89504 1.66638 2.04889 1.80188ZM1.99989 13.9999H17.9999V14.9999C17.9999 15.2651 17.8945 15.5194 17.707 15.707C17.5195 15.8945 17.2651 15.9999 16.9999 15.9999H2.99989C2.73467 15.9999 2.48032 15.8945 2.29278 15.707C2.10525 15.5194 1.99989 15.2651 1.99989 14.9999V13.9999Z" fill="#007CBA"/>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:471)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M70.9062 -1H5.09375C1.72826 -1 -1 1.72826 -1 5.09375V70.9062C-1 74.2717 1.72826 77 5.09375 77H70.9062C74.2717 77 77 74.2717 77 70.9062V5.09375C77 1.72826 74.2717 -1 70.9062 -1Z" fill="#1E9BE9"/>
<path d="M26.2824 16.7548H23.9074C22.9723 16.7548 22.4052 17.3188 22.4052 18.2391V52.264C22.4052 53.2258 22.9663 53.778 23.9371 53.778C26.9652 53.778 34.4613 53.778 37.4924 53.778V56.5479C34.3752 56.5479 26.9147 56.5479 23.7976 56.533C21.7818 56.5093 20.336 55.3218 19.7363 53.306C19.7126 53.2288 19.7363 53.1249 19.6354 53.0893V17.4435C19.8521 15.9324 20.7249 14.926 22.0579 14.258C22.4141 14.0799 22.803 14.1037 23.1682 13.9998H26.2824V16.7548Z" fill="white"/>
<path d="M42.5927 16.752H44.0948C44.368 16.752 44.4511 16.8143 44.4481 17.0993C44.4333 18.75 44.4481 20.4006 44.4481 22.0512C44.4481 23.877 45.6059 25.02 47.4406 25.02C49.0912 25.02 50.7419 25.02 52.3925 25.02C52.6567 25.02 52.728 25.0823 52.722 25.3495C52.722 26.5103 52.722 46.3682 52.722 46.3682L55.4919 46.3207C55.4919 46.3207 55.4652 25.6048 55.4919 24.0106C55.5059 23.7114 55.4541 23.4129 55.3403 23.1359C55.2264 22.8589 55.0532 22.6103 54.8328 22.4075C52.2836 19.884 49.7454 17.3477 47.218 14.7986C46.9208 14.4746 46.5692 14.2053 46.1789 14.0029H42.6164L42.5927 16.752Z" fill="white"/>
<path d="M36.3614 16.7548H32.3001V13.9998H36.3614V16.7548Z" fill="white"/>
<path d="M30.6315 8.45735C31.1866 8.70079 31.3796 9.11938 31.3796 9.72204C31.3648 14.4334 31.3796 15.3181 31.3618 20.0266C31.3618 20.3234 31.4509 20.3769 31.718 20.3709C32.5374 20.3709 33.3568 20.3709 34.1762 20.3709C34.3885 20.3491 34.6023 20.3947 34.7873 20.5012C34.9722 20.6078 35.1188 20.77 35.2063 20.9647C35.2881 21.1481 35.3125 21.352 35.2765 21.5496C35.2405 21.7471 35.1457 21.9292 35.0045 22.072C33.4211 23.974 31.8378 25.877 30.2545 27.7809C29.7438 28.3895 29.0966 28.3895 28.589 27.7809C26.9859 25.8671 25.3857 23.9483 23.7885 22.0245C23.6555 21.8809 23.5681 21.701 23.5374 21.5077C23.5067 21.3143 23.5342 21.1162 23.6162 20.9385C23.6982 20.7607 23.8312 20.6114 23.9982 20.5093C24.1653 20.4072 24.3589 20.357 24.5545 20.365C25.4065 20.365 26.2555 20.365 27.1046 20.365C27.3748 20.365 27.4609 20.3145 27.4609 20.0206C27.4609 15.3122 27.4609 14.4275 27.4609 9.7161C27.4609 9.12235 27.6509 8.69485 28.206 8.45142L30.6315 8.45735Z" fill="white"/>
<path d="M38.297 22.82C37.7418 22.5796 37.5489 22.158 37.5489 21.5554C37.5667 16.8439 37.5489 16.5085 37.5667 11.7852C37.5667 11.4883 37.4806 11.4349 37.2104 11.4408C36.3911 11.4586 35.5717 11.4408 34.7523 11.4408C34.5417 11.4639 34.3291 11.4205 34.1443 11.3167C33.9596 11.2129 33.812 11.0538 33.7222 10.8619C33.6364 10.6742 33.6106 10.4645 33.6483 10.2616C33.686 10.0586 33.7854 9.87225 33.9329 9.72785C35.5212 7.82785 37.1036 5.91895 38.6829 4.01895C39.1936 3.41035 39.8407 3.41035 40.3514 4.01895C41.9545 5.93676 43.5537 7.85556 45.1489 9.77535C45.2814 9.91935 45.3684 10.0994 45.3989 10.2927C45.4293 10.4861 45.4019 10.6841 45.32 10.8619C45.2381 11.0396 45.1054 11.1892 44.9386 11.2917C44.7719 11.3942 44.5785 11.445 44.3829 11.4379C43.5339 11.4379 42.6818 11.4379 41.8328 11.4379C41.5626 11.4379 41.4765 11.4913 41.4765 11.7822C41.4765 16.4907 41.4765 16.8291 41.4765 21.5524C41.4765 22.1461 41.2865 22.5766 40.7314 22.8171L38.297 22.82Z" fill="white"/>
<path d="M34.6839 41.1907H14.7488C13.1616 41.1907 11.875 42.4773 11.875 44.0644V62.061C11.875 63.6481 13.1616 64.9347 14.7488 64.9347H34.6839C36.271 64.9347 37.5577 63.6481 37.5577 62.061V44.0644C37.5577 42.4773 36.271 41.1907 34.6839 41.1907Z" fill="white"/>
<path d="M62.7623 41.5625H43.4803C42.913 41.5625 42.4531 42.0224 42.4531 42.5897V50.3916C42.4531 50.9589 42.913 51.4188 43.4803 51.4188H62.7623C63.3296 51.4188 63.7895 50.9589 63.7895 50.3916V42.5897C63.7895 42.0224 63.3296 41.5625 62.7623 41.5625Z" fill="white"/>
<path d="M46.5587 49.5038C46.2104 49.3174 45.9291 49.0268 45.7542 48.6726C45.5572 48.2639 45.4615 47.8138 45.4751 47.3604V45.5791C45.4616 45.1247 45.5573 44.6737 45.7542 44.264C45.9291 43.9098 46.2104 43.6191 46.5587 43.4327C46.9513 43.2277 47.3895 43.1256 47.8323 43.1358C48.2149 43.1298 48.5927 43.2207 48.9307 43.4C49.2583 43.5839 49.5332 43.8486 49.7293 44.169C49.9536 44.542 50.1019 44.9556 50.1657 45.3861H48.8921C48.8526 45.1904 48.7782 45.0034 48.6724 44.834C48.5797 44.6914 48.4558 44.5716 48.3103 44.4836C48.164 44.4031 47.9992 44.3622 47.8323 44.3649C47.6255 44.3578 47.4205 44.406 47.2385 44.5044C47.0759 44.6004 46.9472 44.7446 46.8704 44.9171C46.7798 45.1226 46.7361 45.3457 46.7428 45.5702V47.3515C46.7362 47.574 46.7799 47.7952 46.8704 47.9986C46.9467 48.1707 47.0756 48.3141 47.2385 48.4083C47.4197 48.5092 47.6251 48.5585 47.8323 48.5508C48.0012 48.5539 48.1679 48.513 48.3162 48.4321C48.4636 48.3477 48.5879 48.2284 48.6784 48.0847C48.7833 47.9145 48.8558 47.7263 48.8921 47.5296H50.1598C50.0922 47.96 49.942 48.3734 49.7174 48.7468C49.5232 49.0669 49.249 49.3308 48.9218 49.5127C48.5855 49.6938 48.2082 49.7848 47.8263 49.7769C47.3877 49.7921 46.9522 49.6983 46.5587 49.5038V49.5038Z" fill="#007FFF"/>
<path d="M52.4219 49.6938C52.1332 49.6341 51.8523 49.5414 51.5847 49.4177C51.333 49.3019 51.0967 49.1553 50.8811 48.9813L51.4511 47.969C51.7104 48.1787 52.0049 48.3405 52.3209 48.4469C52.6471 48.5571 52.989 48.6133 53.3333 48.6132C53.6569 48.631 53.9792 48.5601 54.2655 48.4083C54.3677 48.3523 54.4525 48.2691 54.5106 48.1681C54.5687 48.067 54.5979 47.9519 54.595 47.8354V47.8354C54.5991 47.7604 54.5884 47.6853 54.5634 47.6145C54.5385 47.5437 54.4998 47.4785 54.4495 47.4227C54.3418 47.317 54.209 47.2404 54.0636 47.2001C53.8638 47.1433 53.6605 47.0997 53.455 47.0694H53.4253H53.4016H53.3036C52.9355 47.0172 52.5728 46.9317 52.22 46.8141C51.929 46.7078 51.6752 46.5191 51.4897 46.2708C51.2708 45.9481 51.1663 45.5614 51.1928 45.1724V45.1724C51.1849 44.792 51.288 44.4175 51.4897 44.0947C51.6862 43.7877 51.9722 43.5483 52.3091 43.409C52.7211 43.2434 53.1625 43.1636 53.6064 43.1744C53.8471 43.1752 54.087 43.2021 54.3219 43.2546C54.5673 43.3098 54.8069 43.3884 55.0374 43.4891C55.2697 43.5895 55.4915 43.7128 55.6994 43.8572L55.1799 44.8963C54.9373 44.7264 54.6726 44.5905 54.3931 44.4926C54.1408 44.4009 53.8748 44.3528 53.6064 44.3501C53.3043 44.3325 53.0029 44.3961 52.7336 44.5341C52.6421 44.5869 52.5664 44.6632 52.5142 44.755C52.462 44.8469 52.4353 44.951 52.4367 45.0566V45.0566C52.4323 45.1382 52.4442 45.2199 52.4717 45.2969C52.4992 45.3739 52.5419 45.4446 52.597 45.5049C52.7093 45.6155 52.8469 45.697 52.9978 45.7424C53.2163 45.809 53.4383 45.8635 53.6628 45.9057H53.6984H53.737H53.7875H53.838C54.1915 45.9697 54.5376 46.0691 54.8711 46.2026C55.1498 46.318 55.3898 46.5106 55.5628 46.7577C55.7649 47.0674 55.8627 47.4335 55.8419 47.8027C55.8507 48.1795 55.7473 48.5505 55.545 48.8685C55.3375 49.1753 55.0413 49.4114 54.6959 49.5454C54.2681 49.7096 53.8122 49.7883 53.3541 49.7769C53.0413 49.7823 52.7288 49.7545 52.4219 49.6938V49.6938Z" fill="#007FFF"/>
<path d="M56.1716 43.2072H57.4363L58.8198 47.5504L60.2062 43.2072H61.4679L59.3007 49.7147H58.3418L56.1716 43.2072Z" fill="#007FFF"/>
<path d="M20.9449 44.5312H14.5469V48.5417H17.96V58.4844H28.9794V48.7421H32.3594V44.5312H25.8772C25.6196 44.9467 25.2628 45.2904 24.8394 45.531C24.4159 45.7716 23.9395 45.9014 23.4534 45.9086C22.9674 45.9157 22.4874 45.8 22.0572 45.572C21.627 45.3439 21.2603 45.0109 20.9908 44.6032L20.9449 44.5312Z" fill="#26A8F6"/>
<rect x="24.1078" y="52.782" width="9.32434" height="9.55177" fill="white"/>
<path d="M34.5269 52.1475H23.1557V55.5588H23.7243V61.8129C23.7243 62.1145 23.8441 62.4038 24.0573 62.617C24.2706 62.8303 24.5598 62.9501 24.8614 62.9501H32.8212C33.1228 62.9501 33.412 62.8303 33.6252 62.617C33.8385 62.4038 33.9583 62.1145 33.9583 61.8129V55.5588H34.5269V52.1475ZM24.2928 53.2846H33.3897V54.4217H24.2928V53.2846ZM32.8212 61.8129H24.8614V55.5588H32.8212V61.8129ZM29.4098 56.1274V59.0668L30.8824 57.5999L31.6841 58.4016L28.8413 61.2444L25.9985 58.4016L26.8002 57.5942L28.2727 59.0668V56.1274H29.4098Z" fill="#358CDB"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M53.0575 55.5157L53.0575 53.1407L55.8125 53.1407L55.8125 56.2549C55.7722 56.3967 55.7511 56.542 55.7299 56.6876C55.6966 56.9171 55.6632 57.1473 55.5542 57.3652C54.8863 58.6982 53.8798 59.571 52.3688 59.7877L35.9219 59.7877L35.9219 57.0179L51.5731 57.0179C52.4934 57.0179 53.0575 56.4508 53.0575 55.5157Z" fill="white"/>
<rect x="33.5469" y="30.2812" width="15.4375" height="2.375" rx="1.1875" fill="white"/>
<rect x="33.5469" y="34.4375" width="11.5781" height="2.375" rx="1.1875" fill="white"/>
</g>
<defs>
<clipPath id="clip0_214:471">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="76" height="76" viewBox="0 0 76 76" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_214:534)">
<rect width="76" height="76" rx="5" fill="white"/>
<path d="M70.8281 -1H4.17188C2.53499 -1 0.965152 -0.349751 -0.1923 0.8077C-1.34975 1.96515 -2 3.53499 -2 5.17188L-2 71.8281C-2 73.465 -1.34975 75.0348 -0.1923 76.1923C0.965152 77.3498 2.53499 78 4.17188 78H70.8281C72.465 78 74.0348 77.3498 75.1923 76.1923C76.3498 75.0348 77 73.465 77 71.8281V5.17188C77 3.53499 76.3498 1.96515 75.1923 0.8077C74.0348 -0.349751 72.465 -1 70.8281 -1Z" fill="#5351D4"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.8494 14.3173C24.0525 14.1141 24.328 14 24.6153 14H44.9793C45.5775 14 46.0625 14.485 46.0625 15.0832V18.1161H43.8961V16.1664H25.064L16.1664 25.064V55.1613H22.8822V57.3277H15.0832C14.485 57.3277 14 56.8427 14 56.2445V24.6153C14 24.328 14.1141 24.0525 14.3173 23.8494L23.8494 14.3173ZM30.0312 20.7158C30.0312 20.1176 30.5162 19.6326 31.1144 19.6326H51.4785C51.7741 19.6326 52.0569 19.7534 52.2612 19.9671L61.7933 29.9324C61.9861 30.134 62.0937 30.4022 62.0937 30.6812V61.0106C62.0937 61.6088 61.6088 62.0938 61.0106 62.0938H35.8805V59.9274H59.9274V31.1158L51.0156 21.799H32.1976V29.8146H30.0312V20.7158Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M50.6429 30.9251V21.1567H52.7462V29.815H60.9487V32.0351H51.6946C51.1138 32.0351 50.6429 31.5381 50.6429 30.9251Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.3096 25.1412V14.8588H24.0311V23.9727H15.145V26.3097H25.1704C25.7996 26.3097 26.3096 25.7865 26.3096 25.1412Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.403 43.0528L26.403 51.3127L23.8694 51.3127C23.467 51.3127 23.1042 51.5527 22.9502 51.9208C22.7962 52.289 22.8813 52.7127 23.1658 52.9944L30.3296 60.0876C30.7182 60.4724 31.3481 60.4724 31.7367 60.0876L38.9005 52.9944C39.185 52.7127 39.2701 52.289 39.1161 51.9208C38.9621 51.5527 38.5989 51.3127 38.1965 51.3127L35.6414 51.3127L35.6414 43.0528C35.6414 42.0273 34.7973 41.1959 33.756 41.1959L28.2884 41.1959C27.2471 41.1959 26.403 42.0273 26.403 43.0528Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.5417 43.6332L46.5417 35.3732L49.0753 35.3732C49.4777 35.3732 49.8405 35.1332 49.9945 34.7651C50.1485 34.397 50.0634 33.9732 49.7789 33.6915L42.6151 26.5983C42.2265 26.2136 41.5966 26.2136 41.208 26.5983L34.0442 33.6915C33.7597 33.9732 33.6746 34.397 33.8286 34.7651C33.9826 35.1332 34.3458 35.3732 34.7482 35.3732L37.3033 35.3732L37.3033 43.6332C37.3033 44.6587 38.1474 45.49 39.1887 45.49L44.6563 45.49C45.6976 45.49 46.5417 44.6587 46.5417 43.6332Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_214:534">
<rect width="76" height="76" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 0C4.486 0 0 4.486 0 10V14.143C0 15.167 0.897 16 2 16H3C3.26522 16 3.51957 15.8946 3.70711 15.7071C3.89464 15.5196 4 15.2652 4 15V9.857C4 9.59178 3.89464 9.33743 3.70711 9.14989C3.51957 8.96236 3.26522 8.857 3 8.857H2.092C2.648 4.987 5.978 2 10 2C14.022 2 17.352 4.987 17.908 8.857H17C16.7348 8.857 16.4804 8.96236 16.2929 9.14989C16.1054 9.33743 16 9.59178 16 9.857V16C16 17.103 15.103 18 14 18H12V17H8V20H14C16.206 20 18 18.206 18 16C19.103 16 20 15.167 20 14.143V10C20 4.486 15.514 0 10 0Z" fill="url(#paint0_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="8.5413" y1="0.497567" x2="11.4817" y2="19.7726" gradientUnits="userSpaceOnUse">
<stop stop-color="#72D0FF"/>
<stop offset="1" stop-color="#349EFA"/>
</linearGradient>
</defs>
</svg>
<svg width="57" height="57" viewBox="0 0 57 57" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.0043 0.0162681C31.6911 0.0442206 31.0879 0.177384 30.712 0.301495C30.0869 0.507908 29.6596 0.703162 28.0998 1.49506C26.5815 2.26588 26.1436 2.46708 25.5106 2.68486C24.1744 3.1445 23.2875 3.1455 20.5846 2.69035C20.024 2.59595 19.3799 2.49454 19.1532 2.46497C16.4797 2.11634 15.0606 2.59053 13.8303 4.2435C13.3966 4.82632 12.9635 5.59704 12.0937 7.33407C10.7665 9.98462 9.98377 10.7674 7.33317 12.0945C5.59611 12.9643 4.82538 13.3974 4.24255 13.8311C2.58955 15.0613 2.11535 16.4804 2.46399 19.1539C2.49356 19.3805 2.59497 20.0247 2.68937 20.5853C3.14453 23.2881 3.14353 24.1749 2.68388 25.5111C2.46609 26.1442 2.26489 26.5821 1.49406 28.1004C0.702633 29.6592 0.506892 30.0875 0.300993 30.7109C-0.33975 32.6512 0.0176276 34.0532 1.61282 35.8573C1.75566 36.0188 2.43296 36.7185 3.11789 37.4121C3.80286 38.1058 4.48175 38.821 4.62656 39.0015C5.64386 40.2697 5.96047 41.1462 6.3488 43.7697C6.68497 46.0406 6.85341 46.7371 7.28245 47.6314C7.54108 48.1704 7.77624 48.5118 8.14571 48.8845C8.91793 49.6635 10.0711 50.1458 11.8947 50.4526C12.1797 50.5005 12.7939 50.5956 13.2595 50.664C15.6507 51.0149 16.5815 51.3222 17.6404 52.1103C18.1949 52.5229 18.4357 52.744 19.7899 54.0834C20.5026 54.7883 21.2645 55.5108 21.483 55.6889C22.4127 56.4468 23.1985 56.8394 24.0545 56.9735C24.4276 57.032 25.1905 56.9896 25.6389 56.8854C26.5016 56.6851 27.0494 56.4534 28.9982 55.4646C29.7964 55.0597 30.6127 54.6592 30.8122 54.5746C31.9654 54.0861 32.8446 53.9277 34.0045 53.9994C34.6437 54.0389 35.0067 54.0873 36.4443 54.3246C38.2059 54.6153 38.3636 54.6325 39.2776 54.6338C39.9236 54.6348 40.1523 54.6224 40.3962 54.5733C41.3477 54.3816 42.0199 54.0209 42.6568 53.3602C43.289 52.7044 43.6662 52.1026 44.6168 50.233C45.3532 48.7846 45.5913 48.3571 45.9843 47.7777C46.5011 47.0158 47.0156 46.5013 47.7775 45.9845C48.357 45.5915 48.7844 45.3534 50.2329 44.617C52.1025 43.6664 52.7043 43.2893 53.3602 42.6571C54.0272 42.0141 54.3981 41.3168 54.5761 40.371C54.6218 40.128 54.6351 39.8725 54.6338 39.2606C54.6319 38.3657 54.6129 38.1921 54.3246 36.4447C54.0808 34.9667 54.0369 34.6378 53.9991 34.0071C53.929 32.8371 54.0859 31.9661 54.5746 30.8127C54.6591 30.6132 55.0596 29.7969 55.4646 28.9987C56.4534 27.0499 56.6851 26.5021 56.8854 25.6394C56.9896 25.191 57.032 24.4282 56.9735 24.0551C56.8394 23.1991 56.4468 22.4133 55.6889 21.4837C55.5107 21.2651 54.7882 20.5032 54.0834 19.7906C52.7439 18.4364 52.5228 18.1956 52.1102 17.6411C51.31 16.5659 51.0182 15.669 50.646 13.1394C50.4687 11.9351 50.3916 11.4941 50.2623 10.9453C49.9625 9.67382 49.5217 8.77841 48.8843 8.14659C48.5116 7.77713 48.1703 7.54197 47.6312 7.28334C46.737 6.85431 46.0404 6.68587 43.7694 6.34972C41.1431 5.96097 40.2824 5.64993 39.0012 4.62661C38.8206 4.48242 38.1054 3.80417 37.4118 3.11938C35.8227 1.55062 35.5132 1.27251 34.8722 0.837292C33.9289 0.196906 32.9904 -0.0717704 32.0043 0.0162681ZM29.7545 7.80971C29.7042 7.9095 29.3846 8.53164 29.0443 9.19227L28.4256 10.3934L28.4493 10.9776L28.473 11.5617L27.9927 11.5734C27.7286 11.5798 27.5094 11.5845 27.5057 11.5838C27.502 11.5832 27.4881 11.3227 27.4746 11.0051L27.4502 10.4276L26.6427 9.12296L25.8351 7.81835L25.9932 7.79133C26.0802 7.77647 26.3243 7.7687 26.5356 7.77405L26.9198 7.7838L27.4016 8.57151C27.6666 9.00476 27.8909 9.35176 27.9001 9.34264C27.9092 9.33349 28.1069 8.9557 28.3395 8.50306L28.7623 7.68014L29.1739 7.66117C29.4004 7.65074 29.6442 7.63909 29.7158 7.63526L29.8459 7.62831L29.7545 7.80971ZM24.5246 8.50483C24.6077 8.78618 24.6251 8.88676 24.5937 8.90615C24.5707 8.92035 24.1628 9.04677 23.6871 9.18712C23.2115 9.32747 22.8154 9.46005 22.8069 9.48171C22.7798 9.55103 22.9684 10.1139 23.0136 10.0985C23.4071 9.96423 24.5776 9.63827 24.5959 9.65779C24.6289 9.69276 24.8384 10.4002 24.8209 10.4177C24.8135 10.4251 24.4552 10.5372 24.0248 10.6667C23.5944 10.7963 23.2358 10.9086 23.2281 10.9163C23.2171 10.9273 23.3752 11.4948 23.3967 11.5217C23.3995 11.5252 23.8119 11.4047 24.3133 11.2539C24.8146 11.1032 25.2351 10.9799 25.2477 10.9799C25.2742 10.9799 25.5086 11.7693 25.4877 11.7879C25.4661 11.807 22.7788 12.6038 22.7359 12.6038C22.7149 12.6038 22.6818 12.5533 22.6622 12.4915C22.5037 11.99 21.6212 8.99902 21.6212 8.96319C21.6212 8.91351 24.3496 8.07206 24.391 8.10896C24.4035 8.12016 24.4637 8.29827 24.5246 8.50483ZM34.8232 8.68384C35.3207 8.86531 35.8073 9.05393 35.9046 9.10299C36.4386 9.37222 36.6908 9.80097 36.5873 10.2633C36.5061 10.6265 36.2098 10.9558 35.9229 11.0016L35.7934 11.0224L35.9109 11.1399C36.0797 11.3087 36.1416 11.4496 36.1592 11.7052C36.1871 12.11 35.9969 12.4616 35.6446 12.6568C35.4704 12.7533 35.4373 12.7592 35.0795 12.7581L34.6994 12.7569L33.6283 12.3645C33.0391 12.1486 32.5525 11.9683 32.5468 11.9637C32.5392 11.9576 33.5368 9.19462 33.8221 8.43164C33.8381 8.3889 33.8663 8.3539 33.8849 8.3539C33.9035 8.3539 34.3257 8.50237 34.8232 8.68384ZM34.4955 9.45404C34.4856 9.46997 34.4241 9.63081 34.3587 9.81137L34.2398 10.1397L34.7024 10.3053C35.0716 10.4374 35.1936 10.467 35.307 10.4517C35.6725 10.4027 35.7649 9.97785 35.4499 9.79441C35.3662 9.74569 34.5666 9.4284 34.52 9.42543C34.5164 9.42519 34.5054 9.43808 34.4955 9.45404ZM20.5748 11.0062C21.016 11.7233 21.4698 12.4607 21.5833 12.6448L21.7897 12.9796L21.4805 13.1718C21.3104 13.2775 21.1549 13.3639 21.1349 13.3639C21.1149 13.3639 20.522 13.1848 19.8173 12.9658C19.1127 12.7468 18.5316 12.5722 18.5259 12.5779C18.5202 12.5836 18.7574 12.9813 19.053 13.4617C19.3485 13.9421 19.5847 14.3394 19.5779 14.3445C19.571 14.3497 19.3842 14.4645 19.1628 14.5996L18.7603 14.8453L17.7501 13.2052C17.1945 12.3032 16.7459 11.5594 16.7532 11.5523C16.8102 11.4973 17.3458 11.1872 17.3838 11.1872C17.4103 11.1872 18.0121 11.3734 18.7211 11.6011C19.43 11.8288 20.0157 12.0094 20.0226 12.0025C20.0296 11.9956 19.7935 11.5978 19.4979 11.1186C19.2024 10.6394 18.9607 10.2344 18.9607 10.2187C18.9607 10.1931 19.7131 9.70482 19.7554 9.70298C19.7649 9.70257 20.1336 10.289 20.5748 11.0062ZM33.9626 10.9037C33.8743 11.0818 33.7444 11.507 33.7707 11.5319C33.7874 11.5478 34.0265 11.6414 34.302 11.7399C34.8852 11.9485 35.0156 11.9539 35.1745 11.7761C35.3731 11.5538 35.2384 11.3054 34.8376 11.1549C34.0402 10.8554 33.9932 10.8419 33.9626 10.9037ZM40.09 11.334C40.3192 11.493 40.4471 11.6034 40.44 11.6363C40.1644 12.9197 39.5308 15.6789 39.5117 15.6789C39.4898 15.6789 38.805 15.2037 38.7142 15.1255C38.6989 15.1123 38.7253 14.9482 38.7729 14.7608C38.8205 14.5733 38.8563 14.4174 38.8526 14.4143C38.7708 14.3467 37.6004 13.5274 37.5677 13.5148C37.5422 13.505 37.3926 13.5832 37.2352 13.6886L36.9491 13.8801L36.8435 13.8015C36.7855 13.7583 36.6007 13.6247 36.433 13.5046C36.259 13.3801 36.141 13.2733 36.1582 13.2561C36.2209 13.1934 39.6424 11.0874 39.6847 11.0855C39.709 11.0844 39.8914 11.1963 40.09 11.334ZM38.8296 12.6398L38.2965 12.9906L38.3811 13.0555C38.66 13.2695 39.0683 13.5333 39.0832 13.5092C39.1148 13.4582 39.3845 12.3543 39.3735 12.3212C39.3675 12.3035 39.1228 12.4469 38.8296 12.6398ZM15.9355 13.6929C16.9168 14.0341 17.4875 15.069 17.2382 16.0549C17.1376 16.4526 16.9633 16.7505 16.6489 17.0616C16.2282 17.4781 15.7802 17.6612 15.1931 17.6566C14.3437 17.6499 13.5961 17.085 13.3073 16.2318C13.21 15.9442 13.2171 15.3564 13.3217 15.0527C13.5776 14.3089 14.2249 13.7393 14.9646 13.6069C15.2325 13.559 15.659 13.5968 15.9355 13.6929ZM43.1426 14.3669C43.7862 14.5925 44.3415 15.2013 44.5116 15.8676C44.6487 16.4047 44.4957 17.0417 44.1257 17.4739L44.0061 17.6136L43.6985 17.2371L43.3908 16.8606L43.5002 16.6485C43.7542 16.1561 43.5565 15.595 43.0378 15.3359C42.86 15.247 42.7852 15.2297 42.5774 15.2297C42.3705 15.2297 42.2946 15.2471 42.1206 15.334C41.8751 15.4567 41.6173 15.7181 41.516 15.947C41.4192 16.1659 41.4189 16.5043 41.5154 16.7224C41.6042 16.9233 41.8412 17.1836 42.0167 17.2732C42.2109 17.3722 42.4444 17.3904 42.6719 17.3243C42.7778 17.2935 42.8715 17.2683 42.8802 17.2683C42.8969 17.2683 43.4271 17.9116 43.4716 17.9859C43.5085 18.0475 43.122 18.223 42.7987 18.2914C42.2112 18.4158 41.6067 18.2145 41.1363 17.7378C40.7608 17.3572 40.5405 16.8932 40.5007 16.3987C40.4263 15.474 41.0883 14.5789 42.0418 14.3152C42.3128 14.2402 42.8537 14.2656 43.1426 14.3669ZM14.9353 14.5849C14.7093 14.6599 14.592 14.7333 14.4537 14.8864C14.0755 15.3051 14.0837 15.8901 14.4738 16.317C14.7153 16.5812 14.96 16.6936 15.2981 16.6957C15.5985 16.6974 15.7958 16.6236 16.0118 16.4284C16.2162 16.2438 16.3134 16.0229 16.3288 15.7083C16.34 15.4783 16.3294 15.4167 16.2473 15.2338C16.1359 14.9855 15.8923 14.7416 15.6537 14.6393C15.4452 14.5499 15.1158 14.525 14.9353 14.5849ZM13.0732 18.36C14.0023 18.7704 14.782 19.1141 14.8057 19.1239C14.8295 19.1336 14.8489 19.1593 14.8489 19.181C14.8491 19.2391 14.4937 20.0325 14.4676 20.0325C14.4554 20.0325 14.075 19.8691 13.6224 19.6694C13.1698 19.4697 12.7935 19.3122 12.7862 19.3195C12.7789 19.3268 12.947 19.5951 13.1598 19.9159C13.3726 20.2365 13.5533 20.5238 13.5613 20.5542C13.5693 20.5846 13.5298 20.711 13.4736 20.835L13.3713 21.0605L13.1513 21.0973C13.0303 21.1175 12.7058 21.1688 12.4302 21.2114C12.1547 21.254 11.9181 21.2979 11.9044 21.309C11.8908 21.3202 12.2543 21.4922 12.712 21.6912C13.1699 21.8902 13.5506 22.0691 13.5582 22.0888C13.5822 22.1513 13.2017 22.953 13.1536 22.9414C13.0879 22.9257 9.72231 21.443 9.69194 21.4165C9.65863 21.3874 9.92303 20.7885 9.98325 20.7566C10.0083 20.7434 10.5497 20.643 11.1863 20.5336C11.823 20.4243 12.3486 20.3307 12.3544 20.3257C12.3602 20.3207 12.0691 19.8545 11.7076 19.2897C11.0528 18.2668 11.0505 18.2625 11.097 18.1543C11.2708 17.75 11.3367 17.6138 11.3587 17.6138C11.3726 17.6138 12.1441 17.9496 13.0732 18.36ZM46.4127 18.7577C46.5077 18.9876 46.59 19.1876 46.5954 19.2021C46.6009 19.2166 46.255 19.3734 45.8266 19.5505C45.3983 19.7276 45.0481 19.8813 45.0482 19.8921C45.0484 19.9028 45.5299 20.0742 46.1181 20.273L47.1877 20.6344L47.3962 21.1379C47.5109 21.4148 47.6048 21.6513 47.6048 21.6635C47.6048 21.6757 47.1422 21.5312 46.5768 21.3425C46.0115 21.1538 45.5325 21.0056 45.5125 21.0132C45.4925 21.0208 45.1739 21.5263 44.8045 22.1364C44.4351 22.7466 44.1244 23.2458 44.1142 23.2458C44.0995 23.2458 43.7786 22.4977 43.6829 22.2403C43.6701 22.2058 43.8275 21.9022 44.1005 21.4346C44.3445 21.0166 44.5251 20.6716 44.5082 20.6559C44.4915 20.6403 44.3204 20.5766 44.1281 20.5142L43.7784 20.4008L43.4238 20.5441C43.2288 20.6229 43.0591 20.6811 43.0467 20.6734C43.0069 20.6489 42.6851 19.8269 42.7068 19.8052C42.7267 19.7853 46.1869 18.3445 46.2227 18.3413C46.2322 18.3404 46.3177 18.5278 46.4127 18.7577ZM33.2856 19.6333C34.9759 19.9611 36.1406 21.1978 36.5165 23.0639C36.6119 23.5373 36.6456 24.5725 36.5831 25.1092C36.3752 26.8963 35.3896 28.2627 33.9307 28.7864C32.7601 29.2065 31.3105 29.0914 30.2936 28.4975C29.076 27.7864 28.3595 26.4973 28.2207 24.7679C28.1773 24.2274 28.218 23.559 28.3261 23.0385C28.73 21.0929 30.0373 19.8125 31.8522 19.585C32.1973 19.5417 32.943 19.5668 33.2856 19.6333ZM24.7482 19.7273C25.382 19.8521 25.846 20.0848 26.2763 20.4935C26.5759 20.7781 26.8007 21.1245 26.9228 21.4897C27.24 22.4387 27.0547 23.4146 26.4403 24.0312L26.1913 24.281L26.3575 24.3877C26.7553 24.643 27.1406 25.1808 27.2474 25.6299C27.3961 26.2554 27.2741 27.0289 26.9397 27.5817C26.3058 28.6295 24.8697 29.1945 23.2979 29.0144C21.9415 28.8591 21.0313 28.1724 20.6341 27.0049C20.525 26.6843 20.4331 26.2168 20.4716 26.1783C20.4892 26.1607 20.9518 26.1511 21.5335 26.1563L22.5642 26.1654L22.6098 26.3209C22.6857 26.5799 22.8666 26.8456 23.0511 26.9691C23.315 27.1457 23.5332 27.1939 24.0004 27.1788C24.3442 27.1677 24.4308 27.1528 24.5957 27.0761C24.8074 26.9777 25.0088 26.7962 25.0984 26.623C25.1871 26.4514 25.2021 26.0775 25.1281 25.8836C25.0023 25.5543 24.6549 25.2967 24.2306 25.2183C24.1188 25.1976 23.8124 25.1807 23.5498 25.1807H23.0724V24.3371V23.4934L23.6685 23.4819C24.2401 23.4709 24.2726 23.4664 24.4619 23.3734C24.7045 23.2543 24.9151 23.0224 24.9926 22.7893C25.1285 22.38 24.978 21.8906 24.6471 21.6655C24.421 21.5118 24.2518 21.4738 23.8671 21.4907C23.4778 21.5078 23.2739 21.5944 23.0498 21.8375C22.9144 21.9845 22.7615 22.3108 22.7615 22.4529C22.7615 22.5197 22.7374 22.521 21.6996 22.5121L20.6378 22.5029L20.6474 22.3475C20.6654 22.056 20.7968 21.6052 20.9656 21.255C21.2577 20.6494 21.8121 20.1426 22.4524 19.8956C23.1633 19.6215 23.9269 19.5655 24.7482 19.7273ZM31.9299 21.6018C31.426 21.724 30.974 22.105 30.7172 22.6239C30.3416 23.3826 30.2587 24.4571 30.5023 25.4095C30.7117 26.2283 31.2343 26.8197 31.9021 26.9936C32.1549 27.0595 32.6708 27.0614 32.9111 26.9975C33.6766 26.7937 34.2114 26.1012 34.3896 25.0831C34.4572 24.6968 34.4577 23.9051 34.3906 23.5222C34.2097 22.4912 33.6773 21.8078 32.8964 21.6044C32.6602 21.5429 32.1782 21.5416 31.9299 21.6018ZM10.9379 25.4811C10.985 25.4924 11.0106 25.5187 11.0004 25.5452C10.9909 25.57 10.9515 25.844 10.9128 26.1543C10.6337 28.3907 10.7685 30.5849 11.3156 32.7131C11.4011 33.0456 11.4731 33.3542 11.4755 33.3989C11.4794 33.4687 11.4522 33.4887 11.2807 33.5422C11.0964 33.5997 11.0791 33.6 11.0514 33.5474C11.0062 33.4614 10.7518 32.4427 10.6528 31.9509C10.2421 29.9125 10.1903 27.8 10.4991 25.6871L10.5388 25.4161L10.6984 25.4391C10.7862 25.4517 10.894 25.4707 10.9379 25.4811ZM46.6834 25.4719C46.7159 25.5566 46.8414 26.6264 46.8782 27.1329C46.9236 27.757 46.9236 29.0456 46.8782 29.6397C46.8296 30.2749 46.7269 31.0762 46.6172 31.6765C46.5248 32.1824 46.2124 33.474 46.163 33.5546C46.1419 33.5891 46.0915 33.5847 45.9241 33.5339L45.712 33.4695L45.7963 33.169C46.2898 31.41 46.5231 29.3809 46.4335 27.6257C46.3964 26.8994 46.3335 26.235 46.2548 25.7378C46.2356 25.6166 46.2262 25.5112 46.2338 25.5036C46.2493 25.4881 46.5197 25.4322 46.6077 25.4264C46.6389 25.4243 46.673 25.4448 46.6834 25.4719ZM23.658 31.0011C24.5157 31.1981 25.1406 31.6072 25.5563 32.244C25.8596 32.7086 25.9855 33.1682 25.9829 33.8014C25.9772 35.1929 25.1081 36.2432 23.6944 36.567C23.4799 36.6161 23.1927 36.6291 22.0272 36.6424L20.6192 36.6585V33.7841V30.9098L22.0099 30.9259C23.1565 30.9393 23.4458 30.9525 23.658 31.0011ZM30.9005 33.7606C31.5551 35.3154 32.0907 36.6024 32.0907 36.6204C32.0907 36.6405 31.7987 36.6497 31.3407 36.644L30.5907 36.6347L30.3988 36.151L30.2069 35.6672L29.0131 35.6582L27.8193 35.6491L27.6309 36.1419L27.4425 36.6347L26.6914 36.644C26.1211 36.6511 25.9403 36.6432 25.9403 36.6114C25.9403 36.5884 26.463 35.3326 27.1019 33.8207C27.7407 32.3088 28.2769 31.0365 28.2933 30.9934C28.3233 30.915 28.3236 30.9149 29.0168 30.9243L29.7103 30.9336L30.9005 33.7606ZM33.3919 32.1602C33.7597 32.8158 34.0722 33.3555 34.0863 33.3595C34.1004 33.3635 34.4152 32.8238 34.7858 32.1601L35.4595 30.9535L36.2456 30.9522C36.678 30.9515 37.0317 30.9606 37.0317 30.9726C37.0317 30.9845 36.5341 31.8765 35.926 32.9549L34.8203 34.9156V35.7838V36.652H34.0947H33.3691V35.782V34.912L32.2922 33.0092C31.7 31.9627 31.1927 31.0711 31.1649 31.028L31.1144 30.9496L31.9188 30.9589L32.7232 30.9682L33.3919 32.1602ZM22.0702 33.3955C22.0702 34.0368 22.06 34.7365 22.0477 34.9503L22.0253 35.339H22.6143C23.1022 35.339 23.2411 35.3274 23.423 35.2711C23.8574 35.1369 24.1796 34.8576 24.3797 34.4419C24.4881 34.2166 24.5056 34.1439 24.5176 33.8681C24.5402 33.3513 24.4096 33.0148 24.0567 32.6811C23.8451 32.481 23.5281 32.3175 23.249 32.2646C23.1467 32.2452 22.8397 32.2293 22.5667 32.2293H22.0704L22.0702 33.3955ZM28.6898 33.4154C28.5201 33.8558 28.3605 34.2666 28.3351 34.3284L28.2889 34.4406H29.0109H29.7329L29.3871 33.5509C29.1968 33.0616 29.0315 32.6508 29.0197 32.6379C29.0079 32.6251 28.8594 32.975 28.6898 33.4154ZM43.9535 35.8316C44.1493 35.9624 44.2521 36.0522 44.2406 36.0821C44.2307 36.1078 44.0032 36.4576 43.7349 36.8593C43.4666 37.261 43.2395 37.6095 43.2303 37.6337C43.2146 37.6745 43.7551 38.0625 43.7827 38.0303C43.7891 38.0229 43.9989 37.7097 44.2488 37.3344C44.4987 36.9591 44.7114 36.652 44.7214 36.652C44.7352 36.652 45.3279 37.0381 45.3873 37.0858C45.3935 37.0907 45.1981 37.3955 44.9532 37.7631C44.7082 38.1307 44.4975 38.4488 44.4849 38.4702C44.4643 38.5049 44.5368 38.5618 44.9128 38.8059L45.0023 38.8641L45.5314 38.069C45.8223 37.6317 46.0742 37.2739 46.091 37.2739C46.1135 37.2739 46.6772 37.6343 46.7691 37.7073C46.7883 37.7226 45.1759 40.1247 45.1512 40.1175C45.1207 40.1087 42.0353 38.0704 41.9926 38.0309C41.949 37.9904 43.5594 35.5755 43.6101 35.6053C43.6312 35.6176 43.7857 35.7195 43.9535 35.8316ZM13.2905 35.8758C13.97 36.036 14.5967 36.6426 14.8241 37.3603C14.933 37.7039 14.9305 38.2769 14.8189 38.5601C14.741 38.7579 14.4604 39.1743 14.4051 39.1743C14.3734 39.1743 13.8469 38.3984 13.8469 38.3518C13.8469 38.3362 13.8799 38.2552 13.9201 38.1718C13.9793 38.0495 13.9902 37.9766 13.9772 37.7939C13.9484 37.3937 13.7008 37.0463 13.3234 36.877C13.1385 36.794 13.0795 36.7838 12.8657 36.7977C12.5504 36.8182 12.2802 36.9475 12.055 37.1857C11.8424 37.4105 11.7611 37.6389 11.7796 37.9592C11.8124 38.5252 12.3168 39.0322 12.8103 38.9949L12.9526 38.9842L12.6741 38.5529C12.521 38.3157 12.3957 38.1101 12.3957 38.096C12.3957 38.0819 12.5337 37.9776 12.7024 37.8642L13.0091 37.6579L13.5858 38.5232C13.903 38.9991 14.1576 39.393 14.1516 39.3986C14.1389 39.4104 12.4329 40.5312 12.3733 40.5669C12.3485 40.5817 12.2596 40.4766 12.1376 40.2885L11.9418 39.9862L12.0737 39.8745C12.1463 39.813 12.2173 39.7624 12.2316 39.7622C12.2458 39.7619 12.2575 39.7478 12.2575 39.7309C12.2575 39.7141 12.1992 39.6893 12.1279 39.6759C11.6285 39.5823 11.15 39.0943 10.9187 38.443C10.7946 38.0934 10.7888 37.5407 10.9058 37.2048C11.1165 36.5999 11.6279 36.1181 12.2747 35.9153C12.6057 35.8114 12.9591 35.7977 13.2905 35.8758ZM41.3417 39.9066L40.6424 40.5871L40.8843 40.8296L41.1262 41.0722L41.7338 40.4883L42.3415 39.9044L42.6322 40.1976L42.9229 40.4909L42.3074 41.082L41.6918 41.6731L41.9241 41.9071L42.1563 42.1411L42.8506 41.4701L43.5448 40.7991L43.8385 41.095L44.1322 41.3909L43.2684 42.2357C42.7933 42.7003 42.3191 43.1555 42.2146 43.2472L42.0245 43.4139L40.7115 42.0507C39.9894 41.3009 39.3939 40.6753 39.3883 40.6604C39.3827 40.6455 39.8473 40.1809 40.4208 39.6279L41.4636 38.6227L41.7523 38.9244L42.0411 39.2261L41.3417 39.9066ZM16.4701 39.3596C16.6616 39.528 16.8184 39.6725 16.8184 39.6808C16.8184 39.689 16.4859 40.0752 16.0794 40.539C15.673 41.0028 15.3037 41.4568 15.2588 41.548C15.0731 41.9253 15.197 42.3551 15.5554 42.5767C15.7025 42.6676 15.7569 42.6813 15.9719 42.6813C16.3152 42.6813 16.455 42.5876 16.9519 42.0243C17.1695 41.7775 17.5091 41.3929 17.7063 41.1695L18.0651 40.7633L18.4259 41.0802C18.7346 41.3513 18.7807 41.405 18.7442 41.4518C18.7207 41.4819 18.3757 41.8782 17.9774 42.3325C17.2174 43.1996 16.9589 43.4332 16.6157 43.5633C16.2315 43.7088 15.8489 43.7095 15.4672 43.5652C15.0182 43.3956 14.5594 42.9779 14.3447 42.5434C14.2259 42.3031 14.2111 42.2431 14.1983 41.9511C14.1806 41.5469 14.2635 41.2584 14.499 40.9037C14.6653 40.6531 16.0581 39.0369 16.0986 39.0474C16.1113 39.0506 16.2785 39.1911 16.4701 39.3596ZM39.0672 41.4497C39.1829 41.6369 39.2773 41.8041 39.2769 41.8211C39.2765 41.8381 39.0805 41.9675 38.8414 42.1086C38.6023 42.2496 38.3747 42.3909 38.3357 42.4225C38.2657 42.4791 38.2757 42.4979 39.0343 43.7485C39.4576 44.4462 39.7982 45.0214 39.7913 45.0266C39.653 45.1315 38.9959 45.4981 38.9723 45.4835C38.9544 45.4724 38.6117 44.9229 38.2107 44.2624C37.8098 43.6018 37.4679 43.0403 37.4511 43.0146C37.4273 42.9781 37.3123 43.0337 36.9314 43.2654C36.6625 43.4291 36.4251 43.5668 36.4039 43.5713C36.3434 43.5844 35.9187 42.8609 35.97 42.8321C35.9934 42.8191 36.6422 42.4261 37.4118 41.9589C38.1815 41.4917 38.8214 41.1094 38.834 41.1093C38.8465 41.1093 38.9514 41.2624 39.0672 41.4497ZM20.9125 42.551C21.2225 42.7053 21.3103 42.7644 21.3106 42.8188C21.3112 42.929 21.0349 46.6382 21.014 46.8009L20.9953 46.9469L20.5442 46.7209L20.0931 46.4949L20.1165 46.1948C20.1294 46.0297 20.1466 45.8708 20.1549 45.8417C20.1659 45.8027 19.9793 45.6908 19.4413 45.4142L18.7128 45.0396L18.569 45.174C18.4898 45.2479 18.3742 45.3541 18.3121 45.41L18.199 45.5117L17.7506 45.2896C17.5039 45.1674 17.3022 45.0575 17.3022 45.0453C17.3022 45.0238 20.4764 42.3531 20.502 42.3531C20.509 42.3531 20.6938 42.4421 20.9125 42.551ZM35.915 44.9619C36.2239 45.95 36.4714 46.774 36.4649 46.793C36.4495 46.8378 35.8048 47.0315 35.746 47.0089C35.7213 46.9995 35.1902 46.6779 34.5659 46.2943C33.9415 45.9108 33.4265 45.6018 33.4215 45.6076C33.4164 45.6134 33.5489 46.0536 33.7158 46.5857C33.8828 47.1178 34.0091 47.5633 33.9966 47.5757C33.9576 47.6143 33.1284 47.8595 33.1075 47.8386C33.0966 47.8277 32.8342 47.005 32.5244 46.0102C32.1445 44.7907 31.9737 44.1947 31.9999 44.1805C32.0213 44.1689 32.18 44.1167 32.3525 44.0646L32.6662 43.9697L33.7974 44.6817C34.4195 45.0733 34.9571 45.4089 34.992 45.4276C35.0652 45.4667 35.1019 45.6059 34.684 44.2595C34.5464 43.8163 34.4439 43.4431 34.4562 43.4302C34.4906 43.3943 35.2455 43.153 35.3027 43.1596C35.338 43.1637 35.5232 43.7088 35.915 44.9619ZM19.878 44.0176C19.4441 44.4028 19.4084 44.4433 19.4657 44.4852C19.6142 44.5937 20.214 44.8795 20.2374 44.8528C20.2661 44.8199 20.3907 43.6334 20.3678 43.6104C20.3597 43.6023 20.1393 43.7856 19.878 44.0176ZM24.2563 43.8751C25.2197 44.0846 25.4244 44.1481 25.6901 44.3199C26.1519 44.6183 26.3816 45.1158 26.289 45.6167C26.2041 46.0763 25.9508 46.4233 25.5645 46.6096C25.4386 46.6703 25.3309 46.7229 25.3252 46.7266C25.3195 46.7302 25.464 47.0556 25.6463 47.4497C25.8287 47.8438 25.972 48.1722 25.9647 48.1795C25.9521 48.192 24.8675 47.9612 24.8503 47.9423C24.8457 47.9373 24.7167 47.6533 24.5636 47.3113L24.2851 46.6893L24.033 46.6303C23.8942 46.5978 23.7649 46.5706 23.7455 46.5698C23.7261 46.569 23.66 46.8043 23.5985 47.0926C23.5371 47.3809 23.4802 47.6233 23.4721 47.6314C23.4641 47.6394 23.2543 47.6021 23.0059 47.5484C22.6597 47.4736 22.5541 47.4381 22.5541 47.3965C22.5541 47.3523 23.2668 44.0572 23.3361 43.7812C23.3472 43.7369 23.3782 43.7006 23.4049 43.7006C23.4315 43.7006 23.8147 43.7791 24.2563 43.8751ZM29.7334 44.4003C29.7782 44.4549 31.5097 48.1633 31.4961 48.1752C31.4906 48.18 31.2613 48.1898 30.9867 48.1968L30.4875 48.2096L30.3475 47.8887L30.2075 47.5678L29.7065 47.5872C29.431 47.5979 29.0645 47.6152 28.8921 47.6258L28.5787 47.645L28.486 47.9273C28.4349 48.0826 28.3793 48.2312 28.3624 48.2577C28.3393 48.2938 28.2061 48.3101 27.8293 48.3229L27.327 48.3399L27.7569 47.2037C27.9933 46.5787 28.3289 45.6908 28.5026 45.2306L28.8184 44.3938L29.202 44.3828C29.413 44.3768 29.6109 44.3685 29.6419 44.3645C29.6728 44.3604 29.714 44.3765 29.7334 44.4003ZM24.1081 44.7631C24.1076 44.7773 24.0618 44.9911 24.0063 45.2381C23.9507 45.4852 23.9162 45.6969 23.9294 45.7085C23.9877 45.7596 24.718 45.8841 24.8726 45.8692C25.2881 45.8293 25.4801 45.4184 25.2249 45.1151C25.1017 44.9687 24.9731 44.911 24.5625 44.8182C24.1764 44.731 24.1095 44.7228 24.1081 44.7631ZM29.0942 46.1562L28.88 46.7757L29.3019 46.7733C29.5339 46.7719 29.7492 46.7603 29.7804 46.7474C29.8288 46.7272 29.8005 46.6405 29.5816 46.1393C29.4412 45.8177 29.3222 45.5507 29.3173 45.5457C29.3124 45.5408 29.212 45.8155 29.0942 46.1562Z" fill="#17449C"/>
</svg>
<svg width="58" height="58" viewBox="0 0 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.2508 0.306784C31.6333 0.180496 32.2471 0.0449965 32.5658 0.0165535C33.5692 -0.0730295 34.5241 0.20036 35.4839 0.851981C36.1362 1.29483 36.4512 1.57782 38.0681 3.17411C38.7739 3.87091 39.5017 4.56106 39.6854 4.70778C40.9891 5.74906 41.8649 6.06555 44.5373 6.46111C46.8481 6.80317 47.5569 6.97456 48.4668 7.41112C49.0154 7.67428 49.3627 7.91357 49.742 8.28951C50.3905 8.93242 50.8391 9.84354 51.144 11.1373C51.2757 11.6957 51.3542 12.1445 51.5345 13.3699C51.9133 15.9439 52.2101 16.8565 53.0244 17.9506C53.4443 18.5148 53.6692 18.7599 55.0322 20.1378C55.7494 20.8629 56.4846 21.6382 56.6659 21.8606C57.4371 22.8066 57.8366 23.6061 57.9731 24.4771C58.0326 24.8568 57.9894 25.633 57.8834 26.0892C57.6796 26.9671 57.4438 27.5245 56.4377 29.5075C56.0256 30.3196 55.618 31.1502 55.532 31.3533C55.0348 32.5269 54.8751 33.4132 54.9464 34.6037C54.9849 35.2455 55.0296 35.5802 55.2777 37.084C55.571 38.8621 55.5904 39.0387 55.5923 39.9494C55.5936 40.572 55.5801 40.832 55.5336 41.0793C55.3524 42.0416 54.975 42.7512 54.2963 43.4054C53.629 44.0487 53.0166 44.4325 51.1142 45.3998C49.6403 46.1491 49.2053 46.3913 48.6158 46.7912C47.8404 47.3171 47.317 47.8406 46.791 48.6159C46.3911 49.2055 46.1489 49.6405 45.3995 51.1143C44.4323 53.0167 44.0485 53.629 43.4052 54.2964C42.7571 54.9687 42.0731 55.3357 41.1049 55.5307C40.8567 55.5807 40.624 55.5933 39.9667 55.5923C39.0366 55.591 38.8761 55.5734 37.0837 55.2776C35.6209 55.0362 35.2515 54.987 34.601 54.9467C33.4208 54.8738 32.5262 55.035 31.3528 55.5321C31.1497 55.6181 30.3191 56.0256 29.5069 56.4377C27.524 57.4438 26.9665 57.6796 26.0887 57.8834C25.6324 57.9894 24.8562 58.0326 24.4765 57.9731C23.6055 57.8366 22.8059 57.4371 21.8599 56.6659C21.6375 56.4846 20.8623 55.7495 20.1371 55.0322C18.7592 53.6693 18.5141 53.4444 17.9499 53.0245C16.8724 52.2226 15.9253 51.9099 13.4921 51.5528C13.0184 51.4833 12.3934 51.3865 12.1033 51.3377C10.2478 51.0255 9.07438 50.5347 8.28862 49.7421C7.91267 49.3629 7.67338 49.0155 7.41021 48.467C6.97364 47.5571 6.80225 46.8483 6.46019 44.5376C6.06504 41.8681 5.74288 40.9762 4.70773 39.6857C4.56038 39.502 3.86958 38.7743 3.17259 38.0685C2.47564 37.3627 1.78646 36.6507 1.64111 36.4864C0.0179369 34.6506 -0.345711 33.2241 0.306274 31.2497C0.515785 30.6153 0.714959 30.1795 1.52027 28.5933C2.30463 27.0484 2.50936 26.6029 2.73096 25.9587C3.19868 24.5991 3.1997 23.6967 2.73655 20.9464C2.6405 20.376 2.53731 19.7206 2.50721 19.4899C2.15246 16.7696 2.63498 15.3255 4.31698 14.0738C4.91004 13.6324 5.69429 13.1918 7.46183 12.3067C10.1589 10.9563 10.9554 10.1598 12.3059 7.46274C13.1909 5.69523 13.6316 4.91099 14.073 4.31794C15.3248 2.63598 16.7688 2.15347 19.4892 2.50821C19.7199 2.53831 20.3753 2.6415 20.9458 2.73755C23.6961 3.20069 24.5985 3.19967 25.9581 2.73196C26.6023 2.51036 27.0479 2.30563 28.5928 1.52129C30.1799 0.715498 30.6147 0.516819 31.2508 0.306784Z" fill="#3171FB"/>
<g clip-path="url(#clip0_4398_2052)">
<path d="M11.2829 27.6645C11.2941 27.4985 11.2874 27.3616 11.2582 27.254C11.2022 27.0521 11.079 26.9422 10.8886 26.9287C10.7766 26.9197 10.687 26.9623 10.6197 27.0566C10.5525 27.1508 10.4898 27.2988 10.4271 27.5052L10.3195 27.8574C10.2142 28.2028 10.1089 28.4406 10.0059 28.5684C9.83338 28.7838 9.58022 28.8802 9.24865 28.8556C8.9462 28.8331 8.70424 28.7053 8.52053 28.4697C8.33682 28.2342 8.26065 27.9045 8.29202 27.4783C8.3189 27.1216 8.4354 26.8255 8.64151 26.5877C8.84762 26.35 9.13215 26.2378 9.49061 26.2535L9.44132 26.9332C9.23745 26.9309 9.08734 27.0072 8.98877 27.1665C8.9238 27.2719 8.88571 27.4065 8.87451 27.5702C8.86107 27.7519 8.88571 27.9 8.95292 28.0144C9.01789 28.1288 9.11647 28.1893 9.24865 28.2006C9.36963 28.2095 9.46372 28.1624 9.53093 28.0592C9.57574 27.9942 9.63399 27.8506 9.70344 27.6286L9.88715 27.0566C9.9678 26.8053 10.0619 26.6191 10.1739 26.4958C10.3464 26.3051 10.5839 26.2221 10.8863 26.2445C11.1955 26.267 11.442 26.4038 11.6279 26.655C11.8138 26.9063 11.8923 27.2472 11.8609 27.6779C11.8295 28.1176 11.7018 28.4585 11.4823 28.6941C11.2627 28.9318 10.9782 29.0373 10.6265 29.0103L10.6758 28.3352C10.8326 28.3262 10.9491 28.2925 11.032 28.2342C11.1798 28.1288 11.2627 27.9381 11.2829 27.66V27.6645Z" fill="white"/>
<path d="M11.8277 23.6268L11.5006 24.8313L12.11 25.2418L11.9151 25.9574L8.9668 23.8982L9.17739 23.1266L12.7597 22.8596L12.5581 23.5999L11.83 23.6268H11.8277ZM11.2139 23.6649L9.81813 23.7232L10.9898 24.4949L11.2161 23.6649H11.2139Z" fill="white"/>
<path d="M10.8254 19.0417L11.3698 19.2929L10.9441 20.2126L13.4735 21.3835L13.1755 22.0295L10.6461 20.8586L10.2182 21.7828L9.67383 21.5316L10.8254 19.0394V19.0417Z" fill="white"/>
<path d="M11.3203 18.2678L11.6945 17.6733L14.5599 19.4813L14.1857 20.078L11.3203 18.27V18.2678Z" fill="white"/>
<path d="M15.3892 17.5569C15.4968 17.429 15.5685 17.3124 15.6088 17.2092C15.6827 17.0118 15.6446 16.8525 15.499 16.7292C15.4139 16.6574 15.3153 16.6394 15.2055 16.6753C15.098 16.7112 14.9568 16.7965 14.7866 16.9266L14.4953 17.1486C14.2086 17.3685 13.9845 17.4986 13.8277 17.5412C13.5611 17.6152 13.3012 17.5457 13.0458 17.3326C12.8128 17.1374 12.6918 16.8907 12.6784 16.5923C12.6672 16.294 12.7971 15.98 13.0727 15.6525C13.3012 15.3788 13.5701 15.2061 13.877 15.1343C14.1839 15.0625 14.4796 15.1388 14.7619 15.3608L14.3251 15.8835C14.1615 15.7624 13.9935 15.7377 13.821 15.8095C13.7067 15.8566 13.5969 15.9441 13.4916 16.0697C13.3751 16.2088 13.3102 16.3456 13.2967 16.4757C13.2833 16.6058 13.3259 16.7135 13.4267 16.7987C13.5185 16.8772 13.6238 16.8929 13.7381 16.8503C13.812 16.8234 13.9442 16.7404 14.1279 16.6013L14.6096 16.2446C14.8202 16.0876 15.0084 15.9934 15.1697 15.9575C15.4206 15.9059 15.6625 15.9755 15.8933 16.1706C16.1308 16.3703 16.2518 16.626 16.2562 16.9378C16.2607 17.2496 16.1241 17.5726 15.8463 17.9046C15.564 18.2433 15.2638 18.4452 14.9456 18.508C14.6297 18.573 14.3363 18.4923 14.0652 18.2657L14.4998 17.7475C14.632 17.8305 14.7485 17.8732 14.8471 17.8732C15.0285 17.8732 15.2078 17.7677 15.387 17.5546L15.3892 17.5569Z" fill="white"/>
<path d="M17.1622 12.7136L15.8605 13.8038L16.3601 14.4027L17.5005 13.4471L17.8768 13.898L16.7365 14.8536L17.6483 15.9438L17.1084 16.3946L14.9375 13.7971L16.7791 12.2538L17.1599 12.7114L17.1622 12.7136Z" fill="white"/>
<path d="M20.5687 13.0748L19.4889 13.7006L19.6345 14.4207L18.9937 14.7908L18.3418 11.2511L19.0341 10.8496L21.7695 13.1825L21.1064 13.5683L20.5687 13.0748V13.0748ZM20.105 12.6688L19.0722 11.7267L19.3612 13.0995L20.105 12.6688V12.6688Z" fill="white"/>
<path d="M24.4234 12.0049C24.2577 12.3055 23.9888 12.5186 23.6147 12.6419C23.1532 12.7967 22.7409 12.7698 22.3758 12.5634C22.0128 12.3548 21.7417 11.9892 21.5692 11.471C21.3811 10.9102 21.3855 10.428 21.5849 10.0219C21.7574 9.66977 22.0464 9.42527 22.4497 9.29068C22.9896 9.10899 23.4444 9.15385 23.8118 9.42527C24.0157 9.5778 24.1568 9.75277 24.2353 9.95017L23.5632 10.1745C23.4691 10.0354 23.3727 9.93671 23.2786 9.88287C23.1106 9.78417 22.9067 9.7752 22.667 9.85595C22.4228 9.93895 22.2637 10.1005 22.1898 10.345C22.1159 10.5895 22.1383 10.8923 22.2593 11.2512C22.3802 11.6101 22.546 11.8568 22.7544 11.9869C22.9627 12.117 23.1823 12.1417 23.413 12.0654C23.6483 11.9869 23.8029 11.8501 23.8746 11.6527C23.9149 11.5473 23.9306 11.4037 23.9194 11.222L24.5848 11C24.643 11.3701 24.5915 11.7043 24.4257 12.0049H24.4234Z" fill="white"/>
<path d="M27.5379 8.2948L27.6208 8.88923L26.6171 9.02831L27.0002 11.7919L26.2945 11.8906L25.9114 9.12701L24.9032 9.26608L24.8203 8.67165L27.5379 8.2948Z" fill="white"/>
<path d="M28.4531 8.2925L29.1566 8.28577L29.1924 11.6752L28.489 11.6819L28.4531 8.2925V8.2925Z" fill="white"/>
<path d="M31.4325 11.942C30.953 11.8747 30.6058 11.693 30.3885 11.3969C30.0927 11.029 29.9874 10.5445 30.0703 9.94112C30.1555 9.3265 30.3907 8.88684 30.7716 8.62664C31.0606 8.40008 31.4459 8.32157 31.9253 8.38887C32.4048 8.45616 32.752 8.63786 32.9693 8.93395C33.2651 9.29061 33.3704 9.77513 33.283 10.3897C33.2001 10.9932 32.9671 11.4306 32.584 11.7042C32.295 11.9308 31.9097 12.0093 31.4302 11.942H31.4325ZM32.2188 11.1322C32.4093 10.9505 32.5325 10.6701 32.584 10.2911C32.6355 9.9142 32.5952 9.61138 32.4608 9.38258C32.3264 9.15378 32.1203 9.02143 31.8424 8.98106C31.5646 8.94292 31.3294 9.0147 31.1345 9.1964C30.9396 9.37809 30.8164 9.65848 30.7648 10.0376C30.7133 10.4167 30.7536 10.7195 30.8903 10.946C31.027 11.1748 31.2353 11.3072 31.5131 11.3453C31.7909 11.3835 32.0262 11.3117 32.2188 11.13V11.1322Z" fill="white"/>
<path d="M36.2126 13.1781L35.5472 12.9381L35.0611 10.2037L34.2456 12.4692L33.625 12.2449L34.7721 9.05518L35.471 9.30641L35.9393 11.9914L36.7413 9.76401L37.3619 9.98832L36.2148 13.1781H36.2126Z" fill="white"/>
<path d="M40.0874 13.9947L39.4982 13.5618L38.7141 14.634L38.1562 14.2257L40.1569 11.4913L41.4966 12.4738C41.6848 12.6174 41.8147 12.7497 41.8864 12.8686C41.9581 12.9875 41.9985 13.1154 42.0097 13.2522C42.0186 13.3644 42.0097 13.4765 41.9828 13.5864C41.9559 13.6963 41.9021 13.804 41.8237 13.9117C41.7296 14.0418 41.6019 14.145 41.4451 14.2235C41.2883 14.302 41.1158 14.311 40.9253 14.2526C41.0149 14.3962 41.0508 14.533 41.0351 14.6654C41.0194 14.7977 40.941 14.9592 40.8021 15.1499L40.6677 15.3338C40.5758 15.4594 40.5198 15.5469 40.4974 15.5985C40.4616 15.6793 40.4571 15.7578 40.4885 15.8296L40.4392 15.8991L39.8119 15.4393C39.8388 15.3652 39.8612 15.3069 39.8813 15.2665C39.9239 15.1791 39.9732 15.0938 40.0292 15.0131L40.2107 14.7551C40.3361 14.5779 40.3899 14.4388 40.3697 14.3356C40.3518 14.2325 40.2577 14.1203 40.0897 13.9969L40.0874 13.9947ZM40.7976 13.7524C40.95 13.7838 41.0821 13.7233 41.1942 13.5685C41.3151 13.4025 41.342 13.25 41.2726 13.1131C41.2345 13.0346 41.1538 12.9516 41.0306 12.8619L40.3675 12.3751L39.8298 13.1109L40.4773 13.5842C40.605 13.6784 40.7125 13.7345 40.7999 13.7524H40.7976Z" fill="white"/>
<path d="M42.7485 17.3277L41.9061 16.4057L41.234 16.7018L40.7344 16.1545L44.0479 14.7593L44.5878 15.3492L42.8986 18.5233L42.381 17.9558L42.7485 17.3254V17.3277ZM43.0464 16.7871L43.7454 15.5758L42.4662 16.1523L43.0464 16.7871Z" fill="white"/>
<path d="M47.1509 18.9205L46.6468 19.2457L46.0956 18.3933L43.7567 19.9097L43.3691 19.3108L45.7081 17.7944L45.1547 16.9398L45.6588 16.6145L47.1486 18.9205H47.1509Z" fill="white"/>
<path d="M47.5461 19.7593L47.8485 20.3941L44.7927 21.8544L44.4902 21.2196L47.5461 19.7593Z" fill="white"/>
<path d="M45.9528 25.1652L45.7422 24.4878L47.6263 22.4488L45.33 23.1666L45.1328 22.5363L48.3656 21.5269L48.5874 22.2357L46.7324 24.2298L48.9885 23.5255L49.1856 24.1558L45.9528 25.1652Z" fill="white"/>
<path d="M46.3826 27.9402C46.2504 27.7652 46.172 27.5409 46.1451 27.2695C46.1026 26.8231 46.2213 26.4417 46.5036 26.1254C46.7859 25.798 47.1981 25.6095 47.738 25.5579C48.2847 25.5063 48.735 25.614 49.0934 25.8832C49.4519 26.1524 49.6535 26.5337 49.7006 27.0294C49.7409 27.4579 49.6647 27.8123 49.4743 28.0949C49.2816 28.3753 49.0262 28.5503 48.7036 28.6198L48.6387 27.9267C48.8627 27.8504 49.0128 27.7046 49.0845 27.4893C49.1226 27.3682 49.136 27.238 49.1226 27.0945C49.0957 26.8231 48.9725 26.61 48.7507 26.4552C48.5289 26.3004 48.213 26.2421 47.8008 26.2825C47.3863 26.3228 47.1018 26.444 46.9472 26.6503C46.7926 26.8567 46.7276 27.0788 46.75 27.321C46.7724 27.5588 46.8598 27.745 47.0099 27.8841C47.16 28.0231 47.3482 28.0972 47.5722 28.1129L47.4983 27.3323L48.0606 27.2784L48.1951 28.6849L46.3871 28.8576L46.3423 28.391L46.7568 28.2789C46.5842 28.1577 46.4588 28.0478 46.3826 27.9446V27.9402Z" fill="white"/>
<path d="M45.9797 33.54C45.8871 33.343 45.5927 33.355 45.5232 33.5697L45.5232 33.5697L45.1042 34.864L45.1041 34.8644C45.0437 35.0486 44.8736 35.1733 44.6797 35.1733H43.3199C43.0808 35.1733 42.9819 35.4777 43.1748 35.6182C43.1748 35.6182 43.1748 35.6182 43.1748 35.6182L44.2748 36.419L44.2756 36.4196C44.4301 36.5342 44.4973 36.7334 44.4365 36.9189C44.4365 36.919 44.4365 36.919 44.4365 36.9191L44.0176 38.213L44.0175 38.2134C43.9425 38.4421 44.2021 38.6297 44.3946 38.4895L44.3946 38.4895L45.4946 37.6887L45.4949 37.6885C45.6508 37.5757 45.8616 37.5757 46.0176 37.6885L46.0178 37.6887L47.1177 38.4894C47.3077 38.6273 47.5683 38.4401 47.4948 38.213C47.4948 38.213 47.4948 38.213 47.4948 38.213L47.076 36.9191C47.076 36.9191 47.076 36.919 47.076 36.919C47.0154 36.7342 47.0816 36.5319 47.2378 36.4189L47.2376 36.419L47.2965 36.4999L47.2379 36.4189L45.9797 33.54ZM45.9797 33.54L45.9893 33.5697L46.4082 34.864L46.4084 34.8644C46.4687 35.0486 46.6389 35.1733 46.8327 35.1733H48.1926C48.4303 35.1733 48.5299 35.4782 48.3376 35.6182M45.9797 33.54L48.3376 35.6182M48.3376 35.6182L48.3965 35.6991L48.3376 35.6182L48.3376 35.6182ZM46.0844 33.5397V33.6389H46.0867H46.1168L46.0867 33.5459L46.0847 33.5396L46.0844 33.5397Z" fill="white" stroke="#3171FB" stroke-width="0.2"/>
<path d="M39.1828 41.8352C39.0902 41.6382 38.7958 41.6501 38.7263 41.8649L38.7263 41.8649L38.3073 43.1592L38.3072 43.1595C38.2469 43.3437 38.0767 43.4684 37.8829 43.4684H36.523C36.2839 43.4684 36.185 43.7729 36.378 43.9134C36.378 43.9134 36.378 43.9134 36.378 43.9134L37.478 44.7142L37.4787 44.7147C37.6332 44.8294 37.7004 45.0286 37.6397 45.2141C37.6396 45.2142 37.6396 45.2142 37.6396 45.2143L37.2208 46.5082L37.2206 46.5086C37.1456 46.7372 37.4052 46.9248 37.5977 46.7846L37.5977 46.7846L38.6978 45.9838L38.698 45.9836C38.854 45.8709 39.0648 45.8709 39.2207 45.9836L39.221 45.9838L40.3209 46.7846L39.1828 41.8352ZM39.1828 41.8352L39.1924 41.8649L39.6114 43.1592L39.6115 43.1595C39.6719 43.3437 39.842 43.4684 40.0358 43.4684H41.3957C41.6334 43.4684 41.733 43.7734 41.5408 43.9134C41.5408 43.9134 41.5408 43.9134 41.5407 43.9134L40.441 44.714M39.1828 41.8352L40.441 44.714M40.441 44.714C40.4409 44.7141 40.4409 44.7141 40.4408 44.7141M40.441 44.714L40.4408 44.7141M40.4408 44.7141C40.2848 44.8271 40.2186 45.0293 40.279 45.214C40.2791 45.2141 40.2791 45.2142 40.2791 45.2143L40.6979 46.5082C40.7714 46.7353 40.5109 46.9224 40.321 46.7846L40.4408 44.7141Z" fill="white" stroke="#3171FB" stroke-width="0.2"/>
<path d="M29.2512 44.8141C29.1586 44.617 28.8641 44.629 28.7947 44.8438L28.7946 44.8438L28.3757 46.1381L28.3756 46.1384C28.3152 46.3226 28.145 46.4473 27.9512 46.4473H26.5913C26.3523 46.4473 26.2534 46.7518 26.4463 46.8923C26.4463 46.8923 26.4463 46.8923 26.4463 46.8923L27.5463 47.6931L27.547 47.6936C27.7016 47.8082 27.7687 48.0074 27.708 48.193C27.708 48.193 27.708 48.1931 27.708 48.1931L27.2891 49.4871L27.289 49.4875C27.214 49.7161 27.4736 49.9037 27.6661 49.7635L27.6661 49.7635L28.7661 48.9627L28.7664 48.9625C28.9223 48.8498 29.1331 48.8498 29.2891 48.9625L29.2893 48.9627L30.3892 49.7634L29.2512 44.8141ZM29.2512 44.8141L29.2608 44.8438L29.6797 46.1381L29.6798 46.1384C29.7402 46.3226 29.9104 46.4473 30.1042 46.4473H31.4641C31.7018 46.4473 31.8014 46.7523 31.6091 46.8923M29.2512 44.8141L31.6091 46.8923M31.6091 46.8923L30.5094 47.6929C30.5093 47.6929 30.5093 47.6929 30.5093 47.693C30.3531 47.8059 30.2869 48.0082 30.3474 48.193C30.3474 48.1931 30.3475 48.1931 30.3475 48.1931L30.7663 49.4871C30.8398 49.7141 30.5793 49.9012 30.3893 49.7635L31.6091 46.8923Z" fill="white" stroke="#3171FB" stroke-width="0.2"/>
<path d="M18.8552 41.8649C18.9247 41.6501 19.2191 41.6382 19.3117 41.8352L19.3213 41.8649L19.7403 43.1592L19.7404 43.1595C19.8008 43.3437 19.9709 43.4684 20.1648 43.4684H21.5246C21.7623 43.4684 21.8619 43.7734 21.6697 43.9134L20.5699 44.714C20.5699 44.7141 20.5698 44.7141 20.5697 44.7141C20.4137 44.8271 20.3475 45.0293 20.4079 45.214C20.408 45.2141 20.408 45.2142 20.408 45.2143L20.8268 46.5082C20.8268 46.5082 20.8269 46.5082 20.8269 46.5082C20.9003 46.7353 20.6397 46.9224 20.4498 46.7846L19.3499 45.9838L19.3496 45.9836C19.1937 45.8709 18.9829 45.8709 18.8269 45.9836L18.8267 45.9838L17.7266 46.7846L17.7266 46.7846C17.5341 46.9248 17.2745 46.7372 17.3496 46.5086L17.3497 46.5082L17.7685 45.2143C17.7685 45.2142 17.7686 45.2141 17.7686 45.2141C17.8293 45.0285 17.7621 44.8294 17.6076 44.7147L17.6069 44.7142L16.5069 43.9134C16.3139 43.7729 16.4128 43.4684 16.6519 43.4684H18.0118C18.2056 43.4684 18.3758 43.3437 18.4361 43.1595L18.4362 43.1592L18.8552 41.8649L18.8552 41.8649Z" fill="white" stroke="#3171FB" stroke-width="0.2"/>
<path d="M12.5148 33.54C12.4223 33.343 12.1278 33.355 12.0583 33.5697L12.0583 33.5697L11.6394 34.864L11.6393 34.8644C11.5789 35.0486 11.4087 35.1733 11.2149 35.1733H9.85501C9.61593 35.1733 9.51707 35.4777 9.70999 35.6182C9.71 35.6182 9.71 35.6182 9.71 35.6182L10.81 36.419L10.8107 36.4196C10.9653 36.5342 11.0324 36.7334 10.9717 36.9189C10.9717 36.919 10.9717 36.919 10.9716 36.9191L10.5528 38.213L10.5527 38.2134C10.4776 38.4421 10.7372 38.6297 10.9298 38.4895L10.9298 38.4895L12.0298 37.6887L12.03 37.6885C12.186 37.5757 12.3968 37.5757 12.5527 37.6885L12.553 37.6887L13.6529 38.4894L12.5148 33.54ZM12.5148 33.54L12.5245 33.5697L12.9434 34.864L12.9435 34.8644C13.0039 35.0486 13.1741 35.1733 13.3679 35.1733H14.7278C14.9654 35.1733 15.065 35.4782 14.8728 35.6182M12.5148 33.54L14.8728 35.6182M14.8728 35.6182L13.773 36.4189C13.773 36.4189 13.773 36.4189 13.7729 36.4189C13.6168 36.5319 13.5506 36.7341 13.6111 36.9189C13.6111 36.9189 13.6111 36.919 13.6111 36.9191L14.03 38.213C14.1034 38.4401 13.8429 38.6272 13.653 38.4895L14.8728 35.6182Z" fill="white" stroke="#3171FB" stroke-width="0.2"/>
</g>
<path d="M16.1767 31.6862C16.4638 32.3747 16.6516 32.6795 17.027 33.0293C17.6786 33.6163 18.529 33.9097 19.5781 33.9097C20.0751 33.9097 20.6162 33.8194 21.0579 33.6727C21.842 33.4131 22.5488 32.7698 22.9353 31.9571C23.3439 31.0993 23.5648 29.9932 23.5648 28.7968C23.5648 27.5553 23.3218 26.4831 22.8691 25.7494C22.2065 24.6659 21.0911 24.079 19.6885 24.079C17.5019 24.079 16 25.4447 16 27.4424C16 29.3386 17.2921 30.5688 19.2799 30.5688C20.2518 30.5688 20.8812 30.3318 21.4776 29.7562C21.4113 30.5237 21.3119 30.93 21.1021 31.2912C20.8039 31.7991 20.307 32.0813 19.6885 32.0813C19.2468 32.0813 18.8934 31.9345 18.6504 31.6637C18.54 31.5395 18.4737 31.4266 18.3854 31.1783L16.1767 31.6862ZM19.6554 28.7856C18.7498 28.7856 18.1535 28.2099 18.1535 27.3409C18.1535 26.4831 18.783 25.8962 19.6996 25.8962C20.6162 25.8962 21.2567 26.4831 21.2567 27.3296C21.2567 28.1986 20.6051 28.7856 19.6554 28.7856Z" fill="white"/>
<path d="M24.6077 31.6862C24.8949 32.3747 25.0826 32.6795 25.4581 33.0293C26.1096 33.6163 26.96 33.9097 28.0091 33.9097C28.5061 33.9097 29.0472 33.8194 29.489 33.6727C30.273 33.4131 30.9798 32.7698 31.3664 31.9571C31.775 31.0993 31.9958 29.9932 31.9958 28.7968C31.9958 27.5553 31.7529 26.4831 31.3001 25.7494C30.6375 24.6659 29.5221 24.079 28.1196 24.079C25.9329 24.079 24.431 25.4447 24.431 27.4424C24.431 29.3386 25.7231 30.5688 27.711 30.5688C28.6828 30.5688 29.3123 30.3318 29.9086 29.7562C29.8423 30.5237 29.743 30.93 29.5331 31.2912C29.235 31.7991 28.738 32.0813 28.1196 32.0813C27.6778 32.0813 27.3244 31.9345 27.0815 31.6637C26.971 31.5395 26.9048 31.4266 26.8164 31.1783L24.6077 31.6862ZM28.0864 28.7856C27.1809 28.7856 26.5845 28.2099 26.5845 27.3409C26.5845 26.4831 27.214 25.8962 28.1306 25.8962C29.0472 25.8962 29.6877 26.4831 29.6877 27.3296C29.6877 28.1986 29.0362 28.7856 28.0864 28.7856Z" fill="white"/>
<path d="M35.1481 29.395C35.8328 29.395 36.4402 29.1693 36.8488 28.7517C37.2905 28.3115 37.5224 27.623 37.5224 26.7427C37.5224 25.8849 37.3015 25.2077 36.8598 24.7562C36.4512 24.3386 35.8548 24.1129 35.1481 24.1129C34.4523 24.1129 33.856 24.3386 33.4363 24.7562C32.9946 25.2077 32.7627 25.8962 32.7627 26.754C32.7627 27.6117 32.9946 28.3115 33.4253 28.7404C33.856 29.1693 34.4413 29.395 35.1481 29.395ZM35.1481 25.3318C35.7002 25.3318 35.9874 25.8059 35.9874 26.7427C35.9874 27.702 35.7002 28.1874 35.1481 28.1874C34.5848 28.1874 34.2977 27.6907 34.2977 26.7427C34.2977 25.8172 34.5959 25.3318 35.1481 25.3318ZM40.6146 33.8758C41.3103 33.8758 41.9177 33.6501 42.3263 33.2325C42.7681 32.7923 43 32.0926 43 31.2235C43 29.5643 42.1276 28.5937 40.6256 28.5937C39.9189 28.5937 39.3225 28.8194 38.9029 29.237C38.4611 29.6885 38.2292 30.377 38.2292 31.2235C38.2292 32.0926 38.4611 32.7923 38.8918 33.2212C39.3225 33.6501 39.9189 33.8758 40.6146 33.8758ZM40.6256 29.8126C41.1778 29.8126 41.465 30.2867 41.465 31.2009C41.465 32.1828 41.1889 32.6682 40.6146 32.6682C40.0514 32.6682 39.7643 32.1716 39.7643 31.2009C39.7643 30.2867 40.0624 29.8126 40.6256 29.8126ZM33.9885 33.5485L34.5628 34L41.7631 24.4515L41.1778 24L33.9885 33.5485Z" fill="white"/>
<defs>
<clipPath id="clip0_4398_2052">
<rect width="41.4286" height="41.4286" fill="white" transform="translate(8.28516 8.28577)"/>
</clipPath>
</defs>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.2024 13.2L14.8584 7.5432L13.7272 6.412L9.2024 10.9376L6.9392 8.6744L5.808 9.8056L9.2024 13.2Z" fill="url(#paint0_linear)"/>
<circle cx="10" cy="10" r="9.5" stroke="#1DC324"/>
<defs>
<linearGradient id="paint0_linear" x1="10" y1="2" x2="10" y2="18" gradientUnits="userSpaceOnUse">
<stop stop-color="#3AD248"/>
<stop offset="1" stop-color="#00B400"/>
</linearGradient>
</defs>
</svg>
<?php
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Common_Helper')){
class Wt_Import_Export_For_Woo_Basic_Common_Helper
{
public static $min_version_msg='';
/**
* Get File name by url
* @param string $file_url URL of the file.
* @return string the base name of the given URL (File name).
*/
public static function wt_wc_get_filename_from_url( $file_url ) {
$parts = parse_url( $file_url );
if ( isset( $parts['path'] ) ) {
return basename( $parts['path'] );
}
}
/**
* Get info like language code, parent product ID etc by product id.
* @param int Product ID.
* @return array/false.
*/
public static function wt_get_wpml_original_post_language_info($element_id){
$get_language_args = array('element_id' => $element_id, 'element_type' => 'post_product');
$original_post_language_info = apply_filters('wpml_element_language_details', null, $get_language_args);
return $original_post_language_info;
}
public static function wt_get_product_id_by_sku($sku){
global $wpdb;
$post_exists_sku = $wpdb->get_var($wpdb->prepare("
SELECT $wpdb->posts.ID
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id )
WHERE $wpdb->posts.post_status IN ( 'publish', 'private', 'draft', 'pending', 'future' )
AND $wpdb->postmeta.meta_key = '_sku' AND $wpdb->postmeta.meta_value = '%s'
", $sku));
if ($post_exists_sku) {
return $post_exists_sku;
}
return false;
}
/**
* To strip the specific string from the array key as well as value.
* @param array $array.
* @param string $data.
* @return array.
*/
public static function wt_array_walk($array , $data) {
$new_array =array();
foreach ($array as $key => $value) {
$new_array[str_replace($data, '', $key)] = str_replace($data, '', $value);
}
return $new_array;
}
/**
* Check the minimum base version required for post type modules
*
*/
public static function check_base_version($post_type, $post_type_title, $min_version)
{
$warn_icon='<span class="dashicons dashicons-warning"></span>&nbsp;';
if(!version_compare(WT_U_IEW_VERSION, $min_version, '>=')) /* not matching the min version */
{
self::$min_version_msg.=$warn_icon.sprintf(__("The %s requires a minimum version of %s %s. Please upgrade the %s accordingly."), "<b>$post_type_title</b>", "<b>".WT_U_IEW_PLUGIN_NAME."</b>", "<b>v$min_version</b>", "<b>".WT_U_IEW_PLUGIN_NAME."</b>").'<br />';
add_action('admin_notices', array(__CLASS__, 'no_minimum_base_version') );
return false;
}
return true;
}
/**
*
* No minimum version error message
*/
public static function no_minimum_base_version()
{
?>
<div class="notice notice-warning">
<p>
<?php
echo self::$min_version_msg;
?>
</p>
</div>
<?php
}
/**
* Decode the post data as normal array from json encoded from data.
* If step key is specified, then it will return the data corresponds to the form key
* @param array $form_data
* @param string $key
*/
public static function process_formdata($form_data, $key='')
{
if($key!="") /* if key is given then take its data */
{
if(isset($form_data[$key]))
{
if(is_array($form_data[$key]))
{
$form_data_vl=$form_data[$key];
}else
{
$form_data_vl=json_decode(stripslashes($form_data[$key]),true);
}
}else
{
$form_data_vl=array();
}
}else
{
$form_data_vl=array();
foreach($form_data as $form_datak=>$form_datav)
{
$form_data_vl[$form_datak]=self::process_formdata($form_data, $form_datak);
}
}
return (is_array($form_data_vl) ? $form_data_vl : array());
}
/**
* Form field generator
*/
public static function field_generator($form_fields, $form_data)
{
include plugin_dir_path( dirname( __FILE__ ) ).'admin/partials/_form_field_generator.php';
}
/**
* Save advanced settings
* @param array $settings array of setting values
*/
public static function set_advanced_settings($settings)
{
update_option('wt_iew_advanced_settings', $settings);
}
/**
*
* Extract validation rule from form field array
* @param array $fields form field array
*/
public static function extract_validation_rules($fields)
{
$out=array_map(function ($r) { return (isset($r['validation_rule']) ? $r['validation_rule'] : ''); }, $fields);
return array_filter($out);
}
/**
* Get advanced settings.
* @param string $key key for specific setting (optional)
* @return mixed if key provided then the value of key otherwise array of values
*/
public static function get_advanced_settings($key="")
{
$advanced_settings=get_option('wt_iew_advanced_settings');
$advanced_settings=($advanced_settings ? $advanced_settings : array());
if($key!="")
{
$key=(substr($key,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$key;
if(isset($advanced_settings[$key]))
{
return $advanced_settings[$key];
}else
{
$default_settings=self::get_advanced_settings_default();
return (isset($default_settings[$key]) ? $default_settings[$key] : '');
}
}else
{
$default_settings=self::get_advanced_settings_default();
$advanced_settings=wp_parse_args($advanced_settings, $default_settings);
return $advanced_settings;
}
}
/**
* Get default value of advanced settings
* @return array array of default values
*
*/
public static function get_advanced_settings_default()
{
$fields=self::get_advanced_settings_fields();
foreach ($fields as $key => $value)
{
if(isset($value['value']))
{
$key=(substr($key,0,8)!=='wt_iew_' ? 'wt_iew_' : '').$key;
$out[$key]=$value['value'];
}
}
return $out;
}
/**
* Get advanced fields
* @return array array of fields
*
*/
public static function get_advanced_settings_fields()
{
$fields=array();
return apply_filters('wt_iew_advanced_setting_fields_basic', $fields);
}
public static function wt_allowed_screens(){
$screens=array('wt_import_export_for_woo_basic','wt_import_export_for_woo_basic_export','wt_import_export_for_woo_basic_import','wt_import_export_for_woo_basic_history','wt_import_export_for_woo_basic_history_log');
return apply_filters('wt_iew_allowed_screens_basic', $screens);
}
public static function wt_get_current_page(){
if (isset($_GET['page'])) {
return $_GET['page'];
}
return '';
}
public static function wt_is_screen_allowed(){
if(in_array(self::wt_get_current_page(), self::wt_allowed_screens())){
return true;
}else{
return false;
}
}
}
}
if(!function_exists('is_woocommerce_prior_to_basic')){
function is_woocommerce_prior_to_basic($version) {
$woocommerce_is_pre_version = (!defined('WC_VERSION') || version_compare(WC_VERSION, $version, '<')) ? true : false;
return $woocommerce_is_pre_version;
if (WC()->version < $version) {
return TRUE;
} else {
return FALSE;
}
}
}
if(!function_exists('wt_let_to_num_basic')){
function wt_let_to_num_basic( $size ) {
$l = substr( $size, -1 );
$ret = (int) substr( $size, 0, -1 );
switch ( strtoupper( $l ) ) {
case 'P':
$ret *= 1024;
// No break.
case 'T':
$ret *= 1024;
// No break.
case 'G':
$ret *= 1024;
// No break.
case 'M':
$ret *= 1024;
// No break.
case 'K':
$ret *= 1024;
// No break.
}
return $ret;
}
}
if(!function_exists('wt_removeBomUtf8_basic')){
function wt_removeBomUtf8_basic($s) {
if (substr($s, 0, 3) == chr(hexdec('EF')) . chr(hexdec('BB')) . chr(hexdec('BF'))) {
return substr($s, 3);
} else {
return $s;
}
}
}
if(!function_exists('wt_iew_utf8ize_basic')){
function wt_iew_utf8ize_basic($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = wt_iew_utf8ize_basic($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
}
/**
* Outputs a HTML element with a star rating for a given rating.
*
* Outputs a HTML element with the star rating exposed on a 0..5 scale in
* half star increments (ie. 1, 1.5, 2 stars). Optionally, if specified, the
* number of ratings may also be displayed by passing the $number parameter.
*
* @since 3.8.0 - WP
* @since 4.4.0 Introduced the `echo` parameter. - WP
*
* @param array $args {
* Optional. Array of star ratings arguments.
*
* @type int|float $rating The rating to display, expressed in either a 0.5 rating increment,
* or percentage. Default 0.
* @type string $type Format that the $rating is in. Valid values are 'rating' (default),
* or, 'percent'. Default 'rating'.
* @type int $number The number of ratings that makes up this rating. Default 0.
* @type bool $echo Whether to echo the generated markup. False to return the markup instead
* of echoing it. Default true.
* }
* @return string Star rating HTML.
*/
if(!function_exists('wt_wp_star_rating')){
function wt_wp_star_rating( $args = array() ) {
$defaults = array(
'rating' => 0,
'type' => 'rating',
'number' => 0,
'echo' => true,
);
$parsed_args = wp_parse_args( $args, $defaults );
// Non-English decimal places when the $rating is coming from a string.
$rating = (float) str_replace( ',', '.', $parsed_args['rating'] );
// Convert percentage to star rating, 0..5 in .5 increments.
if ( 'percent' === $parsed_args['type'] ) {
$rating = round( $rating / 10, 0 ) / 2;
}
// Calculate the number of each type of star needed.
$full_stars = floor( $rating );
$half_stars = ceil( $rating - $full_stars );
$empty_stars = 5 - $full_stars - $half_stars;
if ( $parsed_args['number'] ) {
/* translators: 1: The rating, 2: The number of ratings. */
$format = _n( '%1$s rating based on %2$s rating', '%1$s rating based on %2$s ratings', $parsed_args['number'] );
$title = sprintf( $format, number_format_i18n( $rating, 1 ), number_format_i18n( $parsed_args['number'] ) );
} else {
/* translators: %s: The rating. */
$title = sprintf( __( '%s rating' ), number_format_i18n( $rating, 1 ) );
}
$output = '<div class="wt-star-rating">';
$output .= '<span class="screen-reader-text">' . $title . '</span>';
$output .= str_repeat( '<div class="wt-star wt-star-full" aria-hidden="true"></div>', $full_stars );
$output .= str_repeat( '<div class="wt-star wt-star-half" aria-hidden="true"></div>', $half_stars );
$output .= str_repeat( '<div class="wt-star wt-star-empty" aria-hidden="true"></div>', $empty_stars );
$output .= '</div>';
if ( $parsed_args['echo'] ) {
echo $output;
}
return $output;
}
}
\ No newline at end of file
<?php
/**
* Import Export Helper Library
*
* Includes helper functions for import, export, history modules
* @author WebToffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Iew_IE_Basic_Helper'))
{
/**
*
*/
class Wt_Iew_IE_Basic_Helper
{
public static function _get_csv_delimiters()
{
return array(
'comma'=>array('value'=>__('Comma'), 'val'=>","),
'semicolon'=>array('value'=>__('Semicolon'), 'val'=>";"),
'tab'=>array('value'=>__('Tab'), 'val'=>"\t"),
'space'=>array('value'=>__('Space'), 'val'=>" "),
'other'=>array('value'=>__('Other'), 'val'=>""),
);
}
public static function _get_local_file_path($file_url)
{
$file_path = untrailingslashit(ABSPATH).str_replace(site_url(), '', $file_url);
if(file_exists($file_path))
{
return $file_path;
}else
{
/* Retrying if the directory structure is different from wordpress default file structure */
$url_parms = explode('/', $file_url);
$file_name = end($url_parms);
$file_dir_name = prev($url_parms);
$file_path = WP_CONTENT_DIR.'/'.$file_dir_name.'/'.$file_name;
if(file_exists($file_path))
{
return $file_path;
}else
{
return false;
}
}
}
public static function get_validation_rules($step, $form_data, $module_obj)
{
$method_name='get_'.$step.'_screen_fields';
$out=array();
if(method_exists($module_obj, $method_name))
{
$fields=$module_obj->{$method_name}($form_data);
$out=Wt_Import_Export_For_Woo_Basic_Common_Helper::extract_validation_rules($fields);
}
$form_data=$module_obj=null;
unset($form_data, $module_obj);
return $out;
}
public static function sanitize_formdata($form_data, $module_obj)
{
$out=array();
foreach ($module_obj->steps as $step=>$step_data)
{
if($step=='mapping') //custom rule needed for mapping fieds
{
/* general mapping fields section */
if(isset($form_data['mapping_form_data']) && is_array($form_data['mapping_form_data']))
{
$mapping_form_data=$form_data['mapping_form_data'];
/* mapping fields. This is an internal purpose array */
if(isset($mapping_form_data['mapping_fields']) && is_array($mapping_form_data['mapping_fields']))
{
foreach ($mapping_form_data['mapping_fields'] as $key => $value)
{
$new_key=sanitize_text_field($key);
$value=array(sanitize_text_field($value[0]), absint($value[1]));
unset($mapping_form_data['mapping_fields'][$key]);
$mapping_form_data['mapping_fields'][$new_key]=$value;
}
}
/*mapping enabled meta items */
if(isset($mapping_form_data['mapping_enabled_fields']) && is_array($mapping_form_data['mapping_enabled_fields']))
{
$mapping_form_data['mapping_enabled_fields']=Wt_Iew_Sh::sanitize_item($mapping_form_data['mapping_enabled_fields'], 'text_arr');
}
/* mapping fields. Selected fields only */
if(isset($mapping_form_data['mapping_selected_fields']) && is_array($mapping_form_data['mapping_selected_fields']))
{
foreach ($mapping_form_data['mapping_selected_fields'] as $key => $value)
{
$new_key=sanitize_text_field($key);
unset($mapping_form_data['mapping_selected_fields'][$key]);
$mapping_form_data['mapping_selected_fields'][$new_key]=sanitize_text_field($value);
}
}
$out['mapping_form_data']=$mapping_form_data;
}
/* meta mapping fields section */
if(isset($form_data['meta_step_form_data']) && is_array($form_data['meta_step_form_data']))
{
$meta_step_form_data=$form_data['meta_step_form_data'];
/* mapping fields. This is an internal purpose array */
if(isset($meta_step_form_data['mapping_fields']) && is_array($meta_step_form_data['mapping_fields']))
{
foreach ($meta_step_form_data['mapping_fields'] as $meta_key => $meta_value)
{
foreach ($meta_value as $key => $value)
{
$new_key=sanitize_text_field($key);
$value=array(sanitize_text_field($value[0]), absint($value[1]));
unset($meta_value[$key]);
$meta_value[$new_key]=$value;
}
$meta_step_form_data['mapping_fields'][$meta_key]=$meta_value;
}
}
/* mapping fields. Selected fields only */
if(isset($meta_step_form_data['mapping_selected_fields']) && is_array($meta_step_form_data['mapping_selected_fields']))
{
foreach ($meta_step_form_data['mapping_selected_fields'] as $meta_key => $meta_value)
{
foreach ($meta_value as $key => $value)
{
$new_key=sanitize_text_field($key);
unset($meta_value[$key]);
$meta_value[$new_key]=sanitize_text_field($value);
}
$meta_step_form_data['mapping_selected_fields'][$meta_key]=$meta_value;
}
}
$out['meta_step_form_data']=$meta_step_form_data;
}
}else
{
$current_form_data_key=$step.'_form_data';
$current_form_data=(isset($form_data[$current_form_data_key]) ? $form_data[$current_form_data_key] : array());
if(in_array($step, $module_obj->step_need_validation_filter))
{
$validation_rule=self::get_validation_rules($step, $current_form_data, $module_obj);
foreach($current_form_data as $key => $value)
{
$no_prefix_key=str_replace('wt_iew_', '', $key);
$current_form_data[$key]=Wt_Iew_Sh::sanitize_data($value, $no_prefix_key, $validation_rule);
}
}else
{
$validation_rule=(isset($module_obj->validation_rule[$step]) ? $module_obj->validation_rule[$step] : array());
foreach($current_form_data as $key => $value)
{
$current_form_data[$key]=Wt_Iew_Sh::sanitize_data($value, $key, $validation_rule);
}
}
$out[$current_form_data_key]=$current_form_data;
}
}
$form_data=$current_form_data=$mapping_form_data=$meta_step_form_data=$module_obj=null;
unset($form_data, $current_form_data, $mapping_form_data, $meta_step_form_data, $module_obj);
return $out;
}
public static function debug_panel($module_base)
{
if($module_base=='import' || $module_base=='export')
{
$debug_panel_btns=array(
'refresh_step'=>array(
'title'=>__('Refresh the step'),
'icon'=>'dashicons dashicons-update',
'onclick'=>'wt_iew_basic_'.$module_base.'.refresh_step();',
),
'console_form_data'=>array(
'title'=>__('Console form data'),
'icon'=>'dashicons dashicons-code-standards',
'onclick'=>'wt_iew_basic_'.$module_base.'.console_formdata();',
),
);
}
$debug_panel_btns=apply_filters('wt_iew_debug_panel_buttons_basic', $debug_panel_btns, $module_base);
if(defined('WT_IEW_DEBUG_BASIC') && WT_IEW_DEBUG_BASIC && is_array($debug_panel_btns) && count($debug_panel_btns)>0)
{
?>
<div class="wt_iew_debug_panel" title="<?php _e('For debugging process');?>">
<div class="wt_iew_debug_panel_hd"><?php _e('Debug panel');?></div>
<div class="wt_iew_debug_panel_con">
<?php
foreach ($debug_panel_btns as $btn)
{
?>
<a onclick="<?php echo $btn['onclick'];?>" title="<?php echo $btn['title'];?>">
<span class="<?php echo $btn['icon'];?>"></span>
</a>
<?php
}
?>
</div>
</div>
<?php
}
}
public static function wt_truncate($text, $length, $dots = "...") {
$text = (strlen($text) > $length) ? substr($text, 0, $length - strlen($dots)) . $dots : $text;
return esc_html($text);
}
}
}
\ No newline at end of file
<?php
/**
* Webtoffee Security Library
*
* Includes Data sanitization, Access checking
* @author WebToffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Iew_Sh'))
{
class Wt_Iew_Sh
{
/**
* Data sanitization function.
*
* @param mixed $val value to sanitize
* @param string $key array key in the validation rule
* @param array $validation_rule array of validation rules. Eg: array('field_key' => array('type' => 'textarea'))
* @return mixed sanitized value
*/
public static function sanitize_data($val, $key, $validation_rule = array())
{
if(isset($validation_rule[$key]) && is_array($validation_rule[$key])) /* rule declared/exists */
{
if(isset($validation_rule[$key]['type']))
{
$val = self::sanitize_item($val, $validation_rule[$key]['type']);
}
}else //if no rule is specified then it will be treated as text
{
$val = self::sanitize_item($val, 'text');
}
return $val;
}
/**
* Sanitize individual data item
*
* @param mixed $val value to sanitize
* @param string $type value type
* @return mixed sanitized value
*/
public static function sanitize_item($val, $type='')
{
switch ($type)
{
case 'text':
$val = sanitize_text_field($val);
break;
case 'text_arr':
$val = self::sanitize_arr($val);
break;
case 'url':
$val = esc_url_raw($val);
break;
case 'url_arr':
$val = self::sanitize_arr($val, 'url');
break;
case 'sanitize_title_with_dashes':
$val = sanitize_title_with_dashes($val);
break;
case 'sanitize_title_with_dashes_arr':
$val = self::sanitize_arr($val, 'sanitize_title_with_dashes');
break;
case 'textarea':
$val=sanitize_textarea_field($val);
break;
case 'int':
$val = intval($val);
break;
case 'int_arr':
$val = self::sanitize_arr($val, 'int');
break;
case 'absint':
$val = absint($val);
break;
case 'absint_arr':
$val = self::sanitize_arr($val, 'absint');
break;
case 'float':
$val = floatval($val);
break;
case 'post_content':
$val = wp_kses_post($val);
break;
case 'hex':
$val = sanitize_hex_color($val);
break;
case 'skip': /* skip the validation */
$val = $val;
break;
case 'file_name':
$val = sanitize_file_name($val);
break;
default:
$val = sanitize_text_field($val);
}
return $val;
}
/**
* Recursive array sanitization function
*
* @param mixed $arr value to sanitize
* @param string $type value type
* @return mixed sanitized value
*/
public static function sanitize_arr($arr, $type = 'text')
{
if(is_array($arr))
{
$out = array();
foreach($arr as $k=>$arrv)
{
if(is_array($arrv))
{
$out[$k] = self::sanitize_arr($arrv, $type);
}else
{
$out[$k] = self::sanitize_item($arrv, $type);
}
}
return $out;
}else
{
return self::sanitize_item($arr, $type);
}
}
/**
* User accessibility. Function checks user logged in status, nonce and role access.
*
* @param string $plugin_id unique plugin id. Note: This id is used as an identifier in filter name so please use characters allowed in filters
* @param string $nonce_id Nonce id. If not specified then uses plugin id
* @return boolean if user allowed or not
*/
public static function check_write_access($plugin_id, $nonce_id = '')
{
$er = true;
if(!is_user_logged_in()) //checks user is logged in
{
$er = false;
}
if($er === true) //no error then proceed
{
if(!(self::verify_nonce($plugin_id, $nonce_id))) //verifying nonce
{
$er = false;
}else
{
if(!self::check_role_access($plugin_id)) //Check user role
{
$er = false;
}
}
}
return $er;
}
/**
* Verifying nonce
*
* @param string $plugin_id unique plugin id. Note: This id is used as an identifier in filter name so please use characters allowed in filters
* @param string $nonce_id Nonce id. If not specified then uses plugin id
* @return boolean if user allowed or not
*/
public static function verify_nonce($plugin_id, $nonce_id = '')
{
$nonce = (isset($_REQUEST['_wpnonce']) ? sanitize_text_field($_REQUEST['_wpnonce']) : '');
$nonce = (is_array($nonce) ? $nonce[0] : $nonce); //in some cases multiple nonces are declared
$nonce_id = ($nonce_id == "" ? $plugin_id : $nonce_id); //if nonce id not provided then uses plugin id as nonce id
if(!(wp_verify_nonce($nonce, $nonce_id))) //verifying nonce
{
return false;
}else
{
return true;
}
}
/**
* Checks if user role has access
*
* @param string $plugin_id unique plugin id. Note: This id is used as an identifier in filter name so please use characters allowed in filters
* @return boolean if user allowed or not
*/
public static function check_role_access($plugin_id)
{
$roles = array('manage_options', 'shop_manager');
$roles = apply_filters('wt_'.$plugin_id.'_alter_role_access_basic', $roles); //dynamic filter based on plugin id to alter roles
$roles = (!is_array($roles) ? array() : $roles);
$is_allowed = false;
foreach($roles as $role) //loop through roles
{
if(current_user_can($role))
{
$is_allowed = true;
break;
}
}
return $is_allowed;
}
}
}
\ No newline at end of file
<?php
/**
* Fired during plugin activation
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
*/
/**
* Fired during plugin activation.
*
* This class defines all code necessary to run during the plugin's activation.
*
* @since 1.0.0
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Activator_User')){
class Wt_Import_Export_For_Woo_Basic_Activator_User {
/**
* Short Description. (use period)
*
* Long Description.
*
* @since 1.0.0
*/
public static function activate()
{
global $wpdb;
delete_option('wt_u_iew_is_active'); /* remove if exists */
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
if(is_multisite())
{
// Get all blogs in the network and activate plugin on each one
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
foreach($blog_ids as $blog_id )
{
switch_to_blog( $blog_id );
self::install_tables();
restore_current_blog();
}
}
else
{
self::install_tables();
}
add_option('wt_u_iew_is_active', 1);
}
public static function install_tables()
{
global $wpdb;
$charset_collate = '';
if ( $wpdb->has_cap( 'collation' ) ) {
$charset_collate = $wpdb->get_charset_collate();
}
//install necessary tables
//creating table for saving template data================
$search_query = "SHOW TABLES LIKE %s";
$tb='wt_iew_mapping_template';
$like = '%' . $wpdb->prefix.$tb.'%';
$table_name = $wpdb->prefix.$tb;
if(!$wpdb->get_results($wpdb->prepare($search_query, $like), ARRAY_N))
{
$sql_settings = "CREATE TABLE IF NOT EXISTS `$table_name` (
`id` INT NOT NULL AUTO_INCREMENT,
`template_type` VARCHAR(255) NOT NULL,
`item_type` VARCHAR(255) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`data` LONGTEXT NOT NULL,
PRIMARY KEY (`id`)
) $charset_collate;";
dbDelta($sql_settings);
}
//creating table for saving template data================
//creating table for saving export/import history================
$search_query = "SHOW TABLES LIKE %s";
$tb='wt_iew_action_history';
$like = '%'.$wpdb->prefix.$tb.'%';
$table_name = $wpdb->prefix.$tb;
if(!$wpdb->get_results($wpdb->prepare($search_query, $like), ARRAY_N))
{
$sql_settings = "CREATE TABLE IF NOT EXISTS `$table_name` (
`id` INT NOT NULL AUTO_INCREMENT,
`template_type` VARCHAR(255) NOT NULL,
`item_type` VARCHAR(255) NOT NULL,
`file_name` VARCHAR(255) NOT NULL,
`created_at` INT NOT NULL DEFAULT '0',
`status` INT NOT NULL DEFAULT '0',
`status_text` VARCHAR(255) NOT NULL,
`offset` INT NOT NULL DEFAULT '0',
`total` INT NOT NULL DEFAULT '0',
`data` LONGTEXT NOT NULL,
PRIMARY KEY (`id`)
) $charset_collate;";
dbDelta($sql_settings);
}
//creating table for saving export/import history================
}
}
}
<?php
/**
* Fired during plugin deactivation
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
*/
/**
* Fired during plugin deactivation.
*
* This class defines all code necessary to run during the plugin's deactivation.
*
* @since 1.0.0
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Basic_Deactivator_User')){
class Wt_Import_Export_For_Woo_Basic_Deactivator_User {
/**
* Short Description. (use period)
*
* Long Description.
*
* @since 1.0.0
*/
public static function deactivate() {
delete_option('wt_u_iew_is_active');
}
}
}
<?php
/**
* Define the internationalization functionality
*
* Loads and defines the internationalization files for this plugin
* so that it is ready for translation.
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
*/
/**
* Define the internationalization functionality.
*
* Loads and defines the internationalization files for this plugin
* so that it is ready for translation.
*
* @since 1.0.0
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_i18n_Basic')){
class Wt_Import_Export_For_Woo_i18n_Basic {
/**
* Load the plugin text domain for translation.
*
* @since 1.0.0
*/
public function load_plugin_textdomain() {
load_plugin_textdomain(
'wt-import-export-for-woo',
false,
dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/'
);
}
}
}
<?php
/**
* Register all actions and filters for the plugin
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
*/
/**
* Register all actions and filters for the plugin.
*
* Maintain a list of all hooks that are registered throughout
* the plugin, and register them with the WordPress API. Call the
* run function to execute the list of actions and filters.
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Loader_Basic')){
class Wt_Import_Export_For_Woo_Loader_Basic {
/**
* The array of actions registered with WordPress.
*
* @since 1.0.0
* @access protected
* @var array $actions The actions registered with WordPress to fire when the plugin loads.
*/
protected $actions;
/**
* The array of filters registered with WordPress.
*
* @since 1.0.0
* @access protected
* @var array $filters The filters registered with WordPress to fire when the plugin loads.
*/
protected $filters;
/**
* Initialize the collections used to maintain the actions and filters.
*
* @since 1.0.0
*/
public function __construct() {
$this->actions = array();
$this->filters = array();
}
/**
* Add a new action to the collection to be registered with WordPress.
*
* @since 1.0.0
* @param string $hook The name of the WordPress action that is being registered.
* @param object $component A reference to the instance of the object on which the action is defined.
* @param string $callback The name of the function definition on the $component.
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
*/
public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
$this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
}
/**
* Add a new filter to the collection to be registered with WordPress.
*
* @since 1.0.0
* @param string $hook The name of the WordPress filter that is being registered.
* @param object $component A reference to the instance of the object on which the filter is defined.
* @param string $callback The name of the function definition on the $component.
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1
*/
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
$this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
}
/**
* A utility function that is used to register the actions and hooks into a single
* collection.
*
* @since 1.0.0
* @access private
* @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
* @param string $hook The name of the WordPress filter that is being registered.
* @param object $component A reference to the instance of the object on which the filter is defined.
* @param string $callback The name of the function definition on the $component.
* @param int $priority The priority at which the function should be fired.
* @param int $accepted_args The number of arguments that should be passed to the $callback.
* @return array The collection of actions and filters registered with WordPress.
*/
private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
$hooks[] = array(
'hook' => $hook,
'component' => $component,
'callback' => $callback,
'priority' => $priority,
'accepted_args' => $accepted_args
);
return $hooks;
}
/**
* Register the filters and actions with WordPress.
*
* @since 1.0.0
*/
public function run() {
foreach ( $this->filters as $hook ) {
add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
}
foreach ( $this->actions as $hook ) {
add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
}
}
}
}
<?php
if(!class_exists('Wt_Import_Export_For_Woo_RemoteAdapter_Basic')){
abstract class Wt_Import_Export_For_Woo_RemoteAdapter_Basic
{
public $id='';
public $title='';
public function __construct()
{
}
abstract public function upload($local_file, $remote_file_name, $form_data, $out);
abstract public function delete();
}
}
\ No newline at end of file
<?php
/**
* The file that defines the core plugin class
*
* A class definition that includes attributes and functions used across both the
* public-facing side of the site and the admin area.
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
*/
/**
* The core plugin class.
*
* This is used to define internationalization, admin-specific hooks, and
* public-facing site hooks.
*
* Also maintains the unique identifier of this plugin as well as the current
* version of the plugin.
*
* @since 1.0.0
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/includes
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Basic')){
class Wt_Import_Export_For_Woo_Basic {
/**
* The loader that's responsible for maintaining and registering all hooks that power
* the plugin.
*
* @since 1.0.0
* @access protected
* @var Wt_Import_Export_For_Woo_Loader $loader Maintains and registers all hooks for the plugin.
*/
protected $loader;
/**
* The unique identifier of this plugin.
*
* @since 1.0.0
* @access protected
* @var string $plugin_name The string used to uniquely identify this plugin.
*/
protected $plugin_name;
/**
* The current version of the plugin.
*
* @since 1.0.0
* @access protected
* @var string $version The current version of the plugin.
*/
protected $version;
public static $loaded_modules=array();
public static $template_tb='wt_iew_mapping_template';
public static $history_tb='wt_iew_action_history';
public static $ftp_tb='wt_iew_ftp';
public static $cron_tb='wt_iew_cron';
public $plugin_admin;
public $plugin_public;
/**
* Define the core functionality of the plugin.
*
* Set the plugin name and the plugin version that can be used throughout the plugin.
* Load the dependencies, define the locale, and set the hooks for the admin area and
* the public-facing side of the site.
*
* @since 1.0.0
*/
public function __construct() {
if ( defined( 'WT_U_IEW_VERSION' ) ) {
$this->version = WT_U_IEW_VERSION;
} else {
$this->version = '2.3.9';
}
$this->plugin_name = 'wt-import-export-for-woo-basic';
$this->load_dependencies();
$this->set_locale();
$this->define_admin_hooks();
$this->define_public_hooks();
}
/**
* Load the required dependencies for this plugin.
*
* Include the following files that make up the plugin:
*
* - Wt_Import_Export_For_Woo_Loader. Orchestrates the hooks of the plugin.
* - Wt_Import_Export_For_Woo_i18n. Defines internationalization functionality.
* - Wt_Import_Export_For_Woo_Admin. Defines all hooks for the admin area.
* - Wt_Import_Export_For_Woo_Public. Defines all hooks for the public side of the site.
*
* Create an instance of the loader which will be used to register the hooks
* with WordPress.
*
* @since 1.0.0
* @access private
*/
private function load_dependencies() {
/**
* The class responsible for orchestrating the actions and filters of the
* core plugin.
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wt-import-export-for-woo-loader.php';
/**
* The class responsible for defining internationalization functionality
* of the plugin.
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wt-import-export-for-woo-i18n.php';
/**
* The class responsible for defining remote file functionality
* of the plugin.
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wt-import-export-for-woo-remoteadapter.php';
/**
* The class responsible for defining all actions that occur in the admin area.
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wt-import-export-for-woo-admin.php';
/**
* The class responsible for defining all actions that occur in the public-facing
* side of the site.
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wt-import-export-for-woo-public.php';
/**
* Class includes input sanitization and role checking
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'helpers/class-wt-security-helper.php';
/**
* Class includes common helper functions
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'helpers/class-wt-common-helper.php';
/**
* Class includes helper functions for import and export modules
*/
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'helpers/class-wt-import-export-helper.php';
/**
* Class includes log writing functions
*/
require_once WT_U_IEW_PLUGIN_PATH . 'admin/classes/class-log.php';
require_once WT_U_IEW_PLUGIN_PATH . 'admin/classes/class-logwriter.php';
$this->loader = new Wt_Import_Export_For_Woo_Loader_Basic();
$this->plugin_admin = new Wt_Import_Export_For_Woo_Admin_Basic( $this->get_plugin_name(), $this->get_version() );
$this->plugin_public = new Wt_Import_Export_For_Woo_Public_Basic( $this->get_plugin_name(), $this->get_version() );
}
/**
* Define the locale for this plugin for internationalization.
*
* Uses the Wt_Import_Export_For_Woo_i18n class in order to set the domain and to register the hook
* with WordPress.
*
* @since 1.0.0
* @access private
*/
private function set_locale() {
$plugin_i18n = new Wt_Import_Export_For_Woo_i18n_Basic();
$this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
}
/**
* Register all of the hooks related to the admin area functionality
* of the plugin.
*
* @since 1.0.0
* @access private
*/
private function define_admin_hooks()
{
//ajax hook for saving settings, Includes plugin main settings and settings from module
$this->loader->add_action('wp_ajax_wt_iew_save_settings_basic',$this->plugin_admin,'save_settings');
$this->loader->add_action('wp_ajax_wt_iew_delete_template',$this->plugin_admin,'delete_template');
$this->loader->add_action('wp_ajax_wt_iew_ajax_user_search',$this->plugin_admin,'ajax_user_search');
/* Loading admin modules */
$this->plugin_admin->admin_modules();
/* Plugin page links */
// $this->loader->add_filter('plugin_action_links_'.WT_U_IEW_PLUGIN_BASENAME, $this->plugin_admin, 'plugin_action_links');
/* Admin menus */
$this->loader->add_action('admin_menu',$this->plugin_admin, 'admin_menu',11);
/* Enqueue CSS and JS */
$this->loader->add_action( 'admin_enqueue_scripts', $this->plugin_admin, 'enqueue_styles' );
$this->loader->add_action( 'admin_enqueue_scripts', $this->plugin_admin, 'enqueue_scripts' );
$this->loader->add_action( 'export_filters', $this->plugin_admin, 'tools_wtexport_text' );
}
/**
* Register all of the hooks related to the public-facing functionality
* of the plugin.
*
* @since 1.0.0
* @access private
*/
private function define_public_hooks()
{
$this->loader->add_action( 'wp_enqueue_scripts', $this->plugin_public, 'enqueue_styles' );
$this->loader->add_action( 'wp_enqueue_scripts', $this->plugin_public, 'enqueue_scripts' );
}
/**
* Run the loader to execute all of the hooks with WordPress.
*
* @since 1.0.0
*/
public function run() {
$this->loader->run();
}
/**
* The name of the plugin used to uniquely identify it within the context of
* WordPress and to define internationalization functionality.
*
* @since 1.0.0
* @return string The name of the plugin.
*/
public function get_plugin_name() {
return $this->plugin_name;
}
/**
* The reference to the class that orchestrates the hooks with the plugin.
*
* @since 1.0.0
* @return Wt_Import_Export_For_Woo_Loader Orchestrates the hooks of the plugin.
*/
public function get_loader() {
return $this->loader;
}
/**
* Retrieve the version number of the plugin.
*
* @since 1.0.0
* @return string The version number of the plugin.
*/
public function get_version() {
return $this->version;
}
public static function get_module_id($module_base)
{
return WT_IEW_PLUGIN_ID_BASIC.'_'.$module_base;
}
/**
* Some modules are not start by default. So need to initialize via code OR get object of already started modules
*
* @since 1.0.0
*/
public static function load_modules($module)
{
if(Wt_Import_Export_For_Woo_Admin_Basic::module_exists($module))
{
if(!isset(self::$loaded_modules[$module]))
{
$module_class='Wt_Import_Export_For_Woo_Basic_'.ucfirst($module);
self::$loaded_modules[$module]=new $module_class;
}
return self::$loaded_modules[$module];
}
else
{
return null;
}
}
/**
* Generate tab head for settings page.
* @since 1.0.0
*/
public static function generate_settings_tabhead($title_arr, $type="plugin")
{
$out_arr=apply_filters("wt_iew_".$type."_settings_tabhead_basic",$title_arr);
foreach($out_arr as $k=>$v)
{
if(is_array($v))
{
$v=(isset($v[2]) ? $v[2] : '').$v[0].' '.(isset($v[1]) ? $v[1] : '');
}
?>
<a class="nav-tab" href="#<?php echo $k;?>"><?php echo $v; ?></a>
<?php
}
}
/**
* Get remote file adapters. Eg: FTP, Gdrive, OneDrive
* @param string $action action to be executed, If the current adapter is not suitable for a specific action then skip it
* @param string $adapter optional specify an adapter name to retrive the specific one
* @return array|single array of remote adapters or single adapter if the adapter name specified
*/
public static function get_remote_adapters($action, $adapter='')
{
$adapters=array();
$adapters = apply_filters("wt_iew_remote_adapters_basic", $adapters, $action, $adapter);
if($adapter != "")
{
return (isset($adapters[ $adapter ]) ? $adapters[ $adapter ] : null);
}
return $adapters;
}
}
}
\ No newline at end of file
<?php
if ( !defined( 'ABSPATH' ) ) {
exit;
}
if ( !class_exists( 'wt_inform_server_secure' ) ) {
class wt_inform_server_secure {
/**
* config options
*/
public $plugin = "";
public $banner_message = "";
public $sholud_show_server_info = '';
public $ajax_action_name = '';
public $plugin_title = 'User Import Export';
public function __construct( $plugin ) {
$this->plugin = $plugin;
$this->sholud_show_server_info = 'wt_' . $this->plugin . '_show_server_info';
if ( !$this->wt_get_display_server_info() ) {
if ( Wt_Import_Export_For_Woo_Basic_Common_Helper::wt_is_screen_allowed() ) {
$this->banner_css_class = 'wt_' . $this->plugin . '_show_server_info';
add_action( 'admin_notices', array( $this, 'show_banner' ) );
add_action( 'admin_print_footer_scripts', array( $this, 'add_banner_scripts' ) ); /* add banner scripts */
}
}
$this->ajax_action_name = $this->plugin . '_process_show_server_info_action';
add_action( 'wp_ajax_' . $this->ajax_action_name, array( $this, 'process_server_info__action' ) ); /* process banner user action */
}
/**
* Prints the banner
*/
public function show_banner() {
?>
<div class="<?php echo $this->banner_css_class; ?> notice-warning notice is-dismissible">
<p>
<?php echo $this->banner_message; ?>
</p>
<p>
<?php if ( (strpos( $_SERVER[ 'SERVER_SOFTWARE' ], 'nginx' ) !== false ) ): ?>
<h4><?php _e( 'Incase of Nginx server, copy the below code into your server config file to restrict public access to the wp-content folder or contact the server team to assist accordingly.' ); ?></h4>
<code>
#Deny access to wp-content folders<br/>
location ~* ^/(wp-content)/(.*?)\.(zip|gz|tar|csv|bzip2|7z)\$ { deny all; }<br/>
location ~ ^/wp-content/webtoffee_import { deny all; }
</code>
<?php endif; ?>
</p>
</div>
<?php
}
/**
* Ajax hook to process user action on the banner
*/
public function process_server_info__action() {
check_ajax_referer( $this->plugin );
if ( isset( $_POST[ 'wt_action_type' ] ) && 'dismiss' == $_POST[ 'wt_action_type' ] ) {
$this->wt_set_display_server_info( 1 );
}
exit();
}
/**
* Add banner JS to admin footer
*/
public function add_banner_scripts() {
$ajax_url = admin_url( 'admin-ajax.php' );
$nonce = wp_create_nonce( $this->plugin );
?>
<script type="text/javascript">
( function ( $ ) {
"use strict";
/* prepare data object */
var data_obj = {
_wpnonce: '<?php echo $nonce; ?>',
action: '<?php echo $this->ajax_action_name; ?>',
wt_action_type: 'dismiss',
};
$( document ).on( 'click', '.<?php echo $this->banner_css_class; ?> .notice-dismiss', function ( e )
{
e.preventDefault();
$.ajax( {
url: '<?php echo $ajax_url; ?>',
data: data_obj,
type: 'POST',
} );
} );
} )( jQuery )
</script>
<?php
}
public function wt_get_display_server_info() {
if ( (strpos( $_SERVER[ 'SERVER_SOFTWARE' ], 'Apache' ) !== false) || (strpos( $_SERVER[ 'SERVER_SOFTWARE' ], 'LiteSpeed' ) !== false) ) {
return true;
} else {
return (bool) get_option( $this->sholud_show_server_info );
}
}
public function wt_set_display_server_info( $display = false ) {
update_option( $this->sholud_show_server_info, $display ? 1 : 0 );
}
}
}
<?php
if (!class_exists('WT_UserImport_Uninstall_Feedback')) :
/**
* Class for catch Feedback on uninstall
*/
class WT_UserImport_Uninstall_Feedback {
public function __construct() {
add_action('admin_footer', array($this, 'deactivate_scripts'));
add_action('wp_ajax_userimport_submit_uninstall_reason', array($this, "send_uninstall_reason"));
}
private function get_uninstall_reasons() {
$reasons = array(
array(
'id' => 'used-it',
'text' => __('Used it successfully. Don\'t need anymore.', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'reviewhtml',
'placeholder' => __('Have used it successfully and aint in need of it anymore', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'temporary-deactivation',
'text' => __('Temporary deactivation', 'users-customers-import-export-for-wp-woocommerce'),
'type' => '',
'placeholder' => __('Temporary de-activation. Will re-activate later.', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'could-not-understand',
'text' => __('I couldn\'t understand how to make it work', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'supportlink',
'placeholder' => __('Would you like us to assist you?', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'found-better-plugin',
'text' => __('I found a better plugin', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'text',
'placeholder' => __('Which plugin?', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'not-have-that-feature',
'text' => __('The plugin is great, but I need specific feature that you don\'t support', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'textarea',
'placeholder' => __('Could you tell us more about that feature?', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'is-not-working',
'text' => __('The plugin is not working', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'textarea',
'placeholder' => __('Could you tell us a bit more whats not working?', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'looking-for-other',
'text' => __('It\'s not what I was looking for', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'textarea',
'placeholder' => 'Could you tell us a bit more?'
),
array(
'id' => 'did-not-work-as-expected',
'text' => __('The plugin didn\'t work as expected', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'textarea',
'placeholder' => __('What did you expect?', 'users-customers-import-export-for-wp-woocommerce')
),
array(
'id' => 'other',
'text' => __('Other', 'users-customers-import-export-for-wp-woocommerce'),
'type' => 'textarea',
'placeholder' => __('Could you tell us a bit more?', 'users-customers-import-export-for-wp-woocommerce')
),
);
return $reasons;
}
public function deactivate_scripts() {
global $pagenow;
if ('plugins.php' != $pagenow) {
return;
}
$reasons = $this->get_uninstall_reasons();
?>
<div class="userimport-modal" id="userimport-userimport-modal">
<div class="userimport-modal-wrap">
<div class="userimport-modal-header">
<h3><?php _e('If you have a moment, please let us know why you are deactivating:', 'users-customers-import-export-for-wp-woocommerce'); ?></h3>
</div>
<div class="userimport-modal-body">
<ul class="reasons">
<?php foreach ($reasons as $reason) { ?>
<li data-type="<?php echo esc_attr($reason['type']); ?>" data-placeholder="<?php echo esc_attr($reason['placeholder']); ?>">
<label><input type="radio" name="selected-reason" value="<?php echo $reason['id']; ?>"> <?php echo $reason['text']; ?></label>
</li>
<?php } ?>
</ul>
<div class="wt-uninstall-feedback-privacy-policy">
<?php _e('We do not collect any personal data when you submit this form. It\'s your feedback that we value.', 'users-customers-import-export-for-wp-woocommerce'); ?>
<a href="https://www.webtoffee.com/privacy-policy/" target="_blank"><?php _e('Privacy Policy', 'users-customers-import-export-for-wp-woocommerce'); ?></a>
</div>
</div>
<div class="userimport-modal-footer">
<a href="#" class="dont-bother-me"><?php _e('I rather wouldn\'t say', 'users-customers-import-export-for-wp-woocommerce'); ?></a>
<a class="button-primary" href="https://wordpress.org/support/plugin/users-customers-import-export-for-wp-woocommerce/" target="_blank">
<span class="dashicons dashicons-external" style="margin-top:3px;"></span>
<?php _e('Get support', 'users-customers-import-export-for-wp-woocommerce'); ?></a>
<button class="button-primary userimport-model-submit"><?php _e('Submit & Deactivate', 'users-customers-import-export-for-wp-woocommerce'); ?></button>
<button class="button-secondary userimport-model-cancel"><?php _e('Cancel', 'users-customers-import-export-for-wp-woocommerce'); ?></button>
</div>
</div>
</div>
<style type="text/css">
.userimport-modal {
position: fixed;
z-index: 99999;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0,0,0,0.5);
display: none;
}
.userimport-modal.modal-active {display: block;}
.userimport-modal-wrap {
width: 50%;
position: relative;
margin: 10% auto;
background: #fff;
}
.userimport-modal-header {
border-bottom: 1px solid #eee;
padding: 8px 20px;
}
.userimport-modal-header h3 {
line-height: 150%;
margin: 0;
}
.userimport-modal-body {padding: 5px 20px 20px 20px;}
.userimport-modal-body .input-text,.userimport-modal-body textarea {width:75%;}
.userimport-modal-body .reason-input {
margin-top: 5px;
margin-left: 20px;
}
.userimport-modal-footer {
border-top: 1px solid #eee;
padding: 12px 20px;
text-align: right;
}
.reviewlink, .supportlink{
padding:10px 0px 0px 35px !important;
font-size: 14px;
}
.review-and-deactivate{
padding:5px;
}
.wt-uninstall-feedback-privacy-policy {
text-align: left;
font-size: 12px;
color: #aaa;
line-height: 14px;
margin-top: 20px;
font-style: italic;
}
.wt-uninstall-feedback-privacy-policy a {
font-size: 11px;
color: #4b9cc3;
text-decoration-color: #99c3d7;
}
</style>
<script type="text/javascript">
(function ($) {
$(function () {
var modal = $('#userimport-userimport-modal');
var deactivateLink = '';
$('#the-list').on('click', 'a.userimport-deactivate-link', function (e) {
e.preventDefault();
modal.addClass('modal-active');
deactivateLink = $(this).attr('href');
modal.find('a.dont-bother-me').attr('href', deactivateLink).css('float', 'left');
});
modal.on('click', 'a.review-and-deactivate', function (e) {
e.preventDefault();
window.open("https://wordpress.org/support/plugin/users-customers-import-export-for-wp-woocommerce/reviews/?filter=5#new-post");
window.location.href = deactivateLink;
});
modal.on('click', 'a.doc-and-support-doc', function (e) {
e.preventDefault();
window.open("https://www.webtoffee.com/user-import-export-plugin-wordpress-user-guide/");
});
modal.on('click', 'a.doc-and-support-forum', function (e) {
e.preventDefault();
window.open("https://www.webtoffee.com/contact/");
});
modal.on('click', 'button.userimport-model-cancel', function (e) {
e.preventDefault();
modal.removeClass('modal-active');
});
modal.on('click', 'input[type="radio"]', function () {
var parent = $(this).parents('li:first');
modal.find('.reason-input').remove();
var inputType = parent.data('type'),
inputPlaceholder = parent.data('placeholder');
var reasonInputHtml = '';
if ('reviewhtml' === inputType) {
if($('.reviewlink').length == 0){
reasonInputHtml = '<div class="reviewlink"><a href="#" target="_blank" class="review-and-deactivate"><?php _e('Deactivate and leave a review', 'users-customers-import-export-for-wp-woocommerce'); ?> <span class="wt-userimport-rating-link"> &#9733;&#9733;&#9733;&#9733;&#9733; </span></a></div>';
}
}else if('supportlink' === inputType){
if($('.supportlink').length == 0){
reasonInputHtml = '<div class="supportlink"><?php _e('Please go through the', 'users-customers-import-export-for-wp-woocommerce'); ?><a href="#" target="_blank" class="doc-and-support-doc"> <?php _e('documentation', 'users-customers-import-export-for-wp-woocommerce'); ?></a> <?php _e('or contact us via', 'users-customers-import-export-for-wp-woocommerce'); ?><a href="#" target="_blank" class="doc-and-support-forum"> <?php _e('support', 'users-customers-import-export-for-wp-woocommerce'); ?></a></div>';
}
}else {
if($('.reviewlink').length){
$('.reviewlink'). remove();
}
if($('.supportlink').length){
$('.supportlink'). remove();
}
reasonInputHtml = '<div class="reason-input">' + (('text' === inputType) ? '<input type="text" class="input-text" size="40" />' : '<textarea rows="5" cols="45"></textarea>') + '</div>';
}
if (inputType !== '') {
parent.append($(reasonInputHtml));
parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
}
});
modal.on('click', 'button.userimport-model-submit', function (e) {
e.preventDefault();
var button = $(this);
if (button.hasClass('disabled')) {
return;
}
var $radio = $('input[type="radio"]:checked', modal);
var $selected_reason = $radio.parents('li:first'),
$input = $selected_reason.find('textarea, input[type="text"]');
$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'userimport_submit_uninstall_reason',
reason_id: (0 === $radio.length) ? 'none' : $radio.val(),
reason_info: (0 !== $input.length) ? $input.val().trim() : ''
},
beforeSend: function () {
button.addClass('disabled');
button.text('Processing...');
},
complete: function () {
window.location.href = deactivateLink;
}
});
});
});
}(jQuery));
</script>
<?php
}
public function send_uninstall_reason() {
global $wpdb;
if (!isset($_POST['reason_id'])) {
wp_send_json_error();
}
$data = array(
'reason_id' => sanitize_text_field($_POST['reason_id']),
'plugin' => "userimport",
'auth' => 'userimport_uninstall_1234#',
'date' => gmdate("M d, Y h:i:s A"),
'url' => '',
'user_email' => '',
'reason_info' => isset($_REQUEST['reason_info']) ? trim(stripslashes($_REQUEST['reason_info'])) : '',
'software' => $_SERVER['SERVER_SOFTWARE'],
'php_version' => phpversion(),
'mysql_version' => $wpdb->db_version(),
'wp_version' => get_bloginfo('version'),
'wc_version' => (!defined('WC_VERSION')) ? '' : WC_VERSION,
'locale' => get_locale(),
'multisite' => is_multisite() ? 'Yes' : 'No',
'userimport_version' => WT_U_IEW_VERSION
);
// Write an action/hook here in webtoffe to recieve the data
$resp = wp_remote_post('https://feedback.webtoffee.com/wp-json/userimport/v1/uninstall', array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => false,
'body' => $data,
'cookies' => array()
)
);
wp_send_json_success();
}
}
new WT_UserImport_Uninstall_Feedback();
endif;
\ No newline at end of file
<?php // Silence is golden
\ No newline at end of file
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: WordPress Users & WooCommerce Customers Import "
"Export(BASIC)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-19 21:42+0530\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: \n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && "
"n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
"X-Loco-Version: 2.5.0; wp-5.6.1\n"
"X-Domain: users-customers-import-export-for-wp-woocommerce\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-SearchPath-0: .\n"
#: admin/class-wt-import-export-for-woo-admin.php:120
msgid "Settings updated."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:121
msgid "All fields are mandatory"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:122
msgid "Unable to update Settings."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:123
msgid "Unable to delete template"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:124
msgid "Deleting template..."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:125
msgid "Value is empty."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:126
#, php-format
msgid ""
"An unknown error has occurred! Refer to our %stroubleshooting guide%s for "
"assistance."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:127
msgid "Success."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:128
msgid "Loading..."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:129
msgid "No results found."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:130
#: admin/modules/history/history.php:517
msgid "Are you sure?"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:131
msgid "Use expression as value."
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:132
#: admin/views/_save_template_popup.php:29
#: includes/class-wt-userimport-uninstall-feedback.php:102
msgid "Cancel"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:137
#: admin/class-wt-import-export-for-woo-admin.php:142
msgid "Order, Coupon, Subscription Export Import for WooCommerce"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:147
#: admin/class-wt-import-export-for-woo-admin.php:152
#: admin/class-wt-import-export-for-woo-admin.php:157
#: admin/class-wt-import-export-for-woo-admin.php:162
msgid "Product Import Export Plugin For WooCommerce"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:167 admin/views/market.php:13
msgid "WordPress Users & WooCommerce Customers Import Export"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:188
#: admin/class-wt-import-export-for-woo-admin.php:189
#: admin/class-wt-import-export-for-woo-admin.php:210
#: admin/class-wt-import-export-for-woo-admin.php:211
msgid "General Settings"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:258
#: admin/class-wt-import-export-for-woo-admin.php:299
#: admin/modules/export/export.php:212 admin/modules/export/export.php:478
#: admin/modules/history/history.php:97 admin/modules/import/import.php:1116
msgid "Error"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:285
msgid "Settings Updated"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:312
msgid "Template deleted successfully"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:440
msgid "Settings"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:441
#: admin/views/admin-settings-help.php:17 admin/views/admin-settings-help.php:20
#: users-customers-import-export-for-wp-woocommerce.php:130
msgid "Documentation"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:442
#: users-customers-import-export-for-wp-woocommerce.php:131
msgid "Support"
msgstr ""
#: admin/class-wt-import-export-for-woo-admin.php:490
#, php-format
msgid "%1$s (#%2$s - %3$s)"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:119
#: admin/modules/export/views/_export_mapping_page.php:27
#: admin/modules/import/classes/class-import-ajax.php:234
#: admin/modules/import/views/_import_mapping_page.php:96
msgid "Drag to rearrange the columns"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:264
#: admin/modules/import/classes/class-import-ajax.php:486
msgid "Please enter a different name"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:267
#: admin/modules/import/classes/class-import-ajax.php:489
msgid "Template with same name already exists"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:303
#: admin/modules/import/classes/class-import-ajax.php:525
msgid "Template updated successfully"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:320
#: admin/modules/import/classes/class-import-ajax.php:542
msgid "Template saved successfully"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:619
#: admin/modules/import/classes/class-import-ajax.php:894
msgid "Back"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:632
#: admin/modules/export/export.php:365
#: admin/modules/import/classes/class-import-ajax.php:907
#: admin/modules/import/import.php:397
msgid "Step"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:639
#: admin/modules/import/classes/class-import-ajax.php:914
msgid "Or"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:658
#: admin/modules/export/classes/class-export-ajax.php:676
#: admin/modules/import/classes/class-import-ajax.php:933
#: admin/modules/import/classes/class-import-ajax.php:951
msgid "Save template"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:662
#: admin/modules/import/classes/class-import-ajax.php:937
#: admin/views/_save_template_popup.php:13
msgid "Save"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:666
#: admin/modules/import/classes/class-import-ajax.php:941
msgid "Save As"
msgstr ""
#: admin/modules/export/classes/class-export-ajax.php:688
#: admin/modules/export/export.php:145 admin/modules/export/export.php:156
#: admin/modules/export/export.php:157
#: admin/modules/export/views/_export_header.php:8
#: admin/modules/export/views/main.php:29 admin/modules/history/history.php:41
#: users-customers-import-export-for-wp-woocommerce.php:128
msgid "Export"
msgstr ""
#: admin/modules/export/export.php:42 admin/modules/import/import.php:48
msgid "CSV"
msgstr ""
#: admin/modules/export/export.php:50 admin/modules/import/import.php:59
msgid "Select a post type"
msgstr ""
#: admin/modules/export/export.php:51
msgid ""
"Export and download the data for the respective post type into a CSV file. As "
"per the selected post type, we can use this exported CSV file to import data "
"to your site."
msgstr ""
#: admin/modules/export/export.php:54
#: admin/modules/export/views/_export_method_export_page.php:19
msgid "Select an export method"
msgstr ""
#: admin/modules/export/export.php:55
msgid ""
"Choose from the options below to continue with your export: quick export from "
"DB, based on a pre-saved template or a new export with advanced options."
msgstr ""
#: admin/modules/export/export.php:58
msgid "Filter data"
msgstr ""
#: admin/modules/export/export.php:59
msgid "Filter data that needs to be exported as per the below criteria."
msgstr ""
#: admin/modules/export/export.php:62
msgid "Map and reorder export columns"
msgstr ""
#: admin/modules/export/export.php:63
msgid ""
"The default export column names can be edited from the screen below, if "
"required. If you have chosen a pre-saved template you can see the preferred "
"names and choices that were last saved. You may also drag the columns "
"accordingly to reorder them within the output file."
msgstr ""
#: admin/modules/export/export.php:66
msgid "Advanced options/Batch export"
msgstr ""
#: admin/modules/export/export.php:67
msgid ""
"You can save the template file for future exports or proceed with the export."
msgstr ""
#: admin/modules/export/export.php:83
msgid "Quick export"
msgstr ""
#: admin/modules/export/export.php:83
msgid "Exports all the basic fields."
msgstr ""
#: admin/modules/export/export.php:84 admin/modules/import/import.php:78
msgid "Pre-saved template"
msgstr ""
#: admin/modules/export/export.php:84
msgid ""
"Exports data as per the specifications(filters, selective column,mapping etc) "
"of the template saved during the previous Advanced exports. To change the "
"settings, move to filter data."
msgstr ""
#: admin/modules/export/export.php:85
msgid "Advanced export"
msgstr ""
#: admin/modules/export/export.php:85
msgid ""
"Exports data after a detailed process of filtration, column selection and "
"advanced options. The configured settings can be saved as a template for "
"future exports."
msgstr ""
#: admin/modules/export/export.php:118
msgid "Default Export method"
msgstr ""
#: admin/modules/export/export.php:124
msgid "Select the default method of export."
msgstr ""
#: admin/modules/export/export.php:127
msgid "Default Export batch count"
msgstr ""
#: admin/modules/export/export.php:131
msgid "Provide the default count for the records to be exported in a batch."
msgstr ""
#: admin/modules/export/export.php:146
msgid "WebToffee Import Export (Basic)"
msgstr ""
#: admin/modules/export/export.php:232
msgid "Limit"
msgstr ""
#: admin/modules/export/export.php:237
msgid ""
"The actual number of records you want to export. e.g. A limit of 500 with an "
"offset 10 will export records from 11th to 510th position."
msgstr ""
#: admin/modules/export/export.php:242
msgid "Offset"
msgstr ""
#: admin/modules/export/export.php:245
msgid "0"
msgstr ""
#: admin/modules/export/export.php:246
msgid ""
"Specify the number of records that should be skipped from the beginning. e.g. "
"An offset of 10 skips the first 10 records."
msgstr ""
#: admin/modules/export/export.php:259 admin/modules/import/import.php:182
msgid "Local"
msgstr ""
#: admin/modules/export/export.php:278
msgid "Export in batches of"
msgstr ""
#: admin/modules/export/export.php:283
msgid ""
"The number of records that the server will process for every iteration within "
"the configured timeout interval. If the export fails due to timeout you can "
"lower this number accordingly and try again"
msgstr ""
#: admin/modules/export/export.php:362 admin/modules/import/import.php:394
msgid "Choosed template: "
msgstr ""
#: admin/modules/export/export.php:363
msgid "Please select an export method."
msgstr ""
#: admin/modules/export/export.php:364
#: admin/modules/export/views/_export_method_export_page.php:14
msgid "Please select an export template."
msgstr ""
#: admin/modules/export/export.php:366 admin/modules/import/import.php:398
msgid "Please select an FTP profile."
msgstr ""
#: admin/modules/export/export.php:491 admin/modules/history/history.php:36
#: admin/modules/import/import.php:1069
msgid "Finished"
msgstr ""
#: admin/modules/export/export.php:670
#, php-format
msgid "Uploading to %s"
msgstr ""
#: admin/modules/export/export.php:675 admin/modules/export/export.php:677
msgid "Export file processing completed"
msgstr ""
#: admin/modules/export/export.php:685
msgid "You can manage exports from History section."
msgstr ""
#: admin/modules/export/export.php:688
msgid "Download file"
msgstr ""
#: admin/modules/export/export.php:711
#, php-format
msgid "Exporting...(%d out of %d)"
msgstr ""
#: admin/modules/export/views/_export_mapping_page.php:10
#: admin/modules/import/views/_import_mapping_page.php:79
msgid "Default fields"
msgstr ""
#: admin/modules/export/views/_export_mapping_page.php:11
#: admin/modules/export/views/_export_mapping_page.php:86
#: admin/modules/import/views/_import_mapping_page.php:80
#: admin/modules/import/views/_import_mapping_page.php:271
msgid " columns(s) selected"
msgstr ""
#: admin/modules/export/views/_export_mapping_page.php:21
#: admin/modules/export/views/_export_meta_step_page.php:16
#: admin/modules/import/views/_import_mapping_page.php:90
#: admin/modules/import/views/_import_meta_step_page.php:16
msgid "Column"
msgstr ""
#: admin/modules/export/views/_export_mapping_page.php:22
#: admin/modules/export/views/_export_meta_step_page.php:17
#: admin/modules/import/views/_import_mapping_page.php:91
#: admin/modules/import/views/_import_meta_step_page.php:17
msgid "Column name"
msgstr ""
#: admin/modules/export/views/_export_mapping_page.php:53
#: admin/modules/export/views/_export_meta_step_page.php:49
#: admin/modules/import/views/_import_mapping_page.php:237
#: admin/modules/import/views/_import_meta_step_page.php:36
msgid "No fields found."
msgstr ""
#: admin/modules/export/views/_export_method_export_page.php:10
msgid "Please select an export method"
msgstr ""
#: admin/modules/export/views/_export_method_export_page.php:42
msgid "Include fields from the respective groups"
msgstr ""
#: admin/modules/export/views/_export_method_export_page.php:67
msgid ""
"Enabling any of these ensures that all the fields from the respective groups "
"are included in your export."
msgstr ""
#: admin/modules/export/views/_export_method_export_page.php:73
msgid "Export template"
msgstr ""
#: admin/modules/export/views/_export_method_export_page.php:76
#: admin/modules/import/views/_import_method_import_page.php:38
msgid "Select a template"
msgstr ""
#: admin/modules/export/views/_export_post_type_page.php:9
#: admin/modules/import/views/_import_post_type_page.php:9
msgid "Please select a post type"
msgstr ""
#: admin/modules/export/views/_export_post_type_page.php:13
msgid "Select a post type to export"
msgstr ""
#: admin/modules/export/views/_export_post_type_page.php:16
#: admin/modules/import/views/_import_post_type_page.php:16
msgid "Select post type"
msgstr ""
#: admin/modules/export/views/main.php:31 admin/modules/import/views/main.php:41
msgid "Developed by"
msgstr ""
#: admin/modules/export/views/main.php:41 admin/modules/import/views/main.php:51
msgid "Unable to handle Re-Run request."
msgstr ""
#: admin/modules/history/history.php:35
msgid "Running/Incomplete"
msgstr ""
#: admin/modules/history/history.php:37
msgid "Failed"
msgstr ""
#: admin/modules/history/history.php:42
#: admin/modules/import/classes/class-import-ajax.php:960
#: admin/modules/import/import.php:268 admin/modules/import/import.php:269
#: admin/modules/import/views/_import_header.php:8
#: admin/modules/import/views/main.php:39
#: users-customers-import-export-for-wp-woocommerce.php:129
msgid "Import"
msgstr ""
#: admin/modules/history/history.php:71 admin/modules/history/history.php:72
msgid "History"
msgstr ""
#: admin/modules/history/history.php:80 admin/modules/history/history.php:81
#: admin/modules/history/views/_log_list.php:16
msgid "Import Logs"
msgstr ""
#: admin/modules/history/history.php:167
#, php-format
msgid ""
"Please check the Generate import log is enabled under <a target = \"_blank\" "
"href=\"%s\">settings</a>"
msgstr ""
#: admin/modules/history/history.php:205
msgid "Advanced options"
msgstr ""
#: admin/modules/history/history.php:210
msgid "Auto delete history"
msgstr ""
#: admin/modules/history/history.php:212 admin/modules/import/import.php:123
msgid "Enable"
msgstr ""
#: admin/modules/history/history.php:216
msgid ""
"Enabling this option will delete records from the history section upon "
"reaching the count mentioned in Maximum entries."
msgstr ""
#: admin/modules/history/history.php:225
msgid "Maximum entries"
msgstr ""
#: admin/modules/history/history.php:233
msgid ""
"Indicates the maximum records to retain in history. Limit the number of "
"records with status ‘Finished’. E.g On giving an input of 50, the system will "
"retain(not delete) the latest 50 records with status ‘Finished’. Any other "
"record with a different status will not be retained."
msgstr ""
#: admin/modules/history/history.php:354
#: admin/modules/history/views/_history_list.php:110
msgid "Post type"
msgstr ""
#: admin/modules/history/history.php:361
#: admin/modules/history/views/_history_list.php:109
msgid "Action type"
msgstr ""
#: admin/modules/history/history.php:368
#: admin/modules/history/views/_history_list.php:113
#: admin/modules/history/views/_log_table.php:44
msgid "Status"
msgstr ""
#: admin/modules/history/history.php:388
msgid "Date descending"
msgstr ""
#: admin/modules/history/history.php:389
msgid "Date ascending"
msgstr ""
#: admin/modules/history/history.php:820
msgid " record(s)"
msgstr ""
#: admin/modules/history/views/_history_list.php:7
#: admin/views/admin-settings-marketing.php:128
#: admin/views/admin-settings-marketing.php:436
msgid "Import/Export history"
msgstr ""
#: admin/modules/history/views/_history_list.php:10
msgid ""
"Lists the runs and the status corresponding to every import/export with "
"options to re-run, view detailed log or delete entry."
msgstr ""
#: admin/modules/history/views/_history_list.php:21
msgid "Filter"
msgstr ""
#: admin/modules/history/views/_history_list.php:32
msgid "All"
msgstr ""
#: admin/modules/history/views/_history_list.php:55
#: admin/modules/user/user.php:425
msgid "Sort by"
msgstr ""
#: admin/modules/history/views/_history_list.php:68
msgid "Max record/page"
msgstr ""
#: admin/modules/history/views/_history_list.php:82
#: admin/modules/history/views/_history_list.php:92
msgid "Apply"
msgstr ""
#: admin/modules/history/views/_history_list.php:89
msgid "Bulk Actions"
msgstr ""
#: admin/modules/history/views/_history_list.php:90
#: admin/modules/history/views/_history_list.php:150
#: admin/modules/history/views/_log_list.php:56
#: admin/views/admin-settings-pre-saved-templates.php:60
msgid "Delete"
msgstr ""
#: admin/modules/history/views/_history_list.php:106
msgid "No."
msgstr ""
#: admin/modules/history/views/_history_list.php:108
msgid "Id"
msgstr ""
#: admin/modules/history/views/_history_list.php:111
msgid "Started at"
msgstr ""
#: admin/modules/history/views/_history_list.php:116
#, php-format
msgid "%sSuccess%s - Process completed successfully"
msgstr ""
#: admin/modules/history/views/_history_list.php:117
#, php-format
msgid ""
"%sFailed%s - Failed process triggered due to connection/permission or similar "
"issues(unable to establish FTP/DB connection, write permission issues etc.)"
msgstr ""
#: admin/modules/history/views/_history_list.php:118
#, php-format
msgid ""
"%sRunning/Incomplete%s - Process that are running currently or that may have "
"been terminated unknowingly(e.g, closing a browser tab while in progress etc)"
msgstr ""
#: admin/modules/history/views/_history_list.php:122
#: admin/modules/history/views/_log_list.php:44
msgid "Actions"
msgstr ""
#: admin/modules/history/views/_history_list.php:124
msgid ""
"Re-run will take the user to the respective screen depending on the "
"corresponding action type and the user can initiate the process accordingly."
msgstr ""
#: admin/modules/history/views/_history_list.php:146
msgid "Unknown"
msgstr ""
#: admin/modules/history/views/_history_list.php:164
msgid "Re-Run"
msgstr ""
#: admin/modules/history/views/_history_list.php:177
msgid "View log"
msgstr ""
#: admin/modules/history/views/_history_list.php:185
#: admin/modules/history/views/_log_list.php:58
msgid "Download"
msgstr ""
#: admin/modules/history/views/_history_list.php:201
#: admin/modules/history/views/_log_table.php:127
msgid "No records found."
msgstr ""
#: admin/modules/history/views/_log_list.php:18
msgid ""
"Lists developer logs mostly required for debugging purposes. Options to view "
"detailed logs are available along with delete and download(that can be shared "
"with the support team in case of issues)."
msgstr ""
#: admin/modules/history/views/_log_list.php:43
msgid "File"
msgstr ""
#: admin/modules/history/views/_log_list.php:57
msgid "View"
msgstr ""
#: admin/modules/history/views/_log_list.php:70
msgid "No logs found."
msgstr ""
#: admin/modules/history/views/_log_list.php:72
msgid "Please enable import log under"
msgstr ""
#: admin/modules/history/views/_log_list.php:72
msgid "settings"
msgstr ""
#: admin/modules/history/views/_log_table.php:17
msgid "Item with same ID already exists."
msgstr ""
#: admin/modules/history/views/_log_table.php:23
msgid "Importing item conflicts with an existing post."
msgstr ""
#: admin/modules/history/views/_log_table.php:29
msgid "Invalid product type."
msgstr ""
#: admin/modules/history/views/_log_table.php:43
msgid "Row No."
msgstr ""
#: admin/modules/history/views/_log_table.php:45
msgid "Message"
msgstr ""
#: admin/modules/history/views/_log_table.php:46
#: admin/views/admin-settings-pre-saved-templates.php:45
msgid "Item"
msgstr ""
#: admin/modules/history/views/_log_table.php:68
msgid "Success"
msgstr ""
#: admin/modules/history/views/_log_table.php:68
msgid "Failed/Skipped"
msgstr ""
#: admin/modules/history/views/_log_table.php:105
msgid "Please refer"
msgstr ""
#: admin/modules/history/views/_log_table.php:105
msgid "this article"
msgstr ""
#: admin/modules/history/views/_log_table.php:105
msgid "for troubleshoot."
msgstr ""
#: admin/modules/history/views/_log_table.php:119
msgid "Load more."
msgstr ""
#: admin/modules/history/views/_log_table.php:120
msgid "Loading...."
msgstr ""
#: admin/modules/history/views/settings.php:43
msgid " Details"
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:164
msgid ""
"Unable to upload file. Please check write permission of your `wp-content` "
"folder."
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:168
#, php-format
msgid "File size exceeds the limit. %dMB max"
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:172
#, php-format
msgid "Invalid file type. Only %s are allowed."
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:735
msgid "Product taxonomies"
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:738
msgid "New taxonomy: "
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:744
msgid "Custom Field: "
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:751
msgid "Taxonomy attributes"
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:754
msgid "New attribute: "
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:760
msgid "Attribute data: "
msgstr ""
#: admin/modules/import/classes/class-import-ajax.php:765
msgid "Attribute default value: "
msgstr ""
#: admin/modules/import/import.php:60
msgid "Use a CSV file to import data. As a first step, select the post type."
msgstr ""
#: admin/modules/import/import.php:63
msgid "Select import method"
msgstr ""
#: admin/modules/import/import.php:64
msgid ""
"Choose from the options below to continue with your import: quick import, "
"based on a pre-saved template or a new import with advanced options."
msgstr ""
#: admin/modules/import/import.php:67
msgid "Map import columns"
msgstr ""
#: admin/modules/import/import.php:68
msgid "Map the standard columns with your CSV column names."
msgstr ""
#: admin/modules/import/import.php:71
msgid "Advanced options/Batch import"
msgstr ""
#: admin/modules/import/import.php:72
msgid ""
"Use advanced options from below to decide on the delimiter options, updates to "
"existing products, batch import count or schedule an import. You can also save "
"the template file for future imports."
msgstr ""
#: admin/modules/import/import.php:77
msgid "Quick import"
msgstr ""
#: admin/modules/import/import.php:77
msgid ""
"Use this option primarily if you exported the input file using the same plugin."
msgstr ""
#: admin/modules/import/import.php:78
msgid ""
"Retains the filter parameters and column specifications as per the chosen "
"template and imports data accordingly."
msgstr ""
#: admin/modules/import/import.php:79
msgid "Advanced Import"
msgstr ""
#: admin/modules/import/import.php:79
msgid ""
"Imports data after a detailed process of filtration, column selection and "
"advanced options. The configured settings can be saved as a template for "
"future imports."
msgstr ""
#: admin/modules/import/import.php:112
msgid "Maximum execution time"
msgstr ""
#: admin/modules/import/import.php:117
msgid ""
"The maximum execution time, in seconds(eg:- 300, 600, 1800, 3600). If set to "
"zero, no time limit is imposed. Increasing this will reduce the chance of "
"export/import timeouts."
msgstr ""
#: admin/modules/import/import.php:121
msgid "Generate Import log"
msgstr ""
#: admin/modules/import/import.php:127
msgid "You can view the logs in the <a href="
msgstr ""
#: admin/modules/import/import.php:133
msgid "Default Import method"
msgstr ""
#: admin/modules/import/import.php:139
msgid "Select the default method of import."
msgstr ""
#: admin/modules/import/import.php:142
msgid "Default Import batch count"
msgstr ""
#: admin/modules/import/import.php:146
msgid "Provide the default number of records to be imported in a batch."
msgstr ""
#: admin/modules/import/import.php:162
msgid "Import in batches of"
msgstr ""
#: admin/modules/import/import.php:166
msgid ""
"The number of records that the server will process for every iteration within "
"the configured timeout interval. If the export fails due to timeout you can "
"lower this number accordingly and try again."
msgstr ""
#: admin/modules/import/import.php:199
msgid "Choose file for Import"
msgstr ""
#: admin/modules/import/import.php:215
msgid "Select a file"
msgstr ""
#: admin/modules/import/import.php:237
msgid "Delimiter"
msgstr ""
#: admin/modules/import/import.php:245
msgid ""
"The character used to separate columns in the CSV file. Takes comma (,) by "
"default."
msgstr ""
#: admin/modules/import/import.php:395
msgid "Please select an import method."
msgstr ""
#: admin/modules/import/import.php:396 admin/modules/import/import.php:401
#: admin/modules/import/views/_import_method_import_page.php:9
msgid "Please select an import template."
msgstr ""
#: admin/modules/import/import.php:399
msgid "Please choose import from."
msgstr ""
#: admin/modules/import/import.php:400
msgid "Please choose an import file."
msgstr ""
#: admin/modules/import/import.php:402
msgid "Creating temp file and validating."
msgstr ""
#: admin/modules/import/import.php:403
msgid "Processing input file..."
msgstr ""
#: admin/modules/import/import.php:404
msgid ""
"This column is not present in the import list. Please tick the checkbox to "
"include."
msgstr ""
#: admin/modules/import/import.php:405
msgid "Uploading..."
msgstr ""
#: admin/modules/import/import.php:406
msgid "You are using an outdated browser. Please upgarde your browser."
msgstr ""
#: admin/modules/import/import.php:407
msgid "An error occured."
msgstr ""
#: admin/modules/import/import.php:408
#, php-format
msgid "Invalid file type. Only %s are allowed"
msgstr ""
#: admin/modules/import/import.php:409
msgid "Drop files here or click to upload"
msgstr ""
#: admin/modules/import/import.php:410
#, php-format
msgid "%s Done."
msgstr ""
#: admin/modules/import/import.php:411
msgid "Remove"
msgstr ""
#: admin/modules/import/import.php:517 admin/modules/import/import.php:535
msgid "Unable to create temp file."
msgstr ""
#: admin/modules/import/import.php:539
msgid "Unable to fetch file data."
msgstr ""
#: admin/modules/import/import.php:544
msgid "Unable to create temp directory."
msgstr ""
#: admin/modules/import/import.php:548
msgid "File type not allowed."
msgstr ""
#: admin/modules/import/import.php:552
msgid "File not found."
msgstr ""
#: admin/modules/import/import.php:760
msgid "Temp file missing."
msgstr ""
#: admin/modules/import/import.php:834 admin/modules/import/import.php:1073
#, php-format
msgid "Importing...(%d processed)"
msgstr ""
#: admin/modules/import/import.php:933
msgid "CSV is empty"
msgstr ""
#: admin/modules/import/import.php:1075
msgid "Total success: "
msgstr ""
#: admin/modules/import/import.php:1075
msgid "Total failed: "
msgstr ""
#: admin/modules/import/import.php:1081
msgid "View Details"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:7
msgid "Click to use"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:15
msgid "Set value for column:"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:17
msgid ""
"Select and map any column from the input file or compute values with "
"expressions."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:19
msgid "Expression"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:22
msgid ""
"Append operators like + * / - () & @ or string constants along with the column "
"names to update the values on import."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:23
#, php-format
msgid ""
"Ensure to enclose the expressions in square brackets. E.g. To increase the "
"stock quantity of %sall imported products%s by 5 units, input [{stock}+5] in "
"the stock column."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:31
msgid "Input file columns"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:33
msgid "Type here to search"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:51
msgid "No column found."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:55
msgid "Output"
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:57
msgid ""
"Sample value based on first record from input file. Columns that have no "
"values in the input file may cause syntax errors if used in an expression as "
"above."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:70
msgid ""
"The first row from your input file is considered as a header for mapping "
"columns and hence will NOT BE imported."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:72
msgid ""
"Columns are mapped automatically only if a matching header name is found in "
"the input file."
msgstr ""
#: admin/modules/import/views/_import_mapping_page.php:74
msgid ""
"In the case of empty fields, you can simply click on the respective field and "
"map the corresponding column from your input file."
msgstr ""
#: admin/modules/import/views/_import_method_import_page.php:13
msgid "Import method"
msgstr ""
#: admin/modules/import/views/_import_method_import_page.php:33
msgid ""
"Ensure the import file has the user's email ID for a successful import. Use "
"default column name <b>user_email</b> or map the column accordingly if you are "
"using a custom column name."
msgstr ""
#: admin/modules/import/views/_import_method_import_page.php:35
msgid "Import template"
msgstr ""
#: admin/modules/import/views/_import_post_type_page.php:13
msgid "Select a post type to import"
msgstr ""
#: admin/modules/import/views/main.php:27
msgid "History Details"
msgstr ""
#: admin/modules/user/import/import.php:182
#: admin/modules/user/import/import.php:184
msgid "> skipped: cannot insert user without email."
msgstr ""
#: admin/modules/user/import/import.php:186
#, php-format
msgid "> skipped: Email is not valid. %s"
msgstr ""
#: admin/modules/user/import/import.php:188
msgid "> skipped: Email is not valid."
msgstr ""
#: admin/modules/user/import/import.php:229
msgid "Processing users."
msgstr ""
#: admin/modules/user/import/import.php:240
#: admin/modules/user/import/import.php:242
#: admin/modules/user/import/import.php:268
#, php-format
msgid "> &#8220;%s&#8221;"
msgstr ""
#: admin/modules/user/import/import.php:251
#: admin/modules/user/import/import.php:254
#, php-format
msgid "> Error inserting %s: %s"
msgstr ""
#: admin/modules/user/import/import.php:259
msgid "An error occurred with the customer information provided."
msgstr ""
#: admin/modules/user/import/import.php:270
#, php-format
msgid "> Finished importing user %s"
msgstr ""
#: admin/modules/user/import/import.php:423
msgid "User could not be created without Email."
msgstr ""
#: admin/modules/user/import/import.php:531
msgid "User could not be found with given Email or username."
msgstr ""
#: admin/modules/user/user.php:72
msgid ""
"Use advanced options from below to retain user passwords or not, set batch "
"import count. You can also save the template file for future imports."
msgstr ""
#: admin/modules/user/user.php:165
msgid "User/Customer"
msgstr ""
#: admin/modules/user/user.php:360
msgid "Total number of users to export"
msgstr ""
#: admin/modules/user/user.php:361
msgid ""
"Exports specified number of users. e.g. Entering 500 with a skip count of 10 "
"will export users from 11th to 510th position."
msgstr ""
#: admin/modules/user/user.php:362
msgid "Skip first <i>n</i> users"
msgstr ""
#: admin/modules/user/user.php:363
msgid ""
"Skips specified number of users from the beginning. e.g. Enter 10 to skip "
"first 10 users from export."
msgstr ""
#: admin/modules/user/user.php:367
msgid "User email"
msgstr ""
#: admin/modules/user/user.php:368
msgid "All users"
msgstr ""
#: admin/modules/user/user.php:372
msgid "Input the user name or email to specify the users."
msgstr ""
#: admin/modules/user/user.php:378
msgid "Input the customer name or email to specify the customers."
msgstr ""
#: admin/modules/user/user.php:383
msgid "User role"
msgstr ""
#: admin/modules/user/user.php:384
msgid "Any role"
msgstr ""
#: admin/modules/user/user.php:387
msgid ""
"Input specific roles to export information pertaining to all users with the "
"respective role/s."
msgstr ""
#: admin/modules/user/user.php:394
msgid "Registered date from"
msgstr ""
#: admin/modules/user/user.php:395
msgid "Date from"
msgstr ""
#: admin/modules/user/user.php:398
msgid ""
"Date on which the user registered. Export users registered on and after the "
"specified date."
msgstr ""
#: admin/modules/user/user.php:404
msgid "Registered date to"
msgstr ""
#: admin/modules/user/user.php:405
msgid "Date to"
msgstr ""
#: admin/modules/user/user.php:408
msgid "Export users registered upto the specified date."
msgstr ""
#: admin/modules/user/user.php:414
msgid "Sort columns"
msgstr ""
#: admin/modules/user/user.php:415
msgid "user_login"
msgstr ""
#: admin/modules/user/user.php:418
msgid ""
"Sort the exported data based on the selected columns in order specified. "
"Defaulted to ascending order."
msgstr ""
#: admin/modules/user/user.php:426
msgid "ASC"
msgstr ""
#: admin/modules/user/user.php:429
msgid ""
"Defaulted to Ascending. Applicable to above selected columns in the order "
"specified."
msgstr ""
#: admin/modules/user/user.php:445
msgid "Export guest users"
msgstr ""
#: admin/modules/user/user.php:448 admin/modules/user/user.php:505
#: admin/partials/_form_field_generator.php:312
msgid "Yes"
msgstr ""
#: admin/modules/user/user.php:449 admin/modules/user/user.php:506
#: admin/partials/_form_field_generator.php:313
msgid "No"
msgstr ""
#: admin/modules/user/user.php:453
msgid "Enabling this option will include all guest customers in the export."
msgstr ""
#: admin/modules/user/user.php:471
msgid "Existing user"
msgstr ""
#: admin/modules/user/user.php:474
msgid "Skip"
msgstr ""
#: admin/modules/user/user.php:475
msgid "Update"
msgstr ""
#: admin/modules/user/user.php:482
msgid ""
"Retains the user in the store as is and skips the matching user from the input "
"file."
msgstr ""
#: admin/modules/user/user.php:488
msgid "Update user as per data from the input file"
msgstr ""
#: admin/modules/user/user.php:502
msgid "Retain user passwords"
msgstr ""
#: admin/modules/user/user.php:510
msgid "WordPress encrypts passwords and stores the hashed value in database."
msgstr ""
#: admin/modules/user/user.php:513
msgid ""
"Choose ‘Yes’ to import hashed passwords(that were exported from another "
"WordPress install) as is."
msgstr ""
#: admin/modules/user/user.php:519
msgid "Choose ‘No’ to import a plaintext password."
msgstr ""
#: admin/partials/_form_field_generator.php:244
#, php-format
msgid "%1$s (#%2$s &ndash; %3$s)"
msgstr ""
#: admin/partials/_form_field_generator.php:347
msgid "Choose a file."
msgstr ""
#: admin/partials/_form_field_generator.php:347
msgid "Select"
msgstr ""
#: admin/partials/_form_field_generator.php:347
msgid "Upload"
msgstr ""
#: admin/partials/_form_field_generator.php:359
msgid "Drag and Drop"
msgstr ""
#: admin/partials/_form_field_generator.php:360
msgid "or"
msgstr ""
#: admin/partials/_form_field_generator.php:361
msgid " Click and Upload"
msgstr ""
#: admin/partials/wt-import-export-for-woo-admin-display.php:10
msgid "Import Export for WooCommerce"
msgstr ""
#: admin/partials/wt-import-export-for-woo-admin-display.php:15
msgid "General"
msgstr ""
#: admin/partials/wt-import-export-for-woo-admin-display.php:16
msgid "Help Guide"
msgstr ""
#: admin/partials/wt-import-export-for-woo-admin-display.php:17
msgid "Pro Upgrade"
msgstr ""
#: admin/views/_save_template_popup.php:13
msgid "Save as"
msgstr ""
#: admin/views/_save_template_popup.php:21
msgid "Please enter name"
msgstr ""
#: admin/views/_save_template_popup.php:25
msgid "Template name"
msgstr ""
#: admin/views/admin-settings-help.php:8
msgid "Help Links"
msgstr ""
#: admin/views/admin-settings-help.php:9
msgid "Sample CSV"
msgstr ""
#: admin/views/admin-settings-help.php:18
msgid "Refer to our documentation to set up and get started."
msgstr ""
#: admin/views/admin-settings-help.php:25
msgid "Help and Support"
msgstr ""
#: admin/views/admin-settings-help.php:26
msgid "We would love to help you on any queries or issues."
msgstr ""
#: admin/views/admin-settings-help.php:28
msgid "Contact Us"
msgstr ""
#: admin/views/admin-settings-marketing.php:8
msgid "One stop solution for all your import-export needs."
msgstr ""
#: admin/views/admin-settings-marketing.php:9
msgid ""
"Upgrade to the premium version and get access to the advanced features with "
"premium support."
msgstr ""
#: admin/views/admin-settings-marketing.php:14
msgid "PRODUCT IMPORT EXPORT PLUGIN FOR WOOCOMMERCE"
msgstr ""
#: admin/views/admin-settings-marketing.php:15
msgid ""
"Imports and exports all product types and reviews. Supports both CSV and XML "
"file formats."
msgstr ""
#: admin/views/admin-settings-marketing.php:17
#: admin/views/admin-settings-marketing.php:28
#: admin/views/admin-settings-marketing.php:39
#: admin/views/admin-settings-marketing.php:507
msgid "Get Premium"
msgstr ""
#: admin/views/admin-settings-marketing.php:18
#: admin/views/admin-settings-marketing.php:29
#: admin/views/admin-settings-marketing.php:40
msgid "Compare with basic"
msgstr ""
#: admin/views/admin-settings-marketing.php:25
msgid "WORDPRESS USERS & WOOCOMMERCE CUSTOMERS IMPORT EXPORT"
msgstr ""
#: admin/views/admin-settings-marketing.php:26
msgid ""
"Import and export all your WordPress User and WooCommerce Customer data in CSV/"
"XML file formats."
msgstr ""
#: admin/views/admin-settings-marketing.php:36
msgid "ORDER, COUPON, SUBSCRIPTION EXPORT IMPORT FOR WOOCOMMERCE"
msgstr ""
#: admin/views/admin-settings-marketing.php:37
msgid "Export or Import WooCommerce orders, Coupons and Subscriptions."
msgstr ""
#: admin/views/admin-settings-marketing.php:57
#: admin/views/admin-settings-marketing.php:223
#: admin/views/admin-settings-marketing.php:365
msgid "Features"
msgstr ""
#: admin/views/admin-settings-marketing.php:58
#: admin/views/admin-settings-marketing.php:224
#: admin/views/admin-settings-marketing.php:366
msgid "Free"
msgstr ""
#: admin/views/admin-settings-marketing.php:59
#: admin/views/admin-settings-marketing.php:225
#: admin/views/admin-settings-marketing.php:367
msgid "Premium"
msgstr ""
#: admin/views/admin-settings-marketing.php:60
#: admin/views/admin-settings-marketing.php:226
#: admin/views/admin-settings-marketing.php:368
msgid "Import Export Suite"
msgstr ""
#: admin/views/admin-settings-marketing.php:65
msgid "Import and export products"
msgstr ""
#: admin/views/admin-settings-marketing.php:70
#: admin/views/admin-settings-marketing.php:236
#: admin/views/admin-settings-marketing.php:378
msgid "Products"
msgstr ""
#: admin/views/admin-settings-marketing.php:71
#: admin/views/admin-settings-marketing.php:237
#: admin/views/admin-settings-marketing.php:379
msgid "Reviews"
msgstr ""
#: admin/views/admin-settings-marketing.php:72
#: admin/views/admin-settings-marketing.php:238
#: admin/views/admin-settings-marketing.php:380
msgid "Orders"
msgstr ""
#: admin/views/admin-settings-marketing.php:73
#: admin/views/admin-settings-marketing.php:239
#: admin/views/admin-settings-marketing.php:381
msgid "Coupons"
msgstr ""
#: admin/views/admin-settings-marketing.php:74
#: admin/views/admin-settings-marketing.php:240
#: admin/views/admin-settings-marketing.php:382
msgid "Subscriptions"
msgstr ""
#: admin/views/admin-settings-marketing.php:75
#: admin/views/admin-settings-marketing.php:241
#: admin/views/admin-settings-marketing.php:383
msgid "Users"
msgstr ""
#: admin/views/admin-settings-marketing.php:80
msgid "Export and import with product images"
msgstr ""
#: admin/views/admin-settings-marketing.php:86
msgid "Batch import/export"
msgstr ""
#: admin/views/admin-settings-marketing.php:92
msgid "Quick import/export"
msgstr ""
#: admin/views/admin-settings-marketing.php:98
msgid "Bulk product update"
msgstr ""
#: admin/views/admin-settings-marketing.php:104
msgid "Advanced import/export filters"
msgstr ""
#: admin/views/admin-settings-marketing.php:105
#: admin/views/admin-settings-marketing.php:443
msgid "Limited"
msgstr ""
#: admin/views/admin-settings-marketing.php:110
msgid "Option to save a template for future import/exports"
msgstr ""
#: admin/views/admin-settings-marketing.php:116
msgid "Export/Import mapping"
msgstr ""
#: admin/views/admin-settings-marketing.php:122
msgid "Import by uploading CSV"
msgstr ""
#: admin/views/admin-settings-marketing.php:134
msgid "Debug logs"
msgstr ""
#: admin/views/admin-settings-marketing.php:140
#: admin/views/admin-settings-marketing.php:312
#: admin/views/admin-settings-marketing.php:448
msgid "Supports multiple file formats"
msgstr ""
#: admin/views/admin-settings-marketing.php:141
msgid "Only supports CSV"
msgstr ""
#: admin/views/admin-settings-marketing.php:146
msgid "Import/Export file via FTP/SFTP"
msgstr ""
#: admin/views/admin-settings-marketing.php:152
#: admin/views/admin-settings-marketing.php:324
msgid "Import from URL"
msgstr ""
#: admin/views/admin-settings-marketing.php:158
msgid "Export product images as a zip"
msgstr ""
#: admin/views/admin-settings-marketing.php:164
#: admin/views/admin-settings-marketing.php:318
#: admin/views/admin-settings-marketing.php:484
msgid "Choose delimiter"
msgstr ""
#: admin/views/admin-settings-marketing.php:170
msgid "Support for multiple product types"
msgstr ""
#: admin/views/admin-settings-marketing.php:176
msgid "Automatic scheduled import/export"
msgstr ""
#: admin/views/admin-settings-marketing.php:182
msgid "Import/Export hidden meta"
msgstr ""
#: admin/views/admin-settings-marketing.php:188
#: admin/views/admin-settings-marketing.php:342
#: admin/views/admin-settings-marketing.php:490
msgid "Third-party plugin filter support"
msgstr ""
#: admin/views/admin-settings-marketing.php:194
msgid "Import/Export Product ratings"
msgstr ""
#: admin/views/admin-settings-marketing.php:200
msgid "Import/export products reviews"
msgstr ""
#: admin/views/admin-settings-marketing.php:231
msgid "Import/Export Users"
msgstr ""
#: admin/views/admin-settings-marketing.php:246
msgid "Import/Export customers"
msgstr ""
#: admin/views/admin-settings-marketing.php:252
msgid "Retain user password on Import/Export"
msgstr ""
#: admin/views/admin-settings-marketing.php:258
msgid "Bulk update data"
msgstr ""
#: admin/views/admin-settings-marketing.php:264
msgid "Evaluation fields"
msgstr ""
#: admin/views/admin-settings-marketing.php:270
#: admin/views/admin-settings-marketing.php:442
msgid "Advanced filters"
msgstr ""
#: admin/views/admin-settings-marketing.php:271
msgid "Limited options"
msgstr ""
#: admin/views/admin-settings-marketing.php:276
#: admin/views/admin-settings-marketing.php:400
msgid "Quick Import/Export"
msgstr ""
#: admin/views/admin-settings-marketing.php:282
msgid "Import/Export with pre-saved template"
msgstr ""
#: admin/views/admin-settings-marketing.php:288
msgid "View Import/Export history"
msgstr ""
#: admin/views/admin-settings-marketing.php:294
msgid "View debug log"
msgstr ""
#: admin/views/admin-settings-marketing.php:300
#: admin/views/admin-settings-marketing.php:394
msgid "Batch Import/Export"
msgstr ""
#: admin/views/admin-settings-marketing.php:306
msgid "Customer Notification via email"
msgstr ""
#: admin/views/admin-settings-marketing.php:313
#: admin/views/admin-settings-marketing.php:449
msgid "CSV only"
msgstr ""
#: admin/views/admin-settings-marketing.php:330
msgid "Import/export via FTP"
msgstr ""
#: admin/views/admin-settings-marketing.php:336
msgid "Scheduled Import/Export using Cron"
msgstr ""
#: admin/views/admin-settings-marketing.php:373
msgid "Export and Import orders"
msgstr ""
#: admin/views/admin-settings-marketing.php:388
msgid "Export and Import Coupons"
msgstr ""
#: admin/views/admin-settings-marketing.php:406
msgid "Easy Import/export with pre-saved template"
msgstr ""
#: admin/views/admin-settings-marketing.php:412
msgid "Export/Import column mapping"
msgstr ""
#: admin/views/admin-settings-marketing.php:418
msgid "Bulk update of data"
msgstr ""
#: admin/views/admin-settings-marketing.php:424
msgid "Support evaluation fields"
msgstr ""
#: admin/views/admin-settings-marketing.php:430
msgid "View debug logs"
msgstr ""
#: admin/views/admin-settings-marketing.php:454
msgid "Export/Import subscription orders"
msgstr ""
#: admin/views/admin-settings-marketing.php:460
msgid "Import and Export via FTP/SFTP"
msgstr ""
#: admin/views/admin-settings-marketing.php:466
msgid "Scheduled automatic Import/Export using Cron job"
msgstr ""
#: admin/views/admin-settings-marketing.php:472
msgid "Platform independent XML Import/Export"
msgstr ""
#: admin/views/admin-settings-marketing.php:478
msgid "Multiple Import methods"
msgstr ""
#: admin/views/admin-settings-marketing.php:479
msgid "Upload CSV only"
msgstr ""
#: admin/views/admin-settings-marketing.php:505
msgid "Import Export Suite for WooCommerce"
msgstr ""
#: admin/views/admin-settings-marketing.php:506
msgid ""
"WooCommerce Import Export Suite is an all-in-one bundle of plugins with which "
"you can import and export WooCommerce products, product reviews, orders, "
"customers, coupons and subscriptions."
msgstr ""
#: admin/views/admin-settings-pre-saved-templates.php:38
msgid "Import export pre-saved templates"
msgstr ""
#: admin/views/admin-settings-pre-saved-templates.php:44
msgid "Name"
msgstr ""
#: admin/views/admin-settings-pre-saved-templates.php:46
msgid "Type"
msgstr ""
#: admin/views/admin-settings-pre-saved-templates.php:47
msgid "Action"
msgstr ""
#: admin/views/market.php:17
msgid "30 Day Money Back Guarantee"
msgstr ""
#: admin/views/market.php:18
msgid "Fast and Superior Support"
msgstr ""
#: admin/views/market.php:21
#: users-customers-import-export-for-wp-woocommerce.php:222
msgid "UPGRADE TO PREMIUM"
msgstr ""
#: helpers/class-wt-common-helper.php:70
#, php-format
msgid ""
"The %s requires a minimum version of %s %s. Please upgrade the %s accordingly."
msgstr ""
#: helpers/class-wt-import-export-helper.php:21
msgid "Comma"
msgstr ""
#: helpers/class-wt-import-export-helper.php:22
msgid "Semicolon"
msgstr ""
#: helpers/class-wt-import-export-helper.php:23
msgid "Tab"
msgstr ""
#: helpers/class-wt-import-export-helper.php:24
msgid "Space"
msgstr ""
#: helpers/class-wt-import-export-helper.php:25
#: includes/class-wt-userimport-uninstall-feedback.php:61
msgid "Other"
msgstr ""
#: helpers/class-wt-import-export-helper.php:187
msgid "Refresh the step"
msgstr ""
#: helpers/class-wt-import-export-helper.php:192
msgid "Console form data"
msgstr ""
#: helpers/class-wt-import-export-helper.php:203
msgid "For debugging process"
msgstr ""
#: helpers/class-wt-import-export-helper.php:204
msgid "Debug panel"
msgstr ""
#: includes/class-wt-non-apache-info.php:43
msgid ""
"Incase of Nginx server, copy the below code into your server config file to "
"restrict public access to the wp-content folder or contact the server team to "
"assist accordingly."
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:19
msgid "Used it successfully. Don't need anymore."
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:21
msgid "Have used it successfully and aint in need of it anymore"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:25
msgid "I couldn't understand how to make it work"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:27
msgid "Would you like us to assist you?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:31
msgid "I found a better plugin"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:33
msgid "Which plugin?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:37
msgid "The plugin is great, but I need specific feature that you don't support"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:39
msgid "Could you tell us more about that feature?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:43
msgid "The plugin is not working"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:45
msgid "Could you tell us a bit more whats not working?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:49
msgid "It's not what I was looking for"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:55
msgid "The plugin didn't work as expected"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:57
msgid "What did you expect?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:63
msgid "Could you tell us a bit more?"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:81
msgid "If you have a moment, please let us know why you are deactivating:"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:92
msgid ""
"We do not collect any personal data when you submit this form. It's your "
"feedback that we value."
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:93
msgid "Privacy Policy"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:97
msgid "I rather wouldn't say"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:100
msgid "Get support"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:101
msgid "Submit & Deactivate"
msgstr ""
#: includes/class-wt-userimport-uninstall-feedback.php:196
msgid "Deactivate and leave a review"
msgstr ""
#: user_import_export_review_request.php:54
#, php-format
msgid ""
"Hey, we at %sWebToffee%s would like to thank you for using our plugin. We "
"would really appreciate if you could take a moment to drop a quick review that "
"will inspire us to keep going."
msgstr ""
#: user_import_export_review_request.php:57
msgid "Remind me later"
msgstr ""
#: user_import_export_review_request.php:58
msgid "Not interested"
msgstr ""
#: user_import_export_review_request.php:59
msgid "Review now"
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:132
msgid "Premium Upgrade"
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:186
#, php-format
msgid ""
"The <b>%s</b> plugin uploads the imported file into <b>wp-content/"
"webtoffee_import</b> folder. Please ensure that public access restrictions are "
"set in your server for this folder."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:195
msgid "Sample User CSV"
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:196
msgid "Familiarize yourself with the sample CSV."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:198
msgid "Get User CSV"
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:213
msgid "Supports CSV/XML file formats."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:214
msgid "Import and export custom fields and hidden metadata."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:215
msgid "Export and import guest users."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:216
msgid "Run scheduled exports via FTP/SFTP."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:217
msgid "Run scheduled imports via URL/FTP/SFTP."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:218
msgid "Option to send email notifications to users/customers after import."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:219
msgid "Tested compatibility with various third-party plugins."
msgstr ""
#: users-customers-import-export-for-wp-woocommerce.php:224
msgid "Get more import export addons >>"
msgstr ""
WordPress Users & WooCommerce Customers Import Export
Copyright 2018 by the contributors
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
This program incorporates work covered by the following copyright and
permission notices:
WordPress Users & WooCommerce Customers Import Export
Copyright: 2015-2018 Hikeforce.
License: GNU General Public License v3.0
License URI: http://www.gnu.org/licenses/gpl-3.0.html
and
HikeForce
WordPress Users & WooCommerce Customers Import Export is released under the GPL
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright © <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright © <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
<?php
/**
* The public-facing functionality of the plugin.
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/public
*/
/**
* The public-facing functionality of the plugin.
*
* Defines the plugin name, version, and two examples hooks for how to
* enqueue the public-facing stylesheet and JavaScript.
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/public
* @author Webtoffee <info@webtoffee.com>
*/
if(!class_exists('Wt_Import_Export_For_Woo_Public_Basic')){
class Wt_Import_Export_For_Woo_Public_Basic {
/**
* The ID of this plugin.
*
* @since 1.0.0
* @access private
* @var string $plugin_name The ID of this plugin.
*/
private $plugin_name;
/**
* The version of this plugin.
*
* @since 1.0.0
* @access private
* @var string $version The current version of this plugin.
*/
private $version;
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $plugin_name The name of the plugin.
* @param string $version The version of this plugin.
*/
public function __construct( $plugin_name, $version ) {
$this->plugin_name = $plugin_name;
$this->version = $version;
}
/**
* Register the stylesheets for the public-facing side of the site.
*
* @since 1.0.0
*/
public function enqueue_styles() {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Wt_Import_Export_For_Woo_Loader as all of the hooks are defined
* in that particular class.
*
* The Wt_Import_Export_For_Woo_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/wt-import-export-for-woo-public.css', array(), $this->version, 'all' );
}
/**
* Register the JavaScript for the public-facing side of the site.
*
* @since 1.0.0
*/
public function enqueue_scripts() {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Wt_Import_Export_For_Woo_Loader as all of the hooks are defined
* in that particular class.
*
* The Wt_Import_Export_For_Woo_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/wt-import-export-for-woo-public.js', array( 'jquery' ), $this->version, false );
}
}
}
/**
* All of the CSS for your public-facing functionality should be
* included in this file.
*/
\ No newline at end of file
(function( $ ) {
'use strict';
/**
* All of the code for your public-facing JavaScript source
* should reside in this file.
*
* Note: It has been assumed you will write jQuery code here, so the
* $ function reference has been prepared for usage within the scope
* of this function.
*
* This enables you to define handlers, for when the DOM is ready:
*
* $(function() {
*
* });
*
* When the window is loaded:
*
* $( window ).load(function() {
*
* });
*
* ...and/or other possibilities.
*
* Ideally, it is not considered best practise to attach more than a
* single DOM-ready or window-load handler for a particular page.
* Although scripts in the WordPress core, Plugins and Themes may be
* practising this, we should strive to set a better example in our own work.
*/
})( jQuery );
<?php
/**
* Provide a public-facing view for the plugin
*
* This file is used to markup the public-facing aspects of the plugin.
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
* @subpackage Wt_Import_Export_For_Woo/public/partials
*/
?>
<!-- This file should primarily consist of HTML with a little bit of PHP. -->
=== Import Export WordPress Users and WooCommerce Customers ===
Contributors: webtoffee
Donate link: https://www.webtoffee.com/plugins/
Tags: user import, user export, csv, woocommerce, customers, export import users, export customers, import customers, import, export, export users to csv, import users from csv
Requires at least: 3.0.1
Tested up to: 6.2
Requires PHP: 5.6
Stable tag: 2.3.9
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl-3.0.html
The top-rated WordPress plugin to import and export WordPress users and WooCommerce customers.
== Description ==
The most-rated WordPress User Import Export plugin ever! This plugin allows you to easily import and export WordPress users and WooCommerce customers. It lets you migrate to a new website without losing your users or customers, quite literally.
You can import or export user/customer data using CSV files. This helps in migrating or updating user data on your website.
&#128312; Import/export user/customer data based on user roles, user email, and date range of when the users were added to the system.
&#128312; Batch Export/Import for easier processing of data
&#128312; <a rel="nofollow" href="https://www.webtoffee.com/how-to-retain-woocommerce-users-password-on-import/"> Retain user passwords </a> (optional)
&#128312; <a rel="nofollow" href="https://www.webtoffee.com/how-to-export-users-from-wordpress-and-preserve-passwords/"> Export WordPress users with passwords </a>
&#128312; <a rel="nofollow" href= “ https://www.webtoffee.com/update-user-field-values-in-bulk-during-woocommerce-import/”> Map and transform fields while importing customers/users </a>
&#128312; Change values (bulk modify) while importing user data using Evaluation Fields
&#128312; Export guest users - Include data of WooCommerce guest customers (users who bought products from the site without creating an account).
&#128312; Export specific users based on username/email - Suggests email addresses and names in export data filter fields while you type in.
&#128312; Tested OK with WordPress 6.2
&#128312; Tested OK with WooCommerce 7.5
&#128312; Tested OK with PHP 8.2
= How does it work? =
This WordPress user import export plugin uses CSV (Comma-Separated Values) files as input. You must create a CSV file and enter the user details in a structured format. (refer to this <a rel="nofollow" href="https://www.webtoffee.com/wp-content/uploads/2021/03/Users_SampleCSV.csv"> sample CSV)</a> This is to match each field of the user import CSV file to the appropriate user fields in WordPress.
For example, the user_email field gets mapped to the User Email. Otherwise, the admin needs to manually map the import user CSV fields.
<blockquote>
For the plugin to work correctly, you must map the headers of all the column correctly and you must ensure that all of the fields you enter is in the correct format.
</blockquote>
You can create the CSV from the scratch or you can export the user CSV using the same plugin. You can use a spreadsheet program, such as Microsoft Excel, OpenOffice, LibreOffice, or Google Spreadsheets for creating and modifying the CSV file. <a rel="nofollow" href="https://www.webtoffee.com/how-to-save-csv-excel-file-as-utf-8-encoded/"> Save this file in UTF-8 encoding with extension .csv. </a>
After entering all details about users in a spreadsheet, you can bulk import users to WordPress. With this plugin, you can also export and download user details as a CSV file.
For more information about the setup of the plugin, refer to this article: <a rel="nofollow" href="https://www.webtoffee.com/user-import-export-plugin-wordpress-user-guide/">WordPress Users & WooCommerce Customers Import Export Plugin - User Guide.</a>
Watch the video on getting started with the plugin.
[youtube https://www.youtube.com/watch?v=N-wvAtnjjpg&rel=0&showinfo=0]
= Why choose us? =
<a rel="nofollow" href="https://www.webtoffee.com/">WebToffee</a> creates quality WordPress/WooCommerce plugins that are easy to use and customize. We are proud to have millions of customers actively using our plugins across the globe.
**Hear it from our users**
> danielepais (@danielepais) ⭐⭐⭐⭐⭐
> Great tool especially if you need to select a batch of users and some account details but not all, with this plugin you can filter what to output on your comma separated CSV file.
> Allan Klinbail (@aklinbai) ⭐⭐⭐⭐⭐
> After working for a couple of months on a new site from scratch, I didn’t want to have to issue password resets for all users.
This allowed me to move them all, easily and simply.
> benlumi (@benlumi) ⭐⭐⭐⭐⭐
> I transfered all my customers to my new website in no time and without any stress. Many options available to do the job.
Perfect ! Thank you 😀
= Premium version Features =
<blockquote>
&#9989; Import and export WordPress users and WooCommerce customers.
&#9989; Supports multiple file formats like CSV, XML, and Excel (XLS, XLSX).
&#9989; Option to choose all roles or multiple roles while exporting.
&#9989; Various filter options (User Roles, User Email, Date Range, Offset/Limit, Guest Users, Ascending/Descending Sort) for exporting customers/users.
&#9989; Map and transform fields while importing WooCommerce customers.
&#9989; Map and transform fields while exporting WooCommerce customers.
&#9989; Apply conditions to change values of the fields while importing customers using Evaluation Fields.
&#9989; Export user meta (custom fields and hidden metadata supported in addition to other user data)
&#9989; Choice to update or skip existing imported customers.
&#9989; Bulk update existing customers/user data.
&#9989; Choice to send or skip emails for newly imported customers.
&#9989; WPML Supported.
&#9989; Import and export users/customers to/from a remote server via FTP in scheduled time intervals with Cron Job.
&#9989; Supports importing user CSV from URL & Google sheets.
&#9989; Third-party plugin compatibility.
&#9989; Compatible with BuddyPress, Ultimate Member, Ultimate Membership Pro, Better Notifications for WP, Advanced Custom Fields (ACF), etc.
&#9989; Excellent Support with a 99% customer satisfaction rate.
&#9989; 30-day money-back guarantee.
Please visit <a rel="nofollow" href="https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/">Import Export WordPress Users & WooCommerce Customers</a> for more details.
</blockquote>
**Export WordPress users and WooCommerce customers to CSV**
This WordPress user export plugin enables you to export WordPress users and WooCommerce customers to a CSV file. You can use this CSV file to migrate users/customers to another website with the Import users functionality of this plugin.
If you have hundreds, even thousands, of WordPress users, the export users option in the plugin helps to save your effort and time of manually adding the user data.
You can bulk export user data to a CSV file with multiple powerful filters such as user roles, date ranges, etc.
**Import WordPress users and WooCommerce customers from CSV**
With this WordPress user import plugin, you can easily import hundreds or thousands of WordPress users and WooCommerce customers to your website using a CSV file. The plugin lets you bulk import or merge (update existing users) on your WordPress website.
The WordPress import users plugin also has the option to send an email to the users and customers whenever the admin imports/updates users' details. It enables you to securely migrate your users’ passwords from one website to another.
You can map your import columns to the appropriate WordPress data to import or merge user details. You can also import data from a variety of sources, such as an uploaded CSV file on FTP (Premium), a locally saved CSV file on your computer, or from a URL, Google sheet, etc.
For importing WordPress users’ and WooCommerce customers’ data to your website, you must create a CSV (Comma-Separated Values) file which contains information about mapping fields in a tabular form. You can create a CSV file by using a spreadsheet program, such as Excel, or Google Spreadsheets. Save this file with the extension '.csv'. After entering all details about WordPress users in the spreadsheet, you can import users or customers to your website.
= Import/Export/Migration Plugins for WooCommerce from WebToffee =
&#128312; <a href="https://wordpress.org/plugins/product-import-export-for-woo/">WooCommerce Product Import Export Plugin</a>: Easily import and export products to/from your WooCommerce store using a CSV file.
&#128312; <a href="https://wordpress.org/plugins/order-import-export-for-woocommerce/">WooCommerce Order/Coupon/Subscription Import Export</a>: The plugin lets you export and import orders and coupons via CSV to and from your WooCommerce store.
&#128312; <a href="https://wordpress.org/plugins/wp-migration-duplicator/">WordPress Backup & Migration</a>: Quickly migrate and backup entire WordPress site or selected files from one location to another. Backup to FTP, Google Drive, Amazon S3, or local storage and easily restore them.
== Installation ==
= Minimum Requirements =
- PHP Version: 5.6 or later
- WordPress version: 3.0 or later
- WooCommerce version: 3.0 or later
= Steps to install the plugin =
To install the plugin, follow the below steps:
Step 1: Log in to your WordPress dashboard.
Step 2: Navigate to **Plugins** and select **Add New**.
Step 3: From the search box, type "Import export WordPress users" or "Import export WooCommerce customers" and click Search Plugins.
Step 4: Once you find the Import Export WordPress Users and WooCommerce Customers plugin by WebToffee, click on **Install Now**.
Step 5: After installation, click **Activate** to activate the plugin.
You can also install the plugin by downloading the zip file from the plugin page on WordPress.org. Then upload the file directly from your WordPress dashboard, or using an FTP application.
= Plugin Updates =
For every update of the plugin, you will be notified of the installed plugins page. You can directly update the plugin from your dashboard. We recommend that you keep the latest version of the plugin so that you can avail of the new functionalities and security features.
== Frequently Asked Questions ==
= Does this plugin export users to excel? =
This plugin exports user data to CSV which can be opened with Excel and saved as an Excel file.
= Does this plugin support multiple roles? =
Yes. You can export import users along with multiple user roles.
= Does this plugin export WooCommerce customer data? =
Yes, you can export WooCommerce customer data.
= Does this export users with passwords? =
Yes. This plugin will export users with passwords.
= Does this import users with their passwords?
Yes. This plugin will import users with the password, so users can use the same old password in the imported site as well.
= Does this plugin support WooCommerce customer order CSV export? =
No. You may want to use <a rel="nofollow" href="https://wordpress.org/plugins/order-import-export-for-woocommerce/">Order Export & Order Import for WooCommerce</a> for this purpose.
= Do Import Export WordPress Users support Multisite? =
Yes, the plugin supports exporting users from each sub-sites of the multisite network.
= Does this plugin export custom data fields? =
This version of the plugin does not support the import or export of user custom data fields. It is one of our premium features. Please have a look at the <a rel="nofollow" href="https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/">premium version of the plugin</a> to export and import custom metadata fields.
= Can this plugin update existing user data? =
Yes, you can update the existing user data by setting the option: <strong>'If the user exists in the store'</strong> to <strong>'Update'</strong> in the Advanced options during import.
= Imported customers are not listed under WooCommerce customers =
Please refer the article on how to <a href="https://www.webtoffee.com/refresh-woocommerce-customers-list/">refresh WooCommerce customers list</a>.
== Screenshots ==
1. WordPress user export import plugin general settings
2. WordPress user exporter screen
3. WordPress user export filters
4. Map or re-order columns on WordPress user export
5. WordPress user batch export
6. WordPress user import-export template save option
7. WordPress import users screen
8. Map or re-order columns on WordPress user import
9. Bulk update WordPress users when importing from CSV
10. Advanced WordPress user import options and batch import
11. WordPress user CSV import export history
12. WordPress user import export log
== Changelog ==
= 2.3.9 2023-04-14 =
* Update: Tested OK with WooCommerce 7.5, WordPress 6.2 & PHP 8.2
= 2.3.8 2023-03-21 =
* Update: Tested OK with WooCommerce 7.5
* Fix: Error on user import/export screen on WP 3.5
= 2.3.7 2023-01-11 =
* WooCommerce 7.2 Tested OK.
* Enhancement: Refresh the WooCommerce customer list after the import.
= 2.3.6 2022-11-24 =
* WooCommerce 7.1 Tested OK.
* WordPress 6.1 Tested OK.
* Enhancement: Revised import mapping screen.
= 2.3.5 2022-10-25 =
* WooCommerce 7.0 Tested OK.
* Enhancement: Set Min and Max limit for import and export default batch count in General setting page.
= 2.3.4 2022-08-30 =
* Bugfix: Duplicate export button on user listing page when both Pro and Free versions are active.
* Bugfix: Uncaught Error: Class 'Wt_Import_Export_For_Woo_History'
* WooCommerce 6.8 Tested OK.
= 2.3.3 2022-08-09 =
* Enhancement: Export total spent amount by customer.
* Bugfix: Delimiter reset when using the re-run option from the History section.
* WooCommerce 6.7 Tested OK.
= 2.3.2 2022-07-05 =
* Enhancement: Export to CSV option to Bulk Action drop-down menu in Users listing page.
* Enhancement: Import progress screen improvements.
* WooCommerce 6.6 Tested OK.
= 2.3.1 2022-05-26 =
* WordPress 6.0 Tested OK.
* WooCommerce 6.5 Tested OK.
* Enhancement: Option to choose delimiter when exporting.
= 2.3.0 2022-05-17 =
* WC 6.4 Tested OK.
* Enhancement: Bulk delete import logs.
= 2.2.9 2022-04-15 =
* WC 6.3 Tested OK.
= 2.2.8 =
* Enhancement: Performance and UI improvements, text corrections.
= 2.2.7 =
* WP 5.9 Tested OK.
= 2.2.6 =
* Improvements: Optimise user email search filter to work without WooCommerce
= 2.2.5 =
* WC 6.1 Tested OK
* Add - Export guest users option.
* Fix - user_status column value export.
= 2.2.4 =
* WC 6.0 Tested OK
= 2.2.3 =
* WC 5.9 Tested OK
= 2.2.2 =
* Bug Fix: Upload timeout issue.
= 2.2.1 =
* WC 5.8 Tested OK
* Improvements: Added filter wt_import_csv_parser_keep_bom for escaping cyrillic letters.
* Fixes: Keeping previously selected options when e-running the export/import and wp_max_upload_size(), mb_detect_encoding() related issues.
= 2.2.0 =
* WC 5.7 tested OK
= 2.1.9 =
* Added support for customer shipping phone number import export
* WC 5.6 tested OK
= 2.1.8 =
* Bug fix: Email and username validation improvements
* WP 5.8 tested OK
* WC 5.5 tested OK
= 2.1.7 =
* Bug fix: Default role getting added when importing with a custom role
= 2.1.6 =
* Faq update: Refresh WooCommerce customer list after import
= 2.1.5 =
* Text corrections and batch count defaulted to 10
= 2.1.4 =
* Menu access capability update
= 2.1.3 =
* Tested OK with PHP 8.0
= 2.1.2 =
* Tested OK with WC 5.2.2
= 2.1.1 =
* Tested OK with WC 5.2.0
= 2.1.0 =
* Improvements.
= 2.0.9 =
* Plugin name update.
= 2.0.8 =
* Tested OK with WC 5.1.0 and WP 5.7
* Check existing users default with user_email while importing.
= 2.0.7 =
* Tested OK with WC 5.0.0 and WP 5.6.1
* Version 2.0.0 onward has been revamped majorly.
= 2.0.6 =
* Content update.
* Version 2.0.0 onward has been revamped majorly.
= 2.0.5 =
* New Feature: Update existing users.
* Improvement: Content updates.
* Improved UI for better user experience
* Tested OK with WC 4.9.0
* Version 2.0.0 onward has been revamped majorly.
= 2.0.4 =
* Improvement: Content updates.
* Tested OK with WC 4.8.0
* Version 2.0.0 onward has been revamped majorly.
= 2.0.3 =
* Fix: Issue with importing user roles.
* Improvement: Added more filters for export.
* Tested OK with WP 5.6
* Tested OK with WC 4.7.1
* Version 2.0.0 onward has been revamped majorly.
= 2.0.2 =
* Fix: Batch count issue for quick export.
* Fix: Issue with password migration for quick import.
* Tested OK with WC 4.7.0.
* Version 2.0.0 onward has been revamped majorly.
= 2.0.1 =
* Fix: Browser popup blocker issue.
* Tested OK with WC 4.6.1.
= 2.0.0 =
* Heads up! This version has been revamped majorly.
* Improved UI for better user experience
* Export/Import options: via a pre-saved template or a quick(standard columns) export/import
* Option to export/import selective columns
* Option to reorder columns during export
* Import: Support for different types of delimiters
* Export/Import options: Batch option with configurable batch count
* History of all the Import/Export process
* Dedicated logs for debugging failures
* Tested OK with WC 4.6.0
= 1.4.4 =
* Tested OK with WC 4.5.0 and WP 5.5.1
= 1.4.3 =
* Tested OK with WC 4.3.1 and WP 5.4.2
= 1.4.2 =
* Tested OK with WC 4.1.0 and WP 5.4.1
= 1.4.1 =
* Tested OK with WP 5.4
= 1.4.0 =
* Tested OK with WC 4.0.1
* Improvement:-'wt_hashed' column name changed to 'wt_hash' in csv.
= 1.3.9 =
* [Improvement] Security
= 1.3.8 =
* Security fix.
= 1.3.7 =
* Tested OK with WC 3.9.2
* Improvement:-Password hashed before import based on 'wt_hashed' column in csv.
= 1.3.6 =
* Tested OK with WP 5.3.2
* Content update.
= 1.3.5 =
* provision to export for Super Admin.
* Tested OK with WC 3.8.1 and WP 5.3
= 1.3.4 =
* Tested OK with WC 3.8 and WP 5.2.4
* Content Update.
* Improvement:- Option to select all and deselect all columns on export page.
= 1.3.3 =
* Tested OK with WC 3.7.1 and WP 5.2.3
* Biographical Info – reported by (@krsh333 and @wadehammes)
= 1.3.2 =
* CSV Injection was fixed – reported by one of our user (Javier Olmedo) CVE-2019-15092
= 1.3.1 =
* Tested OK with WC 3.7.0
* Plugin update information hook added.
= 1.2.9 =
* Tested OK with WC 3.6.3 and WP 5.2.1
= 1.2.8 =
* Tested OK with WC 3.6.1
= 1.2.7 =
* Bug Fix:- Encoding issue with export CSV.
= 1.2.6 =
* Bug Fix:- Cannot insert user without e-mail.
= 1.2.5 =
* Minor UI change.
* Tested OK with WC 3.5.7
* Tested OK with PHP 7.3.3
= 1.2.4 =
* Bug Fix.
= 1.2.3 =
* Tested OK with WP 5.1.1 and WC 3.5.6
* Minor UI changes.
= 1.2.2 =
* Tested OK with WP 5.0.3 and WC 3.5.3
* Bug Fix: User cannot import without email.
* Translation added German and French - Thanks for contributing French translation Jean(@momo-fr).
= 1.2.1 =
* Tested OK with WP 5.0.2 and WC 3.5.1
= 1.2.0 =
* Bug fix.
= 1.1.9 =
* Tested OK with WC 3.5.1
* Feedback on uninstall
= 1.1.8 =
* Tested OK with WC 3.5.0
= 1.1.7 =
* Content Update.
= 1.1.6 =
* Bug fix.
= 1.1.5 =
* Tested OK with WC 3.4.5.
* Review link added on footer.
= 1.1.4 =
* implement hashed/plaintext password processing during import.
* Bug fix: User role import.
= 1.1.3 =
* Export page blank bug fix.
= 1.1.2 =
* Tested OK WC 3.4.4 and WP 4.9.8
* Warnings fixed.
* UI Changed.
* Export multiple roles at a time.
= 1.1.1 =
* Tested OK with WP 4.9.6 and WC 3.3.5.
= 1.1.0 =
* Fixed WC Dependency issue, fixed notice.
= 1.0.9 =
* Fixed WC Dependency issue.
= 1.0.8 =
* Tested OK with WordPress 4.9
= 1.0.7 =
* Minor Content updates
= 1.0.6 =
* Fixed Conflict with Premium Version
= 1.0.5 =
* Fixed PHP 7.0 Compatibility Issue and warning fix
= 1.0.4 =
* Marketing Content Change.
= 1.0.3 =
* Minor content updates.
= 1.0.2 =
* Minor content updates.
= 1.0.1 =
* Minor content updates.
= 1.0.0 =
* Export Import WordPress Users.
== Upgrade Notice ==
= 2.3.9 =
* Update: Tested OK with WooCommerce 7.5, WordPress 6.2 & PHP 8.2
<?php
/**
* Fired when the plugin is uninstalled.
*
* When populating this file, consider the following flow
* of control:
*
* - This method should be static
* - Check if the $_REQUEST content actually is the plugin name
* - Run an admin referrer check to make sure it goes through authentication
* - Verify the output of $_GET makes sense
* - Repeat with other user roles. Best directly by using the links/query string parameters.
* - Repeat things for multisite. Once for a single site in the network, once sitewide.
*
* This file may be updated more in future version of the Boilerplate; however, this is the
* general skeleton and outline for how the file should work.
*
* For more information, see the following discussion:
* https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate/pull/123#issuecomment-28541913
*
* @link https://www.webtoffee.com/
* @since 1.0.0
*
* @package Wt_Import_Export_For_Woo
*/
// If uninstall not called from WordPress, then exit.
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
<?php
/**
* Review request
*
*
* @package Cookie_Law_Info
*/
if (!defined('ABSPATH')) {
exit;
}
class User_import_export_Review_Request
{
/**
* config options
*/
private $plugin_title = "Import Export WordPress Users and WooCommerce Customers";
private $review_url = "https://wordpress.org/support/plugin/users-customers-import-export-for-wp-woocommerce/reviews/#new-post";
private $plugin_prefix = "wt_u_iew_basic"; /* must be unique name */
private $activation_hook = "wt_u_iew_basic_activate"; /* hook for activation, to store activated date */
private $deactivation_hook = "wt_u_iew_basic_deactivate"; /* hook for deactivation, to delete activated date */
private $days_to_show_banner = 7; /* when did the banner to show */
private $remind_days = 5; /* remind interval in days */
private $webtoffee_logo_url = WT_U_IEW_PLUGIN_URL.'assets/images/webtoffee-logo_small.png';
private $start_date = 0; /* banner to show count start date. plugin installed date, remind me later added date */
private $current_banner_state = 2; /* 1: active, 2: waiting to show(first after installation), 3: closed by user/not interested to review, 4: user done the review, 5:remind me later */
private $banner_state_option_name = ''; /* WP option name to save banner state */
private $start_date_option_name = ''; /* WP option name to save start date */
private $banner_css_class = ''; /* CSS class name for Banner HTML element. */
private $banner_message = ''; /* Banner message. */
private $later_btn_text = ''; /* Remind me later button text */
private $never_btn_text = ''; /* Never review button text. */
private $review_btn_text = ''; /* Review now button text. */
private $ajax_action_name = ''; /* Name of ajax action to save banner state. */
private $allowed_action_type_arr = array(
'later', /* remind me later */
'never', /* never */
'review', /* review now */
'closed', /* not interested */
);
public function __construct()
{
//Set config vars
$this->set_vars();
add_action($this->activation_hook, array($this, 'on_activate'));
add_action($this->deactivation_hook, array($this, 'on_deactivate'));
if ($this->check_condition()) /* checks the banner is active now */ {
$this->banner_message = sprintf(__("Hey, we at %sWebToffee%s would like to thank you for using our plugin. We would really appreciate if you could take a moment to drop a quick review that will inspire us to keep going."), '<b>', '</b>');
/* button texts */
$this->later_btn_text = __("Remind me later");
$this->never_btn_text = __("Not interested");
$this->review_btn_text = __("Review now");
add_action('admin_notices', array($this, 'show_banner')); /* show banner */
add_action('admin_print_footer_scripts', array($this, 'add_banner_scripts')); /* add banner scripts */
add_action('wp_ajax_' . $this->ajax_action_name, array($this, 'process_user_action')); /* process banner user action */
}
}
/**
* Set config vars
*/
public function set_vars()
{
$this->ajax_action_name = $this->plugin_prefix . '_process_user_review_action';
$this->banner_state_option_name = $this->plugin_prefix . "_review_request";
$this->start_date_option_name = $this->plugin_prefix . "_start_date";
$this->banner_css_class = $this->plugin_prefix . "_review_request";
$this->start_date = absint(get_option($this->start_date_option_name));
$banner_state = absint(get_option($this->banner_state_option_name));
$this->current_banner_state = ($banner_state == 0 ? $this->current_banner_state : $banner_state);
}
/**
* Actions on plugin activation
* Saves activation date
*/
public function on_activate()
{
$this->reset_start_date();
}
/**
* Actions on plugin deactivation
* Removes activation date
*/
public function on_deactivate()
{
delete_option($this->start_date_option_name);
}
/**
* Reset the start date.
*/
private function reset_start_date()
{
update_option($this->start_date_option_name, time());
}
/**
* Update the banner state
*/
private function update_banner_state($val)
{
update_option($this->banner_state_option_name, $val);
}
/**
* Prints the banner
*/
public function show_banner()
{
$this->update_banner_state(1); /* update banner active state */
?>
<div class="<?php echo $this->banner_css_class; ?> notice-info notice is-dismissible">
<?php
if ($this->webtoffee_logo_url != "") {
?>
<h3 style="margin: 10px 0;"><?php echo $this->plugin_title; ?></h3>
<?php
}
?>
<p>
<?php echo $this->banner_message; ?>
</p>
<p>
<a class="button button-secondary" style="color:#333; border-color:#ccc; background:#efefef;" data-type="later"><?php echo $this->later_btn_text; ?></a>
<a class="button button-primary" data-type="review"><?php echo $this->review_btn_text; ?></a>
</p>
<div class="wt-cli-review-footer" style="position: relative;">
<span class="wt-cli-footer-icon" style="position: absolute;right: 0;bottom: 10px;"><img src="<?php echo $this->webtoffee_logo_url; ?>" style="max-width:100px;"></span>
</div>
</div>
<?php
}
/**
* Ajax hook to process user action on the banner
*/
public function process_user_action()
{
check_ajax_referer($this->plugin_prefix);
if (isset($_POST['wt_review_action_type'])) {
$action_type = sanitize_text_field($_POST['wt_review_action_type']);
/* current action is in allowed action list */
if (in_array($action_type, $this->allowed_action_type_arr)) {
if ($action_type == 'never' || $action_type == 'closed') {
$new_banner_state = 3;
} elseif ($action_type == 'review') {
$new_banner_state = 4;
} else {
/* reset start date to current date */
$this->reset_start_date();
$new_banner_state = 5; /* remind me later */
}
$this->update_banner_state($new_banner_state);
}
}
exit();
}
/**
* Add banner JS to admin footer
*/
public function add_banner_scripts()
{
$ajax_url = admin_url('admin-ajax.php');
$nonce = wp_create_nonce($this->plugin_prefix);
?>
<script type="text/javascript">
(function($) {
"use strict";
/* prepare data object */
var data_obj = {
_wpnonce: '<?php echo $nonce; ?>',
action: '<?php echo $this->ajax_action_name; ?>',
wt_review_action_type: ''
};
$(document).on('click', '.<?php echo $this->banner_css_class; ?> a.button', function(e) {
e.preventDefault();
var elm = $(this);
var btn_type = elm.attr('data-type');
if (btn_type == 'review') {
window.open('<?php echo $this->review_url; ?>');
}
elm.parents('.<?php echo $this->banner_css_class; ?>').hide();
data_obj['wt_review_action_type'] = btn_type;
$.ajax({
url: '<?php echo $ajax_url; ?>',
data: data_obj,
type: 'POST'
});
}).on('click', '.<?php echo $this->banner_css_class; ?> .notice-dismiss', function(e) {
e.preventDefault();
data_obj['wt_review_action_type'] = 'closed';
$.ajax({
url: '<?php echo $ajax_url; ?>',
data: data_obj,
type: 'POST',
});
});
})(jQuery)
</script>
<?php
}
/**
* Checks the condition to show the banner
*/
private function check_condition()
{
if ($this->current_banner_state == 1) /* currently showing then return true */ {
return true;
}
if ($this->current_banner_state == 2 || $this->current_banner_state == 5) /* only waiting/remind later state */ {
if ($this->start_date == 0) /* unable to get activated date */ {
/* set current date as activation date*/
$this->reset_start_date();
return false;
}
$days = ($this->current_banner_state == 2 ? $this->days_to_show_banner : $this->remind_days);
$date_to_check = $this->start_date + (86400 * $days);
if ($date_to_check <= time()) /* time reached to show the banner */ {
return true;
} else {
return false;
}
}
return false;
}
}
new User_import_export_Review_Request();
<?php
/*
Plugin Name: Import Export WordPress Users and WooCommerce Customers
Plugin URI: https://wordpress.org/plugins/users-customers-import-export-for-wp-woocommerce/
Description: Export and Import User/Customers details From and To your WordPress/WooCommerce.
Author: WebToffee
Author URI: https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/
Version: 2.3.9
Text Domain: users-customers-import-export-for-wp-woocommerce
Domain Path: /languages
WC tested up to: 7.5
Requires at least: 3.0
Requires PHP: 5.6
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
*/
if (!defined('ABSPATH') || !is_admin()) {
return;
}
// If this file is called directly, abort.
if (!defined('WPINC')) {
die;
}
define('WT_U_IEW_PLUGIN_BASENAME', plugin_basename(__FILE__));
define('WT_U_IEW_PLUGIN_PATH', plugin_dir_path(__FILE__));
define('WT_U_IEW_PLUGIN_URL', plugin_dir_url(__FILE__));
define('WT_U_IEW_PLUGIN_FILENAME', __FILE__);
if (!defined('WT_IEW_PLUGIN_ID_BASIC')) {
define('WT_IEW_PLUGIN_ID_BASIC', 'wt_import_export_for_woo_basic');
}
define('WT_U_IEW_PLUGIN_NAME', 'User Import Export for WordPress/WooCommerce');
define('WT_U_IEW_PLUGIN_DESCRIPTION', 'Import and Export User From and To your WordPress/WooCommerce Store.');
if (!defined('WT_IEW_DEBUG_BASIC')) {
define('WT_IEW_DEBUG_BASIC', false);
}
if (!defined('WT_IEW_DEBUG_BASIC_TROUBLESHOOT')) {
define('WT_IEW_DEBUG_BASIC_TROUBLESHOOT', 'https://www.webtoffee.com/finding-php-error-logs/');
}
/**
* Currently plugin version.
* Start at version 1.0.0 and use SemVer - https://semver.org
* Rename this for your plugin and update it as you release new versions.
*/
define('WT_U_IEW_VERSION', '2.3.9');
/**
* The code that runs during plugin activation.
* This action is documented in includes/class-wt-import-export-for-woo-activator.php
*/
function activate_wt_import_export_for_woo_basic_user() {
require_once plugin_dir_path(__FILE__) . 'includes/class-wt-import-export-for-woo-activator.php';
Wt_Import_Export_For_Woo_Basic_Activator_User::activate();
}
/**
* The code that runs during plugin deactivation.
* This action is documented in includes/class-wt-import-export-for-woo-deactivator.php
*/
function deactivate_wt_import_export_for_woo_basic_user() {
require_once plugin_dir_path(__FILE__) . 'includes/class-wt-import-export-for-woo-deactivator.php';
Wt_Import_Export_For_Woo_Basic_Deactivator_User::deactivate();
}
register_activation_hook(__FILE__, 'activate_wt_import_export_for_woo_basic_user');
register_deactivation_hook(__FILE__, 'deactivate_wt_import_export_for_woo_basic_user');
/**
* The core plugin class that is used to define internationalization,
* admin-specific hooks, and public-facing site hooks.
*/
require plugin_dir_path(__FILE__) . 'includes/class-wt-import-export-for-woo.php';
$advanced_settings = get_option('wt_iew_advanced_settings', array());
$ier_get_max_execution_time = (isset($advanced_settings['wt_iew_maximum_execution_time']) && $advanced_settings['wt_iew_maximum_execution_time'] != '') ? $advanced_settings['wt_iew_maximum_execution_time'] : ini_get('max_execution_time');
if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
@set_time_limit($ier_get_max_execution_time);
}
/**
* Begins execution of the plugin.
*
* Since everything within the plugin is registered via hooks,
* then kicking off the plugin from this point in the file does
* not affect the page life cycle.
*
* @since 1.0.0
*/
function run_wt_import_export_for_woo_basic_user() {
if (!defined('WT_IEW_BASIC_STARTED')) {
define('WT_IEW_BASIC_STARTED', 1);
$plugin = new Wt_Import_Export_For_Woo_Basic();
$plugin->run();
}
}
/** this added for a temporary when a plugin update with the option upload zip file. need to remove this after some version release */
if (!get_option('wt_u_iew_is_active')) {
activate_wt_import_export_for_woo_basic_user();
}
if (get_option('wt_u_iew_is_active')) {
run_wt_import_export_for_woo_basic_user();
}
/* Plugin page links */
add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'wt_uiew_plugin_action_links_basic_user');
function wt_uiew_plugin_action_links_basic_user($links) {
$plugin_links = array(
'<a href="' . admin_url('admin.php?page=wt_import_export_for_woo_basic_export') . '">' . __('Export') . '</a>',
'<a href="' . admin_url('admin.php?page=wt_import_export_for_woo_basic_import') . '">' . __('Import') . '</a>',
'<a href="https://www.webtoffee.com/user-import-export-plugin-wordpress-user-guide/" target="_blank">' . __('Documentation') . '</a>',
'<a target="_blank" href="https://wordpress.org/support/plugin/users-customers-import-export-for-wp-woocommerce/">' . __('Support') . '</a>',
'<a target="_blank" href="https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=free_plugin_listing&utm_medium=user_imp_exp_basic&utm_campaign=User_Import_Export&utm_content=' . WT_U_IEW_VERSION . '" style="color:#3db634;">' . __('Premium Upgrade') . '</a>'
);
if (array_key_exists('deactivate', $links)) {
$links['deactivate'] = str_replace('<a', '<a class="userimport-deactivate-link"', $links['deactivate']);
}
return array_merge($plugin_links, $links);
}
/*
* Displays update information for a plugin.
*/
function wt_users_customers_import_export_for_wp_woocommerce_update_message($data, $response) {
if (isset($data['upgrade_notice'])) {
add_action('admin_print_footer_scripts', 'wt_users_customers_imex_plugin_screen_update_js');
$msg = str_replace(array('<p>', '</p>'), array('<div>', '</div>'), $data['upgrade_notice']);
echo '<style type="text/css">
#users-customers-import-export-for-wp-woocommerce-update .update-message p:last-child{ display:none;}
#users-customers-import-export-for-wp-woocommerce-update ul{ list-style:disc; margin-left:30px;}
.wf-update-message{ padding-left:30px;}
</style>
<div class="update-message wf-update-message">' . wpautop($msg) . '</div>';
}
}
add_action('in_plugin_update_message-users-customers-import-export-for-wp-woocommerce/users-customers-import-export-for-wp-woocommerce.php', 'wt_users_customers_import_export_for_wp_woocommerce_update_message', 10, 2);
if (!function_exists('wt_users_customers_imex_plugin_screen_update_js')) {
function wt_users_customers_imex_plugin_screen_update_js() {
?>
<script>
(function ($) {
var update_dv = $('#users-customers-import-export-for-wp-woocommerce-update');
update_dv.find('.wf-update-message').next('p').remove();
update_dv.find('a.update-link:eq(0)').click(function () {
$('.wf-update-message').remove();
});
})(jQuery);
</script>
<?php
}
}
// uninstall feedback catch
include_once plugin_dir_path(__FILE__) . 'includes/class-wt-userimport-uninstall-feedback.php';
include_once 'user_import_export_review_request.php';
// Add dismissible server info for file restrictions
include_once plugin_dir_path(__FILE__) . 'includes/class-wt-non-apache-info.php';
$inform_server_secure = new wt_inform_server_secure('user');
$inform_server_secure->plugin_title = "User Import Export";
$inform_server_secure->banner_message = sprintf(__("The <b>%s</b> plugin uploads the imported file into <b>wp-content/webtoffee_import</b> folder. Please ensure that public access restrictions are set in your server for this folder."), $inform_server_secure->plugin_title);
add_action('wt_user_addon_basic_help_content', 'wt_user_import_basic_help_content');
function wt_user_import_basic_help_content() {
if (defined('WT_IEW_PLUGIN_ID_BASIC')) {
?>
<li>
<img src="<?php echo WT_U_IEW_PLUGIN_URL; ?>assets/images/sample-csv.png">
<h3><?php _e('Sample User CSV'); ?></h3>
<p><?php _e('Familiarize yourself with the sample CSV.'); ?></p>
<a target="_blank" href="https://www.webtoffee.com/wp-content/uploads/2020/10/Sample_Users.csv" class="button button-primary">
<?php _e('Get User CSV'); ?>
</a>
</li>
<?php
}
}
add_action( 'wt_user_addon_basic_gopro_content', 'wt_user_addon_basic_gopro_content' );
function wt_user_addon_basic_gopro_content() {
if ( defined( 'WT_IEW_PLUGIN_ID_BASIC' ) ) {
?>
<div class="wt-ier-user wt-ier-gopro-cta wt-ierpro-features" style="display: none;">
<ul class="ticked-list wt-ierpro-allfeat">
<li><?php _e('Import and export in XLS and XLSX formats'); ?><span class="wt-iew-upgrade-to-pro-new-feature"><?php esc_html_e( 'New' ); ?></span></li>
<li><?php _e('All free version features'); ?></li>
<li><?php _e('XML file type support'); ?></li>
<li><?php _e('Export and import custom fields and third-party plugin fields'); ?></li>
<li><?php _e('Option to send emails to new users on import'); ?></li>
<li><?php _e('Customize email send to new users on import'); ?></li>
<li><?php _e('Import from URL, FTP/SFTP'); ?></li>
<li><?php _e('Export to FTP/SFTP'); ?></li>
<li><?php _e('Run scheduled automatic import and export '); ?></li>
<li><?php _e('Tested compatibility with major third-party plugins.'); ?></li>
</ul>
<div class="wt-ierpro-btn-wrapper">
<a href="<?php echo "https://www.webtoffee.com/product/wordpress-users-woocommerce-customers-import-export/?utm_source=free_plugin_revamp&utm_medium=basic_revamp&utm_campaign=User_Import_Export&utm_content=" . WT_U_IEW_VERSION; ?>" target="_blank" class="wt-ierpro-outline-btn"><?php _e('UPGRADE TO PREMIUM'); ?></a>
</div>
<p style="padding-left:25px;"><b><a href="<?php echo admin_url('admin.php?page=wt_import_export_for_woo_basic#wt-pro-upgrade'); ?>" target="_blank"><?php _e('Get more import export addons >>'); ?></a></b></p>
</div>
<?php
}
}
/**
* Add Export to CSV link in users listing page near the filter button.
*
* @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
*/
function export_csv_linkin_user_listing_page($which) {
$currentScreen = get_current_screen();
if ('users' === $currentScreen->id && !is_plugin_active( 'wt-import-export-for-woo/wt-import-export-for-woo.php' ) ) {
echo '<a target="_blank" href="' . admin_url('admin.php?page=wt_import_export_for_woo_basic_export&wt_to_export=user') . '" class="button" >' . __('Export to CSV') . ' </a>';
}
}
add_filter('manage_users_extra_tablenav', 'export_csv_linkin_user_listing_page');
/*
* Add CSS for Pro Upgrade link in export/import menu
*/
add_action('admin_head', 'wt_pro_upgrad_link');
if (!function_exists('wt_pro_upgrad_link')) {
function wt_pro_upgrad_link() {
echo '<style>.wp-submenu li span.wt-go-premium {font-weight: 700;color: #28e499;} </style>';
}
}