Beispiel #1
0
        ob_start();
        call_user_func_array($control['callback'], $control['params']);
        ob_end_clean();
        break;
    }
    $sidebars_widgets[$sidebar_id] = $sidebar;
    // remove old position
    if (!isset($_POST['delete_widget'])) {
        foreach ($sidebars_widgets as $key => $sb) {
            if (is_array($sb)) {
                $sidebars_widgets[$key] = array_diff($sb, array($widget_id));
            }
        }
        array_splice($sidebars_widgets[$sidebar_id], $position, 0, $widget_id);
    }
    nxt_set_sidebars_widgets($sidebars_widgets);
    nxt_redirect(admin_url('widgets.php?message=0'));
    exit;
}
// Output the widget form without js
if (isset($_GET['editwidget']) && $_GET['editwidget']) {
    $widget_id = $_GET['editwidget'];
    if (isset($_GET['addnew'])) {
        // Default to the first sidebar
        $sidebar = array_shift($keys = array_keys($nxt_registered_sidebars));
        if (isset($_GET['base']) && isset($_GET['num'])) {
            // multi-widget
            // Copy minimal info from an existing instance of this widget to a new instance
            foreach ($nxt_registered_widget_controls as $control) {
                if ($_GET['base'] === $control['id_base']) {
                    $control_callback = $control['callback'];
Beispiel #2
0
function retrieve_widgets($theme_changed = false)
{
    global $nxt_registered_widget_updates, $nxt_registered_sidebars, $sidebars_widgets, $nxt_registered_widgets;
    $registered_sidebar_keys = array_keys($nxt_registered_sidebars);
    $orphaned = 0;
    $old_sidebars_widgets = get_theme_mod('sidebars_widgets');
    if (is_array($old_sidebars_widgets)) {
        // time() that sidebars were stored is in $old_sidebars_widgets['time']
        $_sidebars_widgets = $old_sidebars_widgets['data'];
        remove_theme_mod('sidebars_widgets');
        foreach ($_sidebars_widgets as $sidebar => $widgets) {
            if ('nxt_inactive_widgets' == $sidebar || 'orphaned_widgets' == substr($sidebar, 0, 16)) {
                continue;
            }
            if (!in_array($sidebar, $registered_sidebar_keys)) {
                $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $widgets;
                unset($_sidebars_widgets[$sidebar]);
            }
        }
    } else {
        if (empty($sidebars_widgets)) {
            return;
        }
        unset($sidebars_widgets['array_version']);
        $old = array_keys($sidebars_widgets);
        sort($old);
        sort($registered_sidebar_keys);
        if ($old == $registered_sidebar_keys) {
            return;
        }
        $_sidebars_widgets = array('nxt_inactive_widgets' => !empty($sidebars_widgets['nxt_inactive_widgets']) ? $sidebars_widgets['nxt_inactive_widgets'] : array());
        unset($sidebars_widgets['nxt_inactive_widgets']);
        foreach ($nxt_registered_sidebars as $id => $settings) {
            if ($theme_changed) {
                $_sidebars_widgets[$id] = array_shift($sidebars_widgets);
            } else {
                // no theme change, grab only sidebars that are currently registered
                if (isset($sidebars_widgets[$id])) {
                    $_sidebars_widgets[$id] = $sidebars_widgets[$id];
                    unset($sidebars_widgets[$id]);
                }
            }
        }
        foreach ($sidebars_widgets as $val) {
            if (is_array($val) && !empty($val)) {
                $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val;
            }
        }
    }
    // discard invalid, theme-specific widgets from sidebars
    $shown_widgets = array();
    foreach ($_sidebars_widgets as $sidebar => $widgets) {
        if (!is_array($widgets)) {
            continue;
        }
        $_widgets = array();
        foreach ($widgets as $widget) {
            if (isset($nxt_registered_widgets[$widget])) {
                $_widgets[] = $widget;
            }
        }
        $_sidebars_widgets[$sidebar] = $_widgets;
        $shown_widgets = array_merge($shown_widgets, $_widgets);
    }
    $sidebars_widgets = $_sidebars_widgets;
    unset($_sidebars_widgets, $_widgets);
    // find hidden/lost multi-widget instances
    $lost_widgets = array();
    foreach ($nxt_registered_widgets as $key => $val) {
        if (in_array($key, $shown_widgets, true)) {
            continue;
        }
        $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key);
        if (2 > (int) $number) {
            continue;
        }
        $lost_widgets[] = $key;
    }
    $sidebars_widgets['nxt_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['nxt_inactive_widgets']);
    nxt_set_sidebars_widgets($sidebars_widgets);
    return $sidebars_widgets;
}