PATH:
home
/
letacommog
/
rdvenunclick.fr1
/
wp-content
/
plugins
/
acf-extended
/
includes
/
modules
<?php if(!defined('ABSPATH')) exit; if(!class_exists('ACFE_AutoSync')): class ACFE_AutoSync{ private $php_files = array(); private $json_files = array(); function __construct(){ // PHP Save add_action('acf/update_field_group', array($this, 'update_field_group')); add_action('acf/untrash_field_group', array($this, 'update_field_group')); // PHP Delete add_action('acf/trash_field_group', array($this, 'delete_field_group')); add_action('acf/delete_field_group', array($this, 'delete_field_group')); // Json Save add_action('acf/update_field_group', array($this, 'pre_update_field_group_json'), 9); add_action('acf/untrash_field_group', array($this, 'pre_update_field_group_json'), 9); add_action('acf/update_field_group', array($this, 'post_update_field_group_json'), 11); add_action('acf/untrash_field_group', array($this, 'post_update_field_group_json'), 11); // Override Json add_filter('acf/settings/json', array($this, 'override_json'), 5); add_filter('acf/settings/save_json', array($this, 'override_json_save'), 5); add_filter('acf/settings/load_json', array($this, 'override_json_load'), 5); // Setup $this->setup_php(); $this->setup_json(); } /* * Override: Json */ function override_json($value){ return apply_filters('acfe/settings/json', $value); } /* * Override: Json Save */ function override_json_save($path){ return apply_filters('acfe/settings/json_save', $path); } /* * Override: Json Load */ function override_json_load($paths){ return (array) apply_filters('acfe/settings/json_load', $paths); } /* * Json Enabled */ function is_json_enabled(){ return (bool) acf_get_setting('json'); } /* * Json: Setup */ function setup_json(){ if(!$this->is_json_enabled()) return; $this->scan_json_folders(); } /* * Json: Scan */ function scan_json_folders(){ $paths = (array) acf_get_setting('load_json'); foreach($paths as $path){ if(!is_dir($path)) continue; acf_update_setting('acfe/json_found', true); break; } if(acf_version_compare(acf_get_setting('version'), '<', '5.9')){ $this->scan_json_folders_compatibility(); } } /* * Json: Scan - Compatibility (ACF < 5.9) */ function scan_json_folders_compatibility(){ $json_files = array(); // Get paths $paths = (array) acf_get_setting('load_json'); foreach($paths as $path){ if(!is_dir($path)) continue; $files = scandir($path); if(!$files) continue; foreach($files as $filename){ // Ignore hidden files. if($filename[0] === '.') continue; // Ignore sub directories. $file = untrailingslashit( $path ) . '/' . $filename; if(is_dir($file)) continue; // Ignore non JSON files. $ext = pathinfo($filename, PATHINFO_EXTENSION); if($ext !== 'json') continue; // Read JSON data. $json = json_decode(file_get_contents($file), true); if(!is_array($json) || !isset($json['key'])) continue; // Append data. $json_files[$json['key']] = $file; } } // Store data and return. $this->json_files = $json_files; return $json_files; } /* * Json: Get Files */ function get_json_files(){ return $this->json_files; } /* * PHP Enabled */ function is_php_enabled(){ return (bool) acf_get_setting('acfe/php'); } /* * PHP: Setup */ function setup_php(){ if(!$this->is_php_enabled()) return; global $pagenow; $files = $this->scan_php_folders(); // Do not include PHP files in ACF Admin if(($pagenow === 'edit.php' && acf_maybe_get_GET('post_type') === 'acf-field-group') || ($pagenow === 'post.php' && get_post_type(acf_maybe_get_GET('post')) === 'acf-field-group')) return; foreach($files as $key => $file){ require_once($file); } } /* * PHP: Scan */ function scan_php_folders(){ $php_files = array(); $paths = (array) acf_get_setting('acfe/php_load'); foreach($paths as $path){ $path = untrailingslashit($path); if(!is_dir($path)) continue; acf_update_setting('acfe/php_found', true); $files = glob($path . '/group_*.php'); if(!$files) continue; foreach($files as $file){ $key = pathinfo($file, PATHINFO_FILENAME); // Append data. $php_files[$key] = $file; } } // Store data and return. $this->php_files = $php_files; return $php_files; } /* * PHP: Get Files */ public function get_php_files(){ return $this->php_files; } /* * PHP: Update Field Group */ function update_field_group($field_group){ // Bail early if(!$this->is_php_enabled()) return; // Bail early if(!acfe_has_php_sync($field_group)) return; // Vars $id = $field_group['ID']; $key = $field_group['key']; $path = untrailingslashit(acf_get_setting('acfe/php_save')); // Backup path $new_path = $path; // Filters $new_path = apply_filters("acfe/settings/php_save/all", $new_path, $field_group); $new_path = apply_filters("acfe/settings/php_save/ID={$id}", $new_path, $field_group); $new_path = apply_filters("acfe/settings/php_save/key={$key}", $new_path, $field_group); $diff = $path !== $new_path; // Custom path if($diff) acf_update_setting('acfe/php_save', $new_path); // Save File $this->save_file($key, $field_group); // Restore if($diff) acf_update_setting('acfe/php_save', $path); } /* * PHP: Delete Field Group */ function delete_field_group($field_group){ // Bail early if(!$this->is_php_enabled()) return; // Bail early if(!acfe_has_php_sync($field_group)) return; // WP appends '__trashed' to end of 'key' (post_name). $key = str_replace('__trashed', '', $field_group['key']); // Delete file. $this->delete_file($key); } /* * PHP: Save File */ function save_file($key, $field_group){ // Determine save location. if(isset($this->php_files[$key])){ $file = $this->php_files[$key]; }else{ $path = untrailingslashit(acf_get_setting('acfe/php_save')); if(!is_writable($path)) return false; $file = "$path/$key.php"; } // Translation $l10n = acf_get_setting('l10n'); $l10n_textdomain = acf_get_setting('l10n_textdomain'); if(!$l10n || !$l10n_textdomain){ $field_group['fields'] = acf_get_fields($field_group); }else{ acf_update_setting('l10n_var_export', true); $field_group = acf_translate_field_group($field_group); // Reset store to allow fields translation $store = acf_get_store('fields'); $store->reset(); $field_group['fields'] = acf_get_fields($field_group); acf_update_setting('l10n_var_export', false); } // prepare for export $id = acf_extract_var($field_group, 'ID'); $field_group = acf_prepare_field_group_for_export($field_group); // add modified time $field_group['modified'] = get_post_modified_time('U', true, $id, true); // Prepare $str_replace = array( " " => "\t", "'!!__(!!\'" => "__('", "!!\', !!\'" => "', '", "!!\')!!'" => "')", "array (" => "array(" ); $preg_replace = array( '/([\t\r\n]+?)array/' => 'array', '/[0-9]+ => array/' => 'array' ); ob_start(); echo "<?php " . "\r\n" . "\r\n"; echo "if( function_exists('acf_add_local_field_group') ):" . "\r\n" . "\r\n"; // code $code = var_export($field_group, true); // change double spaces to tabs $code = str_replace( array_keys($str_replace), array_values($str_replace), $code ); // correctly formats "=> array(" $code = preg_replace( array_keys($preg_replace), array_values($preg_replace), $code ); // echo echo "acf_add_local_field_group({$code});" . "\r\n" . "\r\n"; echo "endif;"; $output = ob_get_clean(); // Save and return true if bytes were written. $result = file_put_contents($file, $output); return is_int($result); } /* * PHP: Delete File */ function delete_file($key){ if(isset($this->php_files[$key]) && is_readable($this->php_files[$key])){ unlink($this->php_files[$key]); return true; }else{ $path = untrailingslashit(acf_get_setting('acfe/php_save')); if(!is_dir($path)) return false; $file = "$path/$key.php"; if(is_readable($file)){ unlink($file); return true; } } return false; } /* * Json: Pre update Field Group */ function pre_update_field_group_json($field_group){ if(!$this->is_json_enabled()) return; if(!acfe_has_json_sync($field_group)){ // Do not save json add_filter('acf/settings/json', array($this, '__return_false')); return; } // Vars $id = $field_group['ID']; $key = $field_group['key']; $path = untrailingslashit(acf_get_setting('save_json')); // Backup $new_path = $path; // Filters $new_path = apply_filters("acfe/settings/json_save/all", $new_path, $field_group); $new_path = apply_filters("acfe/settings/json_save/ID={$id}", $new_path, $field_group); $new_path = apply_filters("acfe/settings/json_save/key={$key}", $new_path, $field_group); // Set custom saving point if($path !== $new_path){ // Backup original path $GLOBALS['acfe_json_original_path'] = $path; // Set custom path acf_update_setting('save_json', $new_path); } } /* * Json: Post Update Field Group */ function post_update_field_group_json($field_group){ if(!$this->is_json_enabled()) return; // Json if(!acfe_has_json_sync($field_group)){ // Original json setting remove_filter('acf/settings/json', array($this, '__return_false')); return; } if(isset($GLOBALS['acfe_json_original_path']) && !empty($GLOBALS['acfe_json_original_path'])){ // Restore original path acf_update_setting('save_json', $GLOBALS['acfe_json_original_path']); // Remove backup unset($GLOBALS['acfe_json_original_path']); } } /* * Custom Return False */ function __return_false(){ return false; } } acf_new_instance('ACFE_AutoSync'); endif; /* * Helper: Get PHP Files */ function acfe_get_local_php_files(){ return acf_get_instance('ACFE_AutoSync')->get_php_files(); } /* * Helper: Get Json Files */ if(!function_exists('acf_get_local_json_files') && acf_version_compare(acf_get_setting('version'), '<', '5.9')){ function acf_get_local_json_files(){ return acf_get_instance('ACFE_AutoSync')->get_json_files(); } } /** * Helper: Sync available */ function acfe_is_sync_available($field_group){ $key = acf_maybe_get($field_group, 'key'); $id = acf_maybe_get($field_group, 'ID'); // Bail early if(empty($key) || empty($id)) return false; acf_enable_filter('local'); $field_group = acf_get_local_field_group($key); acf_disable_filter('local'); if(!$field_group) return false; $private = acf_maybe_get($field_group, 'private', false); $local = acf_maybe_get($field_group, 'local', false); $modified = acf_maybe_get($field_group, 'modified', 0); if($private || $local !== 'json') return false; if($modified && $modified > get_post_modified_time('U', true, $id, true)) return true; return false; } function acfe_has_json_sync($field_group){ return in_array('json', (array) acf_maybe_get($field_group, 'acfe_autosync', array())); } function acfe_has_php_sync($field_group){ return in_array('php', (array) acf_maybe_get($field_group, 'acfe_autosync', array())); } function acfe_get_local_php_file($field_group){ $key = $field_group; if(is_array($field_group) && isset($field_group['key'])) $key = $field_group['key']; $php_files = acfe_get_local_php_files(); if(isset($php_files[$key])){ return $php_files[$key]; } return false; } function acfe_get_local_json_file($field_group){ $key = $field_group; if(is_array($field_group) && isset($field_group['key'])) $key = $field_group['key']; $json_files = acf_get_local_json_files(); if(isset($json_files[$key])){ return $json_files[$key]; } return false; } /* function acfe_is_local_json($field_group){ $key = $field_group; if(is_array($field_group) && isset($field_group['key'])) $key = $field_group['key']; if(!acf_is_local_field_group($key)) return false; $field_group = acf_get_local_field_group($key); if(acf_maybe_get($field_group, 'local') === 'json') return true; return false; } function acfe_is_local_php($field_group){ $key = $field_group; if(is_array($field_group) && isset($field_group['key'])) $key = $field_group['key']; if(!acf_is_local_field_group($key)) return false; $field_group = acf_get_local_field_group($key); if(acf_maybe_get($field_group, 'local') === 'php') return true; return false; } function acfe_has_field_group_autosync($field_group, $type = false){ $acfe_autosync = (array) acf_maybe_get($field_group, 'acfe_autosync', array()); // Has something if(!$type){ return !empty($acfe_autosync); } // Has Json elseif($type === 'json'){ return in_array('json', $acfe_autosync); } // Has PHP elseif($type === 'php'){ return in_array('php', $acfe_autosync); } return false; } function acfe_has_field_group_autosync_file($field_group, $type = 'json'){ if($type === 'json'){ $found = false; $paths = (array) acf_get_setting('load_json', array()); // True if json file found if(acf_is_local_field_group($field_group['key'])){ $local_field_group = acf_get_local_field_group($field_group['key']); $get_local = acf_maybe_get($local_field_group, 'local', false); if($get_local === 'json') $found = true; } if(!$found){ foreach($paths as $path){ $path = untrailingslashit($path); $file = $field_group['key'] . '.json'; if(!is_readable("{$path}/{$file}")) continue; $found = true; break; } } return $found; } elseif($type === 'php'){ $php_files = acfe_get_local_php_files(); if(isset($php_files[$field_group['key']])){ return $php_files[$field_group['key']]; } return false; } return false; } */
[+]
..
[+]
form
[-] taxonomy.php
[edit]
[-] dynamic-options-page.php
[edit]
[-] single-meta.php
[edit]
[-] autosync.php
[edit]
[-] dev.php
[edit]
[-] settings.php
[edit]
[-] dynamic-post-type.php
[edit]
[-] dynamic-form.php
[edit]
[-] author.php
[edit]
[-] user.php
[edit]
[-] dynamic-block-type.php
[edit]
[-] dynamic-taxonomy.php
[edit]