/**
  * Make sure the user-input voucher fields are persisted to the database in the
  * order item meta.  This is called during the checkout process for each
  * cart item added to the order.  Requires WooCommerce 2.0+
  *
  * @since 1.2
  * @param int $item_id item identifier
  * @param array $values array of data representing a cart item
  */
 public function add_order_item_meta($item_id, $values)
 {
     // is this a voucher product?
     if (isset($values['voucher_id'])) {
         $voucher = new WC_Voucher($values['voucher_id']);
         wc_add_order_item_meta($item_id, '_voucher_image_id', $values['voucher_image_id']);
         wc_add_order_item_meta($item_id, '_voucher_id', $values['voucher_id']);
         wc_add_order_item_meta($item_id, '_voucher_redeem', array_pad(array(), $values['quantity'], null));
         wc_add_order_item_meta($item_id, '_voucher_number', WC_PDF_Product_Vouchers_Voucher::generate_voucher_number());
         // set any user-input fields to the order item meta data (which can be displayed on the frontend)
         // ie recipient_name, message
         if (isset($values['voucher_item_meta_data'])) {
             foreach ($values['voucher_item_meta_data'] as $name => $value) {
                 if ($voucher->is_user_input_type_field($name) && $value) {
                     // make sure any max length rules are imposed
                     if ($voucher->get_user_input_field_max_length($name)) {
                         $value = substr($value, 0, $voucher->get_user_input_field_max_length($name));
                     }
                     wc_add_order_item_meta($item_id, __($voucher->get_field_label($name), WC_PDF_Product_Vouchers::TEXT_DOMAIN), $value);
                 }
             }
         }
     }
 }