Completed
Branch 2.0.0 (814c19)
by Jimmy
03:05
created

Object_Class   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 188
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 188
rs 10
c 0
b 0
f 0
wmc 14
lcom 1
cbo 2
1
<?php
2
/**
3
 * Gestion des objets ( posts / terms / comments / users )
4
 *
5
 * @author Eoxia <[email protected]>
6
 * @since 1.0.0
7
 * @version 1.0.0
8
 * @copyright 2015-2018
9
 * @package EO_Framework\EO_Model\Class
10
 */
11
12
namespace eoxia;
13
14
if ( ! defined( 'ABSPATH' ) ) {
15
	exit;
16
}
17
18
if ( ! class_exists( '\eoxia\Object_Class' ) ) {
19
20
	/**
21
	 * Gestion des posts (POST, PUT, GET, DELETE)
22
	 */
23
	class Object_Class extends Rest_Class {
24
25
		/**
26
		 * Le nom du modèle pour l'objet actuel.
27
		 *
28
		 * @var string
29
		 */
30
		protected $model_name = '';
31
32
		/**
33
		 * Le type de l'objet actuel.
34
		 *
35
		 * @var string
36
		 */
37
		protected $type = '';
38
39
		/**
40
		 * Le slug de base de l'objet actuel.
41
		 *
42
		 * @var string
43
		 */
44
		protected $base = '';
45
46
		/**
47
		 * La clé principale pour la méta de l'objet.
48
		 *
49
		 * @var string
50
		 */
51
		protected $meta_key = '';
52
53
		/**
54
		 * Utiles pour récupérer la clé unique
55
		 *
56
		 * @var string
57
		 */
58
		protected $identifier_helper = '';
59
60
		/**
61
		 * Utile uniquement pour DigiRisk.
62
		 *
63
		 * @since 1.0.0
64
		 * @version 1.0.0
65
		 *
66
		 * @return string L'identifiant des commentaires pour DigiRisk.
67
		 */
68
		public function get_identifier_helper() {
69
			return $this->identifier_helper;
70
		}
71
72
		/**
73
		 * Permet de récupérer le schéma avec les données du modèle par défault.
74
		 *
75
		 * @since 0.1.0
76
		 * @version 1.0.0
77
		 *
78
		 * @return Object
79
		 */
80
		public function get_schema() {
81
			$model_name = $this->model_name;
82
			$model      = new $model_name( array(), null );
83
			return $model->get_model();
84
		}
85
86
		/**
87
		 * Permet de changer le modèle en dur.
88
		 *
89
		 * @param string $model_name Le nom du modèle.
90
		 *
91
		 * @since 1.0.0
92
		 * @version 1.3.6.0
93
		 */
94
		public function set_model( $model_name ) {
95
			$this->model_name = $model_name;
96
		}
97
98
		/**
99
		 * Retourne le post type.
100
		 *
101
		 * @since 1.0.0
102
		 * @version 1.0.0
103
		 *
104
		 * @return string Le type de l'objet actuel
105
		 */
106
		public function get_type() {
107
			return $this->type;
108
		}
109
110
		/**
111
		 * Retourne le nom de la méta générale de l'objet actuel.
112
		 *
113
		 * @since 1.0.0
114
		 * @version 1.0.0
115
		 *
116
		 * @return string Le nom de la méta de l'objet actuel
117
		 */
118
		public function get_meta_key() {
119
			return $this->meta_key;
120
		}
121
122
		/**
123
		 * Appelle la méthode update puis renvoies l'objet mis à jour ou créé.
124
		 *
125
		 * @since 0.1.0
126
		 * @version 1.0.0
127
		 *
128
		 * @param Array $data Les données.
129
		 *
130
		 * @return Object     L'objet avec toutes ses données.
131
		 */
132
		public function create( $data ) {
133
			$object = $this->update( $data );
134
135
			$parent_class = get_parent_class( $object );
136
137
			// Utiles seulement pour les posts et les comments, car les users et categories on déjà toutes leurs données à ce moment là.
138
			if ( in_array( $parent_class, array( 'eoxia\Comment_Model', 'eoxia\Post_Model' ) ) ) {
139
				$args = array(
140
					'id' => $object->data['id'],
141
				);
142
143
				$args['status'] = $object->data['status'];
144
145
				$object = $this->get( $args, true );
146
			}
147
148
			return $object;
149
		}
150
151
		/**
152
		 * Factorisation de la fonction de construction des objets après un GET.
153
		 *
154
		 * @param array  $object_list     La liste des objets récupérés.
155
		 * @param string $wp_type         Le type de l'élément actuel en cours de traitement.
156
		 * @param string $meta_key        La clé de la métadonnée principale que l'on a défini pour l'objet.
157
		 * @param string $object_id_field la clé primaire permettant d'identifier l'objet.
158
		 *
159
		 * @return array                  La liste des objets construits selon le modèle défini.
160
		 */
161
		public function prepare_items_for_response( $object_list, $wp_type, $meta_key, $object_id_field ) {
162
			$model_name = $this->model_name;
163
164
			if ( ! empty( $object_list ) ) {
165
				foreach ( $object_list as $key => $object ) {
166
					$object  = (array) $object;
167
					$args_cb = array(
168
						'wp_type'      => $wp_type,
169
						'element_type' => $this->get_type(),
170
						'model_name'   => $model_name,
171
					);
172
173
					// Si $object[ $object_id_field ] existe, on récupère les meta.
174
					if ( ! empty( $object[ $object_id_field ] ) ) {
175
						$list_meta = call_user_func( 'get_' . $wp_type . '_meta', $object[ $object_id_field ] );
176
						foreach ( $list_meta as &$meta ) {
177
							$meta = array_shift( $meta );
178
							$meta = JSON_Util::g()->decode( $meta );
179
						}
180
181
						$object = apply_filters( 'eo_model_' . $wp_type . '_after_get_meta', $object, array_merge( $args_cb, array( 'list_meta' => $list_meta ) ) );
182
						$object = apply_filters( 'eo_model_' . $this->get_type() . '_after_get_meta', $object, array_merge( $args_cb, array( 'list_meta' => $list_meta ) ) );
183
184
						$object = array_merge( $object, $list_meta );
185
186
						if ( ! empty( $object[ $meta_key ] ) ) {
187
							$data_json = JSON_Util::g()->decode( $object[ $meta_key ] );
188
							if ( is_array( $data_json ) ) {
189
								$object = array_merge( $object, $data_json );
190
							} else {
191
								$object[ $meta_key ] = $data_json;
192
							}
193
							unset( $object[ $meta_key ] );
194
						}
195
					}
196
197
					// Construction de l'objet selon les données reçues.
198
					// Soit un objet vide si l'argument schema est défini. Soit l'objet avec ses données.
199
					$object_list[ $key ] = new $model_name( $object, 'get' );
200
201
					// On donne la possibilité de lancer des actions sur l'élément actuel une fois qu'il est complément construit.
202
					$object_list[ $key ] = apply_filters( 'eo_model_' . $wp_type . '_after_get', $object_list[ $key ], $args_cb );
203
					$object_list[ $key ] = apply_filters( 'eo_model_' . $this->get_type() . '_after_get', $object_list[ $key ], $args_cb );
204
				} // End foreach().
205
			}
206
207
			return $object_list;
208
		}
209
210
	}
211
212
}
213