VariationOptions.php
2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace Wpae\App\Service\VariationOptions;
use Wpae\Pro\Filtering\FilteringCPT;
class VariationOptions implements VariationOptionsInterface
{
public function getQueryWhere($wpdb, $where, $join, $closeBracket = false)
{
return $this->defaultQuery($wpdb, $where, $join, $closeBracket);
}
public function preProcessPost(\WP_Post $entry)
{
return $entry;
}
/**
* @param $wpdb
* @param $where
* @param $join
* @param $closeBracket
* @return string
*
* TODO: Remove $closeBracket flag
*/
protected function defaultQuery($wpdb, $where, $join, $closeBracket)
{
$langQuery = '';
if($this->isLanguageFilterEnabled()) {
$langQuery .= $wpdb->prepare(" AND t.language_code = %s ", \XmlExportEngine::$exportOptions['wpml_lang']);
}
if($closeBracket) {
$sql = " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
LEFT OUTER JOIN $wpdb->posts r
ON o.post_parent = r.ID
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation'))
OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash'
AND $wpdb->posts.post_parent IN (
SELECT DISTINCT $wpdb->posts.ID
FROM $wpdb->posts $join
WHERE $where
)
".$this->getVariationsWhere($where, $join)."
)";
} else {
$sql = " AND $wpdb->posts.post_type = 'product' " . $langQuery . " AND $wpdb->posts.ID NOT IN (SELECT o.ID FROM $wpdb->posts o
LEFT OUTER JOIN $wpdb->posts r
ON o.post_parent = r.ID
WHERE r.post_status = 'trash' AND o.post_type = 'product_variation')
OR ($wpdb->posts.post_type = 'product_variation' AND $wpdb->posts.post_status <> 'trash'
AND $wpdb->posts.post_parent IN (
SELECT DISTINCT $wpdb->posts.ID
FROM $wpdb->posts $join
WHERE $where
)
".$this->getVariationsWhere($where, $join)."
)";
}
return $sql;
}
/**
* @return bool
*/
private function isLanguageFilterEnabled()
{
return class_exists('SitePress') &&
!empty(\XmlExportEngine::$exportOptions['wpml_lang']) &&
(\XmlExportEngine::$exportOptions['wpml_lang'] !== 'all');
}
}