Skip to content

Commit

Permalink
Updates to 3.6.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Woo committed May 17, 2024
1 parent 6d3f879 commit c918cbe
Show file tree
Hide file tree
Showing 15 changed files with 1,426 additions and 385 deletions.
99 changes: 60 additions & 39 deletions admin/gravityforms-product-addons-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,59 @@ public static function register() {

private function __construct() {

add_action( 'admin_enqueue_scripts', [ $this, 'on_admin_enqueue_scripts' ], 100 );
add_action( 'admin_notices', [ $this, 'admin_install_notices' ] );
add_action( 'admin_enqueue_scripts', array( $this, 'on_admin_enqueue_scripts' ), 100 );
add_action( 'admin_notices', array( $this, 'admin_install_notices' ) );

add_action( 'woocommerce_process_product_meta', [ $this, 'process_meta_box' ], 1, 2 );
add_action( 'admin_notices', [ $this, 'on_admin_notices' ] );
add_action( 'woocommerce_process_product_meta', array( $this, 'process_meta_box' ), 1, 2 );
add_action( 'admin_notices', array( $this, 'on_admin_notices' ) );

add_action( 'woocommerce_product_write_panel_tabs', [ $this, 'add_tab' ] );
add_action( 'woocommerce_product_data_panels', [ $this, 'render_panel' ] );
add_action( 'woocommerce_process_product_meta', [ $this, 'process_meta_box' ], 1, 2 );
add_action( 'woocommerce_product_write_panel_tabs', array( $this, 'add_tab' ) );
add_action( 'woocommerce_product_data_panels', array( $this, 'render_panel' ) );
add_action( 'woocommerce_process_product_meta', array( $this, 'process_meta_box' ), 1, 2 );

add_action( 'wp_ajax_wc_gravityforms_get_form_data', [ $this, 'on_wc_gravityforms_get_form_data' ] );
add_action( 'wp_ajax_wc_gravityforms_get_form_data', array( $this, 'on_wc_gravityforms_get_form_data' ) );
}

public function on_admin_enqueue_scripts() {
wp_enqueue_style( 'woocommerce_gravityforms_product_addons_css', plugins_url( basename( dirname( __DIR__ ) ) ) . '/assets/css/admin.css' );

$params = [
$params = array(
'nonce' => wp_create_nonce( 'wc_gravityforms_get_products' ),
'text_edit_form' => __( 'Edit ', 'wc_gf_addons' ),
'url_edit_form' => sprintf( '%s/admin.php?page=gf_edit_forms&id=FORMID', get_admin_url() ),
'duplicate_form_notice' => __( 'The singular and the bulk form can not be the same form. Make a duplicate of your singular form if need be. ', 'wc_gf_addons' ),
'product_id' => get_the_ID(),
];
);

// Add labels to the params
$params['labels'] = array(
'label_subtotal' => __( 'Subtotal', 'wc_gf_addons' ),
'label_options' => __( 'Options', 'wc_gf_addons' ),
'label_total' => __( 'Total', 'wc_gf_addons' ),
);

$params['merge_tags'] = WC_GFPA_Merge_Tags::instance()->get_merge_tags();

// Add filter to modify the params
$params = apply_filters( 'woocommerce_gravityforms_product_addons_js_params', $params );

wp_enqueue_script(
'woocommerce_gravityforms_product_addons_js',
plugins_url( basename( dirname( __DIR__ ) ) ) . '/assets/js/admin.js',
[
array(
'jquery',
'jquery-blockui',
],
wc_gfpa()->assets_version
),
wc_gfpa()->assets_version,
true
);

wp_enqueue_script(
'wc-gfpa-admin-js',
plugins_url( basename( dirname( __DIR__ ) ) ) . '/assets/js/gravityforms-product-addons-admin.js',
array( 'jquery', 'jquery-blockui', 'woocommerce_gravityforms_product_addons_js' ),
wc_gfpa()->assets_version,
true
);

wp_localize_script( 'woocommerce_gravityforms_product_addons_js', 'wc_gf_addons', $params );
Expand All @@ -53,15 +74,15 @@ public function on_admin_enqueue_scripts() {
public function admin_install_notices() {
if ( ! class_exists( 'RGForms' ) ) {
?>
<div id="message" class="updated woocommerce-error wc-connect">
<div class="squeezer">
<h4><?php _e( '<strong>Gravity Forms Not Found</strong> &#8211; The Gravity Forms Plugin is required to build and manage the forms for your products.', 'wc_gf_addons' ); ?></h4>
<p class="submit">
<a href="https://www.gravityforms.com/"
class="button-primary"><?php _e( 'Get Gravity Forms', 'wc_gf_addons' ); ?></a>
</p>
</div>
</div>
<div id="message" class="updated woocommerce-error wc-connect">
<div class="squeezer">
<h4><?php _e( '<strong>Gravity Forms Not Found</strong> &#8211; The Gravity Forms Plugin is required to build and manage the forms for your products.', 'wc_gf_addons' ); ?></h4>
<p class="submit">
<a href="https://www.gravityforms.com/"
class="button-primary"><?php _e( 'Get Gravity Forms', 'wc_gf_addons' ); ?></a>
</p>
</div>
</div>
<?php
}
}
Expand All @@ -71,11 +92,11 @@ public function on_admin_notices() {
if ( is_admin() ) {
if ( is_plugin_active( 'gravity-forms-duplicate-prevention/gravityforms-duplicateprevention.php' ) || is_plugin_active_for_network( 'gravity-forms-duplicate-prevention/gravityforms-duplicateprevention.php' ) ) {
?>
<div id="message" class="error woocommerce-error wc-connect">
<div class="squeezer">
<h4><?php printf( __( '<strong>Gravity Forms Duplicate Prevention Active</strong></h4><p>The <strong>Gravity Forms Product Addon Extension</strong> can not function properly if this additional plugin is active. Please <a href="%s">disable</a> it for proper functionality of the extension.</p>', 'wc_gf_addons' ), $this->na_action_link( 'gravity-forms-duplicate-prevention/gravityforms-duplicateprevention.php', 'deactivate' ) ); ?></h4>
</div>
</div>
<div id="message" class="error woocommerce-error wc-connect">
<div class="squeezer">
<h4><?php printf( __( '<strong>Gravity Forms Duplicate Prevention Active</strong></h4><p>The <strong>Gravity Forms Product Addon Extension</strong> can not function properly if this additional plugin is active. Please <a href="%s">disable</a> it for proper functionality of the extension.</p>', 'wc_gf_addons' ), $this->na_action_link( 'gravity-forms-duplicate-prevention/gravityforms-duplicateprevention.php', 'deactivate' ) ); ?></h4>
</div>
</div>
<?php
}
}
Expand Down Expand Up @@ -103,8 +124,8 @@ private function na_action_link( $plugin, $action = 'activate' ) {

public function add_tab() {
?>
<li class="gravityforms_addons_tab gravityforms_addons">
<a href="#gravityforms_addons_data"><span><?php _e( 'Gravity Forms', 'wc_gf_addons' ); ?></span></a></li>
<li class="gravityforms_addons_tab gravityforms_addons">
<a href="#gravityforms_addons_data"><span><?php _e( 'Gravity Forms', 'wc_gf_addons' ); ?></span></a></li>
<?php
}

Expand All @@ -126,7 +147,7 @@ public function process_meta_box( $post_id, $post ) {

$product = wc_get_product( $post );

$gravity_form_data = [
$gravity_form_data = array(
'id' => $_POST['gravityform-id'],
'bulk_id' => isset( $_POST['gravityform-bulk-id'] ) ? $_POST['gravityform-bulk-id'] : 0,
'display_title' => isset( $_POST['gravityform-display_title'] ) ? true : false,
Expand Down Expand Up @@ -155,7 +176,7 @@ public function process_meta_box( $post_id, $post ) {
'structured_data_low_price' => isset( $_POST['gravityform-structured_data_low_price'] ) ? $_POST['gravityform-structured_data_low_price'] : '',
'structured_data_high_price' => isset( $_POST['gravityform-structured_data_high_price'] ) ? $_POST['gravityform-structured_data_high_price'] : '',
'structured_data_override_type' => isset( $_POST['gravityform-structured_data_override_type'] ) ? $_POST['gravityform-structured_data_override_type'] : 'append',
];
);

$gravity_form_data = apply_filters( 'woocommerce_gravityforms_before_save_metadata', $gravity_form_data, $product->get_id() );
$product->update_meta_data( '_gravity_form_data', $gravity_form_data );
Expand All @@ -175,10 +196,10 @@ public function on_wc_gravityforms_get_form_data() {
$form_id = isset( $_POST['form_id'] ) ? $_POST['form_id'] : 0;
if ( empty( $form_id ) ) {
wp_send_json_error(
[
array(
'status' => 'error',
'message' => __( 'No Form ID', 'wc_gf_addons' ),
]
)
);
die();
}
Expand All @@ -196,10 +217,10 @@ public function on_wc_gravityforms_get_form_data() {
}

$form = GFAPI::get_form( $form_id );
$fields = GFAPI::get_fields_by_type( $form, [ 'quantity', 'number', 'singleproduct' ], false );
$fields = GFAPI::get_fields_by_type( $form, array( 'quantity', 'number', 'singleproduct' ), false );

if ( $fields ) {
$options = [];
$options = array();
foreach ( $fields as $field ) {
if ( $field['disableQuantity'] !== true ) {
$options[ $field['id'] ] = $field['label'];
Expand All @@ -208,13 +229,13 @@ public function on_wc_gravityforms_get_form_data() {

ob_start();
woocommerce_wp_select(
[
array(
'id' => 'gravityform-cart_quantity_field',
'label' => __( 'Quantity Field', 'wc_gf_addons' ),
'value' => $selected_field,
'options' => $options,
'description' => __( 'A field to use to control cart item quantity.', 'wc_gf_addons' ),
]
)
);

$markup = ob_get_clean();
Expand All @@ -232,11 +253,11 @@ public function on_wc_gravityforms_get_form_data() {
$markup .= '</select>';
*/

$response = [
$response = array(
'status' => 'success',
'message' => '',
'markup' => $markup,
];
);

wp_send_json_success( $response );
die();
Expand Down
2 changes: 1 addition & 1 deletion admin/views/html-gravityforms-addons-panel.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
'id' => 'gravityform-display_description',
'label' => __( 'Display Description', 'wc_gf_addons' ),
'value' => isset( $gravity_form_data['display_description'] ) && $gravity_form_data['display_description'] ? 'yes' : ''
) );;
) );
?>
</div>

Expand Down
42 changes: 41 additions & 1 deletion assets/css/frontend.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,44 @@
/* Helper for store front */
.single-product div.product form.cart .button.gform_button_select_files {
float:none;
}
}

form.cart .hidden-total {
display: none !important;
}

/* Product Totals */
form.cart .product_totals {
margin: 20px 0 40px 0;
padding: 20px 0 0 0;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
overflow: hidden;
}

form.cart .product_totals ul {
list-style: none;
margin: 0;
padding: 0;
}

form.cart .product_totals ul li {
list-style: none;
display: flex;
justify-content: space-between;
padding: 5px 0;
}

form.cart .product_totals ul li.wcgfpa_grand_total {
justify-content: flex-end;
border-top: 1px solid #eee;
padding: 10px 0;
margin-top: 20px;
}

form.cart .product_totals ul li.wcgfpa_grand_total p.price {
margin: 0;
}



75 changes: 75 additions & 0 deletions assets/js/gravityforms-product-addons-admin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Gravity Forms Product Add-Ons Admin
*/

class GravityFormsProductAddonsAdmin {
static instance;

static register(settings) {
if (!this.instance) {
this.instance = new GravityFormsProductAddonsAdmin(settings);
}

return this.instance;
}

constructor(settings) {
this.settings = settings;
this.observeGFormAvailability();
}

observeGFormAvailability() {
const observer = new MutationObserver((mutations, obs) => {
if (window.gform) {
console.log('gform is now available');
this.init();
obs.disconnect(); // Disconnect observer once gform is available
}
});

observer.observe(document, {
childList: true,
subtree: true
});
}

init() {
gform.addFilter('gform_merge_tags', this.addMergeTags.bind(this));
}

addMergeTags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option) {

const groups = this.settings.merge_tags;
// Loop though the groups and add the tags to the mergeTags
for (const index in groups) {
const key = groups[index].key;
const tags = groups[index].tags;
const label = groups[index].label;

const filtered_tags = tags.filter(tag => {
const tag_allowed_on = tag.allowed_on || [];
// If the elementId starts with field_default_value check if allowed on is 'field_default_value_*' or matches the elementId exactly.
if (elementId.startsWith('field_default_value')) {
return tag_allowed_on.includes('field_default_value_*') || tag_allowed_on.includes(elementId);
}

// Otherwise check if the tag is allowed on the elementId or if it's allowed on all elements or if no allowed_on is set.
if (tag_allowed_on.includes(elementId) || tag_allowed_on.includes('all') || tag_allowed_on.length === 0) {
return true;
}
});

console.log('Filtered Tags: ', filtered_tags);

mergeTags[key] = {
label: label,
tags: filtered_tags
};
}

return mergeTags; // Return the modified mergeTags
}
}

// Instantiate the class to ensure the code is executed
GravityFormsProductAddonsAdmin.register(wc_gf_addons);
Loading

0 comments on commit c918cbe

Please sign in to comment.