クラス
FileDownloads
ソース ソース
ファイル: src/API/FileDownloads.php
class FileDownloads
{
/**
* Registers hooks
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
public static function init() {
add_filter('usces_filter_is_purchased_item', [get_class(), 'filterIsPurchasedForGroupItems'], 10, 5);
add_filter('usces_filter_cart_item_name', [get_class(), 'makeGroupDataItemsDownloadable'], 10, 2);
}
/**
* Sets extra combo-set specific parameters to dlseller download link
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param string $empty
* @param int $post_id
* @return string
*/
public function filterGroupItemDownloadUrlParams($empty, $post_id) {
return "&pid={$post_id}";
}
/**
* Makes DLSeller use the combo-set order ID when checking if a group item is purchased
*
* This is required to make group 'data' items downloadable from the checkout completion page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $res
* @param int $mid
* @param int $post_id
* @param string $sku
* @param int $order_id
* @return bool
*/
public static function filterIsPurchasedForGroupItems($res, $mid, $post_id, $sku, $order_id) {
global $wpdb;
if (isset($_SESSION['comboSetIsPurchased'])) {
return $_SESSION['comboSetIsPurchased'];
}
if (empty($order_id)) {
return $res;
}
$order_table_name = usces_get_tablename('usces_order');
$query = $wpdb->prepare("SELECT order_status FROM $order_table_name WHERE ID = %d", $order_id);
$status = $wpdb->get_var($query);
$cart = usces_get_ordercartdata($order_id);
$post_id = (int)$post_id;
$founditem = false;
foreach ($cart as $cart_row) {
$sels = unserialize($cart_row['cart_serial']);
if (!empty($sels['comboSetId']) && isset($sels['comboSetItems'])) {
$cscart = wcexics_api_get_combo_set_ordercartdata($order_id);
foreach ($cscart as $cscart_row) {
$sku_code = urldecode($cscart_row['sku']);
if (!empty($sku)) {
if ((int)$cscart_row['post_id'] === $post_id && $sku_code === $sku) {
$founditem = true;
break 2;
}
} else {
if ((int)$cscart_row['post_id'] === $post_id) {
$founditem = true;
break 2;
}
}
}
}
}
if ($founditem) {
if (false === strpos($status, 'noreceipt') && false === strpos($status, 'pending')) {
$res = true;
} elseif (false !== strpos($status, 'noreceipt') || false !== strpos($status, 'pending')) {
$res = 'noreceipt';
}
}
return $res;
}
/**
* Adds download button for 'data' group items on checkout completion page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param string $html
* @param array $args
* @return string
*/
public static function makeGroupDataItemsDownloadable($html, $args) {
global $usces;
if (!WelcartUtils::isOrderCompletionPage()) {
return $html;
}
$sels = unserialize($args['cart_row']['serial']);
// combo-set ID not set, continue
if (empty($sels['comboSetId'])) {
return $html;
}
// combo-set group items not set, continue
if (!isset($sels['comboSetItems'])) {
return $html;
}
$realcart = $_SESSION['usces_cart'];
$_SESSION['usces_cart'] = $sels['comboSetItems'];
$gitemscart = $usces->cart->get_cart();
$_SESSION['usces_cart'] = $realcart;
$datacart = [];
foreach ($gitemscart as $i => $data) {
$usces_item = $usces->get_item($data['post_id']);
if ($usces_item['item_division'] === 'data') {
$datacart[] = $data;
}
}
if (!empty($datacart)) {
$member = $usces->get_member();
$_SESSION['comboSetIsPurchased'] = $usces->is_purchased_item($member['ID'], $args['cart_row']['post_id']);
$fd = new FileDownloads();
add_filter('dlseller_filter_download_para', [$fd, 'filterGroupItemDownloadUrlParams'], 10, 2);
$html .= '<div class="avc-v3 flex column-nowrap mt-1rem">';
$html .= dlseller_completion_info($datacart, 'return');
$html .= '</div>';
remove_filter('dlseller_filter_download_para', [$fd, 'filterGroupItemDownloadUrlParams'], 10);
unset($_SESSION['comboSetIsPurchased']);
}
return $html;
}
}
- filterGroupItemDownloadUrlParams — Sets extra combo-set specific parameters to dlseller download link
- filterIsPurchasedForGroupItems — Makes DLSeller use the combo-set order ID when checking if a group item is purchased
- init — Registers hooks
- makeGroupDataItemsDownloadable — Adds download button for 'data' group items on checkout completion page