get_id()) ); // retrieve all bundled products from all relevant packages $all_product_ids = array_values( WC_PB_DB::query_bundled_items(array( 'return' => 'id=>product_id', 'bundle_id' => $all_package_ids )) ); $all_object_ids = array_unique(array_merge($all_package_ids, $all_product_ids)); // retrieve document ids from all packages and products $document_ids = array(); foreach ($all_object_ids as $object_id) { $document_ids = array_merge( $document_ids, wiaas_get_object_attached_documents($object_id)); } $document_ids = array_unique($document_ids); // filter only visible if needed and retrieve documents info $documents = array(); foreach ($document_ids as $document_id) { if ($only_visible && Wiaas_Document::is_doc_visible($document_id) || !$only_visible) { $documents[] = Wiaas_Document::get_doc_info($document_id); } } return $documents; } /** * Retrieve all documents for single order standard package item * * @param WC_Order $order * @param int $package_item_id * * @return array */ function wiaas_get_standard_package_order_item_documents($order, $package_item_id) { $order_items = $order->get_items( 'line_item' ); $package_order_item = $order->get_item($package_item_id); // retrieve package order item addons and options $all_package_order_items = array_merge( wiaas_get_order_item_addons($order_items, $package_order_item), wiaas_get_order_item_options($order_items, $package_order_item), array( $package_order_item ) ); $all_order_items = $all_package_order_items; // retrieve bundled product items for each package foreach ($all_package_order_items as $item) { $all_order_items = array_merge( $all_order_items, wc_pb_get_bundled_order_items($item, $order) ); } $order_documents = array(); foreach ($all_order_items as $order_item) { $order_documents = array_merge( $order_documents, isset($order_item['wiaas_documents']) ? $order_item['wiaas_documents'] : array() ); } return array_map(function($doc) { // append document extension and name information $doc['extension'] = isset($doc['extension']) ? $doc['extension'] : wiaas_get_doc_version_extension($doc['version']); $doc['name'] = isset($doc['name']) ? $doc['name'] : wiaas_get_doc_version_filename($doc['version']); return $doc; }, $order_documents); } /** * Retrieve documents for order item * * @param $order_item * @param string|null $doc_type * * @return array { * $param string key Unique key used for frontend downloand * $param string name Document name visible in download link * $param string version Relative path from upload directory to physical document file * $param string type Document type * * @reference Wiaas_Document * } */ function wiaas_get_order_item_documents($order_item, $doc_type = null) { $documents = empty($order_item['wiaas_documents']) ? array() : $order_item['wiaas_documents']; if (empty($doc_type)) { return $documents; } $filtered_documents = array(); foreach ($documents as $document) { if ($document['type'] === $doc_type) { $filtered_documents[] = $document; } } return $filtered_documents; } /** * Retrieve order other documents (not binded to any order item) * * @param int $order_id * * @return array|mixed */ function wiaas_get_order_other_documents($order_id) { $order = wc_get_order($order_id); $documents = $order->get_meta('_wiaas_other_documents', true); return empty($documents) ? array() : $documents; }