103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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 ) );
 | |
| 	}
 | |
| }
 |