PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / woocommerce / actions / create-attribute.php
suretriggers / src / Integrations / woocommerce / actions Last commit date
add-attribute-terms.php 8 months ago add-customer.php 9 months ago add-emails-to-coupon.php 8 months ago add-order-note.php 10 months ago add-product-attributes.php 8 months ago add-product-to-cart.php 8 months ago add-update-order-custom-fields.php 10 months ago apply-coupon.php 8 months ago check-cart-status.php 8 months ago check-if-order-is-renewal.php 4 months ago create-attribute.php 8 months ago create-bundle-product-order.php 6 months ago create-coupon-code.php 10 months ago create-multi-product-order.php 6 months ago create-new-order.php 10 months ago create-product-variation.php 1 year ago create-product.php 1 year ago create-variable-product.php 8 months ago delete-coupon.php 1 year ago delete-customer.php 8 months ago fetch-coupon-details.php 10 months ago find-orders-by-user-id.php 10 months ago get-all-customers.php 8 months ago get-all-products.php 8 months ago get-customer-by-email.php 8 months ago get-customer-by-id.php 8 months ago get-order-details-by-order-id.php 10 months ago get-order-type-by-order-id.php 4 months ago get-orders-by-email.php 8 months ago get-product-by-id.php 1 year ago list-all-order-notes.php 8 months ago list-all-orders.php 8 months ago remove-product-from-cart.php 8 months ago retrieve-coupons-totals.php 10 months ago retrieve-customers-totals.php 10 months ago retrieve-orders-totals.php 10 months ago retrieve-products-totals.php 10 months ago retrieve-refunds-list.php 10 months ago retrieve-reviews-totals.php 10 months ago retrieve-sales-report.php 10 months ago retrieve-top-sellers-report.php 10 months ago update-product-price.php 8 months ago update-product-stock-quantity.php 8 months ago update-status-of-order.php 10 months ago
create-attribute.php
201 lines
1 <?php
2 /**
3 * CreateAttribute.
4 * php version 5.6
5 *
6 * @category CreateAttribute
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\Woocommerce\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Integrations\WooCommerce\WooCommerce;
19 use SureTriggers\Traits\SingletonLoader;
20
21 /**
22 * CreateAttribute
23 *
24 * @category CreateAttribute
25 * @package SureTriggers
26 * @author BSF <username@example.com>
27 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
28 * @link https://www.brainstormforce.com/
29 * @since 1.0.0
30 */
31 class CreateAttribute extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'WooCommerce';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'wc_create_attribute';
46
47 use SingletonLoader;
48
49 /**
50 * Register a action.
51 *
52 * @param array $actions actions.
53 * @return array
54 */
55 public function register( $actions ) {
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Create Attribute', 'suretriggers' ),
58 'action' => 'wc_create_attribute',
59 'function' => [ $this, 'action_listener' ],
60 ];
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 *
72 * @return void|array|bool
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75 if ( ! function_exists( 'WC' ) || ! function_exists( 'wc_create_attribute' ) ) {
76 return [
77 'status' => 'error',
78 'message' => __( 'WooCommerce not available', 'suretriggers' ),
79 ];
80 }
81
82 // Validate required fields.
83 foreach ( $fields as $field ) {
84 if ( array_key_exists( 'validationProps', $field ) && empty( $selected_options[ $field['name'] ] ) ) {
85 return [
86 'status' => 'error',
87 'message' => __( 'Required field is missing: ', 'suretriggers' ) . $field['name'],
88 ];
89 }
90 }
91
92 // Get attribute parameters.
93 $attribute_name = ! empty( $selected_options['attribute_name'] ) ? sanitize_text_field( $selected_options['attribute_name'] ) : '';
94 $attribute_slug = ! empty( $selected_options['attribute_slug'] ) ? sanitize_text_field( $selected_options['attribute_slug'] ) : '';
95 $attribute_orderby = ! empty( $selected_options['order_by'] ) ? sanitize_text_field( $selected_options['order_by'] ) : 'menu_order';
96 $has_archives = ! empty( $selected_options['has_archives'] ) ? (bool) $selected_options['has_archives'] : false;
97
98 if ( empty( $attribute_name ) ) {
99 return [
100 'status' => 'error',
101 'message' => __( 'Attribute name is required', 'suretriggers' ),
102 ];
103 }
104
105 // Generate slug if not provided.
106 if ( empty( $attribute_slug ) ) {
107 $attribute_slug = sanitize_title( $attribute_name );
108 }
109
110 // Sanitize attribute slug.
111 $attribute_slug = wc_sanitize_taxonomy_name( wp_unslash( $attribute_slug ) );
112
113
114 // Validate orderby.
115 $valid_orderby = [ 'menu_order', 'name', 'name_num', 'id' ];
116 if ( ! in_array( $attribute_orderby, $valid_orderby, true ) ) {
117 $attribute_orderby = 'menu_order';
118 }
119
120 try {
121 // Check if attribute already exists.
122 $existing_attributes = wc_get_attribute_taxonomies();
123 foreach ( $existing_attributes as $existing_attribute ) {
124 if ( $existing_attribute->attribute_name === $attribute_slug ) {
125 return [
126 'status' => 'error',
127 'message' => __( 'Attribute with this slug already exists', 'suretriggers' ),
128 ];
129 }
130 }
131
132 // Prepare attribute data.
133 $attributes_args = [
134 'name' => $attribute_name,
135 'slug' => $attribute_slug,
136 'order_by' => $attribute_orderby,
137 'has_archives' => $has_archives ? 1 : 0,
138 ];
139
140 // Create the attribute.
141 $attribute_id = wc_create_attribute( $attributes_args );
142
143 if ( is_wp_error( $attribute_id ) ) {
144 return [
145 'status' => 'error',
146 'message' => __( 'Failed to create attribute: ', 'suretriggers' ) . $attribute_id->get_error_message(),
147 ];
148 }
149
150 // Get the created attribute details.
151 $created_attribute = wc_get_attribute( $attribute_id );
152 $taxonomy_name = wc_attribute_taxonomy_name( $attribute_slug );
153
154 // Register the taxonomy if it doesn't exist.
155 if ( ! taxonomy_exists( $taxonomy_name ) ) {
156 register_taxonomy(
157 $taxonomy_name,
158 'product',
159 [
160 'labels' => [
161 'name' => $attribute_name,
162 ],
163 'hierarchical' => false,
164 'public' => $has_archives,
165 'show_ui' => false,
166 'query_var' => true,
167 'rewrite' => false,
168 ]
169 );
170 }
171
172 if ( $created_attribute ) {
173 return [
174 'status' => 'success',
175 'message' => __( 'Attribute created successfully', 'suretriggers' ),
176 'attribute_id' => $attribute_id,
177 'attribute_name' => $created_attribute->name,
178 'attribute_slug' => $created_attribute->slug,
179 'attribute_type' => $created_attribute->type,
180 'attribute_orderby' => $created_attribute->order_by,
181 'has_archives' => (bool) $created_attribute->has_archives,
182 'taxonomy_name' => $taxonomy_name,
183 'attribute_details' => (array) $created_attribute,
184 ];
185 } else {
186 return [
187 'status' => 'error',
188 'message' => __( 'Attribute created but could not retrieve details', 'suretriggers' ),
189 ];
190 }
191 } catch ( Exception $e ) {
192 return [
193 'status' => 'error',
194 'message' => __( 'Error creating attribute: ', 'suretriggers' ) . $e->getMessage(),
195 ];
196 }
197 }
198 }
199
200 CreateAttribute::get_instance();
201