Automator_Recipe_Process_User::maybe_add_trigger_entry( $args, bool $mark_trigger_complete = true )
Matches recipes against trigger meta/code. If a recipe is found and not completed, add a trigger entry in to the DB and matches number of times.
Contents
Parameters Parameters
- $args
-
(Required)
- $mark_trigger_complete
-
(bool) (Optional)
Default value: true
Return Return
(array|bool|int|null)
Source Source
File: src/core/lib/process/class-automator-recipe-process-user.php
public function maybe_add_trigger_entry( $args, $mark_trigger_complete = true ) { $is_signed_in = Automator()->is_user_signed_in( $args ); $check_trigger_code = key_exists( 'code', $args ) ? $args['code'] : null; $trigger_meta = key_exists( 'meta', $args ) ? $args['meta'] : null; $post_id = key_exists( 'post_id', $args ) ? $args['post_id'] : 0; $user_id = key_exists( 'user_id', $args ) ? $args['user_id'] : wp_get_current_user()->ID; $matched_recipe_id = key_exists( 'recipe_to_match', $args ) ? (int) $args['recipe_to_match'] : null; $matched_trigger_id = key_exists( 'trigger_to_match', $args ) ? (int) $args['trigger_to_match'] : null; $ignore_post_id = key_exists( 'ignore_post_id', $args ) ? true : false; $is_webhook = key_exists( 'is_webhook', $args ) ? true : false; $webhook_recipe = key_exists( 'webhook_recipe', $args ) ? (int) $args['webhook_recipe'] : null; $get_trigger_log_id = null; $result = array(); if ( is_null( $check_trigger_code ) ) { return null; } $args = [ 'code' => $check_trigger_code, 'meta' => $trigger_meta, 'post_id' => $post_id, 'user_id' => $user_id, 'recipe_to_match' => $matched_recipe_id, 'trigger_to_match' => $matched_trigger_id, 'ignore_post_id' => $ignore_post_id, 'is_signed_in' => $is_signed_in, ]; if ( $is_webhook ) { $recipes = Automator()->get->recipes_from_trigger_code( $check_trigger_code, $webhook_recipe ); } else { $recipes = Automator()->get->recipes_from_trigger_code( $check_trigger_code ); } foreach ( $recipes as $recipe ) { //loop only published if ( 'publish' !== $recipe['post_status'] ) { continue; } if ( 'user' === (string) $recipe['recipe_type'] && ! $is_signed_in ) { //If it's user recipe & user is not logged in.. skip recipe continue; } $recipe_id = absint( $recipe['ID'] ); /** * if recipe is already completed, bail early * @version 2.5.1 * @author Saad */ if ( Automator()->is_recipe_completed( $recipe_id, $user_id ) ) { continue; } $maybe_recipe_log = $this->maybe_create_recipe_log_entry( $recipe_id, $user_id, true, $args, true ); $maybe_recipe_log_id = (int) $maybe_recipe_log['recipe_log_id']; foreach ( $recipe['triggers'] as $trigger ) { if ( ! empty( $matched_trigger_id ) && is_numeric( $matched_trigger_id ) && (int) $matched_trigger_id !== (int) $trigger['ID'] ) { continue; } $trigger_id = absint( $trigger['ID'] ); $trigger_post_status = $trigger['post_status']; if ( 'publish' !== $trigger_post_status ) { continue; } $get_trigger_log_id = $this->get_trigger_id( $args, $trigger, $recipe_id, $maybe_recipe_log_id, $ignore_post_id ); if ( is_array( $get_trigger_log_id ) && false === $get_trigger_log_id['result'] ) { $result[] = $get_trigger_log_id; continue; } if ( ! $maybe_recipe_log['existing'] ) { //trigger validated.. add recipe log ID now! $recipe_log_details = $this->maybe_create_recipe_log_entry( $recipe_id, $user_id, true, $args ); $recipe_log_id = (int) $recipe_log_details['recipe_log_id']; //running again--after $recipe_log_id $get_trigger_log_id = $this->get_trigger_id( $args, $trigger, $recipe_id, $maybe_recipe_log_id, $ignore_post_id ); } else { $recipe_log_id = $maybe_recipe_log_id; } $get_trigger_log_id = $get_trigger_log_id['trigger_log_id']; $numtimes_arg = [ 'recipe_id' => $recipe_id, 'trigger_id' => $trigger_id, 'trigger' => $trigger, 'user_id' => $user_id, 'recipe_log_id' => $recipe_log_id, 'trigger_log_id' => $get_trigger_log_id, 'is_signed_in' => $is_signed_in, ]; $trigger_steps_completed = $this->maybe_trigger_num_times_completed( $numtimes_arg ); //If -1 / Any option is used, save it's entry for tokens if ( ( isset( $trigger['meta'][ $trigger_meta ] ) && intval( '-1' ) === intval( $trigger['meta'][ $trigger_meta ] ) ) && true === $trigger_steps_completed['result'] ) { $meta_arg = [ 'recipe_id' => $recipe_id, 'trigger_id' => $trigger_id, 'user_id' => $user_id, 'recipe_log_id' => $recipe_log_id, 'trigger_log_id' => $get_trigger_log_id, 'post_id' => $post_id, 'trigger' => $trigger, 'is_signed_in' => $is_signed_in, 'meta' => $trigger_meta, 'run_number' => Automator()->get->next_run_number( $recipe_id, $user_id, true ), ]; // Fix to avoid saving value as 0 when Any option is selected if ( 0 !== absint( $post_id ) ) { $meta_results = $this->maybe_trigger_add_any_option_meta( $meta_arg, $trigger_meta ); if ( isset( $meta_results['result'] ) && false === $meta_results['result'] ) { Automator()->error->add_error( 'uap_maybe_add_meta_entry', 'ERROR: You are trying to add entry ' . $trigger['meta'][ $trigger_meta ] . ' and post_id = ' . $post_id . '.', $this ); } } } do_action_deprecated( 'uap_after_trigger_run', array( $check_trigger_code, $post_id, $user_id, $trigger_meta, ), '3.0', 'automator_after_trigger_run' ); do_action( 'automator_after_trigger_run', $check_trigger_code, $post_id, $user_id, $trigger_meta ); if ( true === $trigger_steps_completed['result'] ) { /** * @deprecated $args['trigger_log_id'] Use $args['trigger_log_id']. * @version 3.0 */ $args['get_trigger_id'] = $get_trigger_log_id; $args['trigger_log_id'] = $get_trigger_log_id; $args['recipe_id'] = $recipe_id; $args['trigger_id'] = $trigger_id; $args['recipe_log_id'] = $recipe_log_id; $args['post_id'] = $post_id; $args['is_signed_in'] = $is_signed_in; $args['run_number'] = Automator()->get->next_run_number( $recipe_id, $user_id, true ); if ( 1 === + $mark_trigger_complete ) { $this->maybe_trigger_complete( $args ); } else { $result[] = array( 'result' => true, 'args' => $args ); } } } } return $result; }
Expand full source code Collapse full source code View on Github