File "upgrades.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/advanced-custom-fields/includes/upgrades.php
File size: 6.68 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

function acf_has_upgrade()
{
    $db_version = acf_get_db_version();
    if ($db_version && acf_version_compare($db_version, '<', '5.5.0')) {
        return true;
    }
    if ($db_version !== ACF_VERSION) {
        acf_update_db_version(ACF_VERSION);
    }
    return false;
}
function acf_upgrade_all()
{
    @set_time_limit(600);
    timer_start();
    acf_dev_log('ACF Upgrade Begin.');
    $db_version = acf_get_db_version();
    if (acf_version_compare($db_version, '<', '5.0.0')) {
        acf_upgrade_500();
    }
    if (acf_version_compare($db_version, '<', '5.5.0')) {
        acf_upgrade_550();
    }
    acf_update_db_version(ACF_VERSION);
    global $wpdb;
    acf_dev_log('ACF Upgrade Complete.', $wpdb->num_queries, timer_stop(0));
}
function acf_get_db_version()
{
    return get_option('acf_version');
}
function acf_update_db_version($version = '')
{
    update_option('acf_version', $version);
}
function acf_upgrade_500()
{
    acf_dev_log('ACF Upgrade 5.0.0.');
    do_action('acf/upgrade_500');
    acf_upgrade_500_field_groups();
    acf_update_db_version('5.0.0');
}
function acf_upgrade_500_field_groups()
{
    acf_dev_log('ACF Upgrade 5.0.0 Field Groups.');
    $ofgs = get_posts(array('numberposts' => -1, 'post_type' => 'acf', 'orderby' => 'menu_order title', 'order' => 'asc', 'suppress_filters' => true));
    if ($ofgs) {
        foreach ($ofgs as $ofg) {
            acf_upgrade_500_field_group($ofg);
        }
    }
}
function acf_upgrade_500_field_group($ofg)
{
    acf_dev_log('ACF Upgrade 5.0.0 Field Group.', $ofg);
    $nfg = array('ID' => 0, 'title' => $ofg->post_title, 'menu_order' => $ofg->menu_order);
    $rules = get_post_meta($ofg->ID, 'rule', false);
    $anyorall = get_post_meta($ofg->ID, 'allorany', true);
    if (is_array($rules)) {
        $rules = array_map('maybe_unserialize', $rules);
        $nfg['location'] = acf_convert_rules_to_groups($rules, $anyorall);
    }
    if ($position = get_post_meta($ofg->ID, 'position', true)) {
        $nfg['position'] = $position;
    }
    if ($layout = get_post_meta($ofg->ID, 'layout', true)) {
        $nfg['layout'] = $layout;
    }
    if ($hide_on_screen = get_post_meta($ofg->ID, 'hide_on_screen', true)) {
        $nfg['hide_on_screen'] = maybe_unserialize($hide_on_screen);
    }
    $nfg = acf_update_field_group($nfg);
    acf_dev_log('> Complete.', $nfg);
    do_action('acf/upgrade_500_field_group', $nfg, $ofg);
    acf_upgrade_500_fields($ofg, $nfg);
    if ($ofg->post_status == 'trash') {
        acf_trash_field_group($nfg['ID']);
    }
    return $nfg;
}
function acf_upgrade_500_fields($ofg, $nfg)
{
    acf_dev_log('ACF Upgrade 5.0.0 Fields.');
    global $wpdb;
    $rows = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key LIKE %s", $ofg->ID, 'field_%'), ARRAY_A);
    if ($rows) {
        $checked = array();
        foreach ($rows as $row) {
            $field = $row['meta_value'];
            $field = maybe_unserialize($field);
            $field = maybe_unserialize($field);
            if (isset($checked[$field['key']])) {
                continue;
            }
            $checked[$field['key']] = 1;
            $field['parent'] = $nfg['ID'];
            $field = acf_upgrade_500_field($field);
        }
    }
}
function acf_upgrade_500_field($field)
{
    acf_dev_log('ACF Upgrade 5.0.0 Field.', $field);
    $field['menu_order'] = acf_extract_var($field, 'order_no', 0);
    if (substr($field['key'], 0, 6) !== 'field_') {
        $field['key'] = 'field_' . str_replace('field', '', $field['key']);
    }
    $sub_fields = array();
    if ($field['type'] == 'repeater') {
        if (!empty($field['sub_fields'])) {
            foreach ($field['sub_fields'] as $sub_field) {
                $sub_fields[] = $sub_field;
            }
        }
        unset($field['sub_fields']);
    } elseif ($field['type'] == 'flexible_content') {
        if (is_array($field['layouts'])) {
            foreach ($field['layouts'] as $i => $layout) {
                $layout['key'] = uniqid('layout_');
                if (!empty($layout['sub_fields'])) {
                    foreach ($layout['sub_fields'] as $sub_field) {
                        $sub_field['parent_layout'] = $layout['key'];
                        $sub_fields[] = $sub_field;
                    }
                }
                unset($layout['sub_fields']);
                $field['layouts'][$i] = $layout;
            }
        }
    }
    $field = acf_update_field($field);
    acf_dev_log('> Complete.', $field);
    if ($sub_fields) {
        foreach ($sub_fields as $sub_field) {
            $sub_field['parent'] = $field['ID'];
            acf_upgrade_500_field($sub_field);
        }
    }
    do_action('acf/update_500_field', $field);
    return $field;
}
function acf_upgrade_550()
{
    acf_dev_log('ACF Upgrade 5.5.0.');
    do_action('acf/upgrade_550');
    acf_upgrade_550_termmeta();
    acf_update_db_version('5.5.0');
}
function acf_upgrade_550_termmeta()
{
    acf_dev_log('ACF Upgrade 5.5.0 Termmeta.');
    if (get_option('db_version') < 34370) {
        return;
    }
    $taxonomies = get_taxonomies(false, 'objects');
    if ($taxonomies) {
        foreach ($taxonomies as $taxonomy) {
            acf_upgrade_550_taxonomy($taxonomy->name);
        }
    }
    do_action('acf/upgrade_550_termmeta');
}
function acf_wp_upgrade_550_termmeta($wp_db_version, $wp_current_db_version)
{
    if ($wp_db_version >= 34370 && $wp_current_db_version < 34370) {
        if (acf_version_compare(acf_get_db_version(), '>', '5.5.0')) {
            acf_upgrade_550_termmeta();
        }
    }
}
add_action('wp_upgrade', 'acf_wp_upgrade_550_termmeta', 10, 2);
function acf_upgrade_550_taxonomy($taxonomy)
{
    acf_dev_log('ACF Upgrade 5.5.0 Taxonomy.', $taxonomy);
    global $wpdb;
    $search = $taxonomy . '_%';
    $_search = '_' . $search;
    $search = str_replace('_', '\\_', $search);
    $_search = str_replace('_', '\\_', $_search);
    $rows = $wpdb->get_results($wpdb->prepare("SELECT * \n\t\tFROM {$wpdb->options} \n\t\tWHERE option_name LIKE %s \n\t\tOR option_name LIKE %s", $search, $_search), ARRAY_A);
    if ($rows) {
        foreach ($rows as $row) {
            if (!preg_match("/^(_?){$taxonomy}_(\\d+)_(.+)/", $row['option_name'], $matches)) {
                continue;
            }
            $term_id = $matches[2];
            $meta_key = $matches[1] . $matches[3];
            $meta_value = $row['option_value'];
            $wpdb->insert($wpdb->termmeta, array('term_id' => $term_id, 'meta_key' => $meta_key, 'meta_value' => $meta_value));
            acf_dev_log('ACF Upgrade 5.5.0 Term.', $term_id, $meta_key);
            do_action('acf/upgrade_550_taxonomy_term', $term_id);
        }
    }
    do_action('acf/upgrade_550_taxonomy', $taxonomy);
}