kilbot/WooCommerce-POS

View on GitHub
includes/admin/settings/checkout.php

Summary

Maintainability
A
35 mins
Test Coverage
<?php

/**
 * WP Checkout Settings Class
 *
 * @package    WCPOS\Admin_Settings_Checkout
 * @author   Paul Kilmurray <paul@kilbot.com.au>
 * @link     http://www.wcpos.com
 */

namespace WCPOS\Admin\Settings;

use WC_Payment_Gateways;

class Checkout extends Page {

    protected static $instance;

    /**
     * Each settings tab requires an id and label
     */
    public function __construct() {
        $this->id = 'checkout';
        /* translators: woocommerce */
        $this->label = __( 'Checkout', 'woocommerce' );

        $this->defaults = array(
            'order_status'    => 'wc-completed',
            'default_gateway' => 'pos_cash',
            'enabled'         => array(
                'pos_cash' => true,
                'pos_card' => true,
                'paypal'   => true
            )
        );
    }

    /**
     * @return mixed|void
     */
    public function load_gateways() {
        $gateways = WC_Payment_Gateways::instance()->payment_gateways;
        $order    = $this->get( 'gateway_order' );

        // some poorly written plugins will init WC_Payment_Gateways before WP init
        // check to see if POS Cash Gateway is present, if not: re-init WC_Payment_Gateways
        if ( ! in_array( 'WCPOS\Gateways\Cash', array_map( 'get_class', $gateways ) ) ) {
            WC_Payment_Gateways::instance()->init();
            $gateways = WC_Payment_Gateways::instance()->payment_gateways;
        }

        // reorder
        $i = count( $gateways );
        foreach ( $gateways as $gateway ) {
            if ( isset( $order[ $gateway->id ] ) ) {
                $ordered_gateways[ $order[ $gateway->id ] ] = $gateway;
            } else {
                $ordered_gateways[ ++$i ] = $gateway;
            }
            $settings = new Gateways( $gateway->id );
            $settings->merge_settings( $gateway ); // @todo remove this, use get_title() etc
        }

        ksort( $ordered_gateways, SORT_NUMERIC );

        return apply_filters( 'woocommerce_pos_load_gateways', $ordered_gateways );
    }

    /**
     * @return mixed|void
     */
    public function load_enabled_gateways() {
        $gateways         = $this->load_gateways();
        $enabled          = $this->get_enabled_gateway_ids();
        $default          = $this->get( 'default_gateway' );
        $enabled_gateways = array();

        if ( $gateways ): foreach ( $gateways as $gateway ):
            $id = $gateway->id;
            if ( in_array( $id, $enabled ) && isset( $gateway->pos ) && $gateway->pos ) {
                $gateway->default = $id == $default;
                // $gateway->enabled = 'yes'; // gets stomped later by init_settings()
                $enabled_gateways[ $id ] = $gateway;
            }
        endforeach; endif;

        return apply_filters( 'woocommerce_pos_load_enabled_gateways', $enabled_gateways );
    }

    /**
     * Convenience function, returns POS enabled gateway ids
     * @return array
     */
    public function get_enabled_gateway_ids() {
        return array_keys( (array) $this->get( 'enabled' ), true );
    }

}