File "OrderController.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woo-license-keys/app/Controllers/OrderController.php
File size: 3.77 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

namespace LicenseKeys\Controllers;

use Exception;
use WC_Product_License_Key;
use WPMVC\Log;
use WPMVC\MVC\Controller;
use LicenseKeys\Models\LicenseKey;

/**
 * Handles all order related business logic.
 *
 * @see https://gist.github.com/claudiosanches/a79f4e3992ae96cb821d3b357834a005
 * @author Cami Mostajo <[email protected]>
 * @copyright 10 Quality <http://www.10quality.com/>
 * @license GPLv3
 * @package woo-license-keys
 * @version 1.4.0
 */
class OrderController extends Controller
{
    /**
     * Adds license keys list to orders items.
     * @since 1.0.0
     * 
     * @hook woocommerce_after_order_itemmeta
     *
     * @param int        $item_id Order item ID.
     * @param object     $item    Order item.
     * @param WC_Prodcut $product Product.
     */
    public function show_license_keys( $item_id, $item, $product )
    {
        $generate = wc_get_order_item_meta( $item->get_id(), '_license_key_generate', true );
        if ( wc_is_license_key( $product ) && ( $generate === null || $generate === '' || $generate === false ) ) {
            $license_keys = [];
            try {
                $license_keys = LicenseKey::find_by_item( $item_id );
                for ( $i = count( $license_keys )-1;  $i >= 0 ;  --$i ) {
                    $license_keys[$i] = apply_filters( 'woocommerce_license_key', $license_keys[$i] );
                    $license_keys[$i]->product = $product;
                    $license_keys[$i]->order_id = $item->get_order_id();
                }
            } catch ( Exception $e ) {
                Log::error( $e );
            }
            $this->view->show( 'admin.woocommerce.order-license-keys', ['license_keys' => $license_keys] );
        }
    }
    /**
     * Adds manage button at the button.
     * @since 1.0.0
     * 
     * @hook woocommerce_admin_order_item_bulk_actions
     *
     * @param object $order Order.
     */
    public function show_bulk_actions( $order )
    {
        if ( ! apply_filters( 'woocommerce_license_keys_has_extended', false ) ) 
            $this->view->show( 'purchase-order-builk-actions' );
    }
    /**
     * Returns order ids found based on search terms.
     * @since 1.1.4
     * 
     * @hook woocommerce_shop_order_search_results
     * 
     * @global object $wpdb Database accessor.
     * 
     * @param array  $order_ids Current results.
     * @param string $term      Search term.
     * 
     * @return array
     */
    public function admin_search( $order_ids, $term )
    {
        global $wpdb;
        if ( $term && preg_match( '/[A-Za-z0-9]+\-[0-9]+/', $term, $match ) ) {
            $parts = explode( '-', $match[0] );
            return array_unique(
                array_merge(
                    $order_ids,
                    $wpdb->get_col(
                        preg_replace( '/{w}/', '%', $wpdb->prepare(
                            'SELECT DISTINCT items.order_id
                            FROM ' . $wpdb->posts . ' AS posts
                            INNER JOIN ' . $wpdb->prefix . 'woocommerce_order_items AS items
                                ON items.order_id = posts.ID
                                AND items.order_item_id = %d
                            INNER JOIN ' . $wpdb->prefix . 'woocommerce_order_itemmeta AS meta
                                ON meta.order_item_id = items.order_item_id
                                AND meta.meta_key = %s
                                AND meta.meta_value LIKE %s
                            WHERE posts.post_type = %s',
                            $parts[1],
                            '_license_key',
                            '{w}"'.$wpdb->esc_like( $parts[0] ).'"{w}',
                            'shop_order'
                        ) )
                    )
                )
            );
        }
        return $order_ids;
    }
}