/**
  * handle_downloads.
  *
  * @version 2.2.2
  * @since   2.2.2
  */
 public function handle_downloads()
 {
     if (isset($_GET['wcj_download_file'])) {
         $file_name = $_GET['wcj_download_file'];
         $upload_dir = wcj_get_wcj_uploads_dir('input_fields_uploads');
         $file_path = $upload_dir . '/' . $file_name;
         if (is_super_admin() || is_shop_manager()) {
             header("Expires: 0");
             header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
             header("Cache-Control: private", false);
             header('Content-disposition: attachment; filename=' . $file_name);
             header("Content-Transfer-Encoding: binary");
             header("Content-Length: " . filesize($file_path));
             readfile($file_path);
             exit;
         }
     }
 }
 /**
  * add_product_input_fields_to_order_item_meta.
  */
 public function add_product_input_fields_to_order_item_meta($item_id, $values, $cart_item_key)
 {
     $total_number = apply_filters('wcj_get_option_filter', 1, $this->get_value('wcj_' . 'product_input_fields' . '_' . $this->scope . '_total_number', $values['product_id'], 1));
     for ($i = 1; $i <= $total_number; $i++) {
         if (array_key_exists('wcj_product_input_fields_' . $this->scope . '_' . $i, $values)) {
             $type = $this->get_value('wcj_product_input_fields_type_' . $this->scope . '_' . $i, $values['product_id'], '');
             $input_field_value = $values['wcj_product_input_fields_' . $this->scope . '_' . $i];
             if ('file' === $type) {
                 $tmp_name = $input_field_value['tmp_name'];
                 $ext = pathinfo($input_field_value['name'], PATHINFO_EXTENSION);
                 $name = $item_id . '.' . $ext;
                 //$input_field_value['name'];
                 $upload_dir = wcj_get_wcj_uploads_dir('input_fields_uploads');
                 if (!file_exists($upload_dir)) {
                     mkdir($upload_dir, 0755, true);
                 }
                 //$upload_dir = ( wp_mkdir_p( $upload_dir['path'] ) ) ? $upload_dir['path'] : $upload_dir['basedir'];
                 $upload_dir_and_name = $upload_dir . '/' . $name;
                 //move_uploaded_file( $tmp_name, $upload_dir_and_name );
                 $file_data = file_get_contents($tmp_name);
                 file_put_contents($upload_dir_and_name, $file_data);
                 unlink($tmp_name);
                 //unset( $input_field_value['tmp_name'] );
                 $input_field_value['tmp_name'] = $upload_dir_and_name;
                 $input_field_value['wcj_type'] = 'file';
                 //$orig_file_name = $input_field_value['name'];
                 //wc_add_order_item_meta( $item_id, '_wcj_product_input_fields_' . $this->scope . '_' . $i . '_orig_file_name', $orig_file_name );
                 //$input_field_value = '<a href="' . add_query_arg( 'wcj_download_file', $name ) . '">' . $orig_file_name . '</a>';
                 //$input_field_value = $orig_file_name;
             }
             wc_add_order_item_meta($item_id, '_wcj_product_input_fields_' . $this->scope . '_' . $i, $input_field_value);
         }
     }
 }
 /**
  * process_checkout_files_upload.
  *
  * @version 2.5.0
  * @since   2.4.5
  */
 function process_checkout_files_upload()
 {
     if (!session_id()) {
         session_start();
     }
     // Remove file
     $total_number = apply_filters('booster_get_option', 1, get_option('wcj_checkout_files_upload_total_number', 1));
     for ($i = 1; $i <= $total_number; $i++) {
         if (isset($_POST['wcj_remove_checkout_file_' . $i])) {
             if (isset($_POST['wcj_checkout_files_upload_order_id_' . $i])) {
                 $order_id = $_POST['wcj_checkout_files_upload_order_id_' . $i];
                 $order_file_name = get_post_meta($order_id, '_' . 'wcj_checkout_files_upload_' . $i, true);
                 if ('' != $order_file_name) {
                     $file_path = wcj_get_wcj_uploads_dir('checkout_files_upload') . '/' . $order_file_name;
                     unlink($file_path);
                     $file_name = get_post_meta($order_id, '_' . 'wcj_checkout_files_upload_real_name_' . $i, true);
                     wc_add_notice(sprintf(get_option('wcj_checkout_files_upload_notice_success_remove_' . $i, __('File "%s" was successfully removed.', 'woocommerce-jetpack')), $file_name));
                     delete_post_meta($order_id, '_' . 'wcj_checkout_files_upload_' . $i);
                     delete_post_meta($order_id, '_' . 'wcj_checkout_files_upload_real_name_' . $i);
                 }
             } else {
                 $file_name = 'wcj_checkout_files_upload_' . $i;
                 unlink($_SESSION[$file_name]['tmp_name']);
                 wc_add_notice(sprintf(get_option('wcj_checkout_files_upload_notice_success_remove_' . $i, __('File "%s" was successfully removed.', 'woocommerce-jetpack')), $_SESSION[$file_name]['name']));
                 unset($_SESSION[$file_name]);
             }
         }
     }
     // Upload file
     for ($i = 1; $i <= $total_number; $i++) {
         if (isset($_POST['wcj_upload_checkout_file_' . $i])) {
             $file_name = 'wcj_checkout_files_upload_' . $i;
             if (isset($_FILES[$file_name]) && '' != $_FILES[$file_name]['tmp_name']) {
                 // Validate
                 $is_valid = true;
                 if ('' != ($file_accept = get_option('wcj_checkout_files_upload_file_accept_' . $i, '')) && isset($_FILES[$file_name])) {
                     // Validate file type
                     $file_accept = explode(',', $file_accept);
                     if (is_array($file_accept) && !empty($file_accept)) {
                         $real_file_name = $_FILES[$file_name]['name'];
                         $file_type = '.' . pathinfo($real_file_name, PATHINFO_EXTENSION);
                         if (!in_array($file_type, $file_accept)) {
                             wc_add_notice(sprintf(get_option('wcj_checkout_files_upload_notice_wrong_file_type_' . $i, __('Wrong file type: "%s"!', 'woocommerce-jetpack')), $real_file_name), 'error');
                             $is_valid = false;
                         }
                     }
                 }
                 if ($is_valid) {
                     // To session
                     $_SESSION[$file_name] = $_FILES[$file_name];
                     $tmp_dest_file = tempnam(sys_get_temp_dir(), 'wcj');
                     move_uploaded_file($_SESSION[$file_name]['tmp_name'], $tmp_dest_file);
                     $_SESSION[$file_name]['tmp_name'] = $tmp_dest_file;
                     wc_add_notice(sprintf(get_option('wcj_checkout_files_upload_notice_success_upload_' . $i, __('File "%s" was successfully uploaded.', 'woocommerce-jetpack')), $_SESSION[$file_name]['name']));
                     // To order
                     if (isset($_POST['wcj_checkout_files_upload_order_id_' . $i])) {
                         $this->add_files_to_order($_POST['wcj_checkout_files_upload_order_id_' . $i], null);
                     }
                 }
             } else {
                 wc_add_notice(get_option('wcj_checkout_files_upload_notice_upload_no_file_' . $i, __('Please select file to upload!', 'woocommerce-jetpack')), 'notice');
             }
         }
     }
     // Admin file download
     if (isset($_GET['wcj_download_checkout_file_admin'])) {
         $tmp_file_name = wcj_get_wcj_uploads_dir('checkout_files_upload') . '/' . $_GET['wcj_download_checkout_file_admin'];
         $file_name = get_post_meta($_GET['post'], '_' . 'wcj_checkout_files_upload_real_name_' . $_GET['wcj_checkout_file_number'], true);
         if (wcj_is_user_role('administrator') || is_shop_manager()) {
             header("Expires: 0");
             header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
             header("Cache-Control: private", false);
             header('Content-disposition: attachment; filename=' . $file_name);
             header("Content-Transfer-Encoding: binary");
             header("Content-Length: " . filesize($tmp_file_name));
             readfile($tmp_file_name);
             exit;
         }
     }
     // User file download
     if (isset($_GET['wcj_download_checkout_file']) && isset($_GET['_wpnonce']) && false !== wp_verify_nonce($_GET['_wpnonce'], 'wcj_download_checkout_file')) {
         $i = $_GET['wcj_download_checkout_file'];
         if (isset($_GET['order-received']) || isset($_GET['view-order'])) {
             $order_id = isset($_GET['order-received']) ? $_GET['order-received'] : $_GET['view-order'];
             $the_order = wc_get_order($order_id);
             if (!$the_order->key_is_valid($_GET['key'])) {
                 return;
             }
             $order_file_name = get_post_meta($order_id, '_' . 'wcj_checkout_files_upload_' . $i, true);
             $tmp_file_name = wcj_get_wcj_uploads_dir('checkout_files_upload') . '/' . $order_file_name;
             $file_name = get_post_meta($order_id, '_' . 'wcj_checkout_files_upload_real_name_' . $i, true);
         } else {
             $tmp_file_name = $_SESSION['wcj_checkout_files_upload_' . $i]['tmp_name'];
             $file_name = $_SESSION['wcj_checkout_files_upload_' . $i]['name'];
         }
         header("Expires: 0");
         header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
         header("Cache-Control: private", false);
         header('Content-disposition: attachment; filename=' . $file_name);
         header("Content-Transfer-Encoding: binary");
         header("Content-Length: " . filesize($tmp_file_name));
         readfile($tmp_file_name);
         exit;
     }
 }