wp_back/wp-content/plugins/ewww-image-optimizer/classes/class-ewwwdb.php
2024-05-20 15:37:46 +03:00

103 lines
3.0 KiB
PHP

<?php
/**
* Class file for EwwwDB
*
* EwwwDB contains methods for working with the ewwwio_images table.
*
* @link https://ewww.io
* @package EWWW_Image_Optimizer
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* DB class extension to for working with the ewwwio_images table.
*
* Provides functions needed to ensure that all data in the table is in utf8 format.
*
* @see wpdb
*/
class EwwwDB extends wpdb {
/**
* Ensures use of some variant of utf8 for interacting with the images table.
*/
public function init_charset() {
parent::init_charset();
if ( strpos( $this->charset, 'utf8' ) === false ) {
$this->charset = 'utf8';
}
}
/**
* Inserts multiple records into the table at once.
*
* Takes an associative array and creates a database record for each array item, using a single
* MySQL query. Column names are extracted from the key names of the first record.
*
* @param string $table Name of table to be used in INSERT statement.
* @param array $data Records to be inserted into table. Default none. Accepts an array of arrays,
* see example below.
* @param array $format List of formats for values in each record. Each sub-array should have the
* same number of items as $formats. Default '%s'. Accepts '%s', '%d', '%f'.
* @return int|false Number of rows affected or false on error.
*/
public function insert_multiple( $table, $data, $format ) {
if ( empty( $table ) || ! ewww_image_optimizer_iterable( $data ) || ! ewww_image_optimizer_iterable( $format ) ) {
return false;
}
/*
* Given a multi-dimensional array like so:
* array(
* [0] =>
* 'path' => '/some/image/path/here.jpg'
* 'gallery' => 'something'
* 'orig_size => 5678
* 'attachment_id => 2
* 'resize' => 'thumb'
* 'pending' => 1
* [1] =>
* 'path' => '/some/image/path/another.jpg'
* 'gallery' => 'something'
* 'orig_size => 1234
* 'attachment_id => 3
* 'resize' => 'full'
* 'pending' => 1
* )
*/
ewwwio_debug_message( 'we have records to store via ewwwdb' );
$multi_formats = array();
$values = array();
foreach ( $data as $record ) {
if ( ! ewww_image_optimizer_iterable( $record ) ) {
continue;
}
$record = $this->process_fields( $table, $record, $format );
if ( false === $record ) {
return false;
}
$formats = array();
foreach ( $record as $value ) {
if ( is_null( $value['value'] ) ) {
$formats[] = 'NULL';
continue;
}
$formats[] = $value['format'];
$values[] = $value['value'];
}
$multi_formats[] = '(' . implode( ',', $formats ) . ')';
}
$first = reset( $data );
$fields = '`' . implode( '`, `', array_keys( $first ) ) . '`';
$multi_formats = implode( ',', $multi_formats );
$this->check_current_query = false;
return $this->query( $this->prepare( "INSERT INTO `$table` ($fields) VALUES $multi_formats", $values ) );
}
}