Submit
Path:
~
/
home
/
getwphos
/
public_html
/
perfumehousedhaka
/
wp-content
/
plugins
/
woocommerce
/
src
/
Internal
/
File Content:
DownloadPermissionsAdjuster.php
<?php /** * DownloadPermissionsAdjuster class file. */ namespace Automattic\WooCommerce\Internal; use Automattic\WooCommerce\Proxies\LegacyProxy; use WC_Product; defined( 'ABSPATH' ) || exit; /** * Class to adjust download permissions on product save. */ class DownloadPermissionsAdjuster { /** * The downloads data store to use. * * @var WC_Data_Store */ private $downloads_data_store; /** * Class initialization, to be executed when the class is resolved by the container. * * @internal */ final public function init() { $this->downloads_data_store = wc_get_container()->get( LegacyProxy::class )->get_instance_of( \WC_Data_Store::class, 'customer-download' ); add_action( 'adjust_download_permissions', array( $this, 'adjust_download_permissions' ), 10, 1 ); } /** * Schedule a download permissions adjustment for a product if necessary. * This should be executed whenever a product is saved. * * @param \WC_Product $product The product to schedule a download permission adjustments for. */ public function maybe_schedule_adjust_download_permissions( \WC_Product $product ) { $children_ids = $product->get_children(); if ( ! $children_ids ) { return; } $are_any_children_downloadable = false; foreach ( $children_ids as $child_id ) { $child = wc_get_product( $child_id ); if ( $child && $child->is_downloadable() ) { $are_any_children_downloadable = true; break; } } if ( ! $product->is_downloadable() && ! $are_any_children_downloadable ) { return; } $scheduled_action_args = array( $product->get_id() ); $already_scheduled_actions = WC()->call_function( 'as_get_scheduled_actions', array( 'hook' => 'adjust_download_permissions', 'args' => $scheduled_action_args, 'status' => \ActionScheduler_Store::STATUS_PENDING, ), 'ids' ); if ( empty( $already_scheduled_actions ) ) { WC()->call_function( 'as_schedule_single_action', WC()->call_function( 'time' ) + 1, 'adjust_download_permissions', $scheduled_action_args ); } } /** * Create additional download permissions for variations if necessary. * * When a simple downloadable product is converted to a variable product, * existing download permissions are still present in the database but they don't apply anymore. * This method creates additional download permissions for the variations based on * the old existing ones for the main product. * * The procedure is as follows. For each existing download permission for the parent product, * check if there's any variation offering the same file for download (the file URL, not name, is checked). * If that is found, check if an equivalent permission exists (equivalent means for the same file and with * the same order id and customer id). If no equivalent permission exists, create it. * * @param int $product_id The id of the product to check permissions for. */ public function adjust_download_permissions( int $product_id ) { $product = wc_get_product( $product_id ); if ( ! $product ) { return; } $children_ids = $product->get_children(); if ( ! $children_ids ) { return; } $parent_downloads = $this->get_download_files_and_permissions( $product ); if ( ! $parent_downloads ) { return; } $children_with_downloads = array(); foreach ( $children_ids as $child_id ) { $child = wc_get_product( $child_id ); // Ensure we have a valid child product. if ( ! $child instanceof WC_Product ) { wc_get_logger()->warning( sprintf( /* translators: 1: child product ID 2: parent product ID. */ __( 'Unable to load child product %1$d while adjusting download permissions for product %2$d.', 'woocommerce' ), $child_id, $product_id ) ); continue; } $children_with_downloads[ $child_id ] = $this->get_download_files_and_permissions( $child ); } foreach ( $parent_downloads['permission_data_by_file_order_user'] as $parent_file_order_and_user => $parent_download_data ) { foreach ( $children_with_downloads as $child_id => $child_download_data ) { $file_url = $parent_download_data['file']; $must_create_permission = // The variation offers the same file as the parent for download... in_array( $file_url, array_keys( $child_download_data['download_ids_by_file_url'] ), true ) && // ...but no equivalent download permission (same file URL, order id and user id) exists. ! array_key_exists( $parent_file_order_and_user, $child_download_data['permission_data_by_file_order_user'] ); if ( $must_create_permission ) { // The new child download permission is a copy of the parent's, // but with the product and download ids changed to match those of the variation. $new_download_data = $parent_download_data['data']; $new_download_data['product_id'] = $child_id; $new_download_data['download_id'] = $child_download_data['download_ids_by_file_url'][ $file_url ]; $this->downloads_data_store->create_from_data( $new_download_data ); } } } } /** * Get the existing downloadable files and download permissions for a given product. * The returned value is an array with two keys: * * - download_ids_by_file_url: an associative array of file url => download_id. * - permission_data_by_file_order_user: an associative array where key is "file_url:customer_id:order_id" and value is the full permission data set. * * @param \WC_Product $product The product to get the downloadable files and permissions for. * @return array[] Information about the downloadable files and permissions for the product. */ private function get_download_files_and_permissions( \WC_Product $product ) { $result = array( 'permission_data_by_file_order_user' => array(), 'download_ids_by_file_url' => array(), ); $downloads = $product->get_downloads(); foreach ( $downloads as $download ) { $result['download_ids_by_file_url'][ $download->get_file() ] = $download->get_id(); } $permissions = $this->downloads_data_store->get_downloads( array( 'product_id' => $product->get_id() ) ); foreach ( $permissions as $permission ) { $permission_data = (array) $permission->data; if ( array_key_exists( $permission_data['download_id'], $downloads ) ) { $file = $downloads[ $permission_data['download_id'] ]->get_file(); $data = array( 'file' => $file, 'data' => (array) $permission->data, ); $result['permission_data_by_file_order_user'][ "{$file}:{$permission_data['user_id']}:{$permission_data['order_id']}" ] = $data; } } return $result; } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
Abilities
---
0755
AbilitiesApi
---
0755
AddressProvider
---
0755
Admin
---
0755
Agentic
---
0755
BatchProcessing
---
0755
CLI
---
0755
Caches
---
0755
ComingSoon
---
0755
CostOfGoodsSold
---
0755
Customers
---
0755
DataStores
---
0755
DependencyManagement
---
0755
Email
---
0755
EmailEditor
---
0755
Features
---
0755
FraudProtection
---
0755
Fulfillments
---
0755
Integrations
---
0755
Jetpack
---
0755
Logging
---
0755
MCP
---
0755
Orders
---
0755
ProductAttributesLookup
---
0755
ProductDownloads
---
0755
ProductFeed
---
0755
ProductFilters
---
0755
ProductImage
---
0755
PushNotifications
---
0755
ReceiptRendering
---
0755
RestApi
---
0755
Settings
---
0755
StockNotifications
---
0755
Traits
---
0755
TransientFiles
---
0755
Utilities
---
0755
WCCom
---
0755
AssignDefaultCategory.php
2001 bytes
0644
Brands.php
1300 bytes
0644
DownloadPermissionsAdjuster.php
6678 bytes
0644
McStats.php
2149 bytes
0644
OrderCouponDataMigrator.php
8528 bytes
0644
RegisterHooksInterface.php
504 bytes
0644
RestApiControllerBase.php
8207 bytes
0644
RestApiParameterUtil.php
5854 bytes
0644
RestockRefundedItemsAdjuster.php
2129 bytes
0644
N4ST4R_ID | Naxtarrr