function delete_orphan_meta()

in web/wp-content/plugins/acf-extended/includes/modules/performance/module-performance-connector.php [142:360]


    function delete_orphan_meta($return, $post_id, $confirm){
        
        // engine name
        $engine_name = acfe_get_object_performance_engine_name($post_id);
        
        // performance enabled
        if(acfe_is_object_performance_enabled($post_id)){
            
            // engine
            $performance_mode = acfe_get_object_performance_mode($post_id);
            $engine = acfe_get_performance_engine($engine_name);
            
            // performance deleted
            $performance_deleted = $return['normal'];
            $performance_key = $engine->get_meta_key($post_id);
            
            // reset return
            $return = array(
                'normal' => array(),
            );
            
            // if engine = hybrid
            // previous 'clean meta' cleaned reference + meta in the whole '$performance_deleted'
            // we must fix that by moving non prefixed meta into normal return
            if($engine_name === 'hybrid'){
                
                foreach(array_keys($performance_deleted) as $key){
                    
                    $value = $performance_deleted[ $key ];
                    
                    // prefixed meta
                    if(strpos($key, '_') !== 0){
                        
                        $return['normal'][ $key ] = $value;
                        unset($performance_deleted[ $key ]);
                        
                    }
                    
                }
                
            }
            
            if(!empty($performance_deleted)){
                $return[ $performance_key ] = $performance_deleted;
            }
        
            // clean normal orphan
            // this will clean orphan from normal meta
            $normal_deleted = acfe_do_performance_bypass(function($post_id, $confirm){
            
                // get orphan
                $meta = acfe_get_orphan_meta($post_id);
                $deleted = array();
            
                // loop
                foreach($meta as $row){
                
                    // vars
                    $key = $row['key'];
                    $name = $row['name'];
                    $value = $row['value'];
                
                    // delete
                    if($confirm){
                    
                        acf_delete_metadata($post_id, $name, true);  // prefix
                        acf_delete_metadata($post_id, $name);        // normal
                    
                    }
                
                    // store
                    $deleted[ "_{$name}" ] = $key;
                    $deleted[ $name ] = $value;
                
                }
                
                return $deleted;
                
            }, array($post_id, $confirm));
            
            // return
            $return['normal'] = array_merge($return['normal'], $normal_deleted);
            
            // clean normal meta
            // this will clean normal meta which should be removed in mode=production
            if($performance_mode === 'production'){
                
                $normal_deleted = acfe_do_performance_bypass(function($post_id, $confirm){
                    
                    // meta (acf / _acf)
                    $acf = acfe_get_object_performance_meta($post_id);
        
                    $engine_name = acfe_get_object_performance_engine_name($post_id);
                    
                    // performance meta doesn't exist
                    // mode=rollback was probably used
                    if($acf === null){
                        return array();
                    }
                
                    // get orphan
                    $meta = acfe_get_meta($post_id);
                    $deleted = array();
                
                    // loop
                    foreach($meta as $row){
                    
                        // vars
                        $field = $row['field'];
                        $key = $row['key'];
                        $name = $row['name'];
                        $value = $row['value'];
                        
                        switch($engine_name){
                            
                            case 'ultra': {
        
                                // check if field has 'save as individual meta' and already in 'acf' meta
                                if(!acf_maybe_get($field, 'acfe_save_meta') || !isset($acf[ $name ])){
            
                                    // delete
                                    if($confirm){
                
                                        acf_delete_metadata($post_id, $name, true); // prefix
                                        acf_delete_metadata($post_id, $name);       // normal
                
                                    }
            
                                    // store
                                    $deleted[ "_{$name}" ] = $key;
                                    $deleted[ $name ] = $value;
            
                                }
                                
                                break;
                            }
                            
                            case 'hybrid': {
        
                                // delete
                                if($confirm){
                                    acf_delete_metadata($post_id, $name, true); // prefix
                                }
        
                                // store
                                $deleted[ "_{$name}" ] = $key;
                                
                                break;
                            }
                            
                        }
                    
                    }
                
                    return $deleted;
                
                }, array($post_id, $confirm));
                
                // return
                $return['normal'] = array_merge($return['normal'], $normal_deleted);
        
            }
            
        }
        
        // this is done on
        // performance enabled +
        // performance disabled
        
        // not ultra
        if($engine_name !== 'ultra'){
            
            // ultra engine
            $ultra = acfe_get_performance_engine('ultra');
            
            if($ultra){
    
                // meta key
                $meta_key = $ultra->get_meta_key($post_id);
    
                // clean ultra residue (acf)
                $meta = $ultra->get_meta($post_id);
    
                if($meta !== null){
                    $ultra->delete_meta($post_id);
                    $return['normal'][ $meta_key ] = $meta;
                }
                
            }
            
        }
        
        // not hybrid
        if($engine_name !== 'hybrid'){
        
            // hybrid engine
            $hybrid = acfe_get_performance_engine('hybrid');
            
            if($hybrid){
    
                // meta key
                $meta_key = $hybrid->get_meta_key($post_id);
    
                // clean hybrid residue (_acf)
                $meta = $hybrid->get_meta($post_id);
    
                if($meta !== null){
                    $hybrid->delete_meta($post_id);
                    $return['normal'][ $meta_key ] = $meta;
                }
                
            }
            
        }
        
        // return
        return $return;
        
    }