'customer-acceptance', 'DELIVERY ACTION TYPE: Validate Questionnaire' => 'validate-questionnaire', 'DELIVERY ACTION TYPE: Manual' => 'manual', 'DELIVERY ACTION TYPE: Schedule meeting' => 'schedule-meeting' ); public static function get_delivery_action_types() { return array_keys(self::$delivery_action_types); } public static function get_delivery_action_type_prefix() { return self::$delivery_action_form_title_prefix; } /** * Returns label for Wiass Delivery Process Step * @return string */ public function get_label() { return esc_html__( 'Delivery Step', 'wiaas' ); } /** * Returns settings for wiaas delivery process step * @return array */ public function get_settings() { $settings_api = $this->get_common_settings_api(); $forms = $this->get_action_forms_choices(); $form_choices[] = array( 'label' => esc_html__( 'Select a Form', 'wiaas' ), 'value' => '' ); foreach ( $forms as $form ) { $form_choices[] = array( 'label' => $form['title'], 'value' => $form['id'] ); } $settings = array( 'title' => esc_html__( 'Wiaas Delivery Step', 'wiaas' ), 'fields' => array( $settings_api->get_setting_instructions(), array ( 'name' => 'is_visible_to_customer', 'label' => __( 'Visible to customer', 'wiaas' ), 'type' => 'checkbox', 'choices' => array( array( 'label' => __( 'Show to customer', 'wiaas' ), 'name' => 'is_visible_to_customer', 'default_value' => true, ), ), 'tooltip' => __( 'Determines if this step will be shown to customer.', 'wiaas' ), ), array( 'name' => 'target_form_id', 'label' => esc_html__( 'Action', 'wiaas' ), 'type' => 'select', 'onchange' => "jQuery(this).closest('form').submit();", 'choices' => $form_choices, ) ), ); return $settings; } public function update_step_status($status = false) { if ($status === 'cancelled') { $status = 'complete'; } parent::update_step_status($status); } /** * Process Wiass Delivery Process Step * * * @return bool */ function process() { $form = $this->get_form(); $entry = $this->get_entry(); $target_form = GFAPI::get_form( $this->target_form_id ); # if target form is not set we are done if (!$target_form) { // return false since we wait for admin to process the step return false; } $delivery_settings = rgar($target_form, 'wiaas_delivery_process'); if (! $delivery_settings['automatic_action_entries_enabled']) { return false; } $action_entries_ids = gform_get_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids'); // if action entries present this step is reprocessing and we should not be creating new action entries if (! empty($action_entries_ids)) { // return false since we wait for admin to process the step return false; } // create new entries for step action forms $order_field = GFCommon::get_fields_by_type($form, 'wiaas_order')[0]; $order_id = empty($order_field) ? null : absint($entry[$order_field->id]); // if process has not order we cannot create actions if (empty($order_id)) { // return false since we wait for admin to process the step return false; } $delivery_settings = rgar($target_form, 'wiaas_delivery_process'); switch ($delivery_settings['automatic_action_entries_type']) { case 'single': $action_entries_ids = $this->_create_single_action_entry($target_form, $order_id); break; case 'bundle': $action_entries_ids = $this->_create_per_bundle_action_entries($target_form, $order_id); } gform_update_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids', $action_entries_ids); $note = $this->get_name() . ': ' . esc_html__( 'started.', 'wiaas' ); $this->add_note( $note ); // return false since we wait for admin to process the step return false; } /** * Evaluates current step status based on target form entry status * * If target form entry has associated workflow current step will complete its status * only when target form entry workflow is completed * @return string */ public function status_evaluation() { // return 'pending'; } public function workflow_detail_box($form, $args) { parent::workflow_detail_box($form, $args); $target_form = GFAPI::get_form( $this->target_form_id ); if (empty( $target_form)) { return; } ?>

Step: get_name() ?>

Action:

get_form_id()) { $entry_meta['wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids'] = array(); } return $entry_meta; } /** * Retrieves forms that are valid options for delivery step action * @return array */ public function get_action_forms_choices() { $forms = GFAPI::get_forms(); $action_forms = array(); foreach ( $forms as $form ) { $delivery_settings = rgar($form, 'wiaas_delivery_process'); if ( ! empty($delivery_settings) && $delivery_settings['delivery_form_type'] === 'action'){ $action_forms[] = $form; } } return $action_forms; } /** * Retrieves delivery action type that is executed with this step * @return string */ public function get_delivery_action_type() { $target_form = GFAPI::get_form( $this->target_form_id ); return self::$delivery_action_types[$target_form['title']]; } /** * Retrieves target form entry created when step was started * @return array|null */ public function get_target_form_entry() { $entry = GFAPI::get_entry($this->get_target_form_entry_id()); if(is_wp_error($entry)) { return null; } return $entry; } /** * Retrieves target form entry id created when step was started * @return int */ public function get_target_form_entry_id() { $value = gform_get_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() .'_entry_id'); return absint($value); } private function _create_single_action_entry($target_form, $order_id) { $action_entries_ids = array(); $new_entry = Wiaas_Order_Fields::map_order_to_entry($order_id, $target_form); if (empty($new_entry)) { // entry cannot be created return $action_entries_ids; } $new_entry = array_merge($new_entry,array( 'form_id' => $this->target_form_id, 'wiaas_delivery_process_id' => $this->get_entry_id(), 'wiaas_delivery_order_id' => $order_id, 'wiaas_delivery_step_name' => $this->get_name(), )); $entry_id = GFAPI::add_entry( $new_entry ); if ( is_wp_error( $entry_id ) ) { $this->log_debug( __METHOD__ .'(): failed to add entry' ); } else { // store entry id $action_entries_ids[] = $entry_id; } return $action_entries_ids; } private function _create_per_bundle_action_entries($target_form, $order_id) { $action_entries_ids = array(); $bundle_items = wiaas_get_order_standard_bundle_items($order_id); foreach ($bundle_items as $item) { $new_entry = Wiaas_Order_Fields::map_order_to_entry($order_id, $target_form, $item->get_id()); if (empty($new_entry)) { // entry cannot be created continue; } $new_entry['form_id'] = $target_form['id']; $new_entry['wiaas_delivery_process_id'] = $this->get_entry_id(); $new_entry['wiaas_delivery_order_id'] = $order_id; $entry_id = GFAPI::add_entry( $new_entry ); if ( is_wp_error( $entry_id ) ) { $this->log_debug( __METHOD__ .'(): failed to add entry' ); } else { // store entry id $action_entries_ids[] = $entry_id; } } return $action_entries_ids; } }