Warning! The settings below are meant for debugging/development only. Do not use them on a live website!' , 'woocommerce-pdf-invoices-packing-slips' ); } /** * Custom fields section callback. * * @return void. */ public function custom_fields_section() { _e( 'These are used for the (optional) footer columns in the Modern (Premium) template, but can also be used for other elements in your custom template' , 'woocommerce-pdf-invoices-packing-slips' ); } /** * Checkbox callback. * * args: * option_name - name of the main option * id - key of the setting * value - value if not 1 (optional) * default - default setting (optional) * description - description (optional) * * @return void. */ public function checkbox( $args ) { extract( $this->normalize_settings_args( $args ) ); // output checkbox printf( '', $id, $setting_name, $value, checked( $value, $current, false ), !empty($disabled) ? 'disabled="disabled"' : '' ); // print store empty input if true if( $store_unchecked ) { printf( '', $option_name, $id ); } // output description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } /** * Text input callback. * * args: * option_name - name of the main option * id - key of the setting * size - size of the text input (em) * default - default setting (optional) * description - description (optional) * type - type (optional) * * @return void. */ public function text_input( $args ) { extract( $this->normalize_settings_args( $args ) ); if (empty($type)) { $type = 'text'; } printf( '', $type, $id, $setting_name, esc_attr( $current ), $size, $placeholder, !empty($disabled) ? 'disabled="disabled"' : '' ); // output description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } /** * Combined checkbox & text input callback. * * args: * option_name - name of the main option * id - key of the setting * value - value if not 1 (optional) * default - default setting (optional) * description - description (optional) * * @return void. */ public function checkbox_text_input( $args ) { $args = $this->normalize_settings_args( $args ); extract( $args ); unset($args['description']); // already extracted, should only be used here // get checkbox ob_start(); $this->checkbox( $args ); $checkbox = ob_get_clean(); // get text input for insertion in wrapper $input_args = array( 'id' => $args['text_input_id'], 'default' => isset( $args['text_input_default'] ) ? (string) $args['text_input_default'] : NULL, 'size' => isset( $args['text_input_size'] ) ? $args['text_input_size'] : NULL, ) + $args; unset($input_args['current']); ob_start(); $this->text_input( $input_args ); $text_input = ob_get_clean(); if (!empty($text_input_wrap)) { printf( "{$checkbox} {$text_input_wrap}", $text_input); } else { echo "{$checkbox} {$text_input}"; } // output description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } // Single text option (not part of any settings array) public function singular_text_element( $args ) { $option_name = $args['option_name']; $id = $args['id']; $size = isset( $args['size'] ) ? $args['size'] : '25'; $class = isset( $args['translatable'] ) && $args['translatable'] === true ? 'translatable' : ''; $option = get_option( $option_name ); if ( isset( $option ) ) { $current = $option; } else { $current = isset( $args['default'] ) ? $args['default'] : ''; } $html = sprintf( '', $id, $option_name, $current, $size, $class ); // Displays option description. if ( isset( $args['description'] ) ) { $html .= sprintf( '

%s

', $args['description'] ); } echo $html; } /** * Textarea callback. * * args: * option_name - name of the main option * id - key of the setting * width - width of the text input (em) * height - height of the text input (lines) * default - default setting (optional) * description - description (optional) * * @return void. */ public function textarea( $args ) { extract( $this->normalize_settings_args( $args ) ); printf( '', $id, $setting_name, esc_textarea( $current ), $width, $height, $placeholder ); // output description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } /** * Select element callback. * * @param array $args Field arguments. * * @return string Select field. */ public function select( $args ) { extract( $this->normalize_settings_args( $args ) ); if ( isset( $enhanced_select ) ) { if ( isset( $multiple ) ) { $setting_name = "{$setting_name}[]"; $multiple = 'multiple=multiple'; } else { $multiple = ''; } $placeholder = isset($placeholder) ? esc_attr( $placeholder ) : ''; $title = isset($title) ? esc_attr( $title ) : ''; $class = 'wc-enhanced-select wpo-wcpdf-enhanced-select'; $css = 'width:400px'; printf( '', $id, $setting_name ); } foreach ( $options as $key => $label ) { if ( isset( $multiple ) && is_array( $current ) ) { $selected = in_array($key, $current) ? ' selected="selected"' : ''; printf( '', $key, $selected, $label ); } else { printf( '', $key, selected( $current, $key, false ), $label ); } } echo ''; if (isset($custom)) { printf( '
', $id ); if (is_callable( array( $this, $custom['type'] ) ) ) { $this->{$custom['type']}( $custom['args'] ); } echo '
'; ?> %s

', $args['description'] ); } } public function radio_button( $args ) { extract( $this->normalize_settings_args( $args ) ); foreach ( $options as $key => $label ) { printf( '', $id, $setting_name, $key, checked( $current, $key, false ) ); printf( '
', $id, $setting_name, $key, $label); } // Displays option description. if ( isset( $args['description'] ) ) { printf( '

%s

', $args['description'] ); } } /** * Multiple text element callback. * @param array $args Field arguments. * @return string Text input field. */ public function multiple_text_input( $args ) { extract( $this->normalize_settings_args( $args ) ); if (!empty($header)) { echo "

{$header}:

"; } printf('

', $id); foreach ($fields as $name => $field) { $size = $field['size']; $placeholder = isset( $field['placeholder'] ) ? $field['placeholder'] : ''; if (isset($field['label_width'])) { $style = sprintf( 'style="display:inline-block; width:%1$s;"', $field['label_width'] ); } else { $style = ''; } $description = isset( $field['description'] ) ? ''.$field['description'].'' : ''; // output field label if (isset($field['label'])) { printf( '', $id, $name, $style, $field['label'] ); } // output field $field_current = isset($current[$name]) ? $current[$name] : ''; $type = isset( $field['type'] ) ? $field['type'] : 'text'; printf( ' %8$s
', $type, $id, $setting_name, $name, esc_attr( $field_current ), $size, $placeholder, $description ); } echo "

"; // Displays option description. if ( isset( $args['description'] ) ) { printf( '

%s

', $args['description'] ); } } /** * Multiple text element callback. * @param array $args Field arguments. * @return string Text input field. */ public function multiple_checkboxes( $args ) { extract( $this->normalize_settings_args( $args ) ); foreach ($fields as $name => $label) { // $label = $field['label']; // output checkbox $field_current = isset($current[$name]) ? $current[$name] : ''; printf( '', $id, $setting_name, $name, $value, checked( $value, $field_current, false ) ); // output field label printf( '
', $id, $name, $label ); } // Displays option description. if ( isset( $args['description'] ) ) { printf( '

%s

', $args['description'] ); } } /** * Media upload callback. * * @param array $args Field arguments. * * @return string Media upload button & preview. */ public function media_upload( $args ) { extract( $this->normalize_settings_args( $args ) ); if( !empty($current) && $attachment = wp_get_attachment_image_src( $current, 'full', false ) ) { $general_settings = get_option('wpo_wcpdf_settings_general'); $attachment_src = $attachment[0]; $attachment_width = $attachment[1]; $attachment_height = $attachment[2]; // check if we have the height saved on settings $header_logo_height = !empty($general_settings['header_logo_height']) ? $general_settings['header_logo_height'] : '3cm'; if ( stripos( $header_logo_height, 'mm' ) != false ) { $in_height = floatval($header_logo_height)/25.4; } elseif ( stripos( $header_logo_height, 'cm' ) != false ) { $in_height = floatval($header_logo_height)/2.54; } elseif ( stripos( $header_logo_height, 'in' ) != false ) { $in_height = floatval($header_logo_height); } else { // don't display resolution } printf('', $attachment_src, $attachment_width, $attachment_height, $id ); if ( !empty($attachment_height) && !empty($in_height) ) { $attachment_resolution = round(absint($attachment_height)/$in_height); printf('

%s: %sdpi

', __('Image resolution','woocommerce-pdf-invoices-packing-slips'), $attachment_resolution ); } printf('%2$s', $id, $remove_button_text ); } printf( '', $id, $setting_name, $current ); printf( '%2$s', $uploader_title, $uploader_button_text, $remove_button_text, $id ); // Displays option description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } /** * Next document number edit callback. * * @param array $args Field arguments. */ public function next_number_edit( $args ) { extract( $args ); $number_store_method = WPO_WCPDF()->settings->get_sequential_number_store_method(); $number_store = new Sequential_Number_Store( $store, $number_store_method ); $next_number = $number_store->get_next(); $nonce = wp_create_nonce( "wpo_wcpdf_next_{$store}" ); printf( ' ', $store, $size, $next_number, $nonce, __( 'Save', 'woocommerce-pdf-invoices-packing-slips' ) ); // Displays option description. if ( isset( $description ) ) { printf( '

%s

', $description ); } } /** * Wrapper function to create tabs for settings in different languages * @param [type] $args [description] * @param [type] $callback [description] * @return [type] [description] */ public function i18n_wrap ( $args ) { extract( $this->normalize_settings_args( $args ) ); if ( $languages = $this->get_languages() ) { printf( '
', $option_name, $id) ?> $language_name ) { $translation_id = "{$option_name}_{$id}_{$lang_code}"; printf( '
', $translation_id ); $args['lang'] = $lang_code; // don't use internationalized placeholders since they're not translated, // to avoid confusion (user thinking they're all the same) if ( $callback == 'multiple_text_input' ) { foreach ($fields as $key => $field_args) { if (!empty($field_args['placeholder']) && isset($field_args['i18n_placeholder'])) { $args['fields'][$key]['placeholder'] = ''; } } } else { if (!empty($args['placeholder']) && isset($args['i18n_placeholder'])) { $args['placeholder'] = ''; } } // specific description for internationalized fields (to compensate for missing placeholder) if (!empty($args['i18n_description'])) { $args['description'] = $args['i18n_description']; } if ( is_array( $callback ) ) { call_user_func( $callback, $args ); } else { call_user_func( array( $this, $callback ), $args ); } echo '
'; } ?>
$data) { $languages[$data['language_code']] = $data['native_name']; } } else { return false; } return $languages; } public function normalize_settings_args ( $args ) { $args['value'] = isset( $args['value'] ) ? $args['value'] : 1; $args['placeholder'] = isset( $args['placeholder'] ) ? $args['placeholder'] : ''; $args['store_unchecked'] = isset( $args['store_unchecked'] ) && $args['store_unchecked'] ? true : false; // get main settings array $option = get_option( $args['option_name'] ); $args['setting_name'] = "{$args['option_name']}[{$args['id']}]"; if ( !isset($args['lang']) && !empty($args['translatable']) ) { $args['lang'] = 'default'; } if (isset($args['lang'])) { // i18n settings name $args['setting_name'] = "{$args['setting_name']}[{$args['lang']}]"; // copy current option value if set if ( $args['lang'] == 'default' && !empty($option[$args['id']]) && !isset( $option[$args['id']]['default'] ) ) { // we're switching back from WPML to normal // try english first if ( isset( $option[$args['id']]['en'] ) ) { $args['current'] = $option[$args['id']]['en']; } elseif ( is_array( $option[$args['id']] ) ) { // fallback to the first language if english not found $first = array_shift($option[$args['id']]); if (!empty($first)) { $args['current'] = $first; } } elseif ( is_string( $option[$args['id']] ) ) { $args['current'] = $option[$args['id']]; } else { // nothing, really? $args['current'] = ''; } } else { if ( isset( $option[$args['id']][$args['lang']] ) ) { $args['current'] = $option[$args['id']][$args['lang']]; } elseif (isset( $option[$args['id']]['default'] )) { $args['current'] = $option[$args['id']]['default']; } } } else { // copy current option value if set if ( isset( $option[$args['id']] ) ) { $args['current'] = $option[$args['id']]; } } // falback to default or empty if no value in option if ( !isset($args['current']) ) { $args['current'] = isset( $args['default'] ) ? $args['default'] : ''; } elseif ( empty($args['current']) && isset($args['default_if_empty']) && $args['default_if_empty'] == true ) { // force fallback if empty 'current' and 'default_if_empty' equals to true $args['current'] = isset( $args['default'] ) ? $args['default'] : ''; } return $args; } /** * Validate options. * * @param array $input options to valid. * * @return array validated options. */ public function validate( $input ) { // echo '
';var_dump($input);die('
'); // Create our array for storing the validated options. $output = array(); if (empty($input) || !is_array($input)) { return $input; } if (!empty($input['wpo_wcpdf_setting_store_empty'])) { //perhaps we should use a more unique/specific name for this foreach ($input['wpo_wcpdf_setting_store_empty'] as $key) { if (empty($input[$key])) { $output[$key] = 0; } } unset($input['wpo_wcpdf_setting_store_empty']); } // Loop through each of the incoming options. foreach ( $input as $key => $value ) { // Check to see if the current option has a value. If so, process it. if ( isset( $input[$key] ) ) { if ( is_array( $input[$key] ) ) { foreach ( $input[$key] as $sub_key => $sub_value ) { $output[$key][$sub_key] = $input[$key][$sub_key]; } } else { $output[$key] = $input[$key]; } } } // Return the array processing any additional functions filtered by this action. return apply_filters( 'wpo_wcpdf_validate_input', $output, $input ); } } endif; // class_exists return new Settings_Callbacks();