Skip to content

Commit cf5dfa5

Browse files
committed
gp-inventory/gpi-inventory-shortcode.php: Added deprecation reason to snippet and removed snippet code.
1 parent cf4a86e commit cf5dfa5

File tree

1 file changed

+2
-231
lines changed

1 file changed

+2
-231
lines changed
+2-231
Original file line numberDiff line numberDiff line change
@@ -1,236 +1,7 @@
11
<?php
22
/**
33
* WARNING! THIS SNIPPET IS DEPRECATED. 🚧
4+
* This snippet's functionality has been moved to [GP Inventory][1] in version 1.0.
45
*
5-
* Gravity Perks // Inventory // Inventory Shortcode
6-
* https://gravitywiz.com/documentation/gravity-forms-inventory/
7-
*
8-
* Instruction Video: https://www.loom.com/share/9d1897075b7b435389479d4f17fc6807
9-
*
10-
* Update "123" to your form ID and "4" to your field ID with inventory.
11-
*
12-
* `[gravityforms action="inventory" id="123" field="4"]`
13-
*
14-
* If using a field with scopes, you may provide the scope values in a comma-delimited list:
15-
*
16-
* `[gravityforms action="inventory" id="123" field="4" scope_values="Scope Value,Another Scope Value"]`
17-
*
18-
* This snippet requires GP Inventory 1.0-beta-1.7 or newer.
19-
*
20-
* @todo
21-
* - Add support for excluding field parameter and showing a consolidated list of all inventories.
6+
* [1] https://gravitywiz.com/documentation/gravity-forms-inventory/
227
*/
23-
add_filter( 'gform_shortcode_inventory', 'gpi_inventory_shortcode', 10, 3 );
24-
function gpi_inventory_shortcode( $output, $atts, $content ) {
25-
26-
if ( ! is_callable( 'gp_inventory' ) ) {
27-
return $output;
28-
}
29-
30-
$atts = shortcode_atts( array(
31-
'id' => false,
32-
'field' => false,
33-
'scope_values' => false,
34-
), $atts, 'gpi_inventory' );
35-
36-
if ( empty( $atts['id'] ) || empty( $atts['field'] ) ) {
37-
return $content;
38-
}
39-
40-
$form = GFAPI::get_form( $atts['id'] );
41-
42-
/* Ensure choices populated by Populate Anything are loaded in. */
43-
if ( function_exists( 'gp_populate_anything' ) && is_callable( array( gp_populate_anything(), 'modify_admin_field_choices' ) ) ) {
44-
$form = gp_populate_anything()->modify_admin_field_choices( $form );
45-
}
46-
47-
$field = GFAPI::get_field( $form, $atts['field'] );
48-
49-
if ( ! $field ) {
50-
return $content;
51-
}
52-
53-
/**
54-
* Some scopes have infinite values (i.e. Date fields). Use the * scope value to look up submitted scope values and
55-
* display the content template for each. Default template when using the * scope is:
56-
*
57-
* {scope}: {count}
58-
*
59-
* NOTE: This only works with inventories with a single scope. Will continue exploring this in the future.
60-
*/
61-
if ( $atts['scope_values'] && $atts['scope_values'] === '*' ) {
62-
global $wpdb;
63-
64-
$resource_field_id = reset( $field->gpiResourcePropertyMap );
65-
$sql = gf_apply_filters( array( 'gpis_scopes_sql', $form['id'], $resource_field_id ), $wpdb->prepare( "SELECT DISTINCT meta_value FROM {$wpdb->prefix}gf_entry_meta WHERE form_id = %d AND meta_key = %d", $form['id'], $resource_field_id ), $form, $field, $resource_field_id );
66-
67-
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
68-
$items = $wpdb->get_results( $sql );
69-
70-
if ( empty( $items ) ) {
71-
return $content;
72-
}
73-
74-
$output = array();
75-
$is_choice_field = ! empty( $field->choices );
76-
77-
if ( ! $content ) {
78-
if ( $is_choice_field ) {
79-
$content = '{label}: {count}';
80-
} else {
81-
$content = '{scope}: {count}';
82-
}
83-
}
84-
85-
foreach ( $items as $item ) {
86-
87-
$atts['scope_values'] = $item->meta_value;
88-
$scope_display_value = gf_apply_filters( array( 'gpis_scope_display_value', $form['id'], $resource_field_id ), $item->meta_value, $field, $resource_field_id, $atts );
89-
90-
$item_output = '';
91-
if ( $is_choice_field ) {
92-
$item_output = $scope_display_value;
93-
}
94-
95-
$item_output .= str_replace( '{scope}', $scope_display_value, gpi_inventory_shortcode( null, $atts, $content ) );
96-
$output[] = $item_output;
97-
98-
}
99-
100-
$label = $field->get_field_label( false, '' );
101-
102-
$output = sprintf(
103-
'<ul class="gpi-inventory-list gpi-inventory-list-%d-%d"><li>%s</li></ul>',
104-
$form['id'], $field->id, implode( '</li><li>', $output )
105-
);
106-
107-
return $output;
108-
}
109-
110-
/**
111-
* Callback for mapping property values from the scope_values attribute to the gpi_property_map_values filter to
112-
* get the current inventory for scoped inventory fields.
113-
*
114-
* @param $property_values
115-
*
116-
* @return mixed
117-
*/
118-
$map_property_values = function ( $property_values ) use ( $atts ) {
119-
$scope_values = explode( ',', $atts['scope_values'] );
120-
121-
if ( empty( $scope_values ) || empty( array_filter( $scope_values ) ) ) {
122-
return $property_values;
123-
}
124-
125-
/* Take the order of property value keys and map them according to the order of the values in scope_values
126-
as the order of the properties should never change. */
127-
$property_value_keys = array_keys( $property_values );
128-
129-
foreach ( $scope_values as $scope_value_index => $scope_value ) {
130-
if ( ! isset( $property_value_keys [ $scope_value_index ] ) ) {
131-
continue;
132-
}
133-
134-
$property_id = $property_value_keys [ $scope_value_index ];
135-
136-
$property_values [ $property_id ] = $scope_value;
137-
}
138-
139-
return $property_values;
140-
};
141-
142-
$items = array();
143-
144-
add_filter( 'gpi_property_map_values_' . $form['id'] . '_' . $field->id, $map_property_values );
145-
146-
if ( is_array( $field->choices ) ) {
147-
$field->gpiShowAvailableInventory = true;
148-
149-
// Delete choice count cache before and after getting choice counts to prevent scopes from interfering.
150-
$cache_key = 'gpi_choice_counts_' . $form['id'] . '_' . $field->id;
151-
GFCache::delete( $cache_key );
152-
153-
if ( $content ) {
154-
$counts = gp_inventory_type_choices()->get_choice_counts( $form['id'], $field );
155-
foreach ( $field->choices as $choice ) {
156-
157-
$limit = (int) $choice['inventory_limit'];
158-
$count = (int) rgar( $counts, $choice['value'] );
159-
$available = $limit - $count;
160-
161-
$items[] = gpis_get_item_markup( $content, array(
162-
'limit' => $limit,
163-
'count' => $count,
164-
'available' => $available,
165-
'label' => $choice['text'],
166-
'value' => $choice['value'],
167-
) );
168-
169-
}
170-
} else {
171-
$choices = gp_inventory_type_choices()->apply_choice_limits( $field->choices, $field, $form );
172-
foreach ( $choices as $choice ) {
173-
$items[] = $choice['text'];
174-
}
175-
}
176-
177-
GFCache::delete( $cache_key );
178-
179-
$output = sprintf(
180-
'<ul class="gpi-inventory-list gpi-inventory-list-%d-%d"><li>%s</li></ul>',
181-
$form['id'], $field->id, implode( '</li><li>', $items )
182-
);
183-
} else {
184-
if ( gp_inventory_type_advanced()->is_applicable_field( $field ) ) {
185-
$available = gp_inventory_type_advanced()->get_available_stock( $field );
186-
$limit = gp_inventory_type_advanced()->get_stock_quantity( $field );
187-
$count = gp_inventory_type_advanced()->get_claimed_inventory( $field );
188-
189-
/**
190-
* Temporarily remove filter for resources to get the inventory count specific to the field rather than the
191-
* count of all fields using the same resource.
192-
*/
193-
remove_filter( 'gpi_query', array( gp_inventory_type_advanced(), 'resource_and_properties' ), 9 );
194-
$count_current_field = gp_inventory_type_simple()->get_claimed_inventory( $field );
195-
add_filter( 'gpi_query', array( gp_inventory_type_advanced(), 'resource_and_properties' ), 9, 2 );
196-
} else {
197-
$available = gp_inventory_type_simple()->get_available_stock( $field );
198-
$limit = gp_inventory_type_simple()->get_stock_quantity( $field );
199-
$count = gp_inventory_type_simple()->get_claimed_inventory( $field );
200-
$count_current_field = $count;
201-
}
202-
203-
$label = $field->get_field_label( false, '' );
204-
205-
if ( $content ) {
206-
$output .= gpis_get_item_markup( $content, array(
207-
'limit' => $limit,
208-
'count' => $count,
209-
'count_current_field' => $count_current_field,
210-
'available' => $available,
211-
'label' => $label,
212-
'value' => '',
213-
) );
214-
} else {
215-
$output .= $label . ': ' . $available;
216-
}
217-
}
218-
219-
remove_filter( 'gpi_property_map_values_' . $form['id'] . '_' . $field->id, $map_property_values );
220-
221-
return $output;
222-
}
223-
224-
function gpis_get_item_markup( $template, $args ) {
225-
226-
$markup = $template;
227-
228-
$markup = str_replace( '{limit}', $args['limit'], $markup );
229-
$markup = str_replace( '{count}', $args['count'], $markup );
230-
$markup = str_replace( '{count_current_field}', $args['count_current_field'], $markup );
231-
$markup = str_replace( '{available}', $args['available'], $markup );
232-
$markup = str_replace( '{label}', $args['label'], $markup );
233-
$markup = str_replace( '{value}', $args['value'], $markup );
234-
235-
return $markup;
236-
}

0 commit comments

Comments
 (0)