HEX
Server: LiteSpeed
System: Linux melbournecleaninggroup 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: www-data (33)
PHP: 7.3.33-1+focal
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/html/wp-content/plugins/acf-extended/includes/core/upgrades.php
<?php

if(!class_exists('acfe_upgrades')):

class acfe_upgrades{

	function __construct(){
		
		$upgrades = acfe_settings('upgrades');
		
		if(empty($upgrades))
			return;
		
		// ACF Extended: 0.8.5
		add_action('acf/init', array($this, 'upgrade_0_8_5'), 999);
		
		// ACF Extended: 0.8.6
		add_action('acf/init', array($this, 'upgrade_0_8_6'), 999);

	}
	
	function upgrade_0_8_6(){
		
		$todo = acfe_settings('upgrades.0_8_6');
		
		if(!$todo)
			return;
		
		acf_log('[ACF Extended] 0.8.6 Upgrade: Dynamic Options Pages');
		
		$get_options = get_posts(array(
			'post_type'         => 'acfe-dop',
			'posts_per_page'    => -1,
			'fields'            => 'ids'
		));
		
		if(!empty($get_options)){
			
			foreach($get_options as $post_id){
				
				$menu_slug = get_field('menu_slug', $post_id);
				$acfe_dop_name = get_field('acfe_dop_name', $post_id);
				$post_name = get_post_field('post_name', $post_id);
				
				// Update empty 'menu_slug' fields in options pages
				if(empty($menu_slug)){
					
					// Page Title
					$page_title = get_post_field('post_title', $post_id);
					
					// Menu Title
					$menu_title = get_field('menu_title', $post_id);
					
					if(empty($menu_title)){
						
						$menu_title = $page_title;
						
					}
					
					// Menu Slug
					$menu_slug = sanitize_title($menu_title);
					
					// Update field
					update_field('menu_slug', $menu_slug, $post_id);
					
				}
				
				// Upgrade old name to menu_slug
				if($acfe_dop_name === $post_name){
					
					// Get ACFE option
					$option = acfe_settings('modules.dynamic_option.data');
					
					// Check ACFE option
					if(isset($option[$acfe_dop_name])){
						
						$register_args = $option[$acfe_dop_name];
						
						// Delete old option page slug
						unset($option[$acfe_dop_name]);
						
						// Re-assign to menu_slug
						$option[$menu_slug] = $register_args;
						
						// Sort keys ASC
						ksort($option);
						
						// Update ACFE option
						acfe_settings('modules.dynamic_option.data', $option, true);
						
						// Update post: force menu slug as name
						wp_update_post(array(
							'ID'            => $post_id,
							'post_name'     => $menu_slug,
						));
						
					}
					
				}
				
			}
			
		}
		
		// Done
		acfe_settings()->delete('upgrades.0_8_6');
		
		acf_log('[ACF Extended] 0.8.6 Upgrade: Done');
		
	}
	
	function upgrade_0_8_5(){
		
		$todo = acfe_settings('upgrades.0_8_5');
		
		if(!$todo)
			return;
		
		$tasks = array(
			'dynamic_form',
			'dynamic_post_type',
			'dynamic_taxonomy',
			'dynamic_block_type',
			'dynamic_option',
		);
		
		foreach($tasks as $task){
			
			/*
			 * Forms
			 */
			if($task === 'dynamic_form'){
				
				acf_log('[ACF Extended] 0.8.5 Upgrade: Dynamic Forms');
				
				// Retrieve all forms posts
				$get_forms = get_posts(array(
					'post_type'         => 'acfe-form',
					'posts_per_page'    => -1,
					'fields'            => 'ids',
					'post_status'       => 'any'
				));
				
				// Bail early if no form found
				if(empty($get_forms)){
					
					// Upgrade done
					continue;
					
				}
				
				$flexible = acf_get_field_type('flexible_content');
				$field = acf_get_field('acfe_form_actions');
				
				global $wpdb;
				
				foreach($get_forms as $post_id){
					
					// init
					$wp_meta = array();
					$acf_meta = array();
					
					// Retrieve meta
					$get_meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d ", $post_id));
					
					// Sort
					usort($get_meta, function($a, $b){
						return strcmp($a->meta_key, $b->meta_key);
					});
					
					// Store
					foreach($get_meta as $meta){
						
						$wp_meta[$meta->meta_key] = $meta->meta_value;
						
					}
					
					// Check if is acf meta
					foreach($wp_meta as $key => $value){
						
						// ACF Meta
						if(isset($wp_meta["_$key"])){
							
							$acf_meta[] = array(
								'key'   => $key,
								'value' => $wp_meta[$key],
							);
							
						}
						
					}
					
					/*
					 * Step 1: Upgrade old group fields
					 */
					$prefix = 'acfe_form_actions';
					
					// Define script rules
					$rules = array(
						
						// Post: title
						array(
							'group'             => 'acfe_form_post_save_post_title_group',
							'sub_field'         => 'acfe_form_post_save_post_title_group_acfe_form_post_save_post_title',
							'sub_field_custom'  => 'acfe_form_post_save_post_title_group_acfe_form_post_save_post_title_custom',
							'new_field'         => 'acfe_form_post_save_post_title',
						),
						
						// Post: name
						array(
							'group'             => 'acfe_form_post_save_post_name_group',
							'sub_field'         => 'acfe_form_post_save_post_name_group_acfe_form_post_save_post_name',
							'sub_field_custom'  => 'acfe_form_post_save_post_name_group_acfe_form_post_save_post_name_custom',
							'new_field'         => 'acfe_form_post_save_post_name',
						),
						
						// Term: name
						array(
							'group'             => 'acfe_form_term_save_name_group',
							'sub_field'         => 'acfe_form_term_save_name_group_acfe_form_term_save_name',
							'sub_field_custom'  => 'acfe_form_term_save_name_group_acfe_form_term_save_name_custom',
							'new_field'         => 'acfe_form_term_save_name',
						),
						
						// Term: slug
						array(
							'group'             => 'acfe_form_term_save_slug_group',
							'sub_field'         => 'acfe_form_term_save_slug_group_acfe_form_term_save_slug',
							'sub_field_custom'  => 'acfe_form_term_save_slug_group_acfe_form_term_save_slug_custom',
							'new_field'         => 'acfe_form_term_save_slug',
						),
						
						// User: e-mail
						array(
							'group'             => 'acfe_form_user_save_email_group',
							'sub_field'         => 'acfe_form_user_save_email_group_acfe_form_user_save_email',
							'sub_field_custom'  => 'acfe_form_user_save_email_group_acfe_form_user_save_email_custom',
							'new_field'         => 'acfe_form_user_save_email',
						),
						
						// User: username
						array(
							'group'             => 'acfe_form_user_save_username_group',
							'sub_field'         => 'acfe_form_user_save_username_group_acfe_form_user_save_username',
							'sub_field_custom'  => 'acfe_form_user_save_username_group_acfe_form_user_save_username_custom',
							'new_field'         => 'acfe_form_user_save_username',
						),
						
						// User: password
						array(
							'group'             => 'acfe_form_user_save_password_group',
							'sub_field'         => 'acfe_form_user_save_password_group_acfe_form_user_save_password',
							'sub_field_custom'  => 'acfe_form_user_save_password_group_acfe_form_user_save_password_custom',
							'new_field'         => 'acfe_form_user_save_password',
						),
						
						// User: first name
						array(
							'group'             => 'acfe_form_user_save_first_name_group',
							'sub_field'         => 'acfe_form_user_save_first_name_group_acfe_form_user_save_first_name',
							'sub_field_custom'  => 'acfe_form_user_save_first_name_group_acfe_form_user_save_first_name_custom',
							'new_field'         => 'acfe_form_user_save_first_name',
						),
						
						// User: last name
						array(
							'group'             => 'acfe_form_user_save_last_name_group',
							'sub_field'         => 'acfe_form_user_save_last_name_group_acfe_form_user_save_last_name',
							'sub_field_custom'  => 'acfe_form_user_save_last_name_group_acfe_form_user_save_last_name_custom',
							'new_field'         => 'acfe_form_user_save_last_name',
						),
						
						// User: nickname
						array(
							'group'             => 'acfe_form_user_save_nickname_group',
							'sub_field'         => 'acfe_form_user_save_nickname_group_acfe_form_user_save_nickname',
							'sub_field_custom'  => 'acfe_form_user_save_nickname_group_acfe_form_user_save_nickname_custom',
							'new_field'         => 'acfe_form_user_save_nickname',
						),
						
						// User: display name
						array(
							'group'             => 'acfe_form_user_save_display_name_group',
							'sub_field'         => 'acfe_form_user_save_display_name_group_acfe_form_user_save_display_name',
							'sub_field_custom'  => 'acfe_form_user_save_display_name_group_acfe_form_user_save_display_name_custom',
							'new_field'         => 'acfe_form_user_save_display_name',
						),
						
						// User: website
						array(
							'group'             => 'acfe_form_user_save_website_group',
							'sub_field'         => 'acfe_form_user_save_website_group_acfe_form_user_save_website',
							'sub_field_custom'  => 'acfe_form_user_save_website_group_acfe_form_user_save_website_custom',
							'new_field'         => 'acfe_form_user_save_website',
						),
					
					);
					
					// Process rules
					foreach($rules as $rule){
						
						$updates = array();
						
						foreach($acf_meta as $acf){
							
							// Bail early if doesn't starts with 'acfe_form_actions'
							if(strpos($acf['key'], $prefix) !== 0)
								continue;
							
							// Regex: 'acfe_form_actions_2_acfe_form_post_save_post_title_group'
							// Match: '2'
							if(preg_match('/^' . $prefix . '_([0-9]+)_' . $rule['group'] . '$/', $acf['key'], $match)){
								
								$updates[$rule['new_field']][$match[1]]['group'] = array(
									'key'   => $acf['key'],
									'value' => $acf['value'],
								);
								
							// Regex: 'acfe_form_post_2_save_post_title_group_acfe_form_post_save_post_title'
							// Match: '2'
							}elseif(preg_match('/^' . $prefix . '_([0-9]+)_' . $rule['sub_field'] . '$/', $acf['key'], $match)){
								
								$updates[$rule['new_field']][$match[1]]['sub_field'] = array(
									'key'   => $acf['key'],
									'value' => $acf['value'],
								);
								
							// Regex: 'acfe_form_post_2_save_post_title_group_acfe_form_post_save_post_title_custom'
							// Match: '2'
							}elseif(preg_match('/^' . $prefix . '_([0-9]+)_' . $rule['sub_field_custom'] . '$/', $acf['key'], $match)){
								
								// Generate: array[acfe_form_post_save_post_title][2]['sub_field_custom']
								$updates[$rule['new_field']][$match[1]]['sub_field_custom'] = array(
									'key'   => $acf['key'],
									'value' => $acf['value'],
								);
								
							}
							
						}
						
						if(!empty($updates)){
							
							// Update meta
							foreach($updates as $new_field => $data){
								
								foreach($data as $i => $row){
									
									$group = acf_maybe_get($row, 'group');
									$sub_field = acf_maybe_get($row, 'sub_field');
									$sub_field_custom = acf_maybe_get($row, 'sub_field_custom');
									
									if($sub_field){
										
										$new_field_name = "{$prefix}_{$i}_{$new_field}";
										
										// update field
										if($sub_field['value'] === 'custom'){
											
											update_post_meta($post_id, $new_field_name, $sub_field_custom['value']);
											
										}else{
											
											update_post_meta($post_id, $new_field_name, $sub_field['value']);
											
										}
										
										// update reference
										update_post_meta($post_id, '_' . $new_field_name, 'field_' . $new_field);
										
									}
									
									// Delete old group
									delete_post_meta($post_id, $group['key']);
									delete_post_meta($post_id, $sub_field['key']);
									delete_post_meta($post_id, $sub_field_custom['key']);
									
								}
								
							}
							
						}
						
					}
					
					/*
					 * Step 2: Upgrade map fields which now require "Load values" to be enabled
					 */
					if(have_rows('acfe_form_actions', $post_id)):
						while(have_rows('acfe_form_actions', $post_id)): the_row();
							
							$layout = get_row_layout();
							$row = get_row_index();
							$i = $row-1;
							
							// Post Action
							if($layout === 'post'){
								
								$load_values = get_sub_field('acfe_form_post_load_values');
								
								$fields = array(
									'field_acfe_form_post_save_post_type'       => get_sub_field('acfe_form_post_map_post_type', false),
									'field_acfe_form_post_save_post_status'     => get_sub_field('acfe_form_post_map_post_status', false),
									'field_acfe_form_post_save_post_title'      => get_sub_field('acfe_form_post_map_post_title', false),
									'field_acfe_form_post_save_post_name'       => get_sub_field('acfe_form_post_map_post_name', false),
									'field_acfe_form_post_save_post_content'    => get_sub_field('acfe_form_post_map_post_content', false),
									'field_acfe_form_post_save_post_author'     => get_sub_field('acfe_form_post_map_post_author', false),
									'field_acfe_form_post_save_post_parent'     => get_sub_field('acfe_form_post_map_post_parent', false),
									'field_acfe_form_post_save_post_terms'      => get_sub_field('acfe_form_post_map_post_terms', false),
								);
								
								if(!$load_values){
									
									foreach($fields as $field_key => $field_value){
										
										// Bail early if map field has no value
										if(empty($field_value))
											continue;
										
										// args
										$update = array();
										$update['acf_fc_layout'] = $layout;
										
										// Post content inside group
										if($field_key === 'field_acfe_form_post_save_post_content'){
											
											$update['field_acfe_form_post_save_post_content_group'] = array(
												'field_acfe_form_post_save_post_content' => $field_value
											);
											
										}else{
											
											$update[$field_key] = $field_value;
											
										}
										
										// update
										$flexible->update_row($update, $i, $field, $post_id);
										
									}
									
								}
								
							}
							
							// Term Action
							elseif($layout === 'term'){
								
								$load_values = get_sub_field('acfe_form_term_load_values');
								
								$fields = array(
									'field_acfe_form_term_save_name'         => get_sub_field('acfe_form_term_map_name', false),
									'field_acfe_form_term_save_slug'         => get_sub_field('acfe_form_term_map_slug', false),
									'field_acfe_form_term_save_taxonomy'     => get_sub_field('acfe_form_term_map_taxonomy', false),
									'field_acfe_form_term_save_parent'       => get_sub_field('acfe_form_term_map_parent', false),
									'field_acfe_form_term_save_description'  => get_sub_field('acfe_form_term_map_description', false),
								);
								
								if(!$load_values){
									
									foreach($fields as $field_key => $field_value){
										
										// Bail early if map field has no value
										if(empty($field_value))
											continue;
										
										// args
										$update = array();
										$update['acf_fc_layout'] = $layout;
										
										// Post content inside group
										if($field_key === 'field_acfe_form_term_save_description'){
											
											$update['field_acfe_form_term_save_description_group'] = array(
												'field_acfe_form_term_save_description' => $field_value
											);
											
										}else{
											
											$update[$field_key] = $field_value;
											
										}
										
										// update
										$flexible->update_row($update, $i, $field, $post_id);
										
									}
									
								}
								
							}
							
							// User Action
							elseif($layout === 'user'){
								
								$load_values = get_sub_field('acfe_form_user_load_values');
								
								$fields = array(
									'field_acfe_form_user_save_email'           => get_sub_field('acfe_form_user_map_email', false),
									'field_acfe_form_user_save_username'        => get_sub_field('acfe_form_user_map_username', false),
									'field_acfe_form_user_save_password'        => get_sub_field('acfe_form_user_map_password', false),
									'field_acfe_form_user_save_first_name'      => get_sub_field('acfe_form_user_map_first_name', false),
									'field_acfe_form_user_save_last_name'       => get_sub_field('acfe_form_user_map_last_name', false),
									'field_acfe_form_user_save_nickname'        => get_sub_field('acfe_form_user_map_nickname', false),
									'field_acfe_form_user_save_display_name'    => get_sub_field('acfe_form_user_map_display_name', false),
									'field_acfe_form_user_save_website'         => get_sub_field('acfe_form_user_map_website', false),
									'field_acfe_form_user_save_description'     => get_sub_field('acfe_form_user_map_description', false),
									'field_acfe_form_user_save_role'            => get_sub_field('acfe_form_user_map_role', false),
								);
								
								if(!$load_values){
									
									foreach($fields as $field_key => $field_value){
										
										// Bail early if map field has no value
										if(empty($field_value))
											continue;
										
										// args
										$update = array();
										$update['acf_fc_layout'] = $layout;
										
										// Post content inside group
										if($field_key === 'field_acfe_form_user_save_description'){
											
											$update['field_acfe_form_user_save_description_group'] = array(
												'field_acfe_form_user_save_description' => $field_value
											);
											
										}else{
											
											$update[$field_key] = $field_value;
											
										}
										
										// update
										$flexible->update_row($update, $i, $field, $post_id);
										
									}
									
								}
								
							}
						
						endwhile;
					endif;
					
				}
				
			}
			
			/*
			 * Post Types
			 */
			elseif($task === 'dynamic_post_type'){
				
				acf_log('[ACF Extended] 0.8.5 Upgrade: Dynamic Post Types');
				
				// Old Post Types
				$old_post_types = get_option('acfe_dynamic_post_types', array());
				
				// New Post Types
				$new_post_types = acfe_settings('modules.dynamic_post_type.data');
				
				$merged_post_types = array_merge($old_post_types, $new_post_types);
				
				// Update Post Types
				acfe_settings('modules.dynamic_post_type.data', $merged_post_types, true);
				
				// Delete Old Post Types
				delete_option('acfe_dynamic_post_types');
				
			}
			
			/*
			 * Taxonomies
			 */
			elseif($task === 'dynamic_taxonomy'){
				
				acf_log('[ACF Extended] 0.8.5 Upgrade: Dynamic Taxonomies');
				
				// Old Taxonomies
				$old_taxonomies = get_option('acfe_dynamic_taxonomies', array());
				
				// New Taxonomies
				$new_taxonomies = acfe_settings('modules.dynamic_taxonomy.data');
				
				$merged_taxonomies = array_merge($old_taxonomies, $new_taxonomies);
				
				// Update Taxonomies
				acfe_settings('modules.dynamic_taxonomy.data', $merged_taxonomies, true);
				
				// Delete Old Taxonomies
				delete_option('acfe_dynamic_taxonomies');
				
			}
			
			/*
			 * Block Types
			 */
			elseif($task === 'dynamic_block_type'){
				
				acf_log('[ACF Extended] 0.8.5 Upgrade: Dynamic Block Types');
				
				// Old Block Types
				$old_block_types = get_option('acfe_dynamic_block_types', array());
				
				// New Block Types
				$new_block_types = acfe_settings('modules.dynamic_block_type.data');
				
				$merged_block_types = array_merge($old_block_types, $new_block_types);
				
				// Update Block Types
				acfe_settings('modules.dynamic_block_type.data', $merged_block_types, true);
				
				// Delete Old Block Types
				delete_option('acfe_dynamic_block_types');
				
			}
			
			/*
			 * Option Pages
			 */
			elseif($task === 'dynamic_option'){
				
				acf_log('[ACF Extended] 0.8.5 Upgrade: Dynamic Options Pages');
				
				// Old Options
				$old_options = get_option('acfe_dynamic_options_pages', array());
				
				// New Options
				$new_options = acfe_settings('modules.dynamic_option.data');
				
				$merged_options = array_merge($old_options, $new_options);
				
				// Update Options
				acfe_settings('modules.dynamic_option.data', $merged_options, true);
				
				// Delete Old Options
				delete_option('acfe_dynamic_options_pages');
				
			}
			
		}
		
		// Done
        acfe_settings()->delete('upgrades.0_8_5');
		
		acf_log('[ACF Extended] 0.8.5 Upgrade: Done');
		
	}
	
}

endif;