Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/wpforms-.../src/Db/Payments
File: Meta.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WPForms\Db\Payments;
[2] Fix | Delete
[3] Fix | Delete
use WPForms_DB;
[4] Fix | Delete
[5] Fix | Delete
/**
[6] Fix | Delete
* Class for the Payment Meta database table.
[7] Fix | Delete
*
[8] Fix | Delete
* @since 1.8.2
[9] Fix | Delete
*/
[10] Fix | Delete
class Meta extends WPForms_DB {
[11] Fix | Delete
[12] Fix | Delete
/**
[13] Fix | Delete
* Primary class constructor.
[14] Fix | Delete
*
[15] Fix | Delete
* @since 1.8.2
[16] Fix | Delete
*/
[17] Fix | Delete
public function __construct() {
[18] Fix | Delete
[19] Fix | Delete
parent::__construct();
[20] Fix | Delete
[21] Fix | Delete
$this->table_name = self::get_table_name();
[22] Fix | Delete
$this->primary_key = 'id';
[23] Fix | Delete
$this->type = 'payment_meta';
[24] Fix | Delete
}
[25] Fix | Delete
[26] Fix | Delete
/**
[27] Fix | Delete
* Get the table name.
[28] Fix | Delete
*
[29] Fix | Delete
* @since 1.8.2
[30] Fix | Delete
*
[31] Fix | Delete
* @return string
[32] Fix | Delete
*/
[33] Fix | Delete
public static function get_table_name() {
[34] Fix | Delete
[35] Fix | Delete
global $wpdb;
[36] Fix | Delete
[37] Fix | Delete
return $wpdb->prefix . 'wpforms_payment_meta';
[38] Fix | Delete
}
[39] Fix | Delete
[40] Fix | Delete
/**
[41] Fix | Delete
* Get table columns.
[42] Fix | Delete
*
[43] Fix | Delete
* @since 1.8.2
[44] Fix | Delete
*
[45] Fix | Delete
* @return array
[46] Fix | Delete
*/
[47] Fix | Delete
public function get_columns() {
[48] Fix | Delete
[49] Fix | Delete
return [
[50] Fix | Delete
'id' => '%d',
[51] Fix | Delete
'payment_id' => '%d',
[52] Fix | Delete
'meta_key' => '%s', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
[53] Fix | Delete
'meta_value' => '%s', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
[54] Fix | Delete
];
[55] Fix | Delete
}
[56] Fix | Delete
[57] Fix | Delete
/**
[58] Fix | Delete
* Default column values.
[59] Fix | Delete
*
[60] Fix | Delete
* @since 1.8.2
[61] Fix | Delete
*
[62] Fix | Delete
* @return array
[63] Fix | Delete
*/
[64] Fix | Delete
public function get_column_defaults() {
[65] Fix | Delete
[66] Fix | Delete
return [
[67] Fix | Delete
'payment_id' => 0,
[68] Fix | Delete
'meta_key' => '', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
[69] Fix | Delete
'meta_value' => '', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
[70] Fix | Delete
];
[71] Fix | Delete
}
[72] Fix | Delete
[73] Fix | Delete
/**
[74] Fix | Delete
* Create the table.
[75] Fix | Delete
*
[76] Fix | Delete
* @since 1.8.2
[77] Fix | Delete
*/
[78] Fix | Delete
public function create_table() {
[79] Fix | Delete
[80] Fix | Delete
global $wpdb;
[81] Fix | Delete
[82] Fix | Delete
$charset_collate = $wpdb->get_charset_collate();
[83] Fix | Delete
$max_index_length = self::MAX_INDEX_LENGTH;
[84] Fix | Delete
[85] Fix | Delete
/**
[86] Fix | Delete
* Note: there must be two spaces between the words PRIMARY KEY and the definition of primary key.
[87] Fix | Delete
*
[88] Fix | Delete
* @link https://codex.wordpress.org/Creating_Tables_with_Plugins#Creating_or_Updating_the_Table
[89] Fix | Delete
*/
[90] Fix | Delete
$query = "CREATE TABLE $this->table_name (
[91] Fix | Delete
id bigint(20) NOT NULL AUTO_INCREMENT,
[92] Fix | Delete
payment_id bigint(20) NOT NULL,
[93] Fix | Delete
meta_key varchar(255),
[94] Fix | Delete
meta_value longtext,
[95] Fix | Delete
PRIMARY KEY (id),
[96] Fix | Delete
KEY payment_id (payment_id),
[97] Fix | Delete
KEY meta_key (meta_key($max_index_length)),
[98] Fix | Delete
KEY meta_value (meta_value($max_index_length))
[99] Fix | Delete
) $charset_collate;";
[100] Fix | Delete
[101] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
[102] Fix | Delete
dbDelta( $query );
[103] Fix | Delete
}
[104] Fix | Delete
[105] Fix | Delete
/**
[106] Fix | Delete
* Insert payment meta's.
[107] Fix | Delete
*
[108] Fix | Delete
* @since 1.8.2
[109] Fix | Delete
*
[110] Fix | Delete
* @param int $payment_id Payment ID.
[111] Fix | Delete
* @param array $meta Payment meta to be inserted.
[112] Fix | Delete
*/
[113] Fix | Delete
public function bulk_add( $payment_id, $meta ) {
[114] Fix | Delete
[115] Fix | Delete
global $wpdb;
[116] Fix | Delete
[117] Fix | Delete
$values = [];
[118] Fix | Delete
[119] Fix | Delete
foreach ( $meta as $meta_key => $meta_value ) {
[120] Fix | Delete
[121] Fix | Delete
// Empty strings are skipped.
[122] Fix | Delete
if ( $meta_value === '' ) {
[123] Fix | Delete
continue;
[124] Fix | Delete
}
[125] Fix | Delete
[126] Fix | Delete
$values[] = $wpdb->prepare(
[127] Fix | Delete
'( %d, %s, %s )',
[128] Fix | Delete
$payment_id,
[129] Fix | Delete
$meta_key,
[130] Fix | Delete
maybe_serialize( $meta_value )
[131] Fix | Delete
);
[132] Fix | Delete
}
[133] Fix | Delete
[134] Fix | Delete
if ( ! $values ) {
[135] Fix | Delete
return;
[136] Fix | Delete
}
[137] Fix | Delete
[138] Fix | Delete
$values = implode( ', ', $values );
[139] Fix | Delete
[140] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[141] Fix | Delete
$wpdb->query(
[142] Fix | Delete
"INSERT INTO $this->table_name
[143] Fix | Delete
( payment_id, meta_key, meta_value )
[144] Fix | Delete
VALUES $values"
[145] Fix | Delete
);
[146] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[147] Fix | Delete
}
[148] Fix | Delete
[149] Fix | Delete
/**
[150] Fix | Delete
* Update or add payment meta.
[151] Fix | Delete
*
[152] Fix | Delete
* If the meta key already exists for given payment id, update the meta value. Otherwise, add the meta key and value.
[153] Fix | Delete
*
[154] Fix | Delete
* @since 1.8.4
[155] Fix | Delete
*
[156] Fix | Delete
* @param int $payment_id Payment ID.
[157] Fix | Delete
* @param string $meta_key Payment meta key.
[158] Fix | Delete
* @param mixed $meta_value Payment meta value.
[159] Fix | Delete
*
[160] Fix | Delete
* @return bool
[161] Fix | Delete
*/
[162] Fix | Delete
public function update_or_add( $payment_id, $meta_key, $meta_value ) {
[163] Fix | Delete
[164] Fix | Delete
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.SlowDBQuery.slow_db_query_meta_key, WordPress.DB.SlowDBQuery.slow_db_query_meta_value
[165] Fix | Delete
$row = $this->get_last_by( $meta_key, $payment_id );
[166] Fix | Delete
[167] Fix | Delete
if ( $row ) {
[168] Fix | Delete
return $this->update( $row->id, [ 'meta_value' => maybe_serialize( $meta_value ) ], '', $this->type );
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
return (bool) $this->add(
[172] Fix | Delete
[
[173] Fix | Delete
'payment_id' => $payment_id,
[174] Fix | Delete
'meta_key' => $meta_key,
[175] Fix | Delete
'meta_value' => maybe_serialize( $meta_value ),
[176] Fix | Delete
],
[177] Fix | Delete
$this->type
[178] Fix | Delete
);
[179] Fix | Delete
// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.SlowDBQuery.slow_db_query_meta_key, WordPress.DB.SlowDBQuery.slow_db_query_meta_value
[180] Fix | Delete
}
[181] Fix | Delete
[182] Fix | Delete
/**
[183] Fix | Delete
* Add payment log.
[184] Fix | Delete
*
[185] Fix | Delete
* @since 1.8.4
[186] Fix | Delete
*
[187] Fix | Delete
* @param int $payment_id Payment ID.
[188] Fix | Delete
* @param string $content Log content.
[189] Fix | Delete
*
[190] Fix | Delete
* @return bool
[191] Fix | Delete
*/
[192] Fix | Delete
public function add_log( $payment_id, $content ) {
[193] Fix | Delete
[194] Fix | Delete
return (bool) $this->add(
[195] Fix | Delete
[
[196] Fix | Delete
'payment_id' => $payment_id,
[197] Fix | Delete
'meta_key' => 'log', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
[198] Fix | Delete
'meta_value' => wp_json_encode( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
[199] Fix | Delete
[
[200] Fix | Delete
'value' => wp_kses_post( $content ),
[201] Fix | Delete
'date' => gmdate( 'Y-m-d H:i:s' ),
[202] Fix | Delete
]
[203] Fix | Delete
),
[204] Fix | Delete
],
[205] Fix | Delete
$this->type
[206] Fix | Delete
);
[207] Fix | Delete
}
[208] Fix | Delete
[209] Fix | Delete
/**
[210] Fix | Delete
* Get single payment meta.
[211] Fix | Delete
*
[212] Fix | Delete
* @since 1.8.2
[213] Fix | Delete
*
[214] Fix | Delete
* @param int $payment_id Payment ID.
[215] Fix | Delete
* @param string|null $meta_key Payment meta to be retrieved.
[216] Fix | Delete
*
[217] Fix | Delete
* @return mixed Meta value.
[218] Fix | Delete
*/
[219] Fix | Delete
public function get_single( $payment_id, $meta_key ) {
[220] Fix | Delete
[221] Fix | Delete
global $wpdb;
[222] Fix | Delete
[223] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[224] Fix | Delete
$meta_value = $wpdb->get_var(
[225] Fix | Delete
$wpdb->prepare(
[226] Fix | Delete
"SELECT meta_value FROM $this->table_name
[227] Fix | Delete
WHERE payment_id = %d AND meta_key = %s ORDER BY id DESC LIMIT 1",
[228] Fix | Delete
$payment_id,
[229] Fix | Delete
$meta_key
[230] Fix | Delete
)
[231] Fix | Delete
);
[232] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[233] Fix | Delete
[234] Fix | Delete
return maybe_unserialize( $meta_value );
[235] Fix | Delete
}
[236] Fix | Delete
[237] Fix | Delete
/**
[238] Fix | Delete
* Get all payment meta.
[239] Fix | Delete
*
[240] Fix | Delete
* @since 1.8.2
[241] Fix | Delete
*
[242] Fix | Delete
* @param int $payment_id Payment ID.
[243] Fix | Delete
*
[244] Fix | Delete
* @return array|null
[245] Fix | Delete
*/
[246] Fix | Delete
public function get_all( $payment_id ) {
[247] Fix | Delete
[248] Fix | Delete
global $wpdb;
[249] Fix | Delete
[250] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[251] Fix | Delete
return $wpdb->get_results(
[252] Fix | Delete
$wpdb->prepare(
[253] Fix | Delete
"SELECT meta_key, meta_value as value FROM $this->table_name
[254] Fix | Delete
WHERE payment_id = %d ORDER BY id DESC",
[255] Fix | Delete
$payment_id
[256] Fix | Delete
),
[257] Fix | Delete
OBJECT_K
[258] Fix | Delete
);
[259] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[260] Fix | Delete
}
[261] Fix | Delete
[262] Fix | Delete
/**
[263] Fix | Delete
* Retrieve all rows based on meta_key value.
[264] Fix | Delete
*
[265] Fix | Delete
* @since 1.8.2
[266] Fix | Delete
*
[267] Fix | Delete
* @param string $meta_key Meta key value.
[268] Fix | Delete
* @param int $payment_id Payment ID.
[269] Fix | Delete
*
[270] Fix | Delete
* @return object|null
[271] Fix | Delete
*/
[272] Fix | Delete
public function get_all_by( $meta_key, $payment_id ) {
[273] Fix | Delete
[274] Fix | Delete
global $wpdb;
[275] Fix | Delete
[276] Fix | Delete
if ( empty( $meta_key ) ) {
[277] Fix | Delete
return null;
[278] Fix | Delete
}
[279] Fix | Delete
[280] Fix | Delete
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
[281] Fix | Delete
return $wpdb->get_results(
[282] Fix | Delete
$wpdb->prepare(
[283] Fix | Delete
"SELECT meta_value as value FROM $this->table_name WHERE payment_id = %d AND meta_key = %s ORDER BY id DESC", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[284] Fix | Delete
$payment_id,
[285] Fix | Delete
$meta_key
[286] Fix | Delete
),
[287] Fix | Delete
ARRAY_A
[288] Fix | Delete
);
[289] Fix | Delete
}
[290] Fix | Delete
[291] Fix | Delete
/**
[292] Fix | Delete
* Check if there are valid entries with a specific meta key.
[293] Fix | Delete
*
[294] Fix | Delete
* @since 1.8.4
[295] Fix | Delete
*
[296] Fix | Delete
* @param string $meta_key The meta key to check.
[297] Fix | Delete
*
[298] Fix | Delete
* @return bool
[299] Fix | Delete
*/
[300] Fix | Delete
public function is_valid_meta_by_meta_key( $meta_key ) {
[301] Fix | Delete
[302] Fix | Delete
// Check if the meta key is empty and return false.
[303] Fix | Delete
if ( empty( $meta_key ) ) {
[304] Fix | Delete
return false;
[305] Fix | Delete
}
[306] Fix | Delete
[307] Fix | Delete
// Retrieve the global database instance.
[308] Fix | Delete
global $wpdb;
[309] Fix | Delete
[310] Fix | Delete
$payment_handler = wpforms()->obj( 'payment' );
[311] Fix | Delete
$payment_table_name = $payment_handler->table_name;
[312] Fix | Delete
$secondary_where_clause = $payment_handler->add_secondary_where_conditions();
[313] Fix | Delete
[314] Fix | Delete
// Prepare and execute the SQL query to check if there are valid entries with the given meta key.
[315] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[316] Fix | Delete
return (bool) $wpdb->get_var(
[317] Fix | Delete
$wpdb->prepare(
[318] Fix | Delete
"SELECT 1 FROM {$this->table_name} AS pm
[319] Fix | Delete
WHERE meta_key = %s AND meta_value IS NOT NULL
[320] Fix | Delete
AND EXISTS (SELECT 1 FROM {$payment_table_name} AS p WHERE p.id = pm.payment_id {$secondary_where_clause})
[321] Fix | Delete
LIMIT 1",
[322] Fix | Delete
$meta_key
[323] Fix | Delete
)
[324] Fix | Delete
);
[325] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
[326] Fix | Delete
}
[327] Fix | Delete
[328] Fix | Delete
/**
[329] Fix | Delete
* Check if the given meta key and value exist in the payment meta table.
[330] Fix | Delete
*
[331] Fix | Delete
* @since 1.8.4
[332] Fix | Delete
*
[333] Fix | Delete
* @param string $meta_key Meta key value.
[334] Fix | Delete
* @param string $meta_value Meta value.
[335] Fix | Delete
*
[336] Fix | Delete
* @return bool
[337] Fix | Delete
*/
[338] Fix | Delete
public function is_valid_meta( $meta_key, $meta_value ) {
[339] Fix | Delete
[340] Fix | Delete
// Check if the meta key or value is empty and return false.
[341] Fix | Delete
if ( empty( $meta_key ) || empty( $meta_value ) ) {
[342] Fix | Delete
return false;
[343] Fix | Delete
}
[344] Fix | Delete
[345] Fix | Delete
// Retrieve the global database instance.
[346] Fix | Delete
global $wpdb;
[347] Fix | Delete
[348] Fix | Delete
// Prepare and execute the SQL query to check if the given meta key and value exist in the payment meta table.
[349] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[350] Fix | Delete
return (bool) $wpdb->get_var(
[351] Fix | Delete
$wpdb->prepare(
[352] Fix | Delete
"SELECT EXISTS( SELECT 1 FROM {$this->table_name} WHERE meta_key = %s AND meta_value = %s )",
[353] Fix | Delete
$meta_key,
[354] Fix | Delete
$meta_value
[355] Fix | Delete
)
[356] Fix | Delete
);
[357] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[358] Fix | Delete
}
[359] Fix | Delete
[360] Fix | Delete
/**
[361] Fix | Delete
* Retrieve payment meta data by given meta key and value.
[362] Fix | Delete
*
[363] Fix | Delete
* @since 1.8.4
[364] Fix | Delete
*
[365] Fix | Delete
* @param string $meta_key Meta key value.
[366] Fix | Delete
* @param string $meta_value Meta value.
[367] Fix | Delete
*
[368] Fix | Delete
* @return array
[369] Fix | Delete
*/
[370] Fix | Delete
public function get_all_by_meta( $meta_key, $meta_value ) {
[371] Fix | Delete
[372] Fix | Delete
// Check if the meta key or value is empty and return null.
[373] Fix | Delete
if ( empty( $meta_key ) || empty( $meta_value ) ) {
[374] Fix | Delete
return [];
[375] Fix | Delete
}
[376] Fix | Delete
[377] Fix | Delete
// Retrieve the global database instance.
[378] Fix | Delete
global $wpdb;
[379] Fix | Delete
[380] Fix | Delete
// Prepare and execute the SQL query to retrieve payment meta data based on the given meta key and value.
[381] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[382] Fix | Delete
return $wpdb->get_results(
[383] Fix | Delete
$wpdb->prepare(
[384] Fix | Delete
"SELECT meta_key, meta_value AS value FROM {$this->table_name}
[385] Fix | Delete
WHERE payment_id = ( SELECT payment_id FROM {$this->table_name}
[386] Fix | Delete
WHERE meta_key = %s AND meta_value = %s LIMIT 1 )",
[387] Fix | Delete
$meta_key,
[388] Fix | Delete
$meta_value
[389] Fix | Delete
),
[390] Fix | Delete
OBJECT_K
[391] Fix | Delete
);
[392] Fix | Delete
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[393] Fix | Delete
}
[394] Fix | Delete
[395] Fix | Delete
/**
[396] Fix | Delete
* Get row from the payment meta table for given payment id and meta key.
[397] Fix | Delete
*
[398] Fix | Delete
* @since 1.8.4
[399] Fix | Delete
*
[400] Fix | Delete
* @param string $meta_key Meta key value.
[401] Fix | Delete
* @param int $payment_id Payment ID.
[402] Fix | Delete
*
[403] Fix | Delete
* @return object|null
[404] Fix | Delete
*/
[405] Fix | Delete
public function get_last_by( $meta_key, $payment_id ) {
[406] Fix | Delete
[407] Fix | Delete
global $wpdb;
[408] Fix | Delete
[409] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.SlowDBQuery.slow_db_query_meta_key
[410] Fix | Delete
return $wpdb->get_row(
[411] Fix | Delete
$wpdb->prepare(
[412] Fix | Delete
"SELECT * FROM $this->table_name
[413] Fix | Delete
WHERE payment_id = %d AND meta_key = %s
[414] Fix | Delete
ORDER BY id DESC LIMIT 1",
[415] Fix | Delete
$payment_id,
[416] Fix | Delete
$meta_key
[417] Fix | Delete
)
[418] Fix | Delete
);
[419] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.SlowDBQuery.slow_db_query_meta_key
[420] Fix | Delete
}
[421] Fix | Delete
}
[422] Fix | Delete
[423] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function