WP_REST_Server::READABLE, 'callback' => array(__CLASS__, 'get_cart_count'), 'permission_callback' => 'is_user_logged_in', ) ); register_rest_route( self::$namespace, '/' . self::$rest_base . '/items', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array(__CLASS__, 'get_cart_items'), 'permission_callback' => 'is_user_logged_in', ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array(__CLASS__, 'add_package_to_cart'), 'permission_callback' => 'is_user_logged_in', 'args' => array( 'package_id' => array( 'description' => __( 'Wiaas package ID.', 'wiaas' ), 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', ), 'cl_id' => array( 'description' => __( 'Commercial lead ID.', 'wiaas' ), 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', ), 'price_id' => array( 'description' => __( 'Selected price ID for Wiaas package.', 'wiaas' ), 'type' => 'string', 'enum' => array_keys(Wiaas_Package_Pricing::get_available_pay_types()), 'required' => true, 'sanitize_callback' => 'sanitize_key', ), 'options_ids' => array( 'description' => __( 'Wiaas package options IDs.', 'wiaas' ), 'type' => 'array', 'items' => array( 'type' => 'integer', 'sanitize_callback' => 'absint', ) ), 'addons_ids' => array( 'description' => __( 'Wiaas package addons IDs.', 'wiaas' ), 'type' => 'array', 'items' => array( 'type' => 'integer', 'sanitize_callback' => 'absint', ) ) ) ), ) ); register_rest_route( self::$namespace, '/' . self::$rest_base . '/items/(?P[\w-]+)', array( 'args' => array( 'key' => array( 'description' => __( 'Unique key identifier for cart package item.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', ), ), array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array(__CLASS__, 'remove_package_from_cart'), 'permission_callback' => 'is_user_logged_in', ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array(__CLASS__, 'update_package_quantity'), 'permission_callback' => 'is_user_logged_in', 'args' => array( 'quantity' => array( 'description' => __( 'New quantity cart package item.', 'wiaas' ), 'type' => 'integer', 'sanitize_callback' => 'absint', ) ) ) ) ); register_rest_route(self::$namespace, '/' . self::$rest_base . '/documents', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array(__CLASS__, 'get_cart_documents'), 'permission_callback' => 'is_user_logged_in', ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array(__CLASS__, 'upload_cart_document'), 'permission_callback' => 'is_user_logged_in', 'args' => array( 'doc_type' => array( 'description' => __( 'Category of uploaded document.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', 'required' => true ), 'package_key' => array( 'description' => __( 'Unique key identifier for cart package item.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', 'required' => true ), 'type' => array( 'default' => 'wiaas_doc' ) ) ) )); register_rest_route(self::$namespace, '/' . self::$rest_base . '/items/(?P[\w-]+)/documents/(?P[\w-]+)', array( 'args' => array( 'key' => array( 'description' => __( 'Unique key identifier for cart package item.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', ), 'type' => array( 'description' => __( 'Cart document Type.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array(__CLASS__, 'download_cart_document'), 'permission_callback' => 'is_user_logged_in', 'args' => array( 'document_key' => array( 'description' => __( 'Unique key identifier for cart document.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', 'required' => true ), ) ), )); register_rest_route( self::$namespace, '/' . self::$rest_base . '/checkout', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array(__CLASS__, 'checkout'), 'permission_callback' => 'is_user_logged_in', 'args' => array( 'vat' => array( 'description' => __( 'Vat Code for new order.', 'wiaas' ), 'type' => 'string', 'required' => true, 'sanitize_callback' => 'sanitize_key', ), 'company' => array( 'description' => __( 'Company name for new order.', 'wiaas' ), 'type' => 'string', 'required' => true, 'sanitize_callback' => 'sanitize_key', ), 'reference' => array( 'description' => __( 'Location details for new order.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', ), 'tender' => array( 'description' => __( 'Invoice reference for new order.', 'wiaas' ), 'type' => 'string', 'sanitize_callback' => 'sanitize_key', ), 'project_id' => array( 'description' => __( 'Order project ID for new order.', 'wiaas' ), 'type' => 'integer', 'sanitize_callback' => 'absint', ), 'delivery_address_id' => array( 'description' => __( 'ID of delivery address for new order.', 'wiaas' ), 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', ), 'billing_address_id' => array( 'description' => __( 'ID of billing address for new order.', 'wiaas' ), 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint', ), ) ) ); } /** * Get cart count * @return WP_REST_Response */ public static function get_cart_count() { return rest_ensure_response(array( 'count' => Wiaas_Cart::get_cart_packages_count(), )); } /** * Get cart items * * @return WP_REST_Response */ public static function get_cart_items() { return rest_ensure_response(array( 'items' => Wiaas_Cart::get_cart_packages(), )); } /** * @param WP_REST_Request $request Request data. * * @return WP_REST_Response */ public static function add_package_to_cart($request) { $success = Wiaas_Cart::add_package_to_cart( $request['package_id'], $request['price_id'], $request['cl_id'], $request['addons_ids'], $request['options_ids'] ); if (!$success) { return (wc_notice_count('error') > 0) ? wiaas_api_cart_error_notices() : wiaas_api_notice('PACKAGE_ALREADY_IN_CART', 'error'); } return wiaas_api_notice('PACKAGE_ADDED', 'success'); } /** * @param WP_REST_Request $request Request data. * * @return WP_REST_Response */ public static function remove_package_from_cart($request) { $success = Wiaas_Cart::remove_package_from_cart($request['key']); if (!$success) { return (wc_notice_count('error') > 0) ? wiaas_api_cart_error_notices() : wiaas_api_notice('INVALID_PACKAGE_FOR_REMOVE', 'error'); } return wiaas_api_notice('PACKAGE_REMOVED_FROM_CART', 'success'); } /** * Update package quantity in cart * @return WP_REST_Response */ public static function update_package_quantity($request) { $success = Wiaas_Cart::update_package_quantity($request['key'], $request['quantity']); if (!$success) { return (wc_notice_count('error') > 0) ? wiaas_api_cart_error_notices() : wiaas_api_notice('QUANTITY_NOT_UPDATED', 'error'); } return wiaas_api_notice('QUANTITY_UPDATED', 'success'); } /** * Retrive cart documents info * * @return mixed|WP_REST_Response */ public static function get_cart_documents() { return rest_ensure_response( Wiaas_Cart::get_cart_documents()); } /** * Upload document to cart * @param WP_REST_Request $request * * @return mixed|WP_REST_Response */ public static function upload_cart_document($request) { $success = Wiaas_Cart::upload_cart_document($request['doc_type'], $request['package_key']); if (!$success) { return (wc_notice_count('error') > 0) ? wiaas_api_cart_error_notices() : wiaas_api_generate_error('UPLOAD_ERROR'); } return wiaas_api_notice('FILE_UPLOADED', 'success'); } /** * Download cart document * @param WP_REST_Request $request */ public static function download_cart_document($request) { Wiaas_Document_Download::download_cart_document( $request['key'], $request['type'], $request['document_key']); } /** * @param WP_REST_Request $request Request data. * * @return WP_REST_Response */ public static function checkout($request) { Wiaas_Checkout::process_checkout($request->get_body_params()); if (wc_notice_count('error') > 0) { return wiaas_api_cart_error_notices(); } return wiaas_api_notice('ORDER_PLACED', 'success'); } }