Files
roi-theme/wp-content/plugins/wp-marketing-automations/includes/db/class-bwfan-model-automation-step.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

348 lines
8.7 KiB
PHP
Executable File

<?php
/**
* Automation step modal class
*/
class BWFAN_Model_Automation_Step extends BWFAN_Model {
static $primary_key = 'ID';
/**
* Get Steps
*
* @param int $aid
* @param int $offset
* @param int $limit
* @param string $search
* @param string $order
* @param string $order_by
* @param array $ids
* @param bool $get_total
*
* @return array
*/
public static function get_all_automation_steps( $aid = 0, $offset = 0, $limit = 0, $search = '', $order = 'DESC', $order_by = 'ID', $ids = [], $get_total = false, $get_deleted_nodes = false ) {
global $wpdb;
/**
* Default response
*/
$response = [
'steps' => [],
'total' => 0
];
$table = self::_table();
$sql = "SELECT * FROM {$table} ";
$where_sql = ' WHERE 1=1';
/**
* If automation id is provided
*/
if ( 0 !== intval( $aid ) ) {
$where_sql .= " AND `aid` = {$aid}";
}
/**
* If search needed
*/
if ( ! empty( $search ) ) {
$where_sql .= " AND `title` LIKE '%$search%'";
}
/** Get by Status */
if ( ! $get_deleted_nodes ) {
$where_sql .= " AND `status` NOT IN ( 3, 4 )";
}
if ( ! empty( $ids ) ) {
$where_sql .= " AND `ID` IN(" . implode( ',', $ids ) . ")";
}
/** Set Pagination */
$pagination_sql = '';
$limit = ! empty( $limit ) ? absint( $limit ) : 0;
$offset = ! empty( $offset ) ? absint( $offset ) : 0;
if ( ! empty( $limit ) || ! empty( $offset ) ) {
$pagination_sql = " LIMIT $offset, $limit";
}
/** Order By */
$order = " ORDER BY {$order_by} {$order}";
/** Form sql query */
$sql = $sql . $where_sql . $order . $pagination_sql;
$response['steps'] = $wpdb->get_results( $sql, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
/**
* Get total
*/
if ( $get_total ) {
$total_sql = "SELECT count(*) FROM {$table} " . $where_sql;
$response['total'] = absint( $wpdb->get_var( $total_sql ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
return $response;
}
/**
* Return table name
*
* @return string
*/
protected static function _table() {
global $wpdb;
return $wpdb->prefix . 'bwfan_automation_step';
}
/**
* Insert new automation to db
*
* @param $data
*
* @return int
*/
public static function create_new_automation_step( $data ) {
if ( empty( $data ) ) {
return;
}
self::insert( $data );
return absint( self::insert_id() );
}
/**
* Update automation step data by id
*
* @param $id
* @param $data
*
* @return bool
*/
public static function update_automation_step_data( $id, $data ) {
if ( ! is_array( $data ) ) {
return false;
}
return ! ! self::update( $data, array(
'id' => absint( $id ),
) );
}
/**
* Delete Automation steps
*
* @param $ids
*
* @return mixed
*/
public static function delete_automation_steps( $ids = [] ) {
if ( empty( $ids ) ) {
return false;
}
global $wpdb;
$table_name = self::_table();
if ( ! is_array( $ids ) ) {
$ids = [ $ids ];
}
$ids = array_filter( array_map( 'intval', $ids ) );
$placeholders = array_fill( 0, count( $ids ), '%d' );
$query = $wpdb->prepare( "DELETE FROM $table_name WHERE `ID` IN ( " . implode( ',', $placeholders ) . " ) AND status = 0", $ids );
return $wpdb->query( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
public static function get_step_data_by_id( $step_id ) {
$result = BWFAN_Model_Automation_Step::get_specific_rows( 'ID', $step_id );
if ( empty( $result ) && ! is_array( $result ) ) {
return false;
}
return isset( $result[0] ) ? $result[0] : false;
}
public static function delete_steps_by_aid( $aid ) {
global $wpdb;
$table_name = self::_table();
$where = "aid = %d";
if ( is_array( $aid ) ) {
$where = "aid IN ('" . implode( "','", array_map( 'esc_sql', $aid ) ) . "')";
$aid = [];
}
$query = " DELETE FROM $table_name WHERE $where";
$query = $wpdb->prepare( $query, $aid );
return $wpdb->query( $wpdb->prepare( $query, $aid ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
public static function get_step_by_trail( $trail ) {
global $wpdb;
$table_name = self::_table();
$query = "SELECT ct.c_time AS run_time, st.action, st.type FROM {$wpdb->prefix}bwfan_automation_contact_trail AS ct JOIN {$table_name} AS st ON ct.sid=st.ID WHERE ct.tid='$trail' ORDER BY ct.ID DESC LIMIT 1";
$results = $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return $results;
}
/**
* Get automation steps ids
*
* @param int $aid
*
* @return array
*/
public static function get_automation_step_ids( $aid ) {
if ( empty( $aid ) ) {
return [];
}
global $wpdb;
$table = self::_table();
$query = $wpdb->prepare( "SELECT ID FROM {$table} WHERE `status` != %d AND aid = %d", 3, $aid );
$results = $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return $results;
}
/**
* Return ID of the active step i.e. not equal to 3
*
* @param $id
*
* @return int|string|null
*/
public static function is_step_active( $id ) {
if ( empty( $id ) ) {
return 0;
}
global $wpdb;
$table = self::_table();
$query = $wpdb->prepare( "SELECT ID FROM {$table} WHERE `status` != %d AND ID = %d", 3, $id );
return $wpdb->get_var( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* Get email step ids
*
* @return array
*/
public static function get_email_step_ids() {
global $wpdb;
$table = self::_table();
$sql = "SELECT `ID` FROM {$table} WHERE `action` LIKE '%s' AND `status`= %d ";
return $wpdb->get_col( $wpdb->prepare( $sql, '%wp_sendemail%', 1 ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* @param $stepids
* @param $action
*
* @return array
*/
public static function get_messaging_steps( $stepids, $action = 'wp_sendemail' ) {
global $wpdb;
$placeholder = array_fill( 0, count( $stepids ), '%d' );
$placeholder = implode( ", ", $placeholder );
$args = $stepids;
$args[] = '%' . $action . '"%';
$query = "SELECT `ID` FROM {$wpdb->prefix}bwfan_automation_step WHERE `ID` IN($placeholder) AND `action` LIKE %s";
$query = $wpdb->prepare( $query, $args );
return $wpdb->get_col( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* Change steps status to archive
*
* @param $step_ids
*
* @return bool|int|mysqli_result|resource|null
*/
public static function update_steps_status( $step_ids ) {
if ( empty( $step_ids ) ) {
return false;
}
global $wpdb;
$table_name = self::_table();
$placeholder = array_fill( 0, count( $step_ids ), '%d' );
$placeholder = implode( ", ", $placeholder );
$args = array_merge( [ 4 ], $step_ids );
$query = "UPDATE $table_name SET `status` = %d WHERE `ID` IN ($placeholder)";
return $wpdb->query( $wpdb->prepare( $query, $args ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
public static function get_step_data( $step_id ) {
$step = self::get_step_data_by_id( $step_id );
if ( empty( $step ) ) {
return [];
}
$step['data'] = ! empty( $step['data'] ) ? json_decode( $step['data'], true ) : [];
return $step;
}
/**
* Get Benchmark event name by step id
*
* @param $stepids
*
* @return array
*/
public static function get_benchmark_events( $stepids = [] ) {
if ( empty( $stepids ) ) {
return [];
}
global $wpdb;
$placeholder = array_fill( 0, count( $stepids ), '%d' );
$placeholder = implode( ", ", $placeholder );
$args = $stepids;
$table_name = self::_table();
$query = "SELECT `ID`, `action` FROM $table_name WHERE `ID` IN ($placeholder) AND `type` = 3;";
$query = $wpdb->prepare( $query, $args );
$results = $wpdb->get_results( $query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$return_array = [];
if ( is_array( $results ) && count( $results ) > 0 ) {
foreach ( $results as $val ) {
if ( ! empty( $val['action'] ) ) {
$benchmark = json_decode( $val['action'], true );
$benchmark = $benchmark['benchmark'] ?? '';
if ( ! empty( $benchmark ) ) {
$return_array[ $val['ID'] ] = $benchmark;
}
}
}
}
return $return_array;
}
}