|
1
|
|
|
<?php if ( !defined( 'ABSPATH' ) ) exit; |
|
2
|
|
|
/** |
|
3
|
|
|
* Fichier du controleur des metaboxes pour l'administration des clients dans wpshop / Controller file for managing metaboxes into customer administration interface |
|
4
|
|
|
* |
|
5
|
|
|
* @author Eoxia developpement team <[email protected]> |
|
6
|
|
|
* @version 1.0 |
|
7
|
|
|
*/ |
|
8
|
|
|
|
|
9
|
|
|
/** |
|
10
|
|
|
* Classe du controleur des fournisseurs dans wpshop / Controller class for wpshop provider |
|
11
|
|
|
* |
|
12
|
|
|
* @author Eoxia developpement team <[email protected]> |
|
13
|
|
|
* @version 1.0 |
|
14
|
|
|
*/ |
|
15
|
|
|
class wps_provider_ctr { |
|
16
|
|
|
// WORDPRESS |
|
17
|
|
|
public function __construct() { |
|
18
|
|
|
add_action( 'save_post', array( $this, 'save_post' ), 10, 3 ); |
|
19
|
|
|
add_action( 'add_meta_boxes_' . WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS, array( $this, 'add_meta_box' ) ); |
|
20
|
|
|
} |
|
21
|
|
|
public function add_meta_box( $third ) { |
|
|
|
|
|
|
22
|
|
|
/*$is_provider = $this->read( $third->ID ); |
|
23
|
|
|
if( isset( $is_provider ) ) { |
|
24
|
|
|
add_meta_box( 'provider_products', __( 'Provider\'s products' ), array( $this, 'provider_products_box' ), WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS, 'normal', 'low', $third ); |
|
25
|
|
|
}*/ |
|
26
|
|
|
} |
|
27
|
|
|
public function save_post( $post_id, $post, $update ) { |
|
|
|
|
|
|
28
|
|
|
if( wp_is_post_revision( $post_id ) || $post->post_type != WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS ) |
|
29
|
|
|
return; |
|
30
|
|
|
|
|
31
|
|
|
$wps_provider_product = !empty( $_REQUEST['wps_provider_product'] ) ? (array)$_REQUEST['wps_provider_product'] : array(); |
|
32
|
|
|
$is_provider = $this->read( $post_id ); |
|
33
|
|
|
if( isset( $is_provider ) && !empty( $wps_provider_product ) ) { |
|
34
|
|
|
foreach( $wps_provider_product as $product_id => $product ) { |
|
35
|
|
|
switch( $product['special_provider'] ) { |
|
36
|
|
|
case 'update': |
|
37
|
|
|
$product['ID'] = $product_id; |
|
38
|
|
|
$this->update_product( $product ); |
|
39
|
|
|
break; |
|
40
|
|
|
case 'delete': |
|
41
|
|
|
$this->delete_product( $product_id ); |
|
42
|
|
|
break; |
|
43
|
|
|
} |
|
44
|
|
|
} |
|
45
|
|
|
} |
|
46
|
|
|
} |
|
47
|
|
|
public function provider_products_box( $third ) { |
|
48
|
|
|
global $wpdb; |
|
49
|
|
|
foreach( $this->read_product( $third->ID ) as $post ) { |
|
50
|
|
|
$attributes_display = ''; |
|
51
|
|
|
$product_entity_id = wpshop_entities::get_entity_identifier_from_code( WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT ); |
|
52
|
|
|
$query = $wpdb->prepare( 'SELECT * FROM '. WPSHOP_DBT_ATTRIBUTE . ' WHERE entity_id = %d AND is_used_in_quick_add_form = %s AND status = %s', $product_entity_id, 'yes', 'valid' ); |
|
53
|
|
|
$attributes = $wpdb->get_results( $query, ARRAY_A ); |
|
54
|
|
|
if( !empty($attributes) ) { |
|
55
|
|
|
foreach( $attributes as $attribute_id => $att_def ) { |
|
56
|
|
|
$current_value = wpshop_attributes::getAttributeValueForEntityInSet( $att_def['data_type'], $att_def['id'], $product_entity_id, $post->ID ); |
|
57
|
|
|
$output_specs = array( |
|
58
|
|
|
'page_code' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, |
|
59
|
|
|
'element_identifier' => $post->ID, |
|
60
|
|
|
'field_id' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT.'_'.$post->ID. '_', |
|
61
|
|
|
'current_value' => ( !empty($current_value->value) ? $current_value->value : '' ) |
|
62
|
|
|
); |
|
63
|
|
|
$att = wpshop_attributes::display_attribute( $att_def['code'], 'admin', $output_specs ); |
|
64
|
|
|
ob_start(); |
|
65
|
|
|
require( wpshop_tools::get_template_part( WPS_ACCOUNT_DIR, WPS_ACCOUNT_PATH . WPS_ACCOUNT_DIR . '/templates/', 'backend', 'provider_products/product_provider_attribute' ) ); |
|
66
|
|
|
$attributes_display .= ob_get_contents(); |
|
67
|
|
|
ob_end_clean(); |
|
68
|
|
|
} |
|
69
|
|
|
} |
|
70
|
|
|
require( wpshop_tools::get_template_part( WPS_ACCOUNT_DIR, WPS_ACCOUNT_PATH . WPS_ACCOUNT_DIR . '/templates/', 'backend', 'provider_products/product_provider' ) ); |
|
71
|
|
|
} |
|
72
|
|
|
} |
|
73
|
|
|
// PROVIDER |
|
74
|
|
|
private $id_attr = null; |
|
75
|
|
|
private $value_attr = null; |
|
76
|
|
|
private $entity_attr = null; |
|
77
|
|
|
private function get_entity_attr() { |
|
78
|
|
|
$this->entity_attr = wpshop_entities::get_entity_identifier_from_code( WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS ); |
|
79
|
|
|
} |
|
80
|
|
|
private function get_id_attr() { |
|
81
|
|
|
if( is_null( $this->id_attr ) ) { |
|
82
|
|
|
global $wpdb; |
|
83
|
|
|
$query = $wpdb->prepare( 'SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE . ' WHERE code = %s AND entity_id = %d', 'is_provider', $this->get_entity_attr() ); |
|
84
|
|
|
$this->id_attr = $wpdb->get_var( $query ); |
|
85
|
|
|
} |
|
86
|
|
|
return $this->id_attr; |
|
87
|
|
|
} |
|
88
|
|
|
private function get_value_attr() { |
|
89
|
|
|
if( is_null( $this->value_attr ) ) { |
|
90
|
|
|
global $wpdb; |
|
91
|
|
|
$query = $wpdb->prepare( 'SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE attribute_id = %d AND LOWER( value ) = %s', $this->get_id_attr(), strtolower( __( 'yes', 'wpshop' ) ) ); |
|
92
|
|
|
$this->value_attr = $wpdb->get_var( $query ); |
|
93
|
|
|
} |
|
94
|
|
|
return $this->value_attr; |
|
95
|
|
|
} |
|
96
|
|
|
public function read( $args = array() ) { |
|
97
|
|
|
global $wpdb; |
|
98
|
|
|
if( is_array( $args ) ) { |
|
99
|
|
|
$args['post_type'] = WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS; |
|
100
|
|
|
if( isset( $args['posts_per_page'] ) ) { |
|
101
|
|
|
$args['posts_per_page'] = -1; |
|
102
|
|
|
} |
|
103
|
|
|
$query = $wpdb->prepare( 'SELECT entity_id FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_INTEGER . ' WHERE attribute_id = %d AND value = %d', $this->get_id_attr(), $this->get_value_attr() ); |
|
104
|
|
|
$args['post__in'] = $wpdb->get_col( $query ); |
|
105
|
|
|
$query = new WP_Query( $args ); |
|
106
|
|
|
$return = $query->get_posts(); |
|
107
|
|
|
} elseif( is_numeric( $args ) ) { |
|
108
|
|
|
$query = $wpdb->prepare( 'SELECT value_id FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_INTEGER . ' WHERE entity_id = %d AND attribute_id = %d AND value = %d', $args, $this->get_id_attr(), $this->get_value_attr() ); |
|
109
|
|
|
$id = $wpdb->get_var( $query ); |
|
110
|
|
|
$exist = (bool) isset( $id ); |
|
111
|
|
|
if( $exist ) { |
|
112
|
|
|
$return = get_post( $args ); |
|
113
|
|
|
} else { |
|
114
|
|
|
$return = null; |
|
115
|
|
|
} |
|
116
|
|
|
} |
|
117
|
|
|
return $return; |
|
|
|
|
|
|
118
|
|
|
} |
|
119
|
|
|
// CRUD PROVIDER'S PRODUCTS |
|
120
|
|
|
public function create_product( $id_provider = 0, $product ) { |
|
121
|
|
|
if( is_array( $product ) || is_object( $product ) ) { |
|
122
|
|
|
if( is_array( $product ) ) { |
|
123
|
|
|
$data_to_save = $product[WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute']; |
|
124
|
|
|
unset( $product[WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute'] ); |
|
125
|
|
View Code Duplication |
} elseif( is_object( $product ) ) { |
|
|
|
|
|
|
126
|
|
|
$var = WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute'; |
|
127
|
|
|
$data_to_save = $product->$var; |
|
128
|
|
|
unset( $product->$var ); |
|
129
|
|
|
} |
|
130
|
|
|
$product_class = new wpshop_products(); |
|
131
|
|
|
$data_to_save = apply_filters( 'create_provider_product_data_to_save', array( WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute' => $data_to_save, 'action' => 'autosave' ) ); |
|
|
|
|
|
|
132
|
|
|
$product['post_status'] = 'pending'; |
|
133
|
|
|
$product['post_type'] = WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT; |
|
134
|
|
|
if( !isset( $product['post_title'] ) ) { |
|
135
|
|
|
$product['post_title'] = __( 'New product', 'wpshop' ); |
|
136
|
|
|
} |
|
137
|
|
|
$product_id = wp_insert_post( $product ); |
|
138
|
|
|
if( $id_provider != 0 ) { |
|
139
|
|
|
update_post_meta( $product_id, WPSHOP_PRODUCT_PROVIDER, array( (string) $id_provider ) ); |
|
140
|
|
|
} |
|
141
|
|
|
$data_to_save['post_ID'] = $product_id; |
|
142
|
|
|
$product_class->save_product_custom_informations( $product_id, $data_to_save ); |
|
143
|
|
|
return $product_id; |
|
144
|
|
|
} |
|
145
|
|
|
} |
|
146
|
|
|
public function read_product( $id_provider = 0, $args = array() ) { |
|
147
|
|
|
$args['post_type'] = WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT; |
|
148
|
|
|
$args['post_status'] = array( 'pending', 'publish', 'draft', 'private' ); |
|
149
|
|
|
$args['meta_key'] = WPSHOP_PRODUCT_PROVIDER; |
|
150
|
|
|
if( !isset( $args['posts_per_page'] ) ) { |
|
151
|
|
|
$args['posts_per_page'] = -1; |
|
152
|
|
|
} |
|
153
|
|
|
if( is_numeric( $id_provider ) && $id_provider != 0 ) { |
|
154
|
|
|
$args['meta_value'] = serialize( (string) $id_provider ); |
|
155
|
|
|
$args['meta_compare'] = 'LIKE'; |
|
156
|
|
|
} |
|
157
|
|
|
$query = new WP_Query( $args ); |
|
158
|
|
|
return $query->get_posts(); |
|
159
|
|
|
} |
|
160
|
|
|
public function update_product( $product ) { |
|
161
|
|
|
if( is_array( $product ) || is_object( $product ) ) { |
|
162
|
|
|
if( is_array( $product ) ) { |
|
163
|
|
|
$product_id = $product['ID']; |
|
164
|
|
|
$data_to_save = $product[WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute']; |
|
165
|
|
|
unset( $product[WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute'] ); |
|
166
|
|
View Code Duplication |
} elseif( is_object( $product ) ) { |
|
|
|
|
|
|
167
|
|
|
$product_id = $product->ID; |
|
168
|
|
|
$var = WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute'; |
|
169
|
|
|
$data_to_save = $product->$var; |
|
170
|
|
|
unset( $product->$var ); |
|
171
|
|
|
} |
|
172
|
|
|
$product_class = new wpshop_products(); |
|
173
|
|
|
$data_to_save = apply_filters( 'update_provider_product_data_to_save', array( 'post_ID' => $product_id, 'action' => 'autosave', WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute' => $data_to_save ) ); |
|
|
|
|
|
|
174
|
|
|
$product_class->save_product_custom_informations( $product_id, $data_to_save ); |
|
175
|
|
|
wp_update_post( $product ); |
|
176
|
|
|
} |
|
177
|
|
|
} |
|
178
|
|
|
public function delete_product( $args ) { |
|
179
|
|
|
if( is_numeric( $args ) || is_object( $args ) ) { |
|
180
|
|
|
wp_trash_post( $args ); |
|
181
|
|
|
} |
|
182
|
|
|
} |
|
183
|
|
|
} |
|
184
|
|
|
|
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.