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'];
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; }