id]; // get order process entry $order = wc_get_order($order_id); $process_entry = Wiaas_Delivery_Process::get_order_delivery_process_entry($order_id); if ( !$order || empty($process_entry) ) { return; } // apply entry changes to order properties foreach ($form['fields'] as $field) { $old_value = $old_entry[$field->id]; $new_value = $entry[$field->id]; // check if field changed if ($old_value === $new_value || empty($new_value)) { continue; } // save changes to order switch ($field->type) { case 'wiaas_order_bundle_installation_date': /** * Persist bundle installation date */ // get corresponding bundle field $bundle_field = GFCommon::get_fields_by_type( $form, 'wiaas_order_bundle' )[0]; if (empty($bundle_field)) { continue; } $bundle_item = $bundle_field->get_bundle_item( $entry[$bundle_field->id] ); if (empty($bundle_item)) { continue; } $bundle_item->update_meta_data('_wiaas_installation_date', $new_value); $bundle_item->save_meta_data(); break; case 'wiaas_order_bundle_document': /** * Persist delivery flow documents for bundle */ // get corresponding bundle field $bundle_field = GFCommon::get_fields_by_type( $form, 'wiaas_order_bundle' )[0]; if (empty($bundle_field)) { continue; } $bundle_item = $bundle_field->get_bundle_item( $entry[$bundle_field->id] ); if (empty($bundle_item)) { continue; } $bundle_documents = $bundle_item->get_meta('_wiaas_documents', true); if (empty($bundle_documents)) { $bundle_documents = array(); } $new_documents = $field->multipleFiles ? json_decode( $new_value ) : array( $new_value ); if (! empty($old_value) ) { $old_documents = $field->multipleFiles ? json_decode( $old_value ) : array( $old_value ); $added_documents = array_diff($new_documents, $old_documents); } else { $added_documents = $new_documents; } foreach ($added_documents as $added_document) { $info = pathinfo( $added_document ); $dir = wp_upload_dir(); $relative_file_path = str_replace($dir['baseurl'] . '/', '', $added_document); $bundle_documents[] = array( 'key' => wp_generate_uuid4(), 'name' => $info['filename'], 'extension' => $info['extension'], 'version' => $relative_file_path, 'url' => $field->get_download_url( $added_document, true ), 'type' => $field->wiaasDocTypeFilter ); } $bundle_item->update_meta_data('_wiaas_documents', $bundle_documents); $bundle_item->save_meta_data(); break; case 'wiaas_order_document': /** * Persist delivery flow documents for order */ $new_documents = $field->multipleFiles ? json_decode( $new_value ) : array( $new_value ); if (! empty($old_value) ) { $old_documents = $field->multipleFiles ? json_decode( $old_value ) : array( $old_value ); $added_documents = array_diff($new_documents, $old_documents); } else { $added_documents = $new_documents; } $order_documents = $order->get_meta('_wiaas_other_documents', true); if (empty($order_documents)) { $order_documents = array(); } foreach ($added_documents as $added_document) { $info = pathinfo( $added_document ); $dir = wp_upload_dir(); $relative_file_path = str_replace($dir['baseurl'] . '/', '', $added_document); $order_documents[] = array( 'key' => wp_generate_uuid4(), 'name' => $info['filename'], 'extension' => $info['extension'], 'version' => $relative_file_path, 'url' => $field->get_download_url( $added_document, true ), 'type' => $field->wiaasDocTypeFilter ); } $order->update_meta_data('_wiaas_other_documents', $order_documents); $order->save_meta_data(); break; case 'wiaas_order_installation_select': /** * Persist installation for bundle */ $selected_installation = $field->get_selected_installation($new_value); if ( empty($selected_installation) ) { // no installation selected continue; } // get corresponding bundle field $bundle_field = GFCommon::get_fields_by_type( $form, 'wiaas_order_bundle' )[0]; if (empty($bundle_field)) { continue; } $bundle_item = $bundle_field->get_bundle_item( $entry[$bundle_field->id] ); if (empty($bundle_item)) { continue; } $bundle_item->update_meta_data('_wiaas_installation', $selected_installation->get_id()); $bundle_item->save_meta_data(); /** * Apply actions related to order item installation * (ex. make order visible to corresponding installation company) */ do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $selected_installation); } } } /** * Adds the Order Fields group to the form editor. * * @param array $field_groups The properties for the field groups. * * @return array */ public static function maybe_add_order_field_group( $field_groups ) { foreach ( $field_groups as $field_group ) { if ( $field_group['name'] == 'wiaas_order_fields' ) { return $field_groups; } } $field_groups[] = array( 'name' => 'wiaas_order_fields', 'label' => __( 'Order Fields', 'wiaas' ), 'fields' => array() ); return $field_groups; } public static function display_order_document_fields($file_path, $field) { if (strpos($file_path, 'gf-download') === false && strpos($file_path, 'gf-wiaas-order-doc') === false) { $field = new Wiaas_Field_Order_Bundle_Document(); return $field->get_download_url($file_path); } return $file_path; } /** * Add custom settings for form order fields * * @param int $position */ public static function field_settings( $position ) { if ( $position === 20 ) { // After Field description setting. ?>
  • type) { case 'wiaas_order': $entry[(string) $field->id] = $order->get_id(); break; case 'workflow_user': $entry[(string) $field->id] = $order->get_customer_id(); // save customer if needed break; case 'wiaas_order_bundle': $bundle_item = $order->get_item($bundle_item_id); if ( empty($bundle_item) && $field->isRequired) { // there is no data for required field so entry cannot be created return false; } if (! empty($bundle_item)) { $entry[(string) $field->id] = $order->get_id() . '|' . $bundle_item->get_id(); } break; case 'wiaas_order_bundle_document': $bundle_item = $order->get_item($bundle_item_id); if ( empty($bundle_item) && $field->isRequired) { // there is no data for required field so entry cannot be created return false; } if (! empty($bundle_item)) { $documents = wiaas_get_standard_package_order_item_documents($order, $bundle_item_id); $filtered_documents = array(); foreach ($documents as $document) { if ($document['type'] === $field->wiaasDocTypeFilter) { $filtered_documents[] = $document; } } if ( empty($filtered_documents) && $field->isRequired ) { // there is no data for required field so entry cannot be created return false; } if (! empty ($filtered_documents) && ! $field->multipleFiles) { $document = $filtered_documents[0]; $entry[$field->id] = $document['version']; } else if (! empty ($filtered_documents) ) { $versions = array(); foreach ($filtered_documents as $filtered_document) { $versions[] = $filtered_document['version']; } $entry[$field->id] = json_encode($versions); } } break; case 'wiaas_order_installation_select': $bundle_item = $order->get_item($bundle_item_id); if ( empty($bundle_item) && $field->isRequired) { // there is no data for required field so entry cannot be created return false; } // installation is already selected if (!empty($bundle_item->get_meta('_wiaas_installation', true))) { $entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $bundle_item->get_meta('_wiaas_installation', true); continue; } $bundled_items = wc_pb_get_bundled_order_items($bundle_item, $order); $installation_items = array(); foreach ($bundled_items as $id => $bundled_item) { $product = $bundled_item->get_product(); if ($product && Wiaas_Product_Category::is_installation($product)) { $installation_items[] = $bundled_item; } } if (empty($installation_items)) { // there is no data for required field so entry cannot be created return false; } if (count($installation_items) === 1) { $installation_item = $installation_items[0]; $entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $installation_item->get_id(); /** * Apply actions related to order item installation * (ex. make order visible to corresponding installation company) */ do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $installation_item); } else if (count($installation_items) > 1) { // force admin to select installation $entry[(string) $field->id] = '0'; } } } return $entry; } } Wiaas_Order_Fields::init();