Advertisement
palsushobhan

wcfm-measurement-plugin-patch

Dec 6th, 2021
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 105.95 KB | None | 0 0
  1. <?php
  2. /**
  3.  * WCFM plugin view
  4.  *
  5.  * WCFM WC Measurement and Price Calculator Product Manage View
  6.  *
  7.  * @author      WC Lovers
  8.  * @package     wcfmu/views/thirdparty
  9.  * @version   5.4.1
  10.  */
  11.  
  12. global $wp, $WCFM, $WCFMu, $post, $woocommerce;
  13.  
  14. if( !class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v5_5_0\\SV_WC_Plugin' ) ) return;
  15.  
  16. use SkyVerge\WooCommerce\PluginFramework\v5_5_0 as Framework;
  17.  
  18. if( !apply_filters( 'wcfm_is_allow_wc_measurement_price_calculator', true ) ) {
  19.     return;
  20. }
  21.  
  22. $product_id = 0;
  23. $users  = array();
  24.  
  25. if( isset( $wp->query_vars['wcfm-products-manage'] ) && !empty( $wp->query_vars['wcfm-products-manage'] ) ) {
  26.     $product_id = $wp->query_vars['wcfm-products-manage'];
  27.    
  28.     $post = get_post( $product_id );
  29.    
  30.     /*$product  = wc_get_product( $product_id );
  31.     if( $product && !empty($product) && is_object($product) ) {
  32.         $waitlist = new Pie_WCWL_Waitlist( $product );
  33.         $users    = $waitlist->waitlist;
  34.     }*/
  35. }
  36.  
  37. include_once dirname( WC_PLUGIN_FILE ) . '/includes/admin/wc-meta-box-functions.php';
  38. if ( Framework\SV_WC_Plugin_Compatibility::is_wc_version_gte( '3.3' ) ) {
  39.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/src/admin/post-types/writepanels/writepanel-product_data.php' );
  40.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/src/admin/post-types/writepanels/writepanel-product_data-calculator.php' );
  41.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/src/admin/post-types/writepanels/writepanel-product-type-variable.php' );
  42. } else {
  43.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/admin/post-types/writepanels/writepanel-product_data.php' );
  44.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/admin/post-types/writepanels/writepanel-product_data-calculator.php' );
  45.     include_once( wc_measurement_price_calculator()->get_plugin_path() . '/admin/post-types/writepanels/writepanel-product-type-variable.php' );
  46. }
  47.  
  48. // add additional physical property units/measurements
  49. add_filter( 'woocommerce_products_general_settings', 'wcfm_measurement_price_calculator_woocommerce_catalog_settings' );
  50.  
  51.  
  52. /**
  53.  * Modify the WooCommerce > Settings > Catalog page to add additional
  54.  * units of measurement, and physical properties to the config
  55.  *
  56.  * TODO: Perhaps the additional weight/dimension units should be added to the core, unless there was some reason they weren't there to begin with.  Then there's the core woocommerce_get_dimension() and woocommerce_get_dimension() functions to consider
  57.  *
  58.  * @param array $settings
  59.  * @return array new settings
  60.  */
  61. function wcfm_measurement_price_calculator_woocommerce_catalog_settings( $settings ) {
  62.     $new_settings = array();
  63.     foreach ( $settings as &$setting ) {
  64.  
  65.         // safely add metric ton and english ton units to the weight units, in the correct order
  66.         if ( 'woocommerce_weight_unit' === $setting['id'] ) {
  67.             $options = array();
  68.             if ( ! isset( $setting['options']['t'] ) ) $options['t'] = _x( 't', 'metric ton', 'woocommerce-measurement-price-calculator' );  // metric ton
  69.             foreach ( $setting['options'] as $key => $value ) {
  70.                 if ( 'lbs' === $key ) {
  71.                     if ( ! isset( $setting['options']['tn'] ) ) $options['tn'] = _x( 'tn', 'english ton', 'woocommerce-measurement-price-calculator' );  // english ton
  72.                     $options[ $key ] = $value;
  73.                 } else {
  74.                     if ( ! isset( $options[ $key ] ) ) $options[ $key ] = $value;
  75.                 }
  76.             }
  77.             $setting['options'] = $options;
  78.         }
  79.  
  80.         // safely add kilometer, foot, mile to the dimensions units, in the correct order
  81.         if ( 'woocommerce_dimension_unit' === $setting['id'] ) {
  82.             $options = array();
  83.             if ( ! isset( $setting['options']['km'] ) ) $options['km'] = _x( 'km', 'kilometer', 'woocommerce-measurement-price-calculator' );  // kilometer
  84.             foreach ( $setting['options'] as $key => $value ) {
  85.                 if ( 'in' === $key ) {
  86.                     $options[ $key ] = $value;
  87.                     if ( ! isset( $setting['options']['ft'] ) ) $options['ft'] = _x( 'ft', 'foot', 'woocommerce-measurement-price-calculator' );  // foot
  88.                     if ( ! isset( $options['yd'] ) ) $options['yd'] = _x( 'yd', 'yard', 'woocommerce-measurement-price-calculator' );  // yard (correct order)
  89.                     if ( ! isset( $setting['options']['mi'] ) ) $options['mi'] = _x( 'mi', 'mile', 'woocommerce-measurement-price-calculator' );  // mile
  90.                 } else {
  91.                     if ( ! isset( $options[ $key ] ) ) $options[ $key ] = $value;
  92.                 }
  93.             }
  94.             $setting['options'] = $options;
  95.         }
  96.  
  97.         // add the setting into our new set of settings
  98.         $new_settings[] = $setting;
  99.  
  100.         // add our area and volume units
  101.         if ( 'woocommerce_dimension_unit' === $setting['id'] ) {
  102.  
  103.             $new_settings[] = array(
  104.                 'name'    => __( 'Area Unit', 'woocommerce-measurement-price-calculator' ),
  105.                 'desc'    => __( 'This controls what unit you can define areas in for the Measurements Price Calculator.', 'woocommerce-measurement-price-calculator' ),
  106.                 'id'      => 'woocommerce_area_unit',
  107.                 'css'     => 'min-width:300px;',
  108.                 'std'     => 'sq cm',
  109.                 'type'    => 'select',
  110.                 'class'   => 'wc-enhanced-select',
  111.                 'options' => array(
  112.                     'ha'      => _x( 'ha',      'hectare',           'woocommerce-measurement-price-calculator' ),
  113.                     'sq km'   => _x( 'sq km',   'square kilometer',  'woocommerce-measurement-price-calculator' ),
  114.                     'sq m'    => _x( 'sq m',    'square meter',      'woocommerce-measurement-price-calculator' ),
  115.                     'sq cm'   => _x( 'sq cm',   'square centimeter', 'woocommerce-measurement-price-calculator' ),
  116.                     'sq mm'   => _x( 'sq mm',   'square millimeter', 'woocommerce-measurement-price-calculator' ),
  117.                     'acs'     => _x( 'acs',     'acre',              'woocommerce-measurement-price-calculator' ),
  118.                     'sq. mi.' => _x( 'sq. mi.', 'square mile',       'woocommerce-measurement-price-calculator' ),
  119.                     'sq. yd.' => _x( 'sq. yd.', 'square yard',       'woocommerce-measurement-price-calculator' ),
  120.                     'sq. ft.' => _x( 'sq. ft.', 'square foot',       'woocommerce-measurement-price-calculator' ),
  121.                     'sq. in.' => _x( 'sq. in.', 'square inch',       'woocommerce-measurement-price-calculator' ),
  122.                 ),
  123.                 'desc_tip'  =>  true,
  124.             );
  125.  
  126.             // Note: 'cu mm' and 'cu km' are left out because they aren't really all that useful
  127.             $new_settings[] = array(
  128.                 'name'    => __( 'Volume Unit', 'woocommerce-measurement-price-calculator' ),
  129.                 'desc'    => __( 'This controls what unit you can define volumes in for the Measurements Price Calculator.', 'woocommerce-measurement-price-calculator' ),
  130.                 'id'      => 'woocommerce_volume_unit',
  131.                 'css'     => 'min-width:300px;',
  132.                 'std'     => 'ml',
  133.                 'type'    => 'select',
  134.                 'class'   => 'wc-enhanced-select',
  135.                 'options' => array(
  136.                     'cu m'    => _x( 'cu m',    'cubic meter', 'woocommerce-measurement-price-calculator' ),
  137.                     'l'       => _x( 'l',       'liter',       'woocommerce-measurement-price-calculator' ),
  138.                     'ml'      => _x( 'ml',      'milliliter',  'woocommerce-measurement-price-calculator' ),  // aka 'cu cm'
  139.                     'gal'     => _x( 'gal',     'gallon',      'woocommerce-measurement-price-calculator' ),
  140.                     'qt'      => _x( 'qt',      'quart',       'woocommerce-measurement-price-calculator' ),
  141.                     'pt'      => _x( 'pt',      'pint',        'woocommerce-measurement-price-calculator' ),
  142.                     'cup'     => __( 'cup',     'woocommerce-measurement-price-calculator' ),
  143.                     'fl. oz.' => _x( 'fl. oz.', 'fluid ounce', 'woocommerce-measurement-price-calculator' ),
  144.                     'cu. yd.' => _x( 'cu. yd.', 'cubic yard',  'woocommerce-measurement-price-calculator' ),
  145.                     'cu. ft.' => _x( 'cu. ft.', 'cubic foot',  'woocommerce-measurement-price-calculator' ),
  146.                     'cu. in.' => _x( 'cu. in.', 'cubic inch',  'woocommerce-measurement-price-calculator' ),
  147.                 ),
  148.                 'desc_tip' => true,
  149.             );
  150.         }
  151.     }
  152.  
  153.     return $new_settings;
  154. }
  155.  
  156. /**
  157.  * Returns the WooCommerce product settings, containing measurement units
  158.  *
  159.  * @since 3.3
  160.  */
  161. if( !function_exists( 'wcfm_measurement_price_calculator_get_wc_settings' ) ) {
  162.     function wcfm_measurement_price_calculator_get_wc_settings() {
  163.    
  164.         $plugin_path = wc()->plugin_path();
  165.  
  166.         if ( Framework\SV_WC_Plugin_Compatibility::is_wc_version_gte( '3.3' ) ) {
  167.    
  168.             if (    ! class_exists( 'WC_Settings_Page', false )
  169.                      || ! class_exists( 'WC_Settings_Products', false ) ) {
  170.    
  171.                 if ( ! class_exists( 'WC_Admin_Settings', false ) ) {
  172.                     include_once( $plugin_path . '/includes/admin/class-wc-admin-settings.php' );
  173.                 }
  174.    
  175.                 \WC_Admin_Settings::get_settings_pages();
  176.             }
  177.    
  178.             $settings_products = new \WC_Settings_Products();
  179.    
  180.         } else {
  181.    
  182.             include_once( $plugin_path . '/includes/admin/settings/class-wc-settings-page.php' );
  183.    
  184.             $settings_products = include( $plugin_path . '/includes/admin/settings/class-wc-settings-products.php' );
  185.         }
  186.         return $settings_products->get_settings();
  187.     }
  188. }
  189.  
  190. /**
  191.  * Returns all available weight units
  192.  *
  193.  * @since 3.0
  194.  * @return array of weight units
  195.  */
  196. if( !function_exists( 'wcfm_measurement_price_calculator_get_weight_units' ) ) {
  197.     function wcfm_measurement_price_calculator_get_weight_units() {
  198.    
  199.         $settings = wcfm_measurement_price_calculator_get_wc_settings();
  200.    
  201.         foreach ( $settings as $setting ) {
  202.             if ( 'woocommerce_weight_unit' === $setting['id'] ) {
  203.                 return $setting['options'];
  204.             }
  205.         }
  206.    
  207.         // default in case the woocommerce settings are not available
  208.         return array(
  209.             __( 'g', 'woocommerce-measurement-price-calculator' )   => __( 'g', 'woocommerce-measurement-price-calculator' ),
  210.             __( 'kg', 'woocommerce-measurement-price-calculator' )  => __( 'kg', 'woocommerce-measurement-price-calculator' ),
  211.             __( 't', 'woocommerce-measurement-price-calculator' )   => __( 't', 'woocommerce-measurement-price-calculator' ),
  212.             __( 'oz', 'woocommerce-measurement-price-calculator' )  => __( 'oz', 'woocommerce-measurement-price-calculator' ),
  213.             __( 'lbs', 'woocommerce-measurement-price-calculator' ) => __( 'lbs', 'woocommerce-measurement-price-calculator' ),
  214.             __( 'tn', 'woocommerce-measurement-price-calculator' )  => __( 'tn', 'woocommerce-measurement-price-calculator' ),
  215.         );
  216.     }
  217. }
  218.  
  219.  
  220. /**
  221.  * Returns all available dimension units
  222.  *
  223.  * @since 3.0
  224.  * @return array of dimension units
  225.  */
  226. if( !function_exists( 'wcfm_measurement_price_calculator_get_dimension_units' ) ) {
  227.     function wcfm_measurement_price_calculator_get_dimension_units() {
  228.    
  229.         $settings = wcfm_measurement_price_calculator_get_wc_settings();
  230.        
  231.         if ( $settings ) {
  232.             foreach ( $settings as $setting ) {
  233.                 if ( 'woocommerce_dimension_unit' === $setting['id'] ) {
  234.                     return $setting['options'];
  235.                 }
  236.             }
  237.         }
  238.    
  239.         // default in case the woocommerce settings are not available
  240.         return array(
  241.             __( 'mm', 'woocommerce-measurement-price-calculator' ) => __( 'mm', 'woocommerce-measurement-price-calculator' ),
  242.             __( 'cm', 'woocommerce-measurement-price-calculator' ) => __( 'cm', 'woocommerce-measurement-price-calculator' ),
  243.             __( 'm',  'woocommerce-measurement-price-calculator' ) => __( 'm',  'woocommerce-measurement-price-calculator' ),
  244.             __( 'km', 'woocommerce-measurement-price-calculator' ) => __( 'km', 'woocommerce-measurement-price-calculator' ),
  245.             __( 'in', 'woocommerce-measurement-price-calculator' ) => __( 'in', 'woocommerce-measurement-price-calculator' ),
  246.             __( 'ft', 'woocommerce-measurement-price-calculator' ) => __( 'ft', 'woocommerce-measurement-price-calculator' ),
  247.             __( 'yd', 'woocommerce-measurement-price-calculator' ) => __( 'yd', 'woocommerce-measurement-price-calculator' ),
  248.             __( 'mi', 'woocommerce-measurement-price-calculator' ) => __( 'mi', 'woocommerce-measurement-price-calculator' ),
  249.         );
  250.     }
  251. }
  252.  
  253.  
  254. /**
  255.  * Returns all available area units
  256.  *
  257.  * @since 3.0
  258.  * @return array of area units
  259.  */
  260. if( !function_exists( 'wcfm_measurement_price_calculator_get_area_units' ) ) {
  261.     function wcfm_measurement_price_calculator_get_area_units() {
  262.    
  263.         $settings = wcfm_measurement_price_calculator_get_wc_settings();
  264.    
  265.         if ( $settings ) {
  266.             foreach ( $settings as $setting ) {
  267.                 if ( 'woocommerce_area_unit' === $setting['id'] ) {
  268.                     return $setting['options'];
  269.                 }
  270.             }
  271.         }
  272.    
  273.         // default in case the woocommerce settings are not available
  274.         return array(
  275.             __( 'sq mm',   'woocommerce-measurement-price-calculator' ) => __( 'sq mm',   'woocommerce-measurement-price-calculator' ),
  276.             __( 'sq cm',   'woocommerce-measurement-price-calculator' ) => __( 'sq cm',   'woocommerce-measurement-price-calculator' ),
  277.             __( 'sq m',    'woocommerce-measurement-price-calculator' ) => __( 'sq m',    'woocommerce-measurement-price-calculator' ),
  278.             __( 'ha',      'woocommerce-measurement-price-calculator' ) => __( 'ha',      'woocommerce-measurement-price-calculator' ),
  279.             __( 'sq km',   'woocommerce-measurement-price-calculator' ) => __( 'sq km',   'woocommerce-measurement-price-calculator' ),
  280.             __( 'sq. in.', 'woocommerce-measurement-price-calculator' ) => __( 'sq. in.', 'woocommerce-measurement-price-calculator' ),
  281.             __( 'sq. ft.', 'woocommerce-measurement-price-calculator' ) => __( 'sq. ft.', 'woocommerce-measurement-price-calculator' ),
  282.             __( 'sq. yd.', 'woocommerce-measurement-price-calculator' ) => __( 'sq. yd.', 'woocommerce-measurement-price-calculator' ),
  283.             __( 'acs',     'woocommerce-measurement-price-calculator' ) => __( 'acs',     'woocommerce-measurement-price-calculator' ),
  284.             __( 'sq. mi.', 'woocommerce-measurement-price-calculator' ) => __( 'sq. mi.', 'woocommerce-measurement-price-calculator' ),
  285.         );
  286.     }
  287. }
  288.  
  289. /**
  290.  * Render attributes inputs based on the measurement calculator option.
  291.  *
  292.  * @since 3.12.0
  293.  *
  294.  * @param array $args
  295.  * @return void
  296.  */
  297. if( !function_exists( 'wcfm_measurement_price_calculator_attributes_inputs' ) ) {
  298.     function wcfm_measurement_price_calculator_attributes_inputs( $args ) {
  299.    
  300.         $args = wp_parse_args( $args, array(
  301.             'measurement'   => '',
  302.             'input_name'    => '',
  303.             'input_label'   => '',
  304.             'settings'      => array(),
  305.             'limited_field' => '',
  306.         ) );
  307.    
  308.         $settings    = $args['settings'];
  309.         $measurement = $args['measurement'];
  310.         $input_name  = $args['input_name'];
  311.    
  312.         if ( ! isset( $settings[ $measurement ] ) || ! isset( $settings[ $measurement ][ $input_name ] ) ) {
  313.             return;
  314.         }
  315.    
  316.         $inputs_id_prefix = $measurement === $input_name ? "_measurement_{$measurement}" : "_measurement_{$measurement}_{$input_name}";
  317.    
  318.         // for backwards compat to set an initial value; remove empty strings
  319.         $original_options = array_filter( $settings[ $measurement ][ $input_name ]['options'] );
  320.    
  321.         woocommerce_wp_select( array(
  322.             'id'                => "{$inputs_id_prefix}_accepted_input",
  323.             'value'             => isset( $settings[$measurement][$input_name]['accepted_input'] ) ? $settings[$measurement][$input_name]['accepted_input'] : ( ! empty( $original_options ) ? 'limited' : 'free' ),
  324.             'class'             => 'short small-text _measurement_accepted_input',
  325.             'wrapper_class'     => '_measurement_pricing_calculator_fields',
  326.             'label'             => sprintf( __( '%s Input', 'woocommerce-measurement-price-calculator' ), $args['input_label'] ),
  327.             'options'           => array(
  328.                 'free'    => __( 'Accept free-form customer input', 'woocommerce-measurement-price-calculator' ),
  329.                 'limited' => __( 'Accept a limited set of customer inputs', 'woocommerce-measurement-price-calculator' ),
  330.             ),
  331.             'custom_attributes' => array(
  332.                 'data-free'    => ".{$inputs_id_prefix}_input_attributes_field",
  333.                 'data-limited' => ".{$args['limited_field']}_field",
  334.             ),
  335.         ) );
  336.    
  337.         // these won't be set for stores upgrading to 3.12.0, have a sanity check
  338.         $min_value  = isset( $settings[ $measurement ][ $input_name ]['input_attributes']['min'] )  ? $settings[ $measurement ][ $input_name ]['input_attributes']['min']  : '';
  339.         $max_value  = isset( $settings[ $measurement ][ $input_name ]['input_attributes']['max'] )  ? $settings[ $measurement ][ $input_name ]['input_attributes']['max']  : '';
  340.         $step_value = isset( $settings[ $measurement ][ $input_name ]['input_attributes']['step'] ) ? $settings[ $measurement ][ $input_name ]['input_attributes']['step'] : '';
  341.    
  342.         ?>
  343.         <p class="form-field <?php echo $inputs_id_prefix; ?>_input_attributes_field _measurement_pricing_calculator_fields _measurement_input_attributes dimensions_field">
  344.             <label><?php printf( __( '%s Options', 'woocommerce-measurement-price-calculator' ), $args['input_label'] ); ?></label>
  345.             <span class="wrap">
  346.             <input placeholder="<?php esc_attr_e( 'Min value', 'woocommerce-measurement-price-calculator' ); ?>"
  347.                          class="input-text wc_input_decimal" size="6" type="number" step="any"
  348.                          name="<?php echo $inputs_id_prefix; ?>_input_attributes[min]"
  349.                          value="<?php echo esc_attr( $min_value ); ?>"/>
  350.             <input placeholder="<?php esc_attr_e( 'Max value', 'woocommerce-measurement-price-calculator' ); ?>"
  351.                          class="input-text wc_input_decimal" size="6" type="number" step="any"
  352.                          name="<?php echo $inputs_id_prefix; ?>_input_attributes[max]"
  353.                          value="<?php echo esc_attr( $max_value ); ?>"/>
  354.             <input placeholder="<?php esc_attr_e( 'Increment', 'woocommerce-measurement-price-calculator' ); ?>"
  355.                          class="input-text wc_input_decimal last" size="6" type="number" step="any"
  356.                          name="<?php echo $inputs_id_prefix; ?>_input_attributes[step]"
  357.                          value="<?php echo esc_attr( $step_value ); ?>" />
  358.             </span>
  359.             <?php echo wc_help_tip( __( 'If applicable, enter limits to restrict customer input, such as an accepted increment and/or maximum value.', 'woocommerce-measurement-price-calculator' ) ); ?>
  360.         </p>
  361.         <?php
  362.     }
  363. }
  364.  
  365. /**
  366.  * Output a radio input box.
  367.  *
  368.  * @access public
  369.  * @param array $field with required fields 'id' and 'rbvalue'
  370.  * @return void
  371.  */
  372. if( !function_exists( 'wcfm_measurement_price_calculator_wp_radio' ) ) {
  373.     function wcfm_measurement_price_calculator_wp_radio( $field ) {
  374.         global $thepostid, $post;
  375.    
  376.         if ( ! $thepostid ) {
  377.             $thepostid = $product_id;
  378.         }
  379.         if ( ! isset( $field['class'] ) ) {
  380.             $field['class'] = 'radio';
  381.         }
  382.         if ( ! isset( $field['wrapper_class'] ) ) {
  383.             $field['wrapper_class'] = '';
  384.         }
  385.         if ( ! isset( $field['name'] ) ) {
  386.             $field['name'] = $field['id'];
  387.         }
  388.         if ( ! isset( $field['value'] ) ) {
  389.             $product        = wc_get_product( $thepostid );
  390.             $field['value'] = $product ? SV_WC_Product_Compatibility::get_meta( $product, $field['name'], true ) : '';
  391.         }
  392.    
  393.         echo '<p class="form-field ' . $field['id'] . '_field ' . $field['wrapper_class'] . '"><label for="' . $field['id'].'">' . $field['label'] . '</label><input type="radio" class="' . $field['class'] . '" name="' . $field['name'] . '" id="' . $field['id'] . '" value="' . $field['rbvalue'] . '" ';
  394.    
  395.         checked( $field['value'], $field['rbvalue'] );
  396.    
  397.         echo ' /> ';
  398.    
  399.         if ( isset( $field['description'] ) && $field['description'] ) echo '<span class="description">' . $field['description'] . '</span>';
  400.    
  401.         echo '</p>';
  402.     }
  403. }
  404.  
  405. /**
  406.  * Render pricing overage input based on the measurement calculator option.
  407.  *
  408.  * @since 3.12.0
  409.  *
  410.  * @param string $measurement_type
  411.  * @param array $settings
  412.  * @return void
  413.  */
  414. if( !function_exists( 'wcfm_measurement_price_calculator_overage_input' ) ) {
  415.     function wcfm_measurement_price_calculator_overage_input( $measurement_type, $settings ) {
  416.    
  417.         $id    = "_measurement_{$measurement_type}_pricing_overage";
  418.         $value = isset( $settings[ $measurement_type ]['pricing']['overage'] ) ? $settings[ $measurement_type ]['pricing']['overage'] : '';
  419.    
  420.         woocommerce_wp_text_input( array(
  421.             'id'                => $id,
  422.             'value'             => $value,
  423.             'type'              => 'number',
  424.             'decimal'           => 'decimal',
  425.             'class'             => 'short small-text _measurement_pricing_overage',
  426.             'wrapper_class'     => '_measurement_pricing_calculator_fields',
  427.             'placeholder'       => '%',
  428.             'label'             => __( 'Add Overage ', 'woocommerce-measurement-price-calculator' ),
  429.             'description'       => __( 'If you need to add and charge for a cut or overage estimate in addition to the customer input, enter the percentage of the total measurement to use.', 'woocommerce-measurement-price-calculator' ),
  430.             'desc_tip'          => true,
  431.             'custom_attributes' => array(
  432.                 'min'  => '0',
  433.                 'max'  => '100',
  434.                 'step' => '1',
  435.             ),
  436.         ) );
  437.     }
  438. }
  439.  
  440.  
  441. /**
  442.  * Returns all available volume units
  443.  *
  444.  * @since 3.0
  445.  * @return array of volume units
  446.  */
  447. if( !function_exists( 'wcfm_measurement_price_calculator_get_volume_units' ) ) {
  448.     function wcfm_measurement_price_calculator_get_volume_units() {
  449.    
  450.         $settings = wcfm_measurement_price_calculator_get_wc_settings();
  451.    
  452.         if ( $settings ) {
  453.             foreach ( $settings as $setting ) {
  454.                 if ( 'woocommerce_volume_unit' === $setting['id'] ) {
  455.                     return $setting['options'];
  456.                 }
  457.             }
  458.         }
  459.    
  460.         // default in case the woocommerce settings are not available
  461.         return array(
  462.             __( 'ml',      'woocommerce-measurement-price-calculator' ) => __( 'ml',      'woocommerce-measurement-price-calculator' ),
  463.             __( 'l',       'woocommerce-measurement-price-calculator' ) => __( 'l',       'woocommerce-measurement-price-calculator' ),
  464.             __( 'cu m',    'woocommerce-measurement-price-calculator' ) => __( 'cu m',    'woocommerce-measurement-price-calculator' ),
  465.             __( 'cup',     'woocommerce-measurement-price-calculator' ) => __( 'cup',     'woocommerce-measurement-price-calculator' ),
  466.             __( 'pt',      'woocommerce-measurement-price-calculator' ) => __( 'pt',      'woocommerce-measurement-price-calculator' ),
  467.             __( 'qt',      'woocommerce-measurement-price-calculator' ) => __( 'qt',      'woocommerce-measurement-price-calculator' ),
  468.             __( 'gal',     'woocommerce-measurement-price-calculator' ) => __( 'gal',     'woocommerce-measurement-price-calculator' ),
  469.             __( 'fl. oz.', 'woocommerce-measurement-price-calculator' ) => __( 'fl. oz.', 'woocommerce-measurement-price-calculator' ),
  470.             __( 'cu. in.', 'woocommerce-measurement-price-calculator' ) => __( 'cu. in.', 'woocommerce-measurement-price-calculator' ),
  471.             __( 'cu. ft.', 'woocommerce-measurement-price-calculator' ) => __( 'cu. ft.', 'woocommerce-measurement-price-calculator' ),
  472.             __( 'cu. yd.', 'woocommerce-measurement-price-calculator' ) => __( 'cu. yd.', 'woocommerce-measurement-price-calculator' ),
  473.         );
  474.     }
  475. }
  476.  
  477. /**
  478.  * Helper function to output limited option set.
  479.  *
  480.  * @since 3.12.8
  481.  *
  482.  * @param string[] $options original options array
  483.  * @return string delimited options
  484.  */
  485. if( !function_exists( 'wcfm_measurement_price_calculator_get_options_value' ) ) {
  486.     function wcfm_measurement_price_calculator_get_options_value( $options ) {
  487.    
  488.         $value = null;
  489.    
  490.         if ( ',' === trim( wc_get_price_decimal_separator() ) ) {
  491.             $value = implode( '; ', $options );
  492.         }
  493.    
  494.         return $value ? $value : implode( ', ', $options );
  495.     }
  496. }
  497.  
  498. /**
  499.  * Helper to get the "options" input description.
  500.  *
  501.  * @since 3.12.8
  502.  *
  503.  * @return string description text
  504.  */
  505. if( !function_exists( 'wcfm_measurement_price_calculator_get_options_tooltip' ) ) {
  506.     function wcfm_measurement_price_calculator_get_options_tooltip() {
  507.    
  508.         // use semi-colons if commas are used as the decimal separator
  509.         $delimiter = ',' === trim( wc_get_price_decimal_separator() ) ? 'semicolon' : 'comma';
  510.    
  511.         /* translators: Placeholder: %s - delimiter to use in the input */
  512.         $description = sprintf( __( 'Use a single number to set a fixed value for this field on the frontend, or a %s-separated list of numbers to create a select box for the customer to choose between.', 'woocommerce-measurement-price-calculator' ), $delimiter );
  513.    
  514.         if ( 'semicolon' === $delimiter ) {
  515.             $description .= ' ' . __( 'Example: 1/8; 0,5; 2', 'woocommerce-measurement-price-calculator' );
  516.         } else {
  517.             $description .= ' ' . __( 'Example: 1/8, 0.5, 2', 'woocommerce-measurement-price-calculator' );
  518.         }
  519.    
  520.         return $description;
  521.     }
  522. }
  523.  
  524. $measurement_units = array(
  525.         'weight'    => wcfm_measurement_price_calculator_get_weight_units(),
  526.         'dimension' => wcfm_measurement_price_calculator_get_dimension_units(),
  527.         'area'      => wcfm_measurement_price_calculator_get_area_units(),
  528.         'volume'    => wcfm_measurement_price_calculator_get_volume_units(),
  529.     );
  530.  
  531. ?>
  532.  
  533. <div class="page_collapsible products_manage_wc_measurement_price_calculator simple variable" id="wcfm_products_manage_form_wc_measurement_price_calculator_head"><label class="wcfmfa fa-weight"></label><?php _e('Measurement', 'wc-frontend-manager-ultimate'); ?><span></span></div>
  534. <div class="wcfm-container simple variable">
  535.     <div id="wcfm_products_manage_form_wc_measurement_price_calculator_expander" class="wcfm-content">
  536.       <h2><?php _e('Measurement Price Setting', 'wc-frontend-manager-ultimate'); ?></h2>
  537.       <div class="wcfm_clearfix"></div>
  538.      
  539.       <div id="measurement_product_data" class="panel woocommerce_options_panel">
  540.             <style type="text/css">
  541.                 #measurement_product_data hr { height:2px; border-style:none; border-bottom:solid 1px white; color:#DFDFDF; background-color:#DFDFDF; }
  542.                 .measurement-subnav { margin:14px 12px; }
  543.                 .measurement-subnav a { text-decoration:none; }
  544.                 .measurement-subnav a.active { color:black; font-weight:bold; }
  545.                 .measurement-subnav a.disabled { color: #8A7F7F; cursor: default; }
  546.                 #measurement_product_data .wc-calculator-pricing-table td.wc-calculator-pricing-rule-range input { float:none; width:auto; }
  547.                 #measurement_product_data table.wc-calculator-pricing-table { margin: 12px; width: 95%; }
  548.                 #measurement_product_data table.wc-calculator-pricing-table td { padding: 10px 7px 10px; cursor: move; }
  549.                 #measurement_product_data table.wc-calculator-pricing-table button { font-family: sans-serif; }
  550.                 #measurement_product_data table.wc-calculator-pricing-table button.wc-calculator-pricing-table-delete-rules { float: right; }
  551.                 #measurement_product_data input._measurement_pricing_overage { width: 65px !important; }
  552.             </style>
  553.             <div class="measurement-subnav">
  554.                 <a class="active" href="#calculator-settings"><?php esc_html_e( 'Calculator Settings', 'woocommerce-measurement-price-calculator' ); ?></a> |
  555.                 <a class="wc-measurement-price-calculator-pricing-table" href="#calculator-pricing-table"><?php esc_html_e( 'Pricing Table', 'woocommerce-measurement-price-calculator' ); ?></a>
  556.             </div>
  557.             <hr/>
  558.             <?php
  559.             $settings = new WC_Price_Calculator_Settings( $product_id );
  560.    
  561.             $pricing_weight_wrapper_class = '';
  562.             if ( 'no' === get_option( 'woocommerce_enable_weight', true ) ) {
  563.                 $pricing_weight_wrapper_class = 'hidden';
  564.             }
  565.    
  566.             $settings = $settings->get_raw_settings();  // we want the underlying raw settings array
  567.    
  568.             $calculator_options = array(
  569.                 ''                 => __( 'None',                         'woocommerce-measurement-price-calculator' ),
  570.                 'dimension'        => __( 'Dimensions',                   'woocommerce-measurement-price-calculator' ),
  571.                 'area'             => __( 'Area',                         'woocommerce-measurement-price-calculator' ),
  572.                 'area-dimension'   => __( 'Area (LxW)',                   'woocommerce-measurement-price-calculator' ),
  573.                 'area-linear'      => __( 'Perimeter (2L + 2W)',          'woocommerce-measurement-price-calculator' ),
  574.                 'area-surface'     => __( 'Surface Area 2(LW + LH + WH)', 'woocommerce-measurement-price-calculator' ),
  575.                 'volume'           => __( 'Volume',                       'woocommerce-measurement-price-calculator' ),
  576.                 'volume-dimension' => __( 'Volume (LxWxH)',               'woocommerce-measurement-price-calculator' ),
  577.                 'volume-area'      => __( 'Volume (AxH)',                 'woocommerce-measurement-price-calculator' ),
  578.                 'weight'           => __( 'Weight',                       'woocommerce-measurement-price-calculator' ),
  579.                 'wall-dimension'   => __( 'Room Walls',                   'woocommerce-measurement-price-calculator' ),
  580.             );
  581.    
  582.             echo '<div id="calculator-settings" class="calculator-subpanel">';
  583.    
  584.             // Measurement select
  585.             woocommerce_wp_select( array(
  586.                 'id'          => '_measurement_price_calculator',
  587.                 'value'       => $settings['calculator_type'],
  588.                 'label'       => __( 'Measurement', 'woocommerce-measurement-price-calculator' ),
  589.                 'options'     => $calculator_options,
  590.                 'description' => __( 'Select the product measurement to calculate quantity by or define pricing within.', 'woocommerce-measurement-price-calculator' ),
  591.                 'desc_tip'    => true,
  592.             ) );
  593.    
  594.             echo '<p id="area-dimension_description" class="measurement_description" style="display:none;">' .   __( "Use this measurement to have the customer prompted for a length and width to calculate the area required.  When pricing is disabled (no custom dimensions) this calculator uses the product area attribute or otherwise the length and width attributes to determine the product area.", 'woocommerce-measurement-price-calculator' ) . '</p>';
  595.             echo '<p id="area-linear_description" class="measurement_description" style="display:none;">' .      __( "Use this measurement to have the customer prompted for a length and width to calculate the linear distance (L * 2 + W * 2).", 'woocommerce-measurement-price-calculator' ) . '</p>';
  596.             echo '<p id="area-surface_description" class="measurement_description" style="display:none;">' .     __( "Use this measurement to have the customer prompted for a length, width and height to calculate the surface area 2 * (L * W + W * H + L * H).", 'woocommerce-measurement-price-calculator' ) . '</p>';
  597.             echo '<p id="volume-dimension_description" class="measurement_description" style="display:none;">' . __( "Use this measurement to have the customer prompted for a length, width and height to calculate the volume required.  When pricing is disabled (no custom dimensions) this calculator uses the product volume attribute or otherwise the length, width and height attributes to determine the product volume.", 'woocommerce-measurement-price-calculator' ) . '</p>';
  598.             echo '<p id="volume-area_description" class="measurement_description" style="display:none;">' .      __( "Use this measurement to have the customer prompted for an area and height to calculate the volume required.  When pricing is disabled (no custom dimensions) this calculator uses the product volume attribute or otherwise the length, width and height attributes to determine the product volume.", 'woocommerce-measurement-price-calculator' ) . '</p>';
  599.             echo '<p id="wall-dimension_description" class="measurement_description" style="display:none;">' .   __( "Use this measurement for applications such as wallpaper; the customer will be prompted for the wall height and distance around the room.  When pricing is disabled (no custom dimensions) this calculator uses the product area attribute or otherwise the length and width attributes to determine the wall surface area.", 'woocommerce-measurement-price-calculator' ) . '</p>';
  600.    
  601.             echo '<div id="dimension_measurements" class="measurement_fields">';
  602.                 woocommerce_wp_checkbox( array(
  603.                     'id'            => '_measurement_dimension_pricing',
  604.                     'value'         => $settings['dimension']['pricing']['enabled'],
  605.                     'class'         => 'checkbox _measurement_pricing',
  606.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  607.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  608.                 ) );
  609.                 echo '<div id="_measurement_dimension_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  610.                     woocommerce_wp_text_input( array(
  611.                         'id'          => '_measurement_dimension_pricing_label',
  612.                         'value'       => $settings['dimension']['pricing']['label'],
  613.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  614.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  615.                         'desc_tip'    => true,
  616.                     ) );
  617.                     woocommerce_wp_select( array(
  618.                         'id'          => '_measurement_dimension_pricing_unit',
  619.                         'value'       => $settings['dimension']['pricing']['unit'],
  620.                         'class'       => '_measurement_pricing_unit',
  621.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  622.                         'options'     => $measurement_units['dimension'],
  623.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  624.                         'desc_tip'    => true,
  625.                     ) );
  626.                     woocommerce_wp_checkbox( array(
  627.                         'id'            => '_measurement_dimension_pricing_calculator_enabled',
  628.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  629.                         'value'         => $settings['dimension']['pricing']['calculator']['enabled'],
  630.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  631.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  632.                     ) );
  633.                     woocommerce_wp_checkbox( array(
  634.                         'id'            => '_measurement_dimension_pricing_weight_enabled',
  635.                         'value'         => $settings['dimension']['pricing']['weight']['enabled'],
  636.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  637.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  638.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  639.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product dimension', 'woocommerce-measurement-price-calculator' ),
  640.                     ) );
  641.                     woocommerce_wp_checkbox( array(
  642.                         'id'            => '_measurement_dimension_pricing_inventory_enabled',
  643.                         'value'         => $settings['dimension']['pricing']['inventory']['enabled'],
  644.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  645.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  646.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  647.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product dimension', 'woocommerce-measurement-price-calculator' ),
  648.                     ) );
  649.                     wcfm_measurement_price_calculator_overage_input( 'dimension', $settings );
  650.                 echo '</div>';
  651.                 echo '<hr/>';
  652.    
  653.                 // Dimension - Length
  654.                 wcfm_measurement_price_calculator_wp_radio( array(
  655.                     'name'        => '_measurement_dimension',
  656.                     'id'          => '_measurement_dimension_length',
  657.                     'rbvalue'     => 'length',
  658.                     'value'       => 'yes' == $settings['dimension']['length']['enabled'] ? 'length' : '',
  659.                     'class'       => 'checkbox _measurement_dimension',
  660.                     'label'       => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  661.                     'description' => __( 'Select to display the product length in the price calculator', 'woocommerce-measurement-price-calculator' ),
  662.                 ) );
  663.                 echo '<div id="_measurement_dimension_length_fields" style="display:none;">';
  664.                     woocommerce_wp_text_input( array(
  665.                         'id'          => '_measurement_dimension_length_label',
  666.                         'value'       => $settings['dimension']['length']['label'],
  667.                         'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  668.                         'description' => __( 'Length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  669.                         'desc_tip'    => true,
  670.                     ) );
  671.                     woocommerce_wp_select( array(
  672.                         'id'          => '_measurement_dimension_length_unit',
  673.                         'value'       => $settings['dimension']['length']['unit'] ,
  674.                         'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  675.                         'options'     => $measurement_units['dimension'],
  676.                         'description' => __( 'The frontend length input field unit', 'woocommerce-measurement-price-calculator' ),
  677.                         'desc_tip'    => true,
  678.                     ) );
  679.                     woocommerce_wp_checkbox( array(
  680.                         'id'          => '_measurement_dimension_length_editable',
  681.                         'value'       => $settings['dimension']['length']['editable'],
  682.                         'label'       => __( 'Length Editable', 'woocommerce-measurement-price-calculator' ),
  683.                         'class'       => 'checkbox _measurement_editable',
  684.                         'description' => __( 'Check this box to allow the needed length to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  685.                     ) );
  686.                     wcfm_measurement_price_calculator_attributes_inputs( array(
  687.                         'measurement'   => 'dimension',
  688.                         'input_name'    => 'length',
  689.                         'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  690.                         'settings'      => $settings,
  691.                         'limited_field' => '_measurement_dimension_length_options',
  692.                     ) );
  693.                     woocommerce_wp_text_input( array(
  694.                         'id'            => '_measurement_dimension_length_options',
  695.                         'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['dimension']['length']['options'] ),
  696.                         'wrapper_class' => '_measurement_pricing_calculator_fields',
  697.                         'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  698.                         'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  699.                         'desc_tip'      => true,
  700.                     ) );
  701.                 echo '</div>';
  702.                 echo '<hr/>';
  703.    
  704.                 // Dimension - Width
  705.                 wcfm_measurement_price_calculator_wp_radio( array(
  706.                     'name'        => '_measurement_dimension',
  707.                     'id'          => '_measurement_dimension_width',
  708.                     'rbvalue'     => 'width',
  709.                     'value'       => 'yes' == $settings['dimension']['width']['enabled'] ? 'width' : '',
  710.                     'class'       => 'checkbox _measurement_dimension',
  711.                     'label'       => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  712.                     'description' => __( 'Select to display the product width in the price calculator', 'woocommerce-measurement-price-calculator' ),
  713.                 ) );
  714.                 echo '<div id="_measurement_dimension_width_fields" style="display:none;">';
  715.                     woocommerce_wp_text_input( array(
  716.                         'id'          => '_measurement_dimension_width_label',
  717.                         'value'       => $settings['dimension']['width']['label'],
  718.                         'label'       => __( 'Width Label', 'woocommerce-measurement-price-calculator' ),
  719.                         'description' => __( 'Width input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  720.                         'desc_tip'    => true,
  721.                     ) );
  722.                     woocommerce_wp_select( array(
  723.                         'id'          => '_measurement_dimension_width_unit',
  724.                         'value'       => $settings['dimension']['width']['unit'],
  725.                         'label'       => __( 'Width Unit', 'woocommerce-measurement-price-calculator' ),
  726.                         'options'     => $measurement_units['dimension'],
  727.                         'description' => __( 'The frontend width input field unit', 'woocommerce-measurement-price-calculator' ),
  728.                         'desc_tip'    => true,
  729.                     ) );
  730.                     woocommerce_wp_checkbox( array(
  731.                         'id'          => '_measurement_dimension_width_editable',
  732.                         'value'       => $settings['dimension']['width']['editable'],
  733.                         'label'       => __( 'Width Editable', 'woocommerce-measurement-price-calculator' ),
  734.                         'class'       => 'checkbox _measurement_editable',
  735.                         'description' => __( 'Check this box to allow the needed width to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  736.                     ) );
  737.                     wcfm_measurement_price_calculator_attributes_inputs( array(
  738.                         'measurement'   => 'dimension',
  739.                         'input_name'    => 'width',
  740.                         'input_label'   => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  741.                         'settings'      => $settings,
  742.                         'limited_field' => '_measurement_dimension_width_options',
  743.                     ) );
  744.                     woocommerce_wp_text_input( array(
  745.                         'id'            => '_measurement_dimension_width_options',
  746.                         'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['dimension']['width']['options'] ),
  747.                         'wrapper_class' => '_measurement_pricing_calculator_fields',
  748.                         'label'         => __( 'Width Options', 'woocommerce-measurement-price-calculator' ),
  749.                         'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  750.                         'desc_tip'      => true,
  751.                     ) );
  752.                 echo '</div>';
  753.                 echo '<hr/>';
  754.    
  755.                 // Dimension - Height
  756.                 wcfm_measurement_price_calculator_wp_radio( array(
  757.                     'name'        => '_measurement_dimension',
  758.                     'id'          => '_measurement_dimension_height',
  759.                     'rbvalue'     => 'height',
  760.                     'value'       => 'yes' == $settings['dimension']['height']['enabled'] ? 'height' : '',
  761.                     'class'       => 'checkbox _measurement_dimension',
  762.                     'label'       => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  763.                     'description' => __( 'Select to display the product height in the price calculator', 'woocommerce-measurement-price-calculator' ),
  764.                 ) );
  765.                 echo '<div id="_measurement_dimension_height_fields" style="display:none;">';
  766.                     woocommerce_wp_text_input( array(
  767.                         'id'          => '_measurement_dimension_height_label',
  768.                         'value'       => $settings['dimension']['height']['label'],
  769.                         'label'       => __( 'Height Label', 'woocommerce-measurement-price-calculator' ),
  770.                         'description' => __( 'Height input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  771.                         'desc_tip'    => true,
  772.                     ) );
  773.                     woocommerce_wp_select( array(
  774.                         'id'          => '_measurement_dimension_height_unit',
  775.                         'value'       => $settings['dimension']['height']['unit'],
  776.                         'label'       => __( 'Height Unit', 'woocommerce-measurement-price-calculator' ),
  777.                         'options'     => $measurement_units['dimension'],
  778.                         'description' => __( 'The frontend height input field unit', 'woocommerce-measurement-price-calculator' ),
  779.                         'desc_tip'    => true,
  780.                     ) );
  781.                     woocommerce_wp_checkbox( array(
  782.                         'id'          => '_measurement_dimension_height_editable',
  783.                         'value'       => $settings['dimension']['height']['editable'],
  784.                         'label'       => __( 'Height Editable', 'woocommerce-measurement-price-calculator' ),
  785.                         'class'       => 'checkbox _measurement_editable',
  786.                         'description' => __( 'Check this box to allow the needed height to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  787.                     ) );
  788.                     wcfm_measurement_price_calculator_attributes_inputs( array(
  789.                         'measurement'   => 'dimension',
  790.                         'input_name'    => 'height',
  791.                         'input_label'   => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  792.                         'settings'      => $settings,
  793.                         'limited_field' => '_measurement_dimension_height_options',
  794.                     ) );
  795.                     woocommerce_wp_text_input( array(
  796.                         'id'            => '_measurement_dimension_height_options',
  797.                         'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['dimension']['height']['options'] ),
  798.                         'wrapper_class' => '_measurement_pricing_calculator_fields',
  799.                         'label'         => __( 'Height Options', 'woocommerce-measurement-price-calculator' ),
  800.                         'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  801.                         'desc_tip'      => true,
  802.                     ) );
  803.                 echo '</div>';
  804.             echo '</div>';
  805.    
  806.             // Area
  807.             echo '<div id="area_measurements" class="measurement_fields">';
  808.                 woocommerce_wp_checkbox( array(
  809.                     'id'            => '_measurement_area_pricing',
  810.                     'value'         => $settings['area']['pricing']['enabled'],
  811.                     'class'         => 'checkbox _measurement_pricing',
  812.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  813.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' )
  814.                 ) );
  815.                 echo '<div id="_measurement_area_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  816.                     woocommerce_wp_text_input( array(
  817.                         'id'          => '_measurement_area_pricing_label',
  818.                         'value'       => $settings['area']['pricing']['label'],
  819.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  820.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  821.                         'desc_tip'    => true,
  822.                     ) );
  823.                     woocommerce_wp_select( array(
  824.                         'id'          => '_measurement_area_pricing_unit',
  825.                         'value'       => $settings['area']['pricing']['unit'],
  826.                         'class'       => '_measurement_pricing_unit',
  827.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  828.                         'options'     => $measurement_units['area'],
  829.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  830.                         'desc_tip'    => true,
  831.                     ) );
  832.                     woocommerce_wp_checkbox( array(
  833.                         'id'            => '_measurement_area_pricing_calculator_enabled',
  834.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  835.                         'value'         => $settings['area']['pricing']['calculator']['enabled'],
  836.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  837.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  838.                     ) );
  839.                     woocommerce_wp_checkbox( array(
  840.                         'id'            => '_measurement_area_pricing_weight_enabled',
  841.                         'value'         => $settings['area']['pricing']['weight']['enabled'],
  842.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  843.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  844.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  845.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product area', 'woocommerce-measurement-price-calculator' ),
  846.                     ) );
  847.                     woocommerce_wp_checkbox( array(
  848.                         'id'            => '_measurement_area_pricing_inventory_enabled',
  849.                         'value'         => $settings['area']['pricing']['inventory']['enabled'],
  850.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  851.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  852.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  853.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product area', 'woocommerce-measurement-price-calculator' ),
  854.                     ) );
  855.                     wcfm_measurement_price_calculator_overage_input( 'area', $settings );
  856.                 echo '</div>';
  857.                 echo '<hr/>';
  858.                 woocommerce_wp_text_input( array(
  859.                     'id'          => '_measurement_area_label',
  860.                     'value'       => $settings['area']['area']['label'],
  861.                     'label'       => __( 'Area Label', 'woocommerce-measurement-price-calculator' ),
  862.                     'description' => __( 'Area input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  863.                     'desc_tip'    => true,
  864.                 ) );
  865.                 woocommerce_wp_select( array(
  866.                     'id'          => '_measurement_area_unit',
  867.                     'value'       => $settings['area']['area']['unit'],
  868.                     'label'       => __( 'Area Unit', 'woocommerce-measurement-price-calculator' ),
  869.                     'options'     => $measurement_units['area'],
  870.                     'description' => __( 'The frontend area input field unit', 'woocommerce-measurement-price-calculator' ),
  871.                     'desc_tip'    => true,
  872.                 ) );
  873.                 woocommerce_wp_checkbox( array(
  874.                     'id'          => '_measurement_area_editable',
  875.                     'value'       => $settings['area']['area']['editable'],
  876.                     'label'       => __( 'Editable', 'woocommerce-measurement-price-calculator' ),
  877.                     'class'       => 'checkbox _measurement_editable',
  878.                     'description' => __( 'Check this box to allow the needed measurement to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  879.                 ) );
  880.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  881.                     'measurement'   => 'area',
  882.                     'input_name'    => 'area',
  883.                     'input_label'   => __( 'Area', 'woocommerce-measurement-price-calculator' ),
  884.                     'settings'      => $settings,
  885.                     'limited_field' => '_measurement_area_options',
  886.                 ) );
  887.                 woocommerce_wp_text_input( array(
  888.                     'id'            => '_measurement_area_options',
  889.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area']['area']['options'] ),
  890.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  891.                     'label'         => __( 'Area Options', 'woocommerce-measurement-price-calculator' ),
  892.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  893.                     'desc_tip'      => true,
  894.                 ) );
  895.             echo '</div>';
  896.    
  897.             // Area (LxW)
  898.             echo '<div id="area-dimension_measurements" class="measurement_fields">';
  899.                 woocommerce_wp_checkbox( array(
  900.                     'id'            => '_measurement_area-dimension_pricing',
  901.                     'value'         => $settings['area-dimension']['pricing']['enabled'],
  902.                     'class'         => 'checkbox _measurement_pricing',
  903.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  904.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  905.                 ) );
  906.                 echo '<div id="_measurement_area-dimension_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  907.                     woocommerce_wp_text_input( array(
  908.                         'id'          => '_measurement_area-dimension_pricing_label',
  909.                         'value'       => $settings['area-dimension']['pricing']['label'],
  910.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  911.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  912.                         'desc_tip'    => true,
  913.                     ) );
  914.                     woocommerce_wp_select( array(
  915.                         'id'          => '_measurement_area-dimension_pricing_unit',
  916.                         'value'       => $settings['area-dimension']['pricing']['unit'],
  917.                         'class'       => '_measurement_pricing_unit',
  918.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  919.                         'options'     => $measurement_units['area'],
  920.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  921.                         'desc_tip'    => true,
  922.                     ) );
  923.                     woocommerce_wp_checkbox( array(
  924.                         'id'            => '_measurement_area-dimension_pricing_calculator_enabled',
  925.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  926.                         'value'         => $settings['area-dimension']['pricing']['calculator']['enabled'],
  927.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  928.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  929.                     ) );
  930.                     woocommerce_wp_checkbox( array(
  931.                         'id'            => '_measurement_area-dimension_pricing_weight_enabled',
  932.                         'value'         => $settings['area-dimension']['pricing']['weight']['enabled'],
  933.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  934.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  935.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  936.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product area', 'woocommerce-measurement-price-calculator' ),
  937.                     ) );
  938.                     woocommerce_wp_checkbox( array(
  939.                         'id'            => '_measurement_area-dimension_pricing_inventory_enabled',
  940.                         'value'         => $settings['area-dimension']['pricing']['inventory']['enabled'],
  941.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  942.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  943.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  944.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product area', 'woocommerce-measurement-price-calculator' ),
  945.                     ) );
  946.                     wcfm_measurement_price_calculator_overage_input( 'area-dimension', $settings );
  947.                 echo '</div>';
  948.                 echo '<hr/>';
  949.                 woocommerce_wp_text_input( array(
  950.                     'id'          => '_measurement_area_length_label',
  951.                     'value'       => $settings['area-dimension']['length']['label'],
  952.                     'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  953.                     'description' => __( 'Length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  954.                     'desc_tip'    => true,
  955.                 ) );
  956.                 woocommerce_wp_select( array(
  957.                     'id'          => '_measurement_area_length_unit',
  958.                     'value'       => $settings['area-dimension']['length']['unit'],
  959.                     'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  960.                     'options'     => $measurement_units['dimension'],
  961.                     'description' => __( 'The frontend length input field unit', 'woocommerce-measurement-price-calculator' ),
  962.                     'desc_tip'    => true,
  963.                 ) );
  964.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  965.                     'measurement'   => 'area-dimension',
  966.                     'input_name'    => 'length',
  967.                     'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  968.                     'settings'      => $settings,
  969.                     'limited_field' => '_measurement_area_length_options',
  970.                 ) );
  971.                 woocommerce_wp_text_input( array(
  972.                     'id'            => '_measurement_area_length_options',
  973.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-dimension']['length']['options'] ),
  974.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  975.                     'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  976.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  977.                     'desc_tip'      => true,
  978.                 ) );
  979.                 echo '<hr/>';
  980.    
  981.                 woocommerce_wp_text_input( array(
  982.                     'id'          => '_measurement_area_width_label',
  983.                     'value'       => $settings['area-dimension']['width']['label'],
  984.                     'label'       => __( 'Width Label', 'woocommerce-measurement-price-calculator' ),
  985.                     'description' => __( 'Width input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  986.                     'desc_tip'    => true,
  987.                 ) );
  988.                 woocommerce_wp_select( array(
  989.                     'id'          => '_measurement_area_width_unit',
  990.                     'value'       => $settings['area-dimension']['width']['unit'],
  991.                     'label'       => __( 'Width Unit', 'woocommerce-measurement-price-calculator' ),
  992.                     'options'     => $measurement_units['dimension'],
  993.                     'description' => __( 'The frontend width input field unit', 'woocommerce-measurement-price-calculator' ),
  994.                     'desc_tip'    => true,
  995.                 ) );
  996.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  997.                     'measurement'   => 'area-dimension',
  998.                     'input_name'    => 'width',
  999.                     'input_label'   => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  1000.                     'settings'      => $settings,
  1001.                     'limited_field' => '_measurement_area_width_options',
  1002.                 ) );
  1003.                 woocommerce_wp_text_input( array(
  1004.                     'id'            => '_measurement_area_width_options',
  1005.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-dimension']['width']['options'] ),
  1006.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1007.                     'label'         => __( 'Width Options', 'woocommerce-measurement-price-calculator' ),
  1008.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1009.                     'desc_tip'      => true,
  1010.                 ) );
  1011.             echo '</div>';
  1012.    
  1013.             // Perimeter (2 * L + 2 * W)
  1014.             echo '<div id="area-linear_measurements" class="measurement_fields">';
  1015.                 woocommerce_wp_checkbox( array(
  1016.                     'id'            => '_measurement_area-linear_pricing',
  1017.                     'value'         => $settings['area-linear']['pricing']['enabled'],
  1018.                     'class'         => 'checkbox _measurement_pricing',
  1019.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1020.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1021.                 ) );
  1022.                 echo '<div id="_measurement_area-linear_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1023.                     woocommerce_wp_text_input( array(
  1024.                         'id'          => '_measurement_area-linear_pricing_label',
  1025.                         'value'       => $settings['area-linear']['pricing']['label'],
  1026.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1027.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1028.                         'desc_tip'    => true,
  1029.                     ) );
  1030.                     woocommerce_wp_select( array(
  1031.                         'id'          => '_measurement_area-linear_pricing_unit',
  1032.                         'value'       => $settings['area-linear']['pricing']['unit'],
  1033.                         'class'       => '_measurement_pricing_unit',
  1034.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1035.                         'options'     => $measurement_units['dimension'],
  1036.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1037.                         'desc_tip'    => true,
  1038.                     ) );
  1039.                     woocommerce_wp_checkbox( array(
  1040.                         'id'            => '_measurement_area-linear_pricing_calculator_enabled',
  1041.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1042.                         'value'         => $settings['area-linear']['pricing']['calculator']['enabled'],
  1043.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1044.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1045.                     ) );
  1046.                     woocommerce_wp_checkbox( array(
  1047.                         'id'            => '_measurement_area-linear_pricing_weight_enabled',
  1048.                         'value'         => $settings['area-linear']['pricing']['weight']['enabled'],
  1049.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1050.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1051.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1052.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product area', 'woocommerce-measurement-price-calculator' ),
  1053.                     ) );
  1054.                     woocommerce_wp_checkbox( array(
  1055.                         'id'            => '_measurement_area-linear_pricing_inventory_enabled',
  1056.                         'value'         => $settings['area-linear']['pricing']['inventory']['enabled'],
  1057.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1058.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1059.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1060.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product area', 'woocommerce-measurement-price-calculator' ),
  1061.                     ) );
  1062.                     wcfm_measurement_price_calculator_overage_input( 'area-linear', $settings );
  1063.                 echo '</div>';
  1064.                 echo '<hr/>';
  1065.                 woocommerce_wp_text_input( array(
  1066.                     'id'          => '_measurement_area-linear_length_label',
  1067.                     'value'       => $settings['area-linear']['length']['label'],
  1068.                     'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  1069.                     'description' => __( 'Length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1070.                     'desc_tip'    => true,
  1071.                 ) );
  1072.                 woocommerce_wp_select( array(
  1073.                     'id'          => '_measurement_area-linear_length_unit',
  1074.                     'value'       => $settings['area-linear']['length']['unit'],
  1075.                     'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  1076.                     'options'     => $measurement_units['dimension'],
  1077.                     'description' => __( 'The frontend length input field unit', 'woocommerce-measurement-price-calculator' ),
  1078.                     'desc_tip'    => true,
  1079.                 ) );
  1080.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1081.                     'measurement'   => 'area-linear',
  1082.                     'input_name'    => 'length',
  1083.                     'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  1084.                     'settings'      => $settings,
  1085.                     'limited_field' => '_measurement_area-linear_length_options',
  1086.                 ) );
  1087.                 woocommerce_wp_text_input( array(
  1088.                     'id'            => '_measurement_area-linear_length_options',
  1089.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-linear']['length']['options'] ),
  1090.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1091.                     'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  1092.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1093.                     'desc_tip'      => true,
  1094.                 ) );
  1095.                 echo '<hr/>';
  1096.    
  1097.                 woocommerce_wp_text_input( array(
  1098.                     'id'          => '_measurement_area-linear_width_label',
  1099.                     'value'       => $settings['area-linear']['width']['label'],
  1100.                     'label'       => __( 'Width Label', 'woocommerce-measurement-price-calculator' ),
  1101.                     'description' => __( 'Width input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1102.                     'desc_tip'    => true,
  1103.                 ) );
  1104.                 woocommerce_wp_select( array(
  1105.                     'id'          => '_measurement_area-linear_width_unit',
  1106.                     'value'       => $settings['area-linear']['width']['unit'],
  1107.                     'label'       => __( 'Width Unit', 'woocommerce-measurement-price-calculator' ),
  1108.                     'options'     => $measurement_units['dimension'],
  1109.                     'description' => __( 'The frontend width input field unit', 'woocommerce-measurement-price-calculator' ),
  1110.                     'desc_tip'    => true,
  1111.                 ) );
  1112.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1113.                     'measurement'   => 'area-linear',
  1114.                     'input_name'    => 'width',
  1115.                     'input_label'   => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  1116.                     'settings'      => $settings,
  1117.                     'limited_field' => '_measurement_area-linear_width_options',
  1118.                 ) );
  1119.                 woocommerce_wp_text_input( array(
  1120.                     'id'            => '_measurement_area-linear_width_options',
  1121.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-linear']['width']['options'] ),
  1122.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1123.                     'label'         => __( 'Width Options', 'woocommerce-measurement-price-calculator' ),
  1124.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1125.                     'desc_tip'      => true,
  1126.                 ) );
  1127.             echo '</div>';
  1128.    
  1129.             // Surface Area 2 * (L * W + W * H + L * H)
  1130.             echo '<div id="area-surface_measurements" class="measurement_fields">';
  1131.                 woocommerce_wp_checkbox( array(
  1132.                     'id'            => '_measurement_area-surface_pricing',
  1133.                     'value'         => $settings['area-surface']['pricing']['enabled'],
  1134.                     'class'         => 'checkbox _measurement_pricing',
  1135.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1136.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1137.                 ) );
  1138.                 echo '<div id="_measurement_area-surface_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1139.                     woocommerce_wp_text_input( array(
  1140.                         'id'          => '_measurement_area-surface_pricing_label',
  1141.                         'value'       => $settings['area-surface']['pricing']['label'],
  1142.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1143.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1144.                         'desc_tip'    => true,
  1145.                     ) );
  1146.                     woocommerce_wp_select( array(
  1147.                         'id'          => '_measurement_area-surface_pricing_unit',
  1148.                         'value'       => $settings['area-surface']['pricing']['unit'],
  1149.                         'class'       => '_measurement_pricing_unit',
  1150.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1151.                         'options'     => $measurement_units['area'],
  1152.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1153.                         'desc_tip'    => true,
  1154.                     ) );
  1155.                     woocommerce_wp_checkbox( array(
  1156.                         'id'            => '_measurement_area-surface_pricing_calculator_enabled',
  1157.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1158.                         'value'         => $settings['area-surface']['pricing']['calculator']['enabled'],
  1159.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1160.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1161.                     ) );
  1162.                     woocommerce_wp_checkbox( array(
  1163.                         'id'            => '_measurement_area-surface_pricing_weight_enabled',
  1164.                         'value'         => $settings['area-surface']['pricing']['weight']['enabled'],
  1165.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1166.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1167.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1168.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product area', 'woocommerce-measurement-price-calculator' ),
  1169.                     ) );
  1170.                     woocommerce_wp_checkbox( array(
  1171.                         'id'            => '_measurement_area-surface_pricing_inventory_enabled',
  1172.                         'value'         => $settings['area-surface']['pricing']['inventory']['enabled'],
  1173.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1174.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1175.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1176.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product area', 'woocommerce-measurement-price-calculator' ),
  1177.                     ) );
  1178.                     wcfm_measurement_price_calculator_overage_input( 'area-surface', $settings );
  1179.                 echo '</div>';
  1180.                 echo '<hr/>';
  1181.                 woocommerce_wp_text_input( array(
  1182.                     'id'          => '_measurement_area-surface_length_label',
  1183.                     'value'       => $settings['area-surface']['length']['label'],
  1184.                     'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  1185.                     'description' => __( 'Length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1186.                     'desc_tip'    => true,
  1187.                 ) );
  1188.                 woocommerce_wp_select( array(
  1189.                     'id'          => '_measurement_area-surface_length_unit',
  1190.                     'value'       => $settings['area-surface']['length']['unit'],
  1191.                     'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  1192.                     'options'     => $measurement_units['dimension'],
  1193.                     'description' => __( 'The frontend length input field unit', 'woocommerce-measurement-price-calculator' ),
  1194.                     'desc_tip'    => true,
  1195.                 ) );
  1196.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1197.                     'measurement'   => 'area-surface',
  1198.                     'input_name'    => 'length',
  1199.                     'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  1200.                     'settings'      => $settings,
  1201.                     'limited_field' => '_measurement_area-surface_length_options',
  1202.                 ) );
  1203.                 woocommerce_wp_text_input( array(
  1204.                     'id'            => '_measurement_area-surface_length_options',
  1205.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-surface']['length']['options'] ),
  1206.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1207.                     'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  1208.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1209.                     'desc_tip'      => true,
  1210.                 ) );
  1211.                 echo '<hr/>';
  1212.    
  1213.                 woocommerce_wp_text_input( array(
  1214.                     'id'          => '_measurement_area-surface_width_label',
  1215.                     'value'       => $settings['area-surface']['width']['label'],
  1216.                     'label'       => __( 'Width Label', 'woocommerce-measurement-price-calculator' ),
  1217.                     'description' => __( 'Width input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1218.                     'desc_tip'    => true,
  1219.                 ) );
  1220.                 woocommerce_wp_select( array(
  1221.                     'id'          => '_measurement_area-surface_width_unit',
  1222.                     'value'       => $settings['area-surface']['width']['unit'],
  1223.                     'label'       => __( 'Width Unit', 'woocommerce-measurement-price-calculator' ),
  1224.                     'options'     => $measurement_units['dimension'],
  1225.                     'description' => __( 'The frontend width input field unit', 'woocommerce-measurement-price-calculator' ),
  1226.                     'desc_tip'    => true,
  1227.                 ) );
  1228.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1229.                     'measurement'   => 'area-surface',
  1230.                     'input_name'    => 'width',
  1231.                     'input_label'   => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  1232.                     'settings'      => $settings,
  1233.                     'limited_field' => '_measurement_area-surface_width_options',
  1234.                 ) );
  1235.                 woocommerce_wp_text_input( array(
  1236.                     'id'            => '_measurement_area-surface_width_options',
  1237.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-surface']['width']['options'] ),
  1238.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1239.                     'label'         => __( 'Width Options', 'woocommerce-measurement-price-calculator' ),
  1240.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1241.                     'desc_tip'      => true,
  1242.                 ) );
  1243.                 echo '<hr/>';
  1244.    
  1245.                 woocommerce_wp_text_input( array(
  1246.                     'id'          => '_measurement_area-surface_height_label',
  1247.                     'value'       => $settings['area-surface']['height']['label'],
  1248.                     'label'       => __( 'Height Label', 'woocommerce-measurement-price-calculator' ),
  1249.                     'description' => __( 'Height input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1250.                     'desc_tip'    => true,
  1251.                 ) );
  1252.                 woocommerce_wp_select( array(
  1253.                     'id'          => '_measurement_area-surface_height_unit',
  1254.                     'value'       => $settings['area-surface']['height']['unit'],
  1255.                     'label'       => __( 'Height Unit', 'woocommerce-measurement-price-calculator' ),
  1256.                     'options'     => $measurement_units['dimension'],
  1257.                     'description' => __( 'The frontend height input field unit', 'woocommerce-measurement-price-calculator' ),
  1258.                     'desc_tip'    => true,
  1259.                 ) );
  1260.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1261.                     'measurement'   => 'area-surface',
  1262.                     'input_name'    => 'height',
  1263.                     'input_label'   => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  1264.                     'settings'      => $settings,
  1265.                     'limited_field' => '_measurement_area-surface_height_options',
  1266.                 ) );
  1267.                 woocommerce_wp_text_input( array(
  1268.                     'id'            => '_measurement_area-surface_height_options',
  1269.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['area-surface']['height']['options'] ),
  1270.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1271.                     'label'         => __( 'Height Options', 'woocommerce-measurement-price-calculator' ),
  1272.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1273.                     'desc_tip'      => true,
  1274.                 ) );
  1275.             echo '</div>';
  1276.    
  1277.             // Volume
  1278.             echo '<div id="volume_measurements" class="measurement_fields">';
  1279.                 woocommerce_wp_checkbox( array(
  1280.                     'id'            => '_measurement_volume_pricing',
  1281.                     'value'         => $settings['volume']['pricing']['enabled'],
  1282.                     'class'         => 'checkbox _measurement_pricing',
  1283.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1284.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1285.                 ) );
  1286.                 echo '<div id="_measurement_volume_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1287.                     woocommerce_wp_text_input( array(
  1288.                         'id'          => '_measurement_volume_pricing_label',
  1289.                         'value'       => $settings['volume']['pricing']['label'],
  1290.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1291.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1292.                         'desc_tip'    => true,
  1293.                     ) );
  1294.                     woocommerce_wp_select( array(
  1295.                         'id'          => '_measurement_volume_pricing_unit',
  1296.                         'value'       => $settings['volume']['pricing']['unit'],
  1297.                         'class'       => '_measurement_pricing_unit',
  1298.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1299.                         'options'     => $measurement_units['volume'],
  1300.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1301.                         'desc_tip'    => true,
  1302.                     ) );
  1303.                     woocommerce_wp_checkbox( array(
  1304.                         'id'            => '_measurement_volume_pricing_calculator_enabled',
  1305.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1306.                         'value'         => $settings['volume']['pricing']['calculator']['enabled'],
  1307.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1308.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1309.                     ) );
  1310.                     woocommerce_wp_checkbox( array(
  1311.                         'id'            => '_measurement_volume_pricing_weight_enabled',
  1312.                         'value'         => $settings['volume']['pricing']['weight']['enabled'],
  1313.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1314.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1315.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1316.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1317.                     ) );
  1318.                     woocommerce_wp_checkbox( array(
  1319.                         'id'            => '_measurement_volume_pricing_inventory_enabled',
  1320.                         'value'         => $settings['volume']['pricing']['inventory']['enabled'],
  1321.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1322.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1323.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1324.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1325.                     ) );
  1326.                     wcfm_measurement_price_calculator_overage_input( 'volume', $settings );
  1327.                 echo '</div>';
  1328.                 echo '<hr/>';
  1329.                 woocommerce_wp_text_input( array(
  1330.                     'id'          => '_measurement_volume_label',
  1331.                     'value'       => $settings['volume']['volume']['label'],
  1332.                     'label'       => __( 'Volume Label', 'woocommerce-measurement-price-calculator' ),
  1333.                     'description' => __( 'Volume input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1334.                     'desc_tip'    => true,
  1335.                 ) );
  1336.                 woocommerce_wp_select( array(
  1337.                     'id'          => '_measurement_volume_unit',
  1338.                     'value'       => $settings['volume']['volume']['unit'],
  1339.                     'label'       => __( 'Volume Unit', 'woocommerce-measurement-price-calculator' ),
  1340.                     'options'     => $measurement_units['volume'],
  1341.                     'description' => __( 'The frontend volume input field unit', 'woocommerce-measurement-price-calculator' ),
  1342.                     'desc_tip'    => true,
  1343.                 ) );
  1344.                 woocommerce_wp_checkbox( array(
  1345.                     'id'          => '_measurement_volume_editable',
  1346.                     'value'       => $settings['volume']['volume']['editable'],
  1347.                     'label'       => __( 'Editable', 'woocommerce-measurement-price-calculator' ),
  1348.                     'class'       => 'checkbox _measurement_editable',
  1349.                     'description' => __( 'Check this box to allow the needed measurement to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  1350.                 ) );
  1351.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1352.                     'measurement'   => 'volume',
  1353.                     'input_name'    => 'volume',
  1354.                     'input_label'   => __( 'Volume', 'woocommerce-measurement-price-calculator' ),
  1355.                     'settings'      => $settings,
  1356.                     'limited_field' => '_measurement_volume_options',
  1357.                 ) );
  1358.                 woocommerce_wp_text_input( array(
  1359.                     'id'            => '_measurement_volume_options',
  1360.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume']['volume']['options'] ),
  1361.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1362.                     'label'         => __( 'Volume Options', 'woocommerce-measurement-price-calculator' ),
  1363.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1364.                     'desc_tip'      => true,
  1365.                 ) );
  1366.             echo '</div>';
  1367.    
  1368.             // Volume (LxWxH)
  1369.             echo '<div id="volume-dimension_measurements" class="measurement_fields">';
  1370.                 woocommerce_wp_checkbox( array(
  1371.                     'id'            => '_measurement_volume-dimension_pricing',
  1372.                     'value'         => $settings['volume-dimension']['pricing']['enabled'],
  1373.                     'class'         => 'checkbox _measurement_pricing',
  1374.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1375.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1376.                 ) );
  1377.                 echo '<div id="_measurement_volume-dimension_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1378.                     woocommerce_wp_text_input( array(
  1379.                         'id'          => '_measurement_volume-dimension_pricing_label',
  1380.                         'value'       => $settings['volume-dimension']['pricing']['label'],
  1381.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1382.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1383.                         'desc_tip'    => true,
  1384.                     ) );
  1385.                     woocommerce_wp_select( array(
  1386.                         'id'          => '_measurement_volume-dimension_pricing_unit',
  1387.                         'value'       => $settings['volume-dimension']['pricing']['unit'],
  1388.                         'class'       => '_measurement_pricing_unit',
  1389.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1390.                         'options'     => $measurement_units['volume'],
  1391.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1392.                         'desc_tip'    => true,
  1393.                     ) );
  1394.                     woocommerce_wp_checkbox( array(
  1395.                         'id'            => '_measurement_volume-dimension_pricing_calculator_enabled',
  1396.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1397.                         'value'         => $settings['volume-dimension']['pricing']['calculator']['enabled'],
  1398.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1399.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1400.                     ) );
  1401.                     woocommerce_wp_checkbox( array(
  1402.                         'id'            => '_measurement_volume-dimension_pricing_weight_enabled',
  1403.                         'value'         => $settings['volume-dimension']['pricing']['weight']['enabled'],
  1404.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1405.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1406.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1407.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1408.                     ) );
  1409.                     woocommerce_wp_checkbox( array(
  1410.                         'id'            => '_measurement_volume-dimension_pricing_inventory_enabled',
  1411.                         'value'         => $settings['volume-dimension']['pricing']['inventory']['enabled'],
  1412.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1413.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1414.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1415.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1416.                     ) );
  1417.                     wcfm_measurement_price_calculator_overage_input( 'volume-dimension', $settings );
  1418.                 echo '</div>';
  1419.                 echo '<hr/>';
  1420.                 woocommerce_wp_text_input( array(
  1421.                     'id'          => '_measurement_volume_length_label',
  1422.                     'value'       => $settings['volume-dimension']['length']['label'],
  1423.                     'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  1424.                     'description' => __( 'Length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1425.                     'desc_tip'    => true,
  1426.                 ) );
  1427.                 woocommerce_wp_select( array(
  1428.                     'id'          => '_measurement_volume_length_unit',
  1429.                     'value'       => $settings['volume-dimension']['length']['unit'],
  1430.                     'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  1431.                     'options'     => $measurement_units['dimension'],
  1432.                     'description' => __( 'The frontend length input field unit', 'woocommerce-measurement-price-calculator' ),
  1433.                     'desc_tip'    => true,
  1434.                 ) );
  1435.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1436.                     'measurement'   => 'volume-dimension',
  1437.                     'input_name'    => 'length',
  1438.                     'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  1439.                     'settings'      => $settings,
  1440.                     'limited_field' => '_measurement_volume_length_options',
  1441.                 ) );
  1442.                 woocommerce_wp_text_input( array(
  1443.                     'id'            => '_measurement_volume_length_options',
  1444.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume-dimension']['length']['options'] ),
  1445.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1446.                     'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  1447.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1448.                     'desc_tip'      => true,
  1449.                 ) );
  1450.                 echo '<hr/>';
  1451.    
  1452.                 woocommerce_wp_text_input( array(
  1453.                     'id'          => '_measurement_volume_width_label',
  1454.                     'value'       => $settings['volume-dimension']['width']['label'],
  1455.                     'label'       => __( 'Width Label', 'woocommerce-measurement-price-calculator' ),
  1456.                     'description' => __( 'Width input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1457.                     'desc_tip'    => true,
  1458.                 ) );
  1459.                 woocommerce_wp_select( array(
  1460.                     'id'          => '_measurement_volume_width_unit',
  1461.                     'value'       => $settings['volume-dimension']['width']['unit'],
  1462.                     'label'       => __( 'Width Unit', 'woocommerce-measurement-price-calculator' ),
  1463.                     'options'     => $measurement_units['dimension'],
  1464.                     'description' => __( 'The frontend width input field unit', 'woocommerce-measurement-price-calculator' ),
  1465.                     'desc_tip'    => true,
  1466.                 ) );
  1467.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1468.                     'measurement'   => 'volume-dimension',
  1469.                     'input_name'    => 'width',
  1470.                     'input_label'   => __( 'Width', 'woocommerce-measurement-price-calculator' ),
  1471.                     'settings'      => $settings,
  1472.                     'limited_field' => '_measurement_volume_width_options',
  1473.                 ) );
  1474.                 woocommerce_wp_text_input( array(
  1475.                     'id'            => '_measurement_volume_width_options',
  1476.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume-dimension']['width']['options'] ),
  1477.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1478.                     'label'         => __( 'Width Options', 'woocommerce-measurement-price-calculator' ),
  1479.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1480.                     'desc_tip'      => true,
  1481.                 ) );
  1482.                 echo '<hr/>';
  1483.    
  1484.                 woocommerce_wp_text_input( array(
  1485.                     'id'          => '_measurement_volume_height_label',
  1486.                     'value'       => $settings['volume-dimension']['height']['label'],
  1487.                     'label'       => __( 'Height Label', 'woocommerce-measurement-price-calculator' ),
  1488.                     'description' => __( 'Height input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1489.                     'desc_tip'    => true,
  1490.                 ) );
  1491.                 woocommerce_wp_select( array(
  1492.                     'id'          => '_measurement_volume_height_unit',
  1493.                     'value'       => $settings['volume-dimension']['height']['unit'],
  1494.                     'label'       => __( 'Height Unit', 'woocommerce-measurement-price-calculator' ),
  1495.                     'options'     => $measurement_units['dimension'],
  1496.                     'description' => __( 'The frontend height input field unit', 'woocommerce-measurement-price-calculator' ),
  1497.                     'desc_tip'    => true,
  1498.                 ) );
  1499.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1500.                     'measurement'   => 'volume-dimension',
  1501.                     'input_name'    => 'height',
  1502.                     'input_label'   => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  1503.                     'settings'      => $settings,
  1504.                     'limited_field' => '_measurement_volume_height_options',
  1505.                 ) );
  1506.                 woocommerce_wp_text_input( array(
  1507.                     'id'            => '_measurement_volume_height_options',
  1508.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume-dimension']['height']['options'] ),
  1509.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1510.                     'label'         => __( 'Height Options', 'woocommerce-measurement-price-calculator' ),
  1511.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1512.                     'desc_tip'      => true,
  1513.                 ) );
  1514.             echo '</div>';
  1515.    
  1516.             // Volume (AxH)
  1517.             echo '<div id="volume-area_measurements" class="measurement_fields">';
  1518.                 woocommerce_wp_checkbox( array(
  1519.                     'id'            => '_measurement_volume-area_pricing',
  1520.                     'value'         => $settings['volume-area']['pricing']['enabled'],
  1521.                     'class'         => 'checkbox _measurement_pricing',
  1522.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1523.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1524.                 ) );
  1525.                 echo '<div id="_measurement_volume-area_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1526.                     woocommerce_wp_text_input( array(
  1527.                         'id'          => '_measurement_volume-area_pricing_label',
  1528.                         'value'       => $settings['volume-area']['pricing']['label'],
  1529.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1530.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1531.                         'desc_tip'    => true,
  1532.                     ) );
  1533.                     woocommerce_wp_select( array(
  1534.                         'id'          => '_measurement_volume-area_pricing_unit',
  1535.                         'value'       => $settings['volume-area']['pricing']['unit'],
  1536.                         'class'       => '_measurement_pricing_unit',
  1537.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1538.                         'options'     => $measurement_units['volume'],
  1539.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1540.                         'desc_tip'    => true,
  1541.                     ) );
  1542.                     woocommerce_wp_checkbox( array(
  1543.                         'id'            => '_measurement_volume-area_pricing_calculator_enabled',
  1544.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1545.                         'value'         => $settings['volume-area']['pricing']['calculator']['enabled'],
  1546.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1547.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1548.                     ) );
  1549.                     woocommerce_wp_checkbox( array(
  1550.                         'id'            => '_measurement_volume-area_pricing_weight_enabled',
  1551.                         'value'         => $settings['volume-area']['pricing']['weight']['enabled'],
  1552.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1553.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1554.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1555.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1556.                     ) );
  1557.                     woocommerce_wp_checkbox( array(
  1558.                         'id'            => '_measurement_volume-area_pricing_inventory_enabled',
  1559.                         'value'         => $settings['volume-area']['pricing']['inventory']['enabled'],
  1560.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1561.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1562.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1563.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product volume', 'woocommerce-measurement-price-calculator' ),
  1564.                     ) );
  1565.                     wcfm_measurement_price_calculator_overage_input( 'volume-area', $settings );
  1566.                 echo '</div>';
  1567.                 echo '<hr/>';
  1568.                 woocommerce_wp_text_input( array(
  1569.                     'id'          => '_measurement_volume_area_label',
  1570.                     'value'       => $settings['volume-area']['area']['label'],
  1571.                     'label'       => __( 'Area Label', 'woocommerce-measurement-price-calculator' ),
  1572.                     'description' => __( 'Area input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1573.                     'desc_tip'    => true,
  1574.                 ) );
  1575.                 woocommerce_wp_select( array(
  1576.                     'id'          => '_measurement_volume_area_unit',
  1577.                     'value'       => $settings['volume-area']['area']['unit'],
  1578.                     'label'       => __( 'Area Unit', 'woocommerce-measurement-price-calculator' ),
  1579.                     'options'     => $measurement_units['area'],
  1580.                     'description' => __( 'The frontend area input field unit', 'woocommerce-measurement-price-calculator' ),
  1581.                     'desc_tip'    => true,
  1582.                 ) );
  1583.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1584.                     'measurement'   => 'volume-area',
  1585.                     'input_name'    => 'area',
  1586.                     'input_label'   => __( 'Area', 'woocommerce-measurement-price-calculator' ),
  1587.                     'settings'      => $settings,
  1588.                     'limited_field' => '_measurement_volume_area_options',
  1589.                 ) );
  1590.                 woocommerce_wp_text_input( array(
  1591.                     'id'            => '_measurement_volume_area_options',
  1592.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume-area']['area']['options'] ),
  1593.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1594.                     'label'         => __( 'Area Options', 'woocommerce-measurement-price-calculator' ),
  1595.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1596.                     'desc_tip'      => true,
  1597.                 ) );
  1598.                 echo '<hr/>';
  1599.    
  1600.                 woocommerce_wp_text_input( array(
  1601.                     'id'          => '_measurement_volume_area_height_label',
  1602.                     'value'       => $settings['volume-area']['height']['label'],
  1603.                     'label'       => __( 'Height Label', 'woocommerce-measurement-price-calculator' ),
  1604.                     'description' => __( 'Height input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1605.                     'desc_tip'    => true,
  1606.                 ) );
  1607.                 woocommerce_wp_select( array(
  1608.                     'id'          => '_measurement_volume_area_height_unit',
  1609.                     'value'       => $settings['volume-area']['height']['unit'],
  1610.                     'label'       => __( 'Height Unit', 'woocommerce-measurement-price-calculator' ),
  1611.                     'options'     => $measurement_units['dimension'],
  1612.                     'description' => __( 'The frontend height input field unit', 'woocommerce-measurement-price-calculator' ),
  1613.                     'desc_tip'    => true,
  1614.                 ) );
  1615.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1616.                     'measurement'   => 'volume-area',
  1617.                     'input_name'    => 'height',
  1618.                     'input_label'   => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  1619.                     'settings'      => $settings,
  1620.                     'limited_field' => '_measurement_volume_area_height_options',
  1621.                 ) );
  1622.                 woocommerce_wp_text_input( array(
  1623.                     'id'            => '_measurement_volume_area_height_options',
  1624.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['volume-area']['height']['options'] ),
  1625.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1626.                     'label'         => __( 'Height Options', 'woocommerce-measurement-price-calculator' ),
  1627.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1628.                     'desc_tip'      => true,
  1629.                 ) );
  1630.             echo '</div>';
  1631.    
  1632.             // Weight
  1633.             echo '<div id="weight_measurements" class="measurement_fields">';
  1634.                 woocommerce_wp_checkbox( array(
  1635.                     'id'            => '_measurement_weight_pricing',
  1636.                     'value'         => $settings['weight']['pricing']['enabled'],
  1637.                     'class'         => 'checkbox _measurement_pricing',
  1638.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1639.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1640.                 ) );
  1641.                 echo '<div id="_measurement_weight_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1642.                     woocommerce_wp_text_input( array(
  1643.                         'id'          => '_measurement_weight_pricing_label',
  1644.                         'value'       => $settings['weight']['pricing']['label'],
  1645.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1646.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1647.                         'desc_tip'    => true,
  1648.                     ) );
  1649.                     woocommerce_wp_select( array(
  1650.                         'id'          => '_measurement_weight_pricing_unit',
  1651.                         'value'       => $settings['weight']['pricing']['unit'],
  1652.                         'class'       => '_measurement_pricing_unit',
  1653.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1654.                         'options'     => $measurement_units['weight'],
  1655.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1656.                         'desc_tip'    => true,
  1657.                     ) );
  1658.                     woocommerce_wp_checkbox( array(
  1659.                         'id'            => '_measurement_weight_pricing_calculator_enabled',
  1660.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1661.                         'value'         => $settings['weight']['pricing']['calculator']['enabled'],
  1662.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1663.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1664.                     ) );
  1665.                     woocommerce_wp_checkbox( array(
  1666.                         'id'            => '_measurement_weight_pricing_weight_enabled',
  1667.                         'value'         => $settings['weight']['pricing']['weight']['enabled'],
  1668.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1669.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1670.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1671.                         'description'   => __( 'Check this box to use the customer-configured product weight as the item weight', 'woocommerce-measurement-price-calculator' ),
  1672.                     ) );
  1673.                     woocommerce_wp_checkbox( array(
  1674.                         'id'            => '_measurement_weight_pricing_inventory_enabled',
  1675.                         'value'         => $settings['weight']['pricing']['inventory']['enabled'],
  1676.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1677.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1678.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1679.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product weight', 'woocommerce-measurement-price-calculator' ),
  1680.                     ) );
  1681.                     wcfm_measurement_price_calculator_overage_input( 'weight', $settings );
  1682.                 echo '</div>';
  1683.                 echo '<hr/>';
  1684.                 woocommerce_wp_text_input( array(
  1685.                     'id'          => '_measurement_weight_label',
  1686.                     'value'       => $settings['weight']['weight']['label'],
  1687.                     'label'       => __( 'Weight Label', 'woocommerce-measurement-price-calculator' ),
  1688.                     'description' => __( 'Weight input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1689.                     'desc_tip'    => true,
  1690.                 ) );
  1691.                 woocommerce_wp_select( array(
  1692.                     'id'          => '_measurement_weight_unit',
  1693.                     'value'       => $settings['weight']['weight']['unit'],
  1694.                     'label'       => __( 'Weight Unit', 'woocommerce-measurement-price-calculator' ),
  1695.                     'options'     => $measurement_units['weight'],
  1696.                     'description' => __( 'The frontend weight input field unit', 'woocommerce-measurement-price-calculator' ),
  1697.                     'desc_tip'    => true,
  1698.                 ) );
  1699.                 woocommerce_wp_checkbox( array(
  1700.                     'id'          => '_measurement_weight_editable',
  1701.                     'value'       => $settings['weight']['weight']['editable'],
  1702.                     'label'       => __( 'Editable', 'woocommerce-measurement-price-calculator' ),
  1703.                     'class'       => 'checkbox _measurement_editable',
  1704.                     'description' => __( 'Check this box to allow the needed measurement to be entered by the customer', 'woocommerce-measurement-price-calculator' ),
  1705.                 ) );
  1706.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1707.                     'measurement'   => 'weight',
  1708.                     'input_name'    => 'weight',
  1709.                     'input_label'   => __( 'Weight', 'woocommerce-measurement-price-calculator' ),
  1710.                     'settings'      => $settings,
  1711.                     'limited_field' => '_measurement_weight_options',
  1712.                 ) );
  1713.                 woocommerce_wp_text_input( array(
  1714.                     'id'            => '_measurement_weight_options',
  1715.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['weight']['weight']['options'] ),
  1716.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1717.                     'label'         => __( 'Weight Options', 'woocommerce-measurement-price-calculator' ),
  1718.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1719.                     'desc_tip'      => true,
  1720.                 ) );
  1721.             echo '</div>';
  1722.    
  1723.    
  1724.             // wall dimension is just the area-dimension calculator with different labels
  1725.             echo '<div id="wall-dimension_measurements" class="measurement_fields">';
  1726.                 woocommerce_wp_checkbox( array(
  1727.                     'id'            => '_measurement_wall-dimension_pricing',
  1728.                     'value'         => $settings['wall-dimension']['pricing']['enabled'],
  1729.                     'class'         => 'checkbox _measurement_pricing',
  1730.                     'label'         => __( 'Show Product Price Per Unit', 'woocommerce-measurement-price-calculator' ),
  1731.                     'description'   => __( 'Check this box to display product pricing per unit on the frontend', 'woocommerce-measurement-price-calculator' ),
  1732.                 ) );
  1733.                 echo '<div id="_measurement_wall-dimension_pricing_fields" class="_measurement_pricing_fields" style="display:none;">';
  1734.                     woocommerce_wp_text_input( array(
  1735.                         'id'          => '_measurement_wall-dimension_pricing_label',
  1736.                         'value'       => $settings['wall-dimension']['pricing']['label'],
  1737.                         'label'       => __( 'Pricing Label', 'woocommerce-measurement-price-calculator' ),
  1738.                         'description' => __( 'Label to display next to the product price (defaults to pricing unit)', 'woocommerce-measurement-price-calculator' ),
  1739.                         'desc_tip'    => true,
  1740.                     ) );
  1741.                     woocommerce_wp_select( array(
  1742.                         'id'          => '_measurement_wall-dimension_pricing_unit',
  1743.                         'value'       => $settings['wall-dimension']['pricing']['unit'],
  1744.                         'class'       => '_measurement_pricing_unit',
  1745.                         'label'       => __( 'Pricing Unit', 'woocommerce-measurement-price-calculator' ),
  1746.                         'options'     => $measurement_units['area'],
  1747.                         'description' => __( 'Unit to define pricing in', 'woocommerce-measurement-price-calculator' ),
  1748.                         'desc_tip'    => true,
  1749.                     ) );
  1750.                     woocommerce_wp_checkbox( array(
  1751.                         'id'            => '_measurement_wall-dimension_pricing_calculator_enabled',
  1752.                         'class'         => 'checkbox _measurement_pricing_calculator_enabled',
  1753.                         'value'         => $settings['wall-dimension']['pricing']['calculator']['enabled'],
  1754.                         'label'         => __( 'Calculated Price', 'woocommerce-measurement-price-calculator' ),
  1755.                         'description'   => __( 'Check this box to define product pricing per unit and allow customers to provide custom measurements', 'woocommerce-measurement-price-calculator' ),
  1756.                     ) );
  1757.                     woocommerce_wp_checkbox( array(
  1758.                         'id'            => '_measurement_wall-dimension_pricing_weight_enabled',
  1759.                         'value'         => $settings['wall-dimension']['pricing']['weight']['enabled'],
  1760.                         'class'         => 'checkbox _measurement_pricing_weight_enabled',
  1761.                         'wrapper_class' => $pricing_weight_wrapper_class . ' _measurement_pricing_calculator_fields',
  1762.                         'label'         => __( 'Calculated Weight', 'woocommerce-measurement-price-calculator' ),
  1763.                         'description'   => __( 'Check this box to define the product weight per unit and calculate the item weight based on the product area', 'woocommerce-measurement-price-calculator' ),
  1764.                     ) );
  1765.                     woocommerce_wp_checkbox( array(
  1766.                         'id'            => '_measurement_wall-dimension_pricing_inventory_enabled',
  1767.                         'value'         => $settings['wall-dimension']['pricing']['inventory']['enabled'],
  1768.                         'class'         => 'checkbox _measurement_pricing_inventory_enabled',
  1769.                         'wrapper_class' => 'stock_fields _measurement_pricing_calculator_fields',
  1770.                         'label'         => __( 'Calculated Inventory', 'woocommerce-measurement-price-calculator' ),
  1771.                         'description'   => __( 'Check this box to define inventory per unit and calculate inventory based on the product area', 'woocommerce-measurement-price-calculator' ),
  1772.                     ) );
  1773.                     wcfm_measurement_price_calculator_overage_input( 'wall-dimension', $settings );
  1774.                 echo '</div>';
  1775.                 echo '<hr/>';
  1776.                 woocommerce_wp_text_input( array(
  1777.                     'id'          => '_measurement_wall_length_label',
  1778.                     'value'       => $settings['wall-dimension']['length']['label'],
  1779.                     'label'       => __( 'Length Label', 'woocommerce-measurement-price-calculator' ),
  1780.                     'description' => __( 'Wall length input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1781.                     'desc_tip'    => true,
  1782.                 ) );
  1783.                 woocommerce_wp_select( array(
  1784.                     'id'          => '_measurement_wall_length_unit',
  1785.                     'value'       => $settings['wall-dimension']['length']['unit'],
  1786.                     'label'       => __( 'Length Unit', 'woocommerce-measurement-price-calculator' ),
  1787.                     'options'     => $measurement_units['dimension'],
  1788.                     'description' => __( 'The frontend wall length input field unit', 'woocommerce-measurement-price-calculator' ),
  1789.                     'desc_tip'    => true,
  1790.                 ) );
  1791.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1792.                     'measurement'   => 'wall-dimension',
  1793.                     'input_name'    => 'length',
  1794.                     'input_label'   => __( 'Length', 'woocommerce-measurement-price-calculator' ),
  1795.                     'settings'      => $settings,
  1796.                     'limited_field' => '_measurement_wall_length_options',
  1797.                 ) );
  1798.                 woocommerce_wp_text_input( array(
  1799.                     'id'            => '_measurement_wall_length_options',
  1800.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['wall-dimension']['length']['options'] ),
  1801.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1802.                     'label'         => __( 'Length Options', 'woocommerce-measurement-price-calculator' ),
  1803.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1804.                     'desc_tip'      => true,
  1805.                 ) );
  1806.                 echo '<hr/>';
  1807.    
  1808.                 woocommerce_wp_text_input( array(
  1809.                     'id'          => '_measurement_wall_width_label',
  1810.                     'value'       => $settings['wall-dimension']['width']['label'],
  1811.                     'label'       => __( 'Height Label', 'woocommerce-measurement-price-calculator' ),
  1812.                     'description' => __( 'Room wall height input field label to display on the frontend', 'woocommerce-measurement-price-calculator' ),
  1813.                     'desc_tip'    => true,
  1814.                 ) );
  1815.                 woocommerce_wp_select( array(
  1816.                     'id'          => '_measurement_wall_width_unit',
  1817.                     'value'       => $settings['wall-dimension']['width']['unit'],
  1818.                     'label'       => __( 'Height Unit', 'woocommerce-measurement-price-calculator' ),
  1819.                     'options'     => $measurement_units['dimension'],
  1820.                     'description' => __( 'The frontend room wall height input field unit', 'woocommerce-measurement-price-calculator' ),
  1821.                     'desc_tip'    => true,
  1822.                 ) );
  1823.                 wcfm_measurement_price_calculator_attributes_inputs( array(
  1824.                     'measurement'   => 'wall-dimension',
  1825.                     'input_name'    => 'width',
  1826.                     'input_label'   => __( 'Height', 'woocommerce-measurement-price-calculator' ),
  1827.                     'settings'      => $settings,
  1828.                     'limited_field' => '_measurement_wall_width_options',
  1829.                 ) );
  1830.                 woocommerce_wp_text_input( array(
  1831.                     'id'            => '_measurement_wall_width_options',
  1832.                     'value'         => wcfm_measurement_price_calculator_get_options_value( $settings['wall-dimension']['width']['options'] ),
  1833.                     'wrapper_class' => '_measurement_pricing_calculator_fields',
  1834.                     'label'         => __( 'Height Options', 'woocommerce-measurement-price-calculator' ),
  1835.                     'description'   => wcfm_measurement_price_calculator_get_options_tooltip(),
  1836.                     'desc_tip'      => true,
  1837.                 ) );
  1838.             echo '</div>';
  1839.             echo '</div>'; // close the subpanel
  1840.             echo '<div id="calculator-pricing-table" class="calculator-subpanel">';
  1841.             if ( Framework\SV_WC_Plugin_Compatibility::is_wc_version_gte( '3.3' ) ) {
  1842.                 require_once( wc_measurement_price_calculator()->get_plugin_path() . '/src/admin/post-types/writepanels/writepanel-product_data-pricing_table.php' );
  1843.             } else {
  1844.                 require_once( wc_measurement_price_calculator()->get_plugin_path() . '/admin/post-types/writepanels/writepanel-product_data-pricing_table.php' );
  1845.             }
  1846.             echo '</div>';
  1847.             ?>
  1848.    
  1849.         </div>
  1850.     </div>
  1851. </div>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement