class-wc-meta-box-order-downloads.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * Order Downloads
  4. *
  5. * @author WooThemes
  6. * @category Admin
  7. * @package WooCommerce/Admin/Meta Boxes
  8. * @version 2.1.0
  9. */
  10. if ( ! defined( 'ABSPATH' ) ) {
  11. exit; // Exit if accessed directly
  12. }
  13. /**
  14. * WC_Meta_Box_Order_Downloads Class.
  15. */
  16. class WC_Meta_Box_Order_Downloads {
  17. /**
  18. * Output the metabox.
  19. *
  20. * @param WP_Post $post
  21. */
  22. public static function output( $post ) {
  23. ?>
  24. <div class="order_download_permissions wc-metaboxes-wrapper">
  25. <div class="wc-metaboxes">
  26. <?php
  27. $data_store = WC_Data_Store::load( 'customer-download' );
  28. $download_permissions = $data_store->get_downloads(
  29. array(
  30. 'order_id' => $post->ID,
  31. 'orderby' => 'product_id',
  32. )
  33. );
  34. $product = null;
  35. $loop = 0;
  36. $file_counter = 1;
  37. if ( $download_permissions && sizeof( $download_permissions ) > 0 ) {
  38. foreach ( $download_permissions as $download ) {
  39. if ( ! $product || $product->get_id() !== $download->get_product_id() ) {
  40. $product = wc_get_product( $download->get_product_id() );
  41. $file_counter = 1;
  42. }
  43. // don't show permissions to files that have since been removed.
  44. if ( ! $product || ! $product->exists() || ! $product->has_file( $download->get_download_id() ) ) {
  45. continue;
  46. }
  47. // Show file title instead of count if set.
  48. $file = $product->get_file( $download->get_download_id() );
  49. $file_count = isset( $file['name'] ) ? $file['name'] : sprintf( __( 'File %d', 'woocommerce' ), $file_counter );
  50. include 'views/html-order-download-permission.php';
  51. $loop++;
  52. $file_counter++;
  53. }
  54. }
  55. ?>
  56. </div>
  57. <div class="toolbar">
  58. <p class="buttons">
  59. <select id="grant_access_id" class="wc-product-search" name="grant_access_id[]" multiple="multiple" style="width: 400px;" data-placeholder="<?php esc_attr_e( 'Search for a downloadable product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_downloadable_products_and_variations"></select>
  60. <button type="button" class="button grant_access">
  61. <?php _e( 'Grant access', 'woocommerce' ); ?>
  62. </button>
  63. </p>
  64. <div class="clear"></div>
  65. </div>
  66. </div>
  67. <?php
  68. }
  69. /**
  70. * Save meta box data.
  71. *
  72. * @param int $post_id
  73. * @param WP_Post $post
  74. */
  75. public static function save( $post_id, $post ) {
  76. if ( isset( $_POST['permission_id'] ) ) {
  77. $permission_ids = $_POST['permission_id'];
  78. $downloads_remaining = $_POST['downloads_remaining'];
  79. $access_expires = $_POST['access_expires'];
  80. $max = max( array_keys( $permission_ids ) );
  81. for ( $i = 0; $i <= $max; $i ++ ) {
  82. if ( ! isset( $permission_ids[ $i ] ) ) {
  83. continue;
  84. }
  85. $download = new WC_Customer_Download( $permission_ids[ $i ] );
  86. $download->set_downloads_remaining( wc_clean( $downloads_remaining[ $i ] ) );
  87. $download->set_access_expires( array_key_exists( $i, $access_expires ) && '' !== $access_expires[ $i ] ? strtotime( $access_expires[ $i ] ) : '' );
  88. $download->save();
  89. }
  90. }
  91. }
  92. }