File: /var/www/html/ielts-store/wp-content/plugins/woocommerce-zapier/src/Plugin/Bookings/Payload.php
<?php
namespace OM4\WooCommerceZapier\Plugin\Bookings;
use OM4\WooCommerceZapier\Logger;
use OM4\WooCommerceZapier\Plugin\Bookings\V1Controller;
use OM4\WooCommerceZapier\Webhook\Payload\Definition;
use WC_Webhook;
use WP_REST_Request;
defined( 'ABSPATH' ) || exit;
/**
* Implements an individual REST API based Payload definition.
*
* Payload builds output for `woocommerce_webhook_payload` filter.
*
* @since 2.2.0
*/
class Payload implements Definition {
/**
* Resource's key (internal name/type).
*
* Must be a-z lowercase characters only, and in singular (non plural) form.
*
* @var string
*/
protected $key;
/**
* Controller instance.
*
* @var V1Controller
*/
protected $controller;
/**
* Logger instance.
*
* @var Logger
*/
protected $logger;
/**
* Payload constructor.
*
* @param string $key Resource Key.
* @param V1Controller $controller V1Controller instance.
* @param Logger $logger Logger instance.
*/
public function __construct( $key, $controller, $logger ) {
$this->key = $key;
$this->controller = $controller;
$this->logger = $logger;
}
/**
* Build payload upon webhook delivery.
*
* @param array $payload Data to be sent out by the webhook.
* @param string $resource_type Type/name of the resource.
* @param integer $resource_id ID of the resource.
* @param integer $webhook_id ID of the webhook.
*
* @return array
*/
public function build( $payload, $resource_type, $resource_id, $webhook_id ) {
$this->logger->debug(
'Building webhook (ID: %d) payload for "%s" resource (ID: %d).',
array( $webhook_id, $resource_type, $resource_id )
);
if ( $this->key === $resource_type && empty( $payload ) && get_wc_booking( $resource_id ) ) {
// Force apply `woocommerce_webhook_event` filter.
$webhook = new WC_Webhook( $webhook_id );
$event = $webhook->get_event();
// switch user.
$current_user = get_current_user_id();
wp_set_current_user( $webhook->get_user_id() );
// Build payload.
if ( 'deleted' === $event ) {
$payload = array(
'id' => $resource_id,
);
} else {
$request = new WP_REST_Request( 'GET' );
$request->set_param( 'id', $resource_id );
$result = $this->controller->get_item( $request );
$payload = isset( $result->data ) ? $result->data : array();
}
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
$this->logger->debug( 'Content: %s', array( var_export( $payload, true ) ) );
// Restore current user.
wp_set_current_user( $current_user );
}
return $payload;
}
}