PluginProbe
Lasso Lite – Affiliate Link Manager & Product Displays / 150
Lasso Lite – Affiliate Link Manager & Product Displays v150
158 157 155 156 154 153 152 151 150 149 148 trunk 0.9.9 104 105 106 107 108 109 110 111 112 113 114 115 All 57 releases
simple-urls / models / class-amazon-products.php

class-amazon-products.php in Lasso Lite – Affiliate Link Manager & Product Displays 150, at models/class-amazon-products.php

166 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Models
4 *
5 * @package Models
6 */
7
8 namespace LassoLite\Models;
9
10 use LassoLite\Admin\Constant;
11
12 use LassoLite\Models\Url_Details;
13
14 /**
15 * Model
16 */
17 class Amazon_Products extends Model {
18 /**
19 * Table name
20 *
21 * @var string
22 */
23 protected $table = 'lasso_lite_amazon_products';
24
25 /**
26 * Columns of the table
27 *
28 * @var array
29 */
30 protected $columns = array(
31 'amazon_id',
32 'default_product_name',
33 'latest_price',
34 'base_url',
35 'monetized_url',
36
37 'default_image',
38 'out_of_stock',
39 'is_prime',
40 'currency',
41 'savings_amount',
42
43 'savings_percent',
44 'savings_basis',
45 'features',
46 'is_manual',
47 'last_updated',
48 );
49
50 /**
51 * Primary key of the table
52 *
53 * @var string
54 */
55 protected $primary_key = 'amazon_id';
56
57 /**
58 * Create table
59 */
60 public function create_table() {
61 $columns_sql = '
62 amazon_id varchar(20) NOT NULL,
63 default_product_name varchar(2000) NOT NULL,
64 latest_price varchar(32) NULL,
65 base_url varchar(2000) NOT NULL,
66 monetized_url varchar(2000) NULL,
67 default_image varchar(10000) NULL,
68 out_of_stock TINYINT(1) NULL DEFAULT 0,
69 is_prime TINYINT(1) NOT NULL DEFAULT 0,
70 currency VARCHAR(5) NOT NULL DEFAULT \'USD\',
71 savings_amount VARCHAR(10) NULL,
72 savings_percent INT(10) NULL,
73 savings_basis VARCHAR(10) NULL,
74 features TEXT NULL,
75 is_manual TINYINT(1) NOT NULL DEFAULT 0,
76 rating VARCHAR(10) NULL DEFAULT 0,
77 reviews INT(11) NULL DEFAULT 0,
78 last_updated datetime NOT NULL,
79 PRIMARY KEY (amazon_id)
80 ';
81 $sql = '
82 CREATE TABLE ' . $this->get_table_name() . ' (
83 ' . $columns_sql . '
84 ) ' . $this->get_charset_collate();
85
86 return $this->modify_table( $sql, $this->get_table_name() );
87 }
88
89 /**
90 * Count total products in wp_lasso_amazon_products table
91 */
92 public static function count_amazon_product_in_db() {
93 $amz_tbl = self::get_sql_query_amazon_products_need_to_be_updated();
94 $mysql = '
95 select count(amz_tbl.amazon_id) as count
96 from (' . $amz_tbl . ') as amz_tbl
97 ';
98
99 $result = Model::get_col( $mysql );
100
101 return intval( $result[0] ?? 0 );
102 }
103
104 /**
105 * Get mysql query to get amazon products need to be update pricing
106 */
107 public static function get_sql_query_amazon_products_need_to_be_updated() {
108 $now = gmdate( 'Y-m-d H:i:s', time() );
109 $posts = Model::get_wp_table_name( 'posts' );
110 $amazon_products = new Amazon_Products();
111 $url_details = new Url_Details();
112 $sql = '
113 SELECT
114 ap.*
115 FROM ' . $url_details->get_table_name() . ' AS ud
116 LEFT JOIN ' . $posts . ' AS p
117 ON ud.lasso_id = p.ID
118 LEFT JOIN ' . $amazon_products->get_table_name() . ' AS ap
119 ON ap.amazon_id = ud.product_id
120 WHERE p.post_type = %s
121 AND p.post_status = %s
122 AND ud.product_type = %s
123 AND ap.amazon_id IS NOT NULL
124 AND ap.last_updated < DATE_SUB(%s, INTERVAL 24 HOUR)
125 ORDER BY
126 ap.last_updated ASC
127 ';
128 $prepare = Model::prepare( $sql, Constant::LASSO_POST_TYPE, 'publish', 'amazon', $now );
129
130 return $prepare;
131 }
132
133 /**
134 * Get products in wp_lasso_amazon_products table
135 *
136 * @param int $limit Number of results. Default to 100.
137 */
138 public static function get_amazon_product_in_db( $limit = 100 ) {
139 $mysql = self::get_sql_query_amazon_products_need_to_be_updated();
140 $mysql .= '
141 LIMIT %d
142 ';
143 $prepare = Model::prepare( $mysql, $limit ); // phpcs:ignore
144
145 return Model::get_results( $prepare, ARRAY_A );
146 }
147
148 /**
149 * Update a field for an Amazon product
150 *
151 * @param string $amazon_id Amazon product id.
152 * @param string $field_name Field name.
153 * @param string $field_value Field value.
154 */
155 public function update_amazon_field( $amazon_id, $field_name, $field_value ) {
156 $sql = '
157 update ' . $this->get_table_name() . '
158 set `' . $field_name . '` = %s
159 where amazon_id = %s
160 ';
161 $prepare = Model::prepare( $sql, $field_value, $amazon_id ); // phpcs:ignore
162
163 return Model::query( $prepare ); // phpcs:ignore
164 }
165 }
166