File: //proc/self/cwd/wp-content/plugins/cornerstone/includes/classes/Elements/NavMenuFallback.php
<?php
namespace Themeco\Cornerstone\Elements;
class NavMenuFallback {
protected $args;
protected $walker;
public function __construct( NavMenu $walker ) {
$this->walker = $walker;
}
public function config( $args ) {
$this->args = $args;
if ( is_a( $args['walker'], NavMenu::class ) ) {
$this->walker = $args['walker'];
}
}
protected function get_nav_items() {
if ( isset( $this->args['sample_menu'] ) ) {
$decoded = json_decode( $this->args['sample_menu'], true );
if ( ! is_null ( $decoded ) ) {
return $this->normalize_menu_items( $decoded );
} else {
$samples = apply_filters('x_sample_menus', cornerstone('Config')->group('sample-nav') );
if ( isset( $samples[$this->args['sample_menu']] ) ) {
return $this->normalize_menu_items( $samples[$this->args['sample_menu']] );
}
return $this->normalize_menu_items( 'default' );
}
}
return $this->normalize_menu_items( $this->default_nav_items() );
}
public function default_nav_items() {
return array(
array(
'title' => csi18n('common.menu-fallback'),
'url' => admin_url( 'nav-menus.php' )
)
);
}
public function output() {
$items = $this->get_nav_items();
if ( empty( $items ) ) {
return false;
}
$item_output = '';
if ( is_array( $items ) ) {
foreach ( $items as $item ) {
call_user_func_array( array( $this, 'display_nested_element' ), array( &$item_output, $item, -1 ) );
}
}
$class = $this->args['menu_class'] ? esc_attr( $this->args['menu_class'] ) : '';
$output = sprintf( $this->args['items_wrap'], '', $class, $item_output );
if ( $this->args['echo'] ) {
echo $output;
}
return $output;
}
public function display_nested_element( &$output, $element, $depth ) {
$depth++;
call_user_func_array( array( $this->walker, 'start_el' ), array( &$output, $element, $depth, $this->args ) );
$max_depth = ( isset( $this->args['depth'] ) && $this->args['depth'] === $depth + 1 );
if ( ! $max_depth && isset( $element->children ) && ! empty( $element->children ) ) {
call_user_func_array( array( $this->walker, 'start_lvl' ), array( &$output, $depth, $this->args ) );
foreach ( $element->children as $child ) {
call_user_func_array( array( $this, 'display_nested_element' ), array( &$output, $child, $depth, $this->args ) );
}
call_user_func_array( array( $this->walker, 'end_lvl' ), array( &$output, $depth, $this->args ));
}
call_user_func_array( array( $this->walker, 'end_el' ), array( &$output, $element, $depth, $this->args ));
return $output;
}
public function normalize_menu_items( $items ) {
if ( empty( $items ) ) {
return array();
}
static $id_counter = 0;
$defaults = array(
'ID' => 'sample',
'title' => '',
'description' => '',
'attr_title' => '',
'target' => '',
'xfn' => '',
'url' => '',
'type' => 'sample',
'object_id' => 'sample',
'classes' => array(),
'meta' => array()
);
$default_classes = array( 'menu-item', 'menu-item-type-custom', 'menu-item-object-custom' );
$normalized_items = array();
foreach ( $items as $item ) {
$normalized = wp_parse_args($item, $defaults);
$normalized['ID'] .= '-' . $id_counter++ ;
$normalized['classes'] = array_merge( $normalized['classes'], $default_classes );
if ( isset( $normalized['children'] ) ) {
$normalized['children'] = $this->normalize_menu_items( $normalized['children'] );
$normalized['classes'][] = 'menu-item-has-children';
}
$normalized_items[] = (object) $normalized;
}
return $normalized_items;
}
}