'no'); }); add_filter('usedkit_save_settings', function ($out, $post) { return $out + array('register' => !empty($post['register']) ? 'yes' : 'no'); }, 10, 2); add_action('usedkit_settings_rows', function ($s) { ?>

array(__('Seller', 'usedkit'), __('Name, or company and business ID', 'usedkit')), '_usedkit_seller_contact' => array(__('Seller\'s contact details', 'usedkit'), __('Address, phone, email', 'usedkit')), '_usedkit_seller_id' => array(__('ID checked', 'usedkit'), __('Document and number, e.g. passport 12345678', 'usedkit')), '_usedkit_serial' => array(__('Serial number', 'usedkit'), ''), ); } add_action('usedkit_item_panel', function ($product) { if (!usedkit_register_on()) { return; } usedkit_panel_heading(__('Purchase', 'usedkit')); foreach (usedkit_register_fields() as $key => $f) { $args = array('id' => $key, 'label' => $f[0], 'placeholder' => $f[1], 'value' => $product ? $product->get_meta($key) : ''); $key === '_usedkit_seller_contact' ? woocommerce_wp_textarea_input($args) : woocommerce_wp_text_input($args); } if (!(function_exists('usedkit_margin_on') && usedkit_margin_on())) { // With margin VAT on, these two are beside the price instead. woocommerce_wp_text_input(array('id' => '_usedkit_cost', 'data_type' => 'price', 'label' => __('Purchase price', 'usedkit') . ' (' . get_woocommerce_currency_symbol() . ')', 'value' => $product ? $product->get_meta('_usedkit_cost') : '')); woocommerce_wp_text_input(array('id' => '_usedkit_bought', 'type' => 'date', 'label' => __('Purchase date', 'usedkit'), 'value' => $product ? $product->get_meta('_usedkit_bought') : '')); } }, 40); add_action('woocommerce_admin_process_product_object', function ($product) { if (!usedkit_register_on()) { return; } foreach (array_keys(usedkit_register_fields()) as $key) { usedkit_set_meta($product, $key, usedkit_posted($key, $key === '_usedkit_seller_contact')); } if (!(function_exists('usedkit_margin_on') && usedkit_margin_on())) { $cost = usedkit_posted('_usedkit_cost'); usedkit_set_meta($product, '_usedkit_cost', $cost === null ? null : wc_format_decimal($cost)); $d = usedkit_posted('_usedkit_bought'); usedkit_set_meta($product, '_usedkit_bought', $d === null ? null : (preg_match('/^\d{4}-\d{2}-\d{2}$/', $d) ? $d : '')); } // A purchase with a seller has a date: today, unless one was given. if ($product->get_meta('_usedkit_seller') !== '' && $product->get_meta('_usedkit_bought') === '') { $product->update_meta_data('_usedkit_bought', current_time('Y-m-d')); } }); /* ---- the register ---------------------------------------------------------------------- */ add_action('admin_menu', function () { if (usedkit_register_on()) { add_submenu_page('woocommerce', __('Purchase register', 'usedkit'), __('Purchase register', 'usedkit'), 'manage_woocommerce', 'usedkit-register', 'usedkit_register_page'); } }, 20); /** Purchases dated in [from, to], oldest first. */ function usedkit_register_rows($from, $to) { $ids = get_posts(array('post_type' => 'product', 'post_status' => array('publish', 'private', 'draft', 'pending'), 'numberposts' => -1, 'fields' => 'ids', 'no_found_rows' => true, 'meta_query' => array(array('key' => '_usedkit_bought', 'value' => array($from, $to), 'compare' => 'BETWEEN', 'type' => 'DATE')))); // phpcs:ignore WordPress.DB.SlowDBQuery $rows = array(); foreach (array_filter(array_map('wc_get_product', $ids)) as $p) { $sold = (int) $p->get_meta('_usedkit_sold_at'); $rows[] = array( 'id' => $p->get_id(), 'date' => $p->get_meta('_usedkit_bought'), 'item' => $p->get_name(), 'sku' => $p->get_sku(), 'serial' => $p->get_meta('_usedkit_serial'), 'seller' => $p->get_meta('_usedkit_seller'), 'contact' => $p->get_meta('_usedkit_seller_contact'), 'seller_id' => $p->get_meta('_usedkit_seller_id'), 'price' => $p->get_meta('_usedkit_cost'), 'sold' => $sold ? wp_date('Y-m-d', $sold) : ''); } usort($rows, function ($a, $b) { return strcmp($a['date'], $b['date']) ?: $a['id'] <=> $b['id']; }); return $rows; } function usedkit_register_range() { $from = (string) usedkit_view_arg('register', 'from', 'usedkit_register_csv'); $to = (string) usedkit_view_arg('register', 'to', 'usedkit_register_csv'); $ok = function ($d) { return (bool) preg_match('/^\d{4}-\d{2}-\d{2}$/', $d); }; return array($ok($from) ? $from : current_time('Y') . '-01-01', $ok($to) ? $to : current_time('Y-m-d')); } function usedkit_register_page() { if (!current_user_can('manage_woocommerce')) { return; } list($from, $to) = usedkit_register_range(); $rows = usedkit_register_rows($from, $to); ?>

– CSV
' . esc_html($r['sku']) . '' : ''; ?>