Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/includes/db/class-bwfan-public-api-db-model.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

158 lines
4.6 KiB
PHP
Executable File

<?php
/**
* Class BWFAN_Rest_API_DB_Model
*/
class BWFAN_Rest_API_DB_Model {
private static function _table() {
/** @var wpdb $wpdb */ global $wpdb;
return $wpdb->prefix . 'bwfan_api_keys';
}
/**
* @param $data
*
* @return int|WP_Error
*/
public static function insert( $data ) {
global $wpdb;
if ( empty( $data ) ) {
new WP_Error( 500, __( 'Data to insert is not provided', 'wp-marketing-automations-pro' ) );
}
$wpdb->insert( self::_table(), $data ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
return ! empty( $wpdb->insert_id ) ? absint( $wpdb->insert_id ) : new WP_Error( 500, $wpdb->last_error );
}
/**
* @param array $columns
* @param array $where
* @param int $limit
* @param int $offset
*
* @return array|object|stdClass[]|null
*/
public static function fetch( $columns = array(), $where = array(), $limit = 0, $offset = 0, $search = '', $grab_count = false ) {
global $wpdb;
$table = self::_table();
if ( ! empty( $columns ) ) {
$column = implode( ',', array_map( function ( $col ) {
return 'p.' . $col;
}, $columns ) );
} else {
$column = 'p.*, u.display_name as user_login,u.user_email';
}
$sql = "Select $column FROM $table as p JOIN {$wpdb->users} as u ON p.uid = u.ID";
$total_sql = "Select count(p.id) FROM $table as p JOIN {$wpdb->users} as u ON p.uid = u.ID";
$where_sql = " WHERE 1=1";
// mapping field and value present in $where and imploding it with &
if ( ! empty( $where ) ) {
$data = array_map( function ( $k, $v ) {
return 'p.' . $k . '=' . $v;
}, array_keys( $where ), array_values( $where ) );
$where_sql .= " AND " . implode( ' AND ', $data );
}
if ( ! empty( $search ) ) {
$where_sql .= " AND (u.user_login LIKE '%$search%' || u.user_email LIKE '%$search%')";
}
if ( ! empty( $where_sql ) ) {
$sql .= $where_sql . ' ORDER BY `id` DESC';
$total_sql .= $where_sql;
}
//adding limit and offset if limit provided
if ( ! empty( $limit ) ) {
$sql .= " LIMIT $offset,$limit";
}
if ( $grab_count ) {
return [
'total' => $wpdb->get_var( $wpdb->prepare( $total_sql ) ), //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
'data' => $wpdb->get_results( $wpdb->prepare( $sql ), ARRAY_A ) //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
];
}
return $wpdb->get_results( $wpdb->prepare( $sql ), ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* @param $data
*
* @return bool|WP_Error
*/
public static function delete( $data ) {
/** @var wpdb $wpdb */ global $wpdb;
if ( empty( $data ) ) {
new WP_Error( 500, __( 'Data to be deleted not provided', 'wp-marketing-automations-pro' ) );
}
if ( false === $wpdb->delete( self::_table(), $data ) ) { //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return new WP_Error( 500, $wpdb->last_error );
}
return true;
}
/**
* @param $data
* @param $where
*
* @return bool|WP_Error
*/
public static function update( $data, $where ) {
global $wpdb;
if ( empty( $data ) || empty( $where ) ) {
new WP_Error( 500, __( 'Data to be updated not provided', 'wp-marketing-automations-pro' ) );
}
if ( false === $wpdb->update( self::_table(), $data, $where ) ) { //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return new WP_Error( 500, $wpdb->last_error );
}
return true;
}
/**
* @param $api_key
*
* @return array|object|stdClass[]|null
*/
public static function get_user_details_by_api( $api_key ) {
global $wpdb;
if ( empty( $api_key ) ) {
new WP_Error( 500, __( 'API key not provided', 'wp-marketing-automations-pro' ) );
}
$table = self::_table();
$sql = "SELECT * FROM $table WHERE api_key = %s";
return $wpdb->get_row( $wpdb->prepare( $sql, $api_key ), ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
/**
* @param $api_key_id
* update last access time of the api key
*
* @return bool
*/
public static function update_api_key_last_access( $api_key_id ) {
global $wpdb;
if ( empty( $api_key_id ) ) {
new WP_Error( 500, __( 'API key ID not provided', 'wp-marketing-automations-pro' ) );
}
$wpdb->update( self::_table(), array( 'last_access' => current_time( 'mysql' ) ), array( 'id' => $api_key_id ) ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return true;
}
}