Files
old-new-wiaas/backend/app/plugins/wiaas/includes/document/wiaas-document-functions.php
2018-11-02 10:30:25 +01:00

225 lines
5.7 KiB
PHP

<?php
/**
* Base directory for wiaas document uploads
* @return string
*/
function wiaas_documents_base_dir() {
return '/woocommerce_uploads';
}
/**
* Upload directory for wiaas document uploads
* @return string
*/
function wiaas_documents_upload_dir() {
$wp_uploads = wp_upload_dir();
$wp_uploads_dir = $wp_uploads['basedir'];
return $wp_uploads_dir . wiaas_documents_base_dir();
}
/**
* Retrieve upload path for wiaas document version
* @param string $version
*
* @return string
*/
function wiaas_get_document_version_path($version) {
return wiaas_documents_upload_dir() . '/' . $version;
}
/**
* Retrieve if wiaas document version exists
* @param string $version
*
* @return bool
*/
function wiaas_document_version_exists($version) {
return file_exists(wiaas_get_document_version_path($version));
}
/**
* Retrieve wiaas document version from file path
* (that is relative path from wiaas document upload dir)
* @param string $path
*
* @return string
*/
function wiaas_get_doc_version_from_path($path) {
return str_replace(wiaas_documents_upload_dir() . '/', '', $path);
}
/**
* Retrieve filename for wiaas document version
* @param string $version
*
* @return string
*/
function wiaas_get_doc_version_filename($version) {
return pathinfo( $version, PATHINFO_FILENAME );
}
/**
* Retrieve extension for wiaas document version
* @param string $version
*
* @return string
*/
function wiaas_get_doc_version_extension($version) {
return pathinfo( $version, PATHINFO_EXTENSION );
}
/**
* Attach wiaas document to post object
* @param int $object_id
* @param array $document_ids
*/
function wiaas_attach_documents_to_object($object_id, $document_ids) {
update_post_meta($object_id, '_wiaas_attached_documents', $document_ids);
}
/**
* Retrieve wiaas documents ids for post object
* @param int $object_id
*
* @return array
*/
function wiaas_get_object_attached_documents($object_id) {
$document_ids = get_post_meta($object_id, '_wiaas_attached_documents', true);
return isset($document_ids) && !empty($document_ids) ? $document_ids : array();
}
/**
* Retrieve all documents for single standard wiaas package
*
* this includes:
* - package linked documents
* - addons linked documents
* - options linked documents
* - all documents attacked to bundled products of package, addons and options
*
* @param int $package
* @param bool $only_visible
*
* @return array
*/
function wiaas_get_standard_package_documents($package, $only_visible = false) {
// retrieve addons and option packages ids
$all_package_ids = array_merge(
Wiaas_Package_Addon::get_package_addons_ids($package),
Wiaas_Package_Option_Groups::get_package_option_ids($package),
array($package->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'] = 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;
}