Automator_DB_Handler_Triggers
Source Source
File: src/core/lib/utilities/db/class-automator-db-handler-triggers.php
class Automator_DB_Handler_Triggers { /** * @var */ public static $instance; /** * @return Automator_DB_Handler_Triggers */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * @param int|null $user_id * @param int|null $trigger_id * @param int|null $recipe_id * @param bool $completed * @param int|null $recipe_log_id * * @return int|null */ public function add( int $user_id = null, int $trigger_id = null, int $recipe_id = null, bool $completed = false, int $recipe_log_id = null ) { if ( null === $trigger_id ) { return null; } if ( null === $user_id ) { return null; } if ( null === $recipe_id ) { return null; } global $wpdb; $table_name = $wpdb->prefix . Automator()->db->tables->trigger; $wpdb->insert( $table_name, array( 'date_time' => current_time( 'mysql' ), 'user_id' => $user_id, 'automator_trigger_id' => $trigger_id, 'automator_recipe_id' => $recipe_id, 'completed' => $completed, 'automator_recipe_log_id' => $recipe_log_id, ), array( '%s', '%d', '%d', '%d', '%s', '%d', ) ); return $wpdb->insert_id; } /** * @param array $to_update * @param array $where * @param array $update_format * @param array $where_format * * @return bool|int */ public function update( array $to_update, array $where, array $update_format, array $where_format ) { global $wpdb; $table_name = isset( Automator()->db->tables->trigger ) ? Automator()->db->tables->trigger : 'uap_trigger_log'; return $wpdb->update( $wpdb->prefix . $table_name, $to_update, $where, $update_format, $where_format ); } /** * @param int $trigger_id * @param int $trigger_log_id * @param int $run_number * @param array $args * * @return bool|int|null */ public function add_meta( int $trigger_id, int $trigger_log_id, int $run_number, array $args ) { $user_id = isset( $args['user_id'] ) ? absint( $args['user_id'] ) : null; $meta_key = isset( $args['meta_key'] ) ? esc_attr( $args['meta_key'] ) : null; $meta_value = isset( $args['meta_value'] ) ? $args['meta_value'] : null; $run_time = isset( $args['run_time'] ) ? $args['run_time'] : current_time( 'mysql' ); // Set user ID if ( is_null( $user_id ) ) { $user_id = get_current_user_id(); } if ( ! is_numeric( $trigger_log_id ) ) { Automator()->error->add_error( 'insert_trigger_meta', 'ERROR: You are trying to insert trigger meta without providing valid trigger_log_id', $this ); return null; } if ( null === $meta_key || ! is_string( $meta_key ) ) { Automator()->error->add_error( 'insert_trigger_meta', 'ERROR: You are trying to insert trigger meta without providing a meta_key', $this ); return null; } if ( null === $meta_value ) { Automator()->error->add_error( 'insert_trigger_meta', 'ERROR: You are trying to insert trigger meta without providing a meta_value', $this ); return null; } if ( 'sentence_human_readable' === $meta_key ) { if ( ! empty( $this->get_sentence( $user_id, $trigger_log_id, $run_number, $meta_key ) ) ) { // sentence already added! return null; } } global $wpdb; $table_name = isset( Automator()->db->tables->trigger_meta ) ? Automator()->db->tables->trigger_meta : 'uap_trigger_log_meta'; return $wpdb->insert( $wpdb->prefix . $table_name, array( 'user_id' => $user_id, 'automator_trigger_log_id' => $trigger_log_id, 'automator_trigger_id' => $trigger_id, 'run_number' => $run_number, 'meta_key' => $meta_key, 'meta_value' => $meta_value, 'run_time' => $run_time, ), array( '%d', '%d', '%d', '%d', '%s', '%s', '%s', ) ); } /** * @param array $args * @param string $meta_key * @param string $meta_value * * @return bool|int|null */ public function add_token_meta( string $meta_key, string $meta_value, array $args ) { $trigger_id = isset( $args['trigger_id'] ) ? absint( $args['trigger_id'] ) : null; $trigger_log_id = isset( $args['trigger_log_id'] ) ? absint( $args['trigger_log_id'] ) : null; $run_number = isset( $args['run_number'] ) ? absint( $args['run_number'] ) : null; $user_id = isset( $args['user_id'] ) ? absint( $args['user_id'] ) : null; // Set user ID if ( is_null( $user_id ) ) { $user_id = get_current_user_id(); } if ( null === $trigger_log_id || ! is_numeric( $trigger_log_id ) ) { Automator()->error->add_error( 'insert_trigger_token_meta', 'ERROR: You are trying to insert trigger meta without providing valid trigger_log_id', $this ); return null; } if ( empty( $meta_key ) ) { Automator()->error->add_error( 'insert_trigger_token_meta', 'ERROR: You are trying to insert trigger meta without providing a meta_key', $this ); return null; } if ( empty( $meta_value ) ) { Automator()->error->add_error( 'insert_trigger_token_meta', 'ERROR: You are trying to insert trigger meta without providing a meta_value', $this ); return null; } $token_args = array( 'user_id' => $user_id, 'meta_key' => $meta_key, 'meta_value' => $meta_value, ); return $this->add_meta( $trigger_id, $trigger_log_id, $run_number, $token_args ); } /** * @param array $update * @param array $where * @param array $update_format * @param array $where_format * * @return bool|int */ public function update_meta( array $update, array $where, array $update_format, array $where_format ) { global $wpdb; $table_name = isset( Automator()->db->tables->trigger_meta ) ? Automator()->db->tables->trigger_meta : 'uap_trigger_log_meta'; return $wpdb->update( $wpdb->prefix . $table_name, $update, $where, $update_format, $where_format ); } /** * @param int $user_id * @param int $trigger_log_id * @param int $run_number * @param string $meta_key * * @return string|null */ public function get_sentence( int $user_id, int $trigger_log_id, int $run_number, string $meta_key ) { global $wpdb; $tbl = Automator()->db->tables->trigger_meta; return $wpdb->get_var( $wpdb->prepare( //phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared "SELECT meta_value FROM {$wpdb->prefix}{$tbl} WHERE 1=1 AND user_id = %d AND automator_trigger_log_id = %d AND run_number = %d AND meta_key LIKE %s", $user_id, $trigger_log_id, $run_number, $meta_key ) ); } /** * @param string $meta_key * @param int $trigger_id * @param int $trigger_log_id * @param int|null $user_id * * @return mixed|string */ public function get_meta( string $meta_key, int $trigger_id, int $trigger_log_id, int $user_id = null ) { if ( empty( $meta_key ) || empty( $trigger_id ) || empty( $trigger_log_id ) ) { return ''; } global $wpdb; $tbl = Automator()->db->tables->trigger_meta; $meta_value = $wpdb->get_var( $wpdb->prepare( //phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared "SELECT meta_value FROM {$wpdb->prefix}$tbl WHERE 1=1 AND user_id = %d AND meta_key = %s AND automator_trigger_id = %d AND automator_trigger_log_id = %d LIMIT 0,1", $user_id, $meta_key, $trigger_id, $trigger_log_id ) ); if ( ! empty( $meta_value ) ) { return maybe_unserialize( $meta_value ); } return ''; } /** * @param string $meta_key * @param array $args * * @return mixed */ public function get_token_meta( string $meta_key, array $args = array() ) { $trigger_id = absint( $args['trigger_id'] ); $trigger_log_id = absint( $args['trigger_log_id'] ); $user_id = absint( $args['user_id'] ); return $this->get_meta( $meta_key, $trigger_id, $trigger_log_id, $user_id ); } /** * @param int $trigger_id * @param int $user_id * @param int $recipe_id * @param int $recipe_log_id * @param int $trigger_log_id * * @return bool|int */ public function mark_complete( int $trigger_id, int $user_id, int $recipe_id, int $recipe_log_id, int $trigger_log_id ) { $update = array( 'completed' => true, 'date_time' => current_time( 'mysql' ), ); $where = array( 'user_id' => $user_id, 'automator_trigger_id' => $trigger_id, 'automator_recipe_id' => $recipe_id, ); $update_format = array( '%d', '%s', ); $where_format = array( '%d', '%d', '%d', ); if ( null !== $trigger_log_id && is_int( $trigger_log_id ) ) { $where['ID'] = absint( $trigger_log_id ); $where_format[] = '%d'; } if ( null !== $recipe_log_id && is_int( $recipe_log_id ) ) { $where['automator_recipe_log_id'] = absint( $recipe_log_id ); $where_format[] = '%d'; } return $this->update( $update, $where, $update_format, $where_format ); } /** * @param int|null $user_id * @param int|null $trigger_id * @param int|null $recipe_id * @param int|null $recipe_log_id * @param bool $process_recipe * @param array $args * * @return bool|null */ public function is_completed( int $user_id = null, int $trigger_id = null, int $recipe_id = null, int $recipe_log_id = null, bool $process_recipe = false, array $args = array() ) { // Set user ID if ( is_null( $user_id ) ) { $user_id = get_current_user_id(); } if ( null === $trigger_id || ! is_numeric( $trigger_id ) ) { Automator()->error->add_error( 'is_trigger_completed', 'ERROR: You are trying to check if a trigger is completed without providing a trigger_id', $this ); return null; } if ( null === $recipe_id || ! is_numeric( $recipe_id ) ) { Automator()->error->add_error( 'is_trigger_completed', 'ERROR: You are trying to check if a trigger is completed without providing a recipe_id', $this ); return null; } global $wpdb; $table_name = $wpdb->prefix . Automator()->db->tables->trigger; if ( $process_recipe ) { $q = "SELECT completed FROM $table_name WHERE user_id = %d AND automator_trigger_id = %d AND automator_recipe_id = %d AND automator_recipe_log_id = %d"; } else { $q = "SELECT t.completed AS trigger_completed FROM $table_name t LEFT JOIN {$wpdb->prefix}uap_recipe_log r ON t.automator_recipe_log_id = r.ID LEFT JOIN {$wpdb->prefix}uap_action_log a ON t.automator_recipe_log_id = a.automator_recipe_log_id WHERE 1=1 AND t.user_id = %d AND t.automator_trigger_id = %d AND t.automator_recipe_id = %d AND t.automator_recipe_log_id = %d AND r.completed = 1 AND a.completed = 1"; } $results = $wpdb->get_var( $wpdb->prepare( $q, $user_id, $trigger_id, $recipe_id, $recipe_log_id ) ); //phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared if ( ! empty( $results ) ) { return true; } return false; } /** * @param int $trigger_id */ public function delete( int $trigger_id ) { global $wpdb; // delete from uap_trigger_log $wpdb->delete( $wpdb->prefix . Automator()->db->tables->trigger, array( 'automator_trigger_id' => $trigger_id ) ); // delete from uap_trigger_log_meta $wpdb->delete( $wpdb->prefix . Automator()->db->tables->trigger_meta, array( 'automator_trigger_id' => $trigger_id ) ); } }
Expand full source code Collapse full source code View on Github
Methods Methods
- add
- add_meta
- add_token_meta
- delete
- delete_by_recipe_id
- delete_logs
- get_instance
- get_meta
- get_recipe_triggers_logic_by_child_id — Fetches the recipe triggers logic by its child ID.
- get_sentence
- get_token_meta
- get_triggers_by_recipe_log_id
- is_completed
- mark_complete
- update
- update_meta