add_help_tab( array( 'id' => 'accounting-for-woocommerce', 'title' => __('Accounting', 'accounting-for-woocommerce'), 'content' => $help, ) ); } /** * Get default columns * @see `woocommerce_accounting_columns` filter * @return array */ function woocommerce_accounting_get_columns(){ return apply_filters('woocommerce_accounting_columns', array( 'journal' =>'Journal', 'date' =>'Date', 'number' =>'Inv.Number', 'code' =>'Acc.Code', 'label' =>'Label', 'outcome' =>'Outcome', 'income' =>'Income', 'center' =>'Cost Center', 'empty1' =>sprintf('Empty %s', 1), 'empty2' =>sprintf('Empty %s', 2), 'empty3' =>sprintf('Empty %s', 3), 'empty4' =>sprintf('Empty %s', 4), )); } /** * Get default column mapping * @see `woocommerce_accounting_default_col_mapping` filter * @return [type] [description] */ function woocommerce_accounting_get_default_mapping(){ return apply_filters('woocommerce_accounting_default_col_mapping', array_flip(array_values(woocommerce_accounting_get_columns()))); } /** * Parse column order settings and clean it up. * @param array $color_order * @return array */ function woocommerce_accounting_parse_setting_colorder($color_order){ if(is_numeric(array_keys($color_order)[0])){ $color_order = array_flip($color_order); } $default_col_order = array_flip(woocommerce_accounting_get_columns()); foreach($color_order as $col=>$order){ if(!isset($default_col_order[$col])){ unset($color_order[$col]); } } return $color_order; } /** * Add Accounting tab to the settings page. * * @uses `woocommerce_settings_tabs_array` filter * @param array $setting_tabs The setting tabs array * @return array $setting_tabs The setting tabs array */ function woocommerce_accounting_add_settings_tab( $setting_tabs ) { $setting_tabs['accounting'] = __( 'Accounting', 'accounting-for-woocommerce' ); return $setting_tabs; } /** * Returns an array of associated sections/settings * @see `woocommerce_accounting_section_settings` filter * @return array of sections / settings */ function woocommerce_accounting_get_settings_section(){ return apply_filters('woocommerce_accounting_section_settings', array( 'accounting-general' => array( 'woocommerce_accounting_status', 'woocommerce_accounting_status_code', 'woocommerce_accounting_status_account', 'woocommerce_accounting_generic_prod_accounting_account', 'woocommerce_accounting_generic_prod_analytic_account', 'woocommerce_accounting_generic_tax_accounting_account', 'woocommerce_accounting_generic_fdp_accounting_account', 'woocommerce_accounting_generic_fdp_analytic_account', 'woocommerce_accounting_generic_discount_accounting_account', 'woocommerce_accounting_generic_discount_analytic_account', 'woocommerce_accounting_generic_discount_product_sku', 'woocommerce_accounting_generic_cust_accounting_account', 'woocommerce_accounting_generic_prod_accounting_account', 'woocommerce_accounting_generic_prod_analytic_account', 'woocommerce_accounting_generic_exptcred_accounting_account', 'woocommerce_accounting_generic_exptchar_accounting_account', 'woocommerce_accounting_book_code_order', 'woocommerce_accounting_columns_headers', 'woocommerce_accounting_lib_prefix', 'woocommerce_accounting_colorder', 'woocommerce_accounting_status', 'woocommerce_accounting_status_code', 'woocommerce_accounting_status_account', ), )); } function woocommerce_accounting_add_sections($sections){ $sections['accounting-general'] = __('General', 'accounting-for-woocommerce'); return $sections; } /** * Update Woocommerce Accounting settings. */ function woocommerce_accounting_update_settings_fields(){ $section = filter_input(INPUT_POST, 'section'); $sections = array_keys(apply_filters('woocommerce_get_sections_accounting', array())); if(!in_array($section, $sections)){ return; } $settings = woocommerce_accounting_get_settings($section); foreach($settings as $setting){ $setting_value = apply_filters("woocommerce_accounting:settings:save:{$setting}", isset($_POST[$setting]) ? woocommerce_accounting_recursive_sanitize_text_field($_POST[$setting]) : ''); update_option( $setting, $setting_value); } } /** * Output sections. */ function woocommerce_accounting_output_sections() { global $current_section; $sections = apply_filters( 'woocommerce_get_sections_accounting', array() ); if ( empty( $sections ) || 1 === sizeof( $sections ) ) { return; } echo '