<?php
/*!
* Jetpack CRM
* https://jetpackcrm.com
*
* WooSync: Admin: Settings page
*
*/
namespace Automattic\JetpackCRM;
// block direct access
defined( 'ZEROBSCRM_PATH' ) || exit( 0 );
/**
* Page: WooSync Settings
*/
function jpcrm_settings_page_html_woosync_main() {
global $zbs;
$settings = $zbs->modules->woosync->get_settings();
$woo_order_statuses = $zbs->modules->woosync->get_woo_order_statuses();
$woo_order_mapping_types = $zbs->modules->woosync->get_woo_order_mapping_types();
$auto_deletion_options = array(
'do_nothing' => __( 'Do nothing', 'zero-bs-crm' ),
'change_status' => sprintf( __( 'Change transaction/invoice status to `%s`', 'zero-bs-crm' ), __( 'Deleted', 'zero-bs-crm' ) ),
'hard_delete_and_log' => __( 'Delete transaction/invoice, and add log to contact', 'zero-bs-crm' ),
);
// Act on any edits!
if ( isset( $_POST['editwplf'] ) ) {
// Retrieve
$updatedSettings = array();
// enable order mapping
$updatedSettings['enable_woo_status_mapping'] = empty( $_POST['jpcrm_enable_woo_status_mapping'] ) ? 0 : 1;
foreach ( $woo_order_mapping_types as $map_type_value ) {
foreach ( $woo_order_statuses as $woo_order_status => $woo_order_status_value ) {
$mapping_key = $map_type_value['prefix'] . 'wc' . str_replace( '-', '', $woo_order_status );
$updatedSettings[ $mapping_key ] = ! empty( $_POST[ $mapping_key ] ) ? sanitize_text_field( $_POST[ $mapping_key ] ) : '';
}
}
//copy shipping address into second address
$updatedSettings['wccopyship'] = ! empty( $_POST['wpzbscrm_wccopyship'] );
// tag objects with item name|coupon
$updatedSettings['wctagcust'] = ! empty( $_POST['wpzbscrm_wctagcust'] );
$updatedSettings['wctagtransaction'] = ! empty( $_POST['wpzbscrm_wctagtransaction'] );
$updatedSettings['wctaginvoice'] = ! empty( $_POST['wpzbscrm_wctaginvoice'] );
$updatedSettings['wctagcoupon'] = ! empty( $_POST['wpzbscrm_wctagcoupon'] );
$updatedSettings['wctagcouponprefix'] = ! empty( $_POST['wctagcouponprefix'] ) ? zeroBSCRM_textProcess( $_POST['wctagcouponprefix'] ) : '';
$updatedSettings['wctagproductprefix'] = ! empty( $_POST['wctagproductprefix'] ) ? zeroBSCRM_textProcess( $_POST['wctagproductprefix'] ) : '';
// switches
// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase, WordPress.Security.NonceVerification.Missing
$updatedSettings['wcinv'] = ! empty( $_POST['wpzbscrm_wcinv'] );
$updatedSettings['wccrminvreference'] = ! empty( $_POST['wpzbscrm_wccrminvreference'] );
$updatedSettings['wcprod'] = ! empty( $_POST['wpzbscrm_wcprod'] );
$updatedSettings['wcport'] = ! empty( $_POST['wpzbscrm_wcport'] ) ? preg_replace( '/\s*,\s*/', ',', sanitize_text_field( wp_unslash( $_POST['wpzbscrm_wcport'] ) ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash - wcport values can be saved with slashes.
$updatedSettings['wcacc'] = ! empty( $_POST['wpzbscrm_wcacc'] );
// phpcs:enable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase, WordPress.Security.NonceVerification.Missing
// trash/delete action
$updatedSettings['auto_trash'] = 'change_status';
if ( isset( $_POST['jpcrm_woosync_auto_trash'] ) && in_array( $_POST['jpcrm_woosync_auto_trash'], array_keys( $auto_deletion_options ), true ) ) {
$updatedSettings['auto_trash'] = sanitize_text_field( $_POST['jpcrm_woosync_auto_trash'] );
}
$updatedSettings['auto_delete'] = 'change_status';
if ( isset( $_POST['jpcrm_woosync_auto_delete'] ) && in_array( $_POST['jpcrm_woosync_auto_delete'], array_keys( $auto_deletion_options ), true ) ) {
$updatedSettings['auto_delete'] = sanitize_text_field( $_POST['jpcrm_woosync_auto_delete'] );
}
#} Brutal update
foreach ( $updatedSettings as $k => $v ) {
$zbs->modules->woosync->settings->update( $k, $v );
}
// $msg out!
$sbupdated = true;
// Reload
$settings = $zbs->modules->woosync->get_settings();
}
// Show Title
jpcrm_render_setting_title( 'WooSync Settings', '' );
?>
<p style="padding-top: 18px; text-align:center;margin:1em">
<?php
echo sprintf(
'<a href="%s&tab=%s&subtab=%s" class="ui button green"><i class="plug icon"></i> %s</a>',
jpcrm_esc_link( $zbs->slugs['settings'] ),
esc_attr( $zbs->modules->woosync->slugs['settings'] ),
esc_attr( $zbs->modules->woosync->slugs['settings_connections'] ),
esc_html__( 'Manage WooSync Connections', 'zero-bs-crm' )
) . sprintf(
'<a href="%s" class="ui basic positive button" style="margin-top:1em"><i class="shopping cart icon"></i> %s</a>',
jpcrm_esc_link( $zbs->slugs['woosync'] ),
esc_html__( 'WooSync Hub', 'zero-bs-crm' )
); ?>
</p>
<p id="sbDesc"><?php esc_html_e( 'Here you can configure the global settings for WooSync.', 'zero-bs-crm' ); ?></p>
<?php
if ( ! empty( $sbupdated ) ) {
echo '<div class="ui message success">' . esc_html__( 'Settings Updated', 'zero-bs-crm' ) . '</div>';
}
?>
<div id="sbA">
<form method="post">
<input type="hidden" name="editwplf" id="editwplf" value="1" />
<table class="table table-bordered table-striped wtab">
<thead>
<tr>
<th colspan="2" class="wmid"><?php esc_html_e( 'WooSync Settings', 'zero-bs-crm' ); ?>:</th>
</tr>
</thead>
<tbody>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wccopyship"><?php esc_html_e( 'Add Shipping Address', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to store shipping address as contacts second address', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wccopyship" id="wpzbscrm_wccopyship" value="1"<?php echo ( ! empty( $settings['wccopyship'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wctagcust"><?php esc_html_e( 'Tag Contact', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to tag your contact with their item name', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wctagcust" id="wpzbscrm_wctagcust" value="1"<?php echo ( ! empty( $settings['wctagcust'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wctagtransaction"><?php esc_html_e( 'Tag Transaction', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to tag your transaction with the item name', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wctagtransaction" id="wpzbscrm_wctagtransaction" value="1"<?php echo ( ! empty( $settings['wctagtransaction'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wctaginvoice"><?php esc_html_e( 'Tag Invoice', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to tag your invoice with the item name', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wctaginvoice" id="wpzbscrm_wctaginvoice" value="1"<?php echo ( ! empty( $settings['wctaginvoice'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="jpcrm_woosync_auto_trash"><?php esc_html_e( 'Order Trash action', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Choose what should happen when an order is trashed in WooCommerce', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<select id="jpcrm_woosync_auto_trash" name="jpcrm_woosync_auto_trash" class="winput form-control">
<?php
$current_auto_trash_setting = ! empty( $settings['auto_trash'] ) ? $settings['auto_trash'] : 'change_status';
foreach ( $auto_deletion_options as $option_key => $option_label ) {
?>
<option value="<?php echo esc_attr( $option_key ); ?>"<?php echo ( $option_key === $current_auto_trash_setting ? ' selected="selected"' : '' ); ?>>
<?php echo esc_html( $option_label ); ?>
</option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="jpcrm_woosync_auto_delete"><?php esc_html_e( 'Order Delete action', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Choose what should happen when an order is deleted in WooCommerce', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<select id="jpcrm_woosync_auto_delete" name="jpcrm_woosync_auto_delete" class="winput form-control">
<?php
$current_auto_delete_setting = ! empty( $settings['auto_delete'] ) ? $settings['auto_delete'] : 'change_status';
foreach ( $auto_deletion_options as $option_key => $option_label ) {
?>
<option value="<?php echo esc_attr( $option_key ); ?>"<?php echo ( $option_key === $current_auto_delete_setting ? ' selected="selected"' : '' ); ?>>
<?php echo esc_html( $option_label ); ?>
</option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wctagcoupon"><?php esc_html_e( 'Include Coupon as tag', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to include any used WooCommerce coupon codes as tags (depends on above settings)', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wctagcoupon" id="wpzbscrm_wctagcoupon" value="1"<?php echo ( ! empty( $settings['wctagcoupon'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wcinv"><?php esc_html_e( 'Create Invoices from WooCommerce Orders', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to create invoices from your WooCommerce orders', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wcinv" id="wpzbscrm_wcinv" value="1"<?php echo ( ! empty( $settings['wcinv'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wccrminvreference"><?php esc_html_e( 'Use the Jetpack CRM invoice reference system for invoices generated by WooCommerce', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to use the Jetpack CRM invoice reference system for invoices generated by WooCommerce (only works with auto-generated references)', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wccrminvreference" id="wpzbscrm_wccrminvreference" value="1"<?php echo ( ! empty( $settings['wccrminvreference'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wcacc"><?php esc_html_e( 'Show Invoices on My Account', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick to show a Jetpack CRM Invoices menu item under WooCommerce My Account', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wcacc" id="wpzbscrm_wcacc" value="1"<?php echo ( ! empty( $settings['wcacc'] ) ? ' checked="checked"' : '' ); ?> />
<?php
$invoices_enabled = zeroBSCRM_getSetting( 'feat_invs' ) > 0;
if ( !$invoices_enabled ) {
?>
<br />
<small><?php esc_html_e( 'Warning: Invoicing module is currently disabled.', 'zero-bs-crm' ); ?></small>
<?php
}
?>
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wctagproductprefix"><?php esc_html_e( 'Product tag prefix', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Enter a tag prefix for product tags (e.g. Product: )', 'zero-bs-crm' ); ?>
</td>
<td style='width:540px'>
<input type="text" class="winput form-control" name="wctagproductprefix" id="wctagproductprefix" value="<?php echo ( ! empty( $settings['wctagproductprefix'] ) ? esc_attr( $settings['wctagproductprefix'] ) : '' ); ?>" placeholder="<?php esc_attr_e( "e.g. 'Product: '", 'zero-bs-crm' ); ?>" />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="wctagcouponprefix"><?php esc_html_e( 'Coupon tag prefix', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Enter a tag prefix for coupon tags (e.g. Coupon: )', 'zero-bs-crm' ); ?>
</td>
<td style='width:540px'>
<input type="text" class="winput form-control" name="wctagcouponprefix" id="wctagcouponprefix" value="<?php echo ( ! empty( $settings['wctagcouponprefix'] ) ? esc_attr( $settings['wctagcouponprefix'] ) : '' ); ?>" placeholder="<?php esc_attr_e( "e.g. 'Coupon: '", 'zero-bs-crm' ); ?>" />
</td>
</tr>
<!-- #follow-on-refinements commented out for now as we need to review how product index works now we have accessible line items in v3.0
<tr>
<td class="wfieldname">
<label for="wpzbscrm_wcprod"><?php // _e( 'Use Product Index', 'zero-bs-crm' ); ?>:</label><br />
<?php // _e( 'Tick to allow Product Index on Invoices. Makes creating invoices easier', 'zero-bs-crm' ); ?></td>
<td style="width:540px">
<input type="checkbox" class="winput form-control" name="wpzbscrm_wcprod" id="wpzbscrm_wcprod" value="1"<?php // echo ( ! empty( $settings['wcprod'] ) ? ' checked="checked"' : '' ); ?> />
</td>
</tr>
-->
<tr>
<td class="wfieldname">
<?php ##WLREMOVE ?>
<div class="ui teal label right floated"><i class="circle info icon link"></i> <a href="<?php echo esc_url( $zbs->urls['kb-contact-fields'] ); ?>" target="_blank"><?php esc_html_e( 'Read more', 'zero-bs-crm' ); ?></a></div>
<?php ##/WLREMOVE ?>
<label for="wpzbscrm_port"><?php esc_html_e( 'WooCommerce My Account', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Enter a comma-separated list of Jetpack CRM contact fields to let customers edit these via WooCommerce My Account.', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px">
<input type="text" class="winput form-control" name="wpzbscrm_wcport" id="wpzbscrm_port" value="<?php echo ( ! empty( $settings['wcport'] ) ? esc_attr( $settings['wcport'] ) : '' ); ?>" placeholder="e.g. addr1,custom-field-1" />
</td>
</tr>
<tr>
<td class="wfieldname">
<label for="jpcrm_enable_woo_status_mapping"><?php esc_html_e( 'Enable order status mapping', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Tick here if you want WooCommerce order status changes to automatically change contact statuses', 'zero-bs-crm' ); ?>
</td>
<td style="width:540px"><input type="checkbox" class="winput form-control" name="jpcrm_enable_woo_status_mapping" id="jpcrm_enable_woo_status_mapping" value="1"<?php echo isset( $settings['enable_woo_status_mapping'] ) && (int)$settings['enable_woo_status_mapping'] === 0 ? '' : ' checked="checked"'; ?> />
</td>
</tr>
<tr>
<td class="wfieldname" colspan="2">
<label><?php esc_html_e( 'Order status map', 'zero-bs-crm' ); ?>:</label><br />
<?php esc_html_e( 'Here you can choose how you want to map WooCommerce order statuses to CRM statuses (if the above setting is enabled)', 'zero-bs-crm' ); ?>
<div style="margin-top:10px;">
<a style="margin-top:10px;" href="<?php echo esc_url( $zbs->urls['woomanagingorders'] ); ?>" target="_blank"><?php esc_html_e( 'Learn more about the WooCommerce order statuses', 'zero-bs-crm' ); ?><img class="jpcrm-external-link-icon" style="margin-bottom:2px" src="<?php echo esc_url( ZEROBSCRM_URL ); ?>i/external-link.svg" /></a>
</div>
<br/>
<table style="width:100%;border-spacing: 0 15px;border-collapse: separate;table-layout: fixed;">
<tr>
<th><?php esc_html_e( 'Order status', 'zero-bs-crm' ); ?></th>
<?php
foreach ( $woo_order_mapping_types as $map_type_value ) :
?>
<th><?php echo esc_html( $map_type_value['label'] ); ?></th>
<?php
endforeach;
?>
</tr>
<?php
foreach ( $woo_order_statuses as $woo_order_status => $woo_order_value ) {
?>
<tr class="jpcrm_woosync_order_status_map">
<td><?php echo esc_html( $woo_order_value ); ?></td>
<?php
foreach ( $woo_order_mapping_types as $obj_type => $map_type_value ) :
$selected = '';
$mapping_key = $map_type_value['prefix'] . 'wc' . str_replace( '-', '', $woo_order_status );
$obj_type_id = $zbs->DAL->objTypeID( $obj_type ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
if ( ! isset( $settings[ $mapping_key ] ) || $settings[ $mapping_key ] === '-1' ) {
// use default mapping as fallback
$selected = $zbs->modules->woosync->get_default_status_for_order_obj( $obj_type_id, $woo_order_status );
} else {
// select mapping from settings
$selected = $settings[ $mapping_key ];
}
if ( ! $zbs->DAL->is_valid_obj_status( $obj_type_id, $selected ) && $selected !== JPCRM_WOOSYNC_DO_NOT_CREATE['id'] ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$selected = false;
}
?>
<td>
<select class="winput" style="width: 90%;" name="<?php echo esc_attr( $mapping_key ); ?>" id="<?php echo esc_attr( $mapping_key ); ?>">
<?php
// if there's no default match, make user select one
if ( ! $selected ) {
?>
<option value="-1" selected disabled>-- <?php esc_html_e( 'Select mapped status', 'zero-bs-crm' ); ?> --</option>
<?php
}
// Include a DO_NOT_CREATE option, except for Contacts
if ( $obj_type_id !== ZBS_TYPE_CONTACT ) {
printf( '<option value="%s" %s>%s</option>', esc_attr( JPCRM_WOOSYNC_DO_NOT_CREATE['id'] ), ( $selected === JPCRM_WOOSYNC_DO_NOT_CREATE['id'] ? 'selected' : '' ), esc_html( JPCRM_WOOSYNC_DO_NOT_CREATE['label'] ) );
}
foreach ( $map_type_value['statuses'] as $status ) {
printf( '<option value="%s" %s>%s</option>', esc_attr( $status ), ( $selected === $status ? 'selected' : '' ), esc_html( $obj_type_id === ZBS_TYPE_INVOICE ? __( $status, 'zero-bs-crm' ) : $status ) ); // phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText
}
?>
</select>
</td>
<?php
endforeach;
?>
</tr>
<?php
}
?>
</table>
</td>
</tr>
</tbody>
</table>
<table class="table table-bordered table-striped wtab">
<tbody>
<tr>
<td class="wmid"><button type="submit" class="button button-primary button-large"><?php esc_html_e( 'Save Settings', 'zero-bs-crm' ); ?></button></td>
</tr>
</tbody>
</table>
</form>
</div>
<?php
wp_enqueue_style( 'jpcrm-woo-sync-settings-main', plugins_url( '/css/jpcrm-woo-sync-settings-main' . wp_scripts_get_suffix() . '.css', JPCRM_WOO_SYNC_ROOT_FILE ) );
}