Skip to content

Commit

Permalink
Merge branch 'main' into 481-ubl-integration
Browse files Browse the repository at this point in the history
  • Loading branch information
alexmigf committed Sep 6, 2023
2 parents e54c026 + 6cedb5e commit 051359d
Show file tree
Hide file tree
Showing 22 changed files with 299 additions and 92 deletions.
5 changes: 5 additions & 0 deletions assets/css/debug-tools.css
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,9 @@ form#wpo-wcpdf-settings {
padding: 0 24px 0 8px;
min-height: 30px;
max-width: 25rem;
}

#document_custom_redirect_page,
#document_custom_redirect_page + .description {
display: none;
}
2 changes: 1 addition & 1 deletion assets/css/debug-tools.min.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion assets/css/settings-styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,8 @@ body.woocommerce_page_wpo_wcpdf_options_page {

#wpo-wcpdf-preview-wrapper .sidebar .form-table > tr > td > input[type="text"],
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tbody > tr > td > input[type="text"],
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tr > td > input[type="url"],
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tbody > tr > td > input[type="url"],
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tr > td > select,
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tbody > tr > td > select,
#wpo-wcpdf-preview-wrapper .sidebar .form-table > tr > td > textarea,
Expand All @@ -351,7 +353,8 @@ body.woocommerce_page_wpo_wcpdf_options_page {
width: 100%;
}

#wpo-wcpdf-preview-wrapper input[type="text"][size] {
#wpo-wcpdf-preview-wrapper input[type="text"][size],
#wpo-wcpdf-preview-wrapper input[type="url"][size] {
width: auto !important;
max-width: 100% !important;
}
Expand Down
14 changes: 14 additions & 0 deletions assets/js/debug-script.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,18 @@ jQuery( function( $ ) {
}
}

// toggle custom redirect page
$( "[name='wpo_wcpdf_settings_debug[document_access_denied_redirect_page]']" ).on( 'change', function( event ) {
let $custom_page_field = $( this ).closest( 'table' ).find( '#document_custom_redirect_page' );
let $field_description = $custom_page_field.closest( 'td' ).find( '.description' );

if ( 'custom_page' === $( this ).val() ) {
$custom_page_field.show();
$field_description.show();
} else {
$custom_page_field.hide();
$field_description.hide();
}
} ).trigger( 'change' );

} );
2 changes: 1 addition & 1 deletion assets/js/debug-script.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 18 additions & 1 deletion includes/class-wcpdf-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ public function __construct() {
// document actions
add_action( 'wpo_wcpdf_document_actions', array( $this, 'add_regenerate_document_button' ) );

// add "invoice number" column to WooCommerce Analytic - Orders
add_filter( 'woocommerce_rest_prepare_report_orders', array( $this, 'add_invoice_number_to_order_report' ) );
add_filter( 'woocommerce_report_orders_export_columns', array( $this, 'add_invoice_number_header_to_order_export' ) );
add_filter( 'woocommerce_report_orders_prepare_export_item', array( $this, 'add_invoice_number_value_to_order_export' ), 10, 2 );
}

// display review admin notice after 100 pdf downloads
Expand Down Expand Up @@ -1040,7 +1043,7 @@ public function send_emails( $post_or_order_object_id, $post_or_order_object ) {

if ( ! empty( $_POST['wpo_wcpdf_send_emails'] ) ) {
$action = wc_clean( $_POST['wpo_wcpdf_send_emails'] );
if ( strstr( $action, 'send_email_' ) ) {
if ( ! empty( $action ) && strstr( $action, 'send_email_' ) ) {
$email_to_send = str_replace( 'send_email_', '', $action );
// Switch back to the site locale.
wc_switch_to_site_locale();
Expand Down Expand Up @@ -1336,6 +1339,20 @@ public function add_invoice_number_to_order_report( $response ) {

return $response;
}

public function add_invoice_number_header_to_order_export( $export_columns ) {
$export_columns['invoice_number'] = __( 'Invoice Number', 'woocommerce-pdf-invoices-packing-slips' );

return $export_columns;
}

public function add_invoice_number_value_to_order_export( $export_item, $item ) {
if ( ! empty( $item['invoice_number'] ) ) {
$export_item['invoice_number'] = $item['invoice_number'];
}

return $export_item;
}
}

endif; // class_exists
31 changes: 31 additions & 0 deletions includes/class-wcpdf-endpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,37 @@ public function get_document_link_access_type() {
return apply_filters( 'wpo_wcpdf_document_link_access_type', $access_type, $this );
}

/**
* Get document denied frontend redirect URL
*
* @return string
*/
public function get_document_denied_frontend_redirect_url() {
$redirect_url = '';
$debug_settings = get_option( 'wpo_wcpdf_settings_debug', array() );

if ( isset( $debug_settings['document_access_denied_redirect_page'] ) ) {
switch ( $debug_settings['document_access_denied_redirect_page'] ) {
case 'login_page':
$redirect_url = wp_sanitize_redirect( wp_login_url() );
break;
case 'myaccount_page':
$redirect_url = wp_sanitize_redirect( wc_get_page_permalink( 'myaccount' ) );
break;
case 'custom_page':
if ( isset( $debug_settings['document_custom_redirect_page'] ) && ! empty( $debug_settings['document_custom_redirect_page'] ) ) {
$redirect_url = wp_sanitize_redirect( $debug_settings['document_custom_redirect_page'] );
}
break;
case 'blank_page':
default:
break;
}
}

return apply_filters( 'wpo_wcpdf_document_denied_frontend_redirect_url', $redirect_url, $debug_settings, $this );
}

}

endif; // class_exists
8 changes: 6 additions & 2 deletions includes/class-wcpdf-font-synchronizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public function delete_font_files( $filenames ) {
$extensions = array( '.ttf', '.ufm', '.ufm.php', '.afm', '.afm.php' );
foreach ( $filenames as $filename ) {
// never delete files in our own plugin folder
if ( strpos( $filename, $plugin_folder ) !== false ) {
if ( ! empty( $filename ) && false !== strpos( $filename, $plugin_folder ) ) {
continue;
}
foreach ( $extensions as $extension ) {
Expand Down Expand Up @@ -218,7 +218,11 @@ public function get_plugin_fonts() {
* @return string Normalized path.
*/
public function normalize_path( $path ) {
return function_exists( 'wp_normalize_path' ) ? wp_normalize_path( $path ) : str_replace('\\','/', $path );
if ( ! empty( $path ) ) {
return function_exists( 'wp_normalize_path' ) ? wp_normalize_path( $path ) : str_replace( '\\', '/', $path );
} else {
return $path;
}
}

/**
Expand Down
14 changes: 8 additions & 6 deletions includes/class-wcpdf-install.php
Original file line number Diff line number Diff line change
Expand Up @@ -271,12 +271,14 @@ protected function upgrade( $installed_version ) {

// Migrate template path
// forward slash for consistency/compatibility
$template_path = str_replace('\\','/', $old_settings['wpo_wcpdf_template_settings']['template_path']);
// strip abspath (forward slashed) if included
$template_path = str_replace( str_replace('\\','/', ABSPATH), '', $template_path );
// strip pdf subfolder from templates path
$template_path = str_replace( '/templates/pdf/', '/templates/', $template_path );
$old_settings['wpo_wcpdf_template_settings']['template_path'] = $template_path;
if ( ! empty( $old_settings['wpo_wcpdf_template_settings']['template_path'] ) ) {
$template_path = str_replace( '\\', '/', $old_settings['wpo_wcpdf_template_settings']['template_path'] );
// strip abspath (forward slashed) if included
$template_path = str_replace( str_replace('\\','/', ABSPATH), '', $template_path );
// strip pdf subfolder from templates path
$template_path = str_replace( '/templates/pdf/', '/templates/', $template_path );
$old_settings['wpo_wcpdf_template_settings']['template_path'] = $template_path;
}

// map new settings to old
$settings_map = array(
Expand Down
58 changes: 38 additions & 20 deletions includes/class-wcpdf-main.php
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,8 @@ public function get_documents_for_email( $email_id, $order ) {
* Load and generate the template output with ajax
*/
public function generate_document_ajax() {
$access_type = WPO_WCPDF()->endpoint->get_document_link_access_type();
$access_type = WPO_WCPDF()->endpoint->get_document_link_access_type();
$redirect_url = WPO_WCPDF()->endpoint->get_document_denied_frontend_redirect_url();

// handle legacy access keys
if ( empty( $_REQUEST['access_key'] ) ) {
Expand All @@ -336,17 +337,20 @@ public function generate_document_ajax() {

// check if we have the access key set
if ( empty( $_REQUEST['access_key'] ) ) {
wp_die( esc_attr__( 'You do not have sufficient permissions to access this page. Reason: empty access key', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'You do not have sufficient permissions to access this page. Reason: empty access key', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( $redirect_url, $message );
}

// check if we have the action
if ( empty( $_REQUEST['action'] ) ) {
wp_die( esc_attr__( 'You do not have sufficient permissions to access this page. Reason: empty action', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'You do not have sufficient permissions to access this page. Reason: empty action', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( $redirect_url, $message );
}

// Check the nonce - guest access can use nonce if user is logged in
if ( is_user_logged_in() && in_array( $access_type, array( 'logged_in', 'guest' ) ) && ! $valid_nonce ) {
wp_die( esc_attr__( 'You do not have sufficient permissions to access this page. Reason: invalid nonce', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'You do not have sufficient permissions to access this page. Reason: invalid nonce', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( $redirect_url, $message );
}

// Check if all parameters are set
Expand All @@ -355,11 +359,13 @@ public function generate_document_ajax() {
}

if ( empty( $_REQUEST['order_ids'] ) ) {
wp_die( esc_attr__( "You haven't selected any orders", 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( "You haven't selected any orders", 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( null, $message );
}

if ( empty( $_REQUEST['document_type'] ) ) {
wp_die( esc_attr__( 'Some of the export parameters are missing.', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'Some of the export parameters are missing.', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( null, $message );
}

// debug enabled by URL
Expand All @@ -377,10 +383,15 @@ public function generate_document_ajax() {
$order = wc_get_order( $order_id );

if ( $order && $order->get_status() == 'auto-draft' ) {
wp_die( esc_attr__( 'You have to save the order before generating a PDF document for it.', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'You have to save the order before generating a PDF document for it.', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( null, $message );
} elseif ( ! $order ) {
/* translators: %s: Order ID */
wp_die( sprintf( esc_attr__( 'Could not find the order #%s.', 'woocommerce-pdf-invoices-packing-slips' ), $order_id ) );
$message = sprintf(
/* translators: %s: Order ID */
esc_attr__( 'Could not find the order #%s.', 'woocommerce-pdf-invoices-packing-slips' ),
$order_id
);
wcpdf_safe_redirect_or_die( null, $message );
}
}

Expand Down Expand Up @@ -454,7 +465,8 @@ public function generate_document_ajax() {
$allowed = apply_filters( 'wpo_wcpdf_check_privs', $allowed, $order_ids );

if ( ! $allowed ) {
wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'woocommerce-pdf-invoices-packing-slips' ) );
$message = esc_attr__( 'You do not have sufficient permissions to access this page.', 'woocommerce-pdf-invoices-packing-slips' );
wcpdf_safe_redirect_or_die( $redirect_url, $message );
}

// if we got here, we're safe to go!
Expand Down Expand Up @@ -506,8 +518,12 @@ public function generate_document_ajax() {
break;
}
} else {
/* translators: document type */
wp_die( sprintf( esc_html__( "Document of type '%s' for the selected order(s) could not be generated", 'woocommerce-pdf-invoices-packing-slips' ), $document_type ) );
$message = sprintf(
/* translators: document type */
esc_html__( "Document of type '%s' for the selected order(s) could not be generated", 'woocommerce-pdf-invoices-packing-slips' ),
$document_type
);
wcpdf_safe_redirect_or_die( null, $message );
}
} catch ( \Dompdf\Exception $e ) {
$message = 'DOMPDF Exception: '.$e->getMessage();
Expand Down Expand Up @@ -988,8 +1004,10 @@ public function test_mode_settings( $use_historical_settings, $document ) {
* Adds spans around placeholders to be able to make replacement (page count) and css (page number)
*/
public function format_page_number_placeholders ( $html, $document ) {
$html = str_replace('{{PAGE_COUNT}}', '<span class="pagecount">^C^</span>', $html);
$html = str_replace('{{PAGE_NUM}}', '<span class="pagenum"></span>', $html );
if ( ! empty( $html ) ) {
$html = str_replace( '{{PAGE_COUNT}}', '<span class="pagecount">^C^</span>', $html );
$html = str_replace( '{{PAGE_NUM}}', '<span class="pagenum"></span>', $html );
}
return $html;
}

Expand All @@ -1006,12 +1024,12 @@ public function page_number_replacements ( $dompdf, $html ) {
}

// check if placeholder is used
if (strpos($html, $placeholder) !== false ) {
foreach ($dompdf->get_canvas()->get_cpdf()->objects as &$object) {
if (array_key_exists("c", $object) && strpos($object["c"], $placeholder) !== false ) {
$object["c"] = str_replace( array($placeholder,$placeholder_0) , $dompdf->get_canvas()->get_page_count() , $object["c"] );
} elseif (array_key_exists("c", $object) && strpos($object["c"], $placeholder_0) !== false ) {
$object["c"] = str_replace( array($placeholder,$placeholder_0) , chr(0).$dompdf->get_canvas()->get_page_count() , $object["c"] );
if ( ! empty( $html ) && false !== strpos( $html, $placeholder ) ) {
foreach ( $dompdf->get_canvas()->get_cpdf()->objects as &$object ) {
if ( array_key_exists( "c", $object ) && ! empty( $object["c"] ) && false !== strpos( $object["c"], $placeholder ) ) {
$object["c"] = str_replace( array( $placeholder, $placeholder_0 ) , $dompdf->get_canvas()->get_page_count() , $object["c"] );
} elseif ( array_key_exists( "c", $object ) && ! empty( $object["c"] ) && false !== strpos( $object["c"], $placeholder_0 ) ) {
$object["c"] = str_replace( array( $placeholder, $placeholder_0 ) , chr(0).$dompdf->get_canvas()->get_page_count() , $object["c"] );
}
}
}
Expand Down
Loading

0 comments on commit 051359d

Please sign in to comment.