<?php
if (!defined('ABSPATH')) {
exit;
}
if (!class_exists('WP_List_Table')) {
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}
class WC_Report_Stock extends WP_List_Table
{
protected $max_items;
public function __construct()
{
parent::__construct(array('singular' => 'stock', 'plural' => 'stock', 'ajax' => false));
}
public function no_items()
{
_e('No products found.', 'woocommerce');
}
public function display_tablenav($position)
{
if ('top' !== $position) {
parent::display_tablenav($position);
}
}
public function output_report()
{
$this->prepare_items();
echo '<div id="poststuff" class="woocommerce-reports-wide">';
$this->display();
echo '</div>';
}
public function column_default($item, $column_name)
{
global $product;
if (!$product || $product->get_id() !== $item->id) {
$product = wc_get_product($item->id);
}
if (!$product) {
return;
}
switch ($column_name) {
case 'product':
if ($sku = $product->get_sku()) {
echo esc_html($sku) . ' - ';
}
echo esc_html($product->get_name());
if ($product->is_type('variation')) {
echo '<div class="description">' . wp_kses_post(wc_get_formatted_variation($product, true)) . '</div>';
}
break;
case 'parent':
if ($item->parent) {
echo esc_html(get_the_title($item->parent));
} else {
echo '-';
}
break;
case 'stock_status':
if ($product->is_on_backorder()) {
$stock_html = '<mark class="onbackorder">' . __('On backorder', 'woocommerce') . '</mark>';
} elseif ($product->is_in_stock()) {
$stock_html = '<mark class="instock">' . __('In stock', 'woocommerce') . '</mark>';
} else {
$stock_html = '<mark class="outofstock">' . __('Out of stock', 'woocommerce') . '</mark>';
}
echo apply_filters('woocommerce_admin_stock_html', $stock_html, $product);
break;
case 'stock_level':
echo esc_html($product->get_stock_quantity());
break;
case 'wc_actions':
?><p>
<?php
$actions = array();
$action_id = $product->is_type('variation') ? $item->parent : $item->id;
$actions['edit'] = array('url' => admin_url('post.php?post=' . $action_id . '&action=edit'), 'name' => __('Edit', 'woocommerce'), 'action' => 'edit');
if ($product->is_visible()) {
$actions['view'] = array('url' => get_permalink($action_id), 'name' => __('View', 'woocommerce'), 'action' => 'view');
}
$actions = apply_filters('woocommerce_admin_stock_report_product_actions', $actions, $product);
foreach ($actions as $action) {
printf('<a class="button tips %1$s" href="%2$s" data-tip="%3$s">%4$s</a>', esc_attr($action['action']), esc_url($action['url']), sprintf(esc_attr__('%s product', 'woocommerce'), $action['name']), esc_html($action['name']));
}
?>
</p>
<?php
break;
}
}
public function get_columns()
{
$columns = array('product' => __('Product', 'woocommerce'), 'parent' => __('Parent', 'woocommerce'), 'stock_level' => __('Units in stock', 'woocommerce'), 'stock_status' => __('Stock status', 'woocommerce'), 'wc_actions' => __('Actions', 'woocommerce'));
return $columns;
}
public function prepare_items()
{
$this->_column_headers = array($this->get_columns(), array(), $this->get_sortable_columns());
$current_page = absint($this->get_pagenum());
$per_page = apply_filters('woocommerce_admin_stock_report_products_per_page', 20);
$this->get_items($current_page, $per_page);
$this->set_pagination_args(array('total_items' => $this->max_items, 'per_page' => $per_page, 'total_pages' => ceil($this->max_items / $per_page)));
}
}