PluginProbe ʕ •ᴥ•ʔ
Advanced Custom Fields: Extended / 0.5
Advanced Custom Fields: Extended v0.5
0.9.2.7 0.9.2.6 0.9.2.5 0.8.6 0.8.6.1 0.8.6.3 0.8.6.5 0.8.6.6 0.8.6.7 0.8.6.8 0.8.6.9 0.8.7 0.8.7.1 0.8.7.2 0.8.7.3 0.8.7.4 0.8.7.5 0.8.7.6 0.8.8 0.8.8.1 0.8.8.10 0.8.8.11 0.8.8.2 0.8.8.3 0.8.8.4 0.8.8.5 0.8.8.6 0.8.8.7 0.8.8.8 0.8.8.9 0.8.9 0.8.9.1 0.8.9.2 0.8.9.3 0.8.9.4 0.8.9.5 0.9 0.9.0.1 0.9.0.2 0.9.0.3 0.9.0.4 0.9.0.5 0.9.0.6 0.9.0.7 0.9.0.8 0.9.0.9 0.9.1 0.9.1.1 0.9.2 0.9.2.1 0.9.2.2 0.9.2.3 0.9.2.4 trunk 0.5 0.5.1 0.5.2 0.5.2.1 0.5.2.3 0.5.5 0.5.5.1 0.5.8 0.5.8.1 0.6 0.6.0.1 0.6.0.2 0.6.1 0.6.3 0.6.5 0.6.7 0.6.7.2 0.7 0.7.0.3 0.7.5 0.7.5.5 0.7.8 0.7.9 0.7.9.3 0.7.9.4 0.7.9.9.8 0.7.9.9.9 0.8 0.8.1 0.8.2 0.8.3 0.8.3.1 0.8.4 0.8.4.1 0.8.4.5 0.8.4.6 0.8.5 0.8.5.5
acf-extended / includes / modules / autosync.php
acf-extended / includes / modules Last commit date
autosync.php 7 years ago
autosync.php
291 lines
1 <?php
2
3 if(!defined('ABSPATH'))
4 exit;
5
6 /**
7 * Auto Sync: Includes
8 */
9 $acfe_php = acf_get_setting('acfe_php');
10 $acfe_php_load = acf_get_setting('acfe_php_load');
11
12 if(!empty($acfe_php) && !empty($acfe_php_load)){
13 foreach($acfe_php_load as $path){
14 if(!is_readable($path))
15 continue;
16
17 acf_update_setting('acfe_php_found', true);
18
19 $files = glob($path . '/*.php');
20 if(empty($files))
21 continue;
22
23 foreach($files as $file){
24 require_once($file);
25 }
26
27 }
28 }
29
30 /**
31 * Auto Sync: Disable json
32 */
33 add_action('acf/update_field_group', 'acfe_autosync_json_update_field_group', 9);
34 function acfe_autosync_json_update_field_group($field_group){
35
36 // Validate
37 if(!acf_get_setting('json'))
38 return;
39
40 // Disable json sync for this field group
41 if(!acfe_has_field_group_autosync($field_group, 'json'))
42 add_filter('acf/settings/json', 'acfe_autosync_temp_disable_json');
43
44 }
45
46 /**
47 * Auto Sync: Re-enable json
48 */
49 add_action('acf/update_field_group', 'acfe_autosync_json_after_update_field_group', 11);
50 function acfe_autosync_json_after_update_field_group($field_group){
51
52 // Validate
53 if(!acf_get_setting('json'))
54 return;
55
56 remove_filter('acf/settings/json', 'acfe_autosync_temp_disable_json');
57
58 }
59
60 /**
61 * Auto Sync: Disable json (function)
62 */
63 function acfe_autosync_temp_disable_json(){
64 return false;
65 }
66
67 /**
68 * Auto Sync: PHP
69 */
70 add_action('acf/update_field_group', 'acfe_autosync_php_update_field_group');
71 function acfe_autosync_php_update_field_group($field_group){
72
73 // Validate
74 if(!acf_get_setting('acfe_php'))
75 return;
76
77 if(!acfe_has_field_group_autosync($field_group, 'php'))
78 return;
79
80 $field_group['fields'] = acf_get_fields($field_group);
81 acfe_autosync_write_php($field_group);
82
83 }
84
85 /**
86 * Auto Sync: Write PHP
87 */
88 function acfe_autosync_write_php($field_group){
89
90 $path = acf_get_setting('acfe_php_save');
91 if(empty($path))
92 return false;
93
94 // vars
95 $path = untrailingslashit($path);
96 $file = $field_group['key'] . '.php';
97
98 // bail early if dir does not exist
99 if(!is_writable($path))
100 return false;
101
102 // prepare for export
103 $id = acf_extract_var($field_group, 'ID');
104 $field_group = acf_prepare_field_group_for_export($field_group);
105
106 // add modified time
107 $field_group['modified'] = get_post_modified_time('U', true, $id, true);
108
109
110 // Prepare
111 $str_replace = array(
112 " " => "\t",
113 "'!!__(!!\'" => "__('",
114 "!!\', !!\'" => "', '",
115 "!!\')!!'" => "')",
116 "array (" => "array("
117 );
118
119 $preg_replace = array(
120 '/([\t\r\n]+?)array/' => 'array',
121 '/[0-9]+ => array/' => 'array'
122 );
123
124 ob_start();
125
126 echo "<?php " . "\r\n" . "\r\n";
127 echo "if( function_exists('acf_add_local_field_group') ):" . "\r\n" . "\r\n";
128
129 // code
130 $code = var_export($field_group, true);
131
132
133 // change double spaces to tabs
134 $code = str_replace( array_keys($str_replace), array_values($str_replace), $code );
135
136
137 // correctly formats "=> array("
138 $code = preg_replace( array_keys($preg_replace), array_values($preg_replace), $code );
139
140
141 // esc_textarea
142 $code = $code;
143
144 // echo
145 echo "acf_add_local_field_group({$code});" . "\r\n" . "\r\n";
146
147 echo "endif;";
148
149 $output = ob_get_clean();
150
151 // write file
152 $f = fopen("{$path}/{$file}", 'w');
153 fwrite($f, $output);
154 fclose($f);
155
156 // return
157 return true;
158
159 }
160
161 /**
162 * Auto Sync: Helper - is field group json desync
163 */
164 function acfe_is_field_group_json_desync($field_group){
165
166 acf_enable_filter('local');
167 $group = acf_get_local_field_group($field_group['key']);
168 acf_disable_filter('local');
169
170 $private = acf_maybe_get($group, 'private', false);
171 $local = acf_maybe_get($group, 'local', false);
172 $modified = acf_maybe_get($group, 'modified', 0);
173
174 if($private){
175 return false;
176 }
177
178 elseif($local !== 'json'){
179 return false;
180 }
181
182 elseif($modified && $modified > get_post_modified_time('U', true, $field_group['ID'], true)){
183 return true;
184 }
185
186 return false;
187
188 }
189
190 /**
191 * Auto Sync: Helper - Has field group autosync
192 */
193 function acfe_has_field_group_autosync($field_group, $type = false){
194 $acfe_autosync = acf_maybe_get($field_group, 'acfe_autosync', array());
195
196 if(!$type)
197 return acf_is_array($acfe_autosync);
198
199 if($type == 'json')
200 return is_array($acfe_autosync) && in_array('json', $acfe_autosync);
201
202 elseif($type == 'php')
203 return is_array($acfe_autosync) && in_array('php', $acfe_autosync);
204
205 return false;
206 }
207
208 /**
209 * Auto Sync: Helper - Has field group autosync found register/file
210 */
211 function acfe_has_field_group_autosync_file($field_group, $type = 'json'){
212
213 if($type == 'json'){
214
215 // acf_is_local_field_group = true if json file found
216 $found = false;
217 if(acf_is_local_field_group($field_group['key'])){
218
219 $local_field_group = acf_get_local_field_group($field_group['key']);
220 $get_local = acf_maybe_get($local_field_group, 'local', false);
221
222 if($get_local == 'json'){
223
224 $found = true;
225
226 }else{
227
228 $paths = acf_get_setting('load_json');
229
230 if(!empty($paths)){
231 foreach($paths as $path){
232
233 $path = untrailingslashit($path);
234 $file = $field_group['key'] . '.json';
235
236 if(is_readable("{$path}/{$file}")){
237 $found = true;
238 break;
239 }
240
241 }
242 }
243
244 }
245
246 }
247
248 else{
249
250 $paths = acf_get_setting('load_json');
251
252 if(!empty($paths)){
253 foreach($paths as $path){
254
255 $path = untrailingslashit($path);
256 $file = $field_group['key'] . '.json';
257
258 if(is_readable("{$path}/{$file}")){
259 $found = true;
260 break;
261 }
262
263 }
264 }
265
266 }
267
268 return $found;
269
270 }
271
272 elseif($type == 'php'){
273
274 // acf_is_local_field_group = true if php registered
275 $found = false;
276 if(acf_is_local_field_group($field_group['key'])){
277
278 $local_field_group = acf_get_local_field_group($field_group['key']);
279 $get_local = acf_maybe_get($local_field_group, 'local', false);
280 if($get_local == 'php')
281 $found = true;
282
283 }
284
285 return $found;
286
287 }
288
289 return false;
290
291 }