File: /var/www/vhosts/uyarreklam.com.tr/httpdocs/Table.tar
AttributeMappingRulesTable.php 0000644 00000002516 15154674264 0012541 0 ustar 00 <?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
defined( 'ABSPATH' ) || exit;
/**
* Definition class for the Attribute Mapping Rules Table
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\DB\Tables
*/
class AttributeMappingRulesTable extends Table {
/**
* Get the schema for the DB.
*
* This should be a SQL string for creating the DB table.
*
* @return string
*/
protected function get_install_query(): string {
return "
CREATE TABLE `{$this->get_sql_safe_name()}` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`attribute` varchar(255) NOT NULL,
`source` varchar(100) NOT NULL,
`category_condition_type` varchar(10) NOT NULL,
`categories` text NOT NULL,
PRIMARY KEY `id` (`id`)
) {$this->get_collation()};
";
}
/**
* Get the un-prefixed (raw) table name.
*
* @return string
*/
public static function get_raw_name(): string {
return 'attribute_mapping_rules';
}
/**
* Get the columns for the table.
*
* @return array
*/
public function get_columns(): array {
return [
'id' => true,
'attribute' => true,
'source' => true,
'category_condition_type' => true,
'categories' => true,
];
}
}
BudgetRecommendationTable.php 0000644 00000007061 15154674264 0012346 0 ustar 00 <?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
defined( 'ABSPATH' ) || exit;
/**
* Class BudgetRecommendationTable
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\DB\Tables
*/
class BudgetRecommendationTable extends Table {
/**
* Whether the initial data has been loaded
*
* @var bool
*/
public $has_loaded_initial_data = false;
/**
* Get the schema for the DB.
*
* This should be a SQL string for creating the DB table.
*
* @return string
*/
protected function get_install_query(): string {
return "
CREATE TABLE `{$this->get_sql_safe_name()}` (
id bigint(20) NOT NULL AUTO_INCREMENT,
currency varchar(3) NOT NULL,
country varchar(2) NOT NULL,
daily_budget int(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY country_currency (country, currency)
) {$this->get_collation()};
";
}
/**
* Install the Database table.
*
* Add data if there is none.
*/
public function install(): void {
parent::install();
// Load the data if the table is empty.
// phpcs:ignore WordPress.DB.PreparedSQL
$result = $this->wpdb->get_row( "SELECT COUNT(*) AS count FROM `{$this->get_sql_safe_name()}`" );
if ( empty( $result->count ) ) {
$this->load_initial_data();
}
}
/**
* Reload initial data.
*
* @return void
*/
public function reload_data(): void {
if ( $this->exists() && ! $this->has_loaded_initial_data ) {
$this->truncate();
$this->load_initial_data();
}
}
/**
* Get the un-prefixed (raw) table name.
*
* @return string
*/
public static function get_raw_name(): string {
return 'budget_recommendations';
}
/**
* Get the columns for the table.
*
* @return array
*/
public function get_columns(): array {
return [
'id' => true,
'currency' => true,
'country' => true,
'daily_budget' => true,
];
}
/**
* Load packaged recommendation data on the first install of GLA.
*
* Inserts 500 records at a time.
*/
private function load_initial_data(): void {
$path = $this->get_root_dir() . '/data/budget-recommendations.csv';
$chunk_size = 500;
if ( file_exists( $path ) ) {
$csv = array_map(
function ( $row ) {
return str_getcsv( $row, ',', '"', '\\' );
},
file( $path )
);
// Remove the headers
array_shift( $csv );
if ( empty( $csv ) ) {
return;
}
$values = [];
$placeholders = [];
// Build placeholders for each row, and add values to data array
foreach ( $csv as $row ) {
if ( empty( $row ) ) {
continue;
}
$row_placeholders = [];
foreach ( $row as $value ) {
$values[] = $value;
$row_placeholders[] = is_numeric( $value ) ? '%d' : '%s';
}
$placeholders[] = '(' . implode( ', ', $row_placeholders ) . ')';
if ( count( $placeholders ) >= $chunk_size ) {
$this->insert_chunk( $placeholders, $values );
$placeholders = [];
$values = [];
}
}
$this->insert_chunk( $placeholders, $values );
}
$this->has_loaded_initial_data = true;
}
/**
* Insert a chunk of budget recommendations
*
* @param string[] $placeholders
* @param array $values
*/
private function insert_chunk( array $placeholders, array $values ): void {
$sql = "INSERT INTO `{$this->get_sql_safe_name()}` (country,daily_budget,currency) VALUES\n";
$sql .= implode( ",\n", $placeholders );
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$this->wpdb->query( $this->wpdb->prepare( $sql, $values ) );
}
}
MerchantIssueTable.php 0000644 00000005620 15154674264 0011020 0 ustar 00 <?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use DateTime;
defined( 'ABSPATH' ) || exit;
/**
* Class MerchantIssueTable
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\DB\Tables
*/
class MerchantIssueTable extends Table {
/**
* Get the schema for the DB.
*
* This should be a SQL string for creating the DB table.
*
* @return string
*/
protected function get_install_query(): string {
return "
CREATE TABLE `{$this->get_sql_safe_name()}` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`product_id` bigint(20) NOT NULL,
`issue` varchar(200) NOT NULL,
`code` varchar(100) NOT NULL,
`severity` varchar(20) NOT NULL DEFAULT 'warning',
`product` varchar(100) NOT NULL,
`action` text NOT NULL,
`action_url` varchar(1024) NOT NULL,
`applicable_countries` text NOT NULL,
`source` varchar(10) NOT NULL DEFAULT 'mc',
`type` varchar(10) NOT NULL DEFAULT 'product',
`created_at` datetime NOT NULL,
PRIMARY KEY `id` (`id`)
) {$this->get_collation()};
";
}
/**
* Get the un-prefixed (raw) table name.
*
* @return string
*/
public static function get_raw_name(): string {
return 'merchant_issues';
}
/**
* Delete stale issue records.
*
* @param DateTime $created_before Delete all records created before this.
*/
public function delete_stale( DateTime $created_before ): void {
$query = "DELETE FROM `{$this->get_sql_safe_name()}` WHERE `created_at` < '%s'";
$this->wpdb->query( $this->wpdb->prepare( $query, $created_before->format( 'Y-m-d H:i:s' ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL
}
/**
* Delete product issues for specific products and source.
*
* @param array $products_ids Array of product IDs to delete issues for.
* @param string $source The source of the issues. Default is 'mc'.
*/
public function delete_specific_product_issues( array $products_ids, string $source = 'mc' ): void {
if ( empty( $products_ids ) ) {
return;
}
$placeholder = '(' . implode( ',', array_fill( 0, count( $products_ids ), '%d' ) ) . ')';
$this->wpdb->query( $this->wpdb->prepare( "DELETE FROM `{$this->get_sql_safe_name()}` WHERE `product_id` IN {$placeholder} AND `source` = %s", array_merge( $products_ids, [ $source ] ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL
}
/**
* Get the columns for the table.
*
* @return array
*/
public function get_columns(): array {
return [
'id' => true,
'product_id' => true,
'code' => true,
'severity' => true,
'issue' => true,
'product' => true,
'action' => true,
'action_url' => true,
'applicable_countries' => true,
'source' => true,
'type' => true,
'created_at' => true,
];
}
}
ShippingRateTable.php 0000644 00000002347 15154674264 0010646 0 ustar 00 <?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
defined( 'ABSPATH' ) || exit;
/**
* Class ShippingRateTable
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\DB\Tables
*/
class ShippingRateTable extends Table {
/**
* Get the schema for the DB.
*
* This should be a SQL string for creating the DB table.
*
* @return string
*/
protected function get_install_query(): string {
return "
CREATE TABLE `{$this->get_sql_safe_name()}` (
id bigint(20) NOT NULL AUTO_INCREMENT,
country varchar(2) NOT NULL,
currency varchar(3) NOT NULL,
rate double NOT NULL default 0,
options text DEFAULT NULL,
PRIMARY KEY (id),
KEY country (country),
KEY currency (currency)
) {$this->get_collation()};
";
}
/**
* Get the un-prefixed (raw) table name.
*
* @return string
*/
public static function get_raw_name(): string {
return 'shipping_rates';
}
/**
* Get the columns for the table.
*
* @return array
*/
public function get_columns(): array {
return [
'id' => true,
'country' => true,
'currency' => true,
'rate' => true,
'options' => true,
];
}
}
ShippingTimeTable.php 0000644 00000002236 15154674264 0010646 0 ustar 00 <?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
use Automattic\WooCommerce\GoogleListingsAndAds\DB\Table;
defined( 'ABSPATH' ) || exit;
/**
* Class ShippingTimeTable
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\DB\Table
*/
class ShippingTimeTable extends Table {
/**
* Get the schema for the DB.
*
* This should be a SQL string for creating the DB table.
*
* @return string
*/
protected function get_install_query(): string {
return "
CREATE TABLE `{$this->get_sql_safe_name()}` (
id bigint(20) NOT NULL AUTO_INCREMENT,
country varchar(2) NOT NULL,
time bigint(20) NOT NULL default 0,
max_time bigint(20) NOT NULL default 0,
PRIMARY KEY (id),
KEY country (country)
) {$this->get_collation()};
";
}
/**
* Get the un-prefixed (raw) table name.
*
* @return string
*/
public static function get_raw_name(): string {
return 'shipping_times';
}
/**
* Get the columns for the table.
*
* @return array
*/
public function get_columns(): array {
return [
'id' => true,
'country' => true,
'time' => true,
'max_time' => true,
];
}
}