diff --git a/includes/admin/assets/js/um-admin-nav-menu.js b/includes/admin/assets/js/um-admin-nav-menu.js
index b0ab47dc..8450a0ef 100644
--- a/includes/admin/assets/js/um-admin-nav-menu.js
+++ b/includes/admin/assets/js/um-admin-nav-menu.js
@@ -1,15 +1,36 @@
jQuery(document).ready(function ($) {
+ var template = wp.template( 'um-nav-menus-fields' );
- var template = wp.template('um-nav-menus-fields');
+ $( document ).on( 'menu-item-added', function ( e, $menuMarkup ) {
+ var id = $( $menuMarkup ).attr('id').substr(10);
- $(document).on('menu-item-added', function (e, $menuMarkup) {
- var id = $($menuMarkup).attr('id').substr(10);
- $('fieldset.field-move', $($menuMarkup)).before(template({menuItemID: id,restriction_data:{um_nav_public:0,um_nav_roles:[]}}));
+ var template_content = template({
+ menuItemID: id,
+ restriction_data:{
+ um_nav_public:0,
+ um_nav_roles:[]
+ }
+ });
+
+ if ( $( $menuMarkup ).find( 'fieldset.field-move' ).length > 0 ) {
+ $( $menuMarkup ).find( 'fieldset.field-move' ).before( template_content );
+ } else {
+ $( $menuMarkup ).find( '.menu-item-actions' ).before( template_content );
+ }
});
- $('ul#menu-to-edit > li').each(function () {
+
+ $( 'ul#menu-to-edit > li' ).each( function(){
var id = $(this).attr('id').substr(10);
- $('fieldset.field-move', $(this)).before(template({menuItemID: id,restriction_data:um_menu_restriction_data[id]}));
- });
+ var template_content = template({
+ menuItemID: id,
+ restriction_data: um_menu_restriction_data[ id ]
+ });
+ if ( $( this ).find( 'fieldset.field-move' ).length > 0 ) {
+ $( this ).find( 'fieldset.field-move' ).before( template_content );
+ } else {
+ $( this ).find( '.menu-item-actions' ).before( template_content );
+ }
+ });
});
\ No newline at end of file
diff --git a/includes/core/um-navmenu-walker-edit.php b/includes/core/um-navmenu-walker-edit.php
deleted file mode 100644
index c5a278fa..00000000
--- a/includes/core/um-navmenu-walker-edit.php
+++ /dev/null
@@ -1,255 +0,0 @@
- __( 'Display Mode' ),
- 'um_nav_roles' => __( 'By Role' )
-
- );
-
- //add_action( 'wp_nav_menu_item_custom_fields', array( __CLASS__, '_fields' ), 1, 4 );
- add_action( 'wp_update_nav_menu_item', array( __CLASS__, '_save' ), 10, 3 );
- add_filter( 'manage_nav-menus_columns', array( __CLASS__, '_columns' ), 99 );
-
- add_action( 'load-nav-menus.php', array( __CLASS__, 'enqueue_nav_menus_scripts' ) );
- add_action( 'admin_footer-nav-menus.php', array( __CLASS__, '_wp_template' ) );
-
- }
-
-
- public static function _save( $menu_id, $menu_item_db_id, $menu_item_args ) {
- if (defined( 'DOING_AJAX' ) && DOING_AJAX) {
- return;
- }
-
- foreach (self::$fields as $_key => $label) {
-
- if ($_key == 'um_nav_roles') {
-
- $key = sprintf( 'menu-item-%s', $_key );
-
- // Sanitize
- if (!empty( $_POST[$key][$menu_item_db_id] )) {
- // Do some checks here...
- $value = $_POST[$key][$menu_item_db_id];
- } else {
- $value = null;
- }
-
- } else {
-
- $key = sprintf( 'menu-item-%s', $_key );
-
- // Sanitize
- if (!empty( $_POST[$key][$menu_item_db_id] )) {
- // Do some checks here...
- $value = $_POST[$key][$menu_item_db_id];
- } else {
- $value = null;
- }
- }
-
- // Update
- if (!is_null( $value )) {
- update_post_meta( $menu_item_db_id, $key, $value );
- } else {
- delete_post_meta( $menu_item_db_id, $key );
- }
- }
- }
-
- public static function _fields( $id, $item, $depth, $args ) {
- ?>
-
-
-
-
-
-
-
- $label) {
- $key = sprintf( 'menu-item-%s', $_key );
- $id = sprintf( 'edit-%s-%s', $key, $item->ID );
- $name = sprintf( '%s[%s]', $key, $item->ID );
- $value = get_post_meta( $item->ID, $key, true );
- $role_name = sprintf( '%s[%s][]', $key, $item->ID );
- $class = sprintf( 'field-%s', $_key ); ?>
-
-
-
-
-
-
-
-
-
-
-
-
- roles()->get_roles();
- $i = 0;
- $html = '';
- $columns = 2;
- while ($i < $columns) {
- $per_page = ceil( count( $options ) / $columns );
- $section_fields_per_page = array_slice( $options, $i * $per_page, $per_page );
- $html .= '';
-
- foreach ($section_fields_per_page as $k => $title) {
- $id_attr = ' id="' . $id . '_' . $k . '" ';
- $for_attr = ' for="' . $id . '_' . $k . '" ';
- $name_attr = ' name="' . $role_name . '" ';
-
- $html .= "";
- }
-
- $html .= '';
- $i++;
- }
-
- echo $html; ?>
-
-
-
-
-
-
-
- admin_enqueue()->load_nav_manus_scripts();
-
- $menus = get_posts( 'post_type=nav_menu_item&numberposts=-1' );
- $menu_restriction_data = array();
-
- foreach ($menus as $data) {
- $_nav_roles_meta = get_post_meta( $data->ID, 'menu-item-um_nav_roles', true );
- $um_nav_roles = array();
- if ($_nav_roles_meta)
- foreach ($_nav_roles_meta as $key => $value) {
- if (is_int( $key )) {
- $um_nav_roles[] = $value;
- }
- }
- $menu_restriction_data[$data->ID] = array(
- 'um_nav_public' => get_post_meta( $data->ID, 'menu-item-um_nav_public', true ),
- 'um_nav_roles' => $um_nav_roles,
- );
- }
- wp_localize_script( 'um_admin_nav_manus', 'um_menu_restriction_data', $menu_restriction_data );
- }
-
- public static function _wp_template() {
- echo '';
- }
-
- }
-
- endif;
-
- UM_Menu_Item_Custom_Fields_Editor::init();
\ No newline at end of file
diff --git a/includes/core/um-navmenu-walker-template.php b/includes/core/um-navmenu-walker-template.php
deleted file mode 100644
index 43516b88..00000000
--- a/includes/core/um-navmenu-walker-template.php
+++ /dev/null
@@ -1,37 +0,0 @@
-get_fields( $item, $depth, $args, $id ) ){
- //$item_output = preg_replace('/(?=]+class="[^"]*submitbox)/', $new_fields, $item_output);
- $item_output = preg_replace('/(?=<(fieldset|p)[^>]+class="[^"]*field-move)/', $new_fields, $item_output);
- }
-
- $output .= $item_output;
-
- }
-
- public function get_fields( $item, $depth, $args = array(), $id = 0 ) {
- ob_start();
-
- if( isset( $item->ID ) ){
- $id = esc_attr( $item->ID );
- }
-
- do_action( 'wp_nav_menu_item_custom_fields', $id, $item, $depth, $args );
-
- return ob_get_clean();
- }
-}
-
-endif;
\ No newline at end of file
diff --git a/includes/core/um-navmenu-walker.php b/includes/core/um-navmenu-walker.php
deleted file mode 100644
index 98e2f40b..00000000
--- a/includes/core/um-navmenu-walker.php
+++ /dev/null
@@ -1,34 +0,0 @@
-get_fields( $item, $depth, $args, $id ) ){
- //$item_output = preg_replace('/(?=
]+class="[^"]*submitbox)/', $new_fields, $item_output);
- $item_output = preg_replace('/(?=<(fieldset|p)[^>]+class="[^"]*field-move)/', $new_fields, $item_output);
- }
-
- $output .= $item_output;
-
- }
-
- public function get_fields( $item, $depth, $args = array(), $id = 0 ) {
- ob_start();
-
- if( isset( $item->ID ) ){
- $id = esc_attr( $item->ID );
- }
-
- do_action( 'wp_nav_menu_item_custom_fields', $id, $item, $depth, $args );
-
- return ob_get_clean();
- }
-}
-
-endif;
\ No newline at end of file
diff --git a/includes/core/um-navmenu.php b/includes/core/um-navmenu.php
index 67b4228c..38344277 100644
--- a/includes/core/um-navmenu.php
+++ b/includes/core/um-navmenu.php
@@ -1,58 +1,196 @@
options()->get( 'menu_item_workaround' ) ) {
- //hard rewrite workaround with conflicted themes/plugins
- $walker = 'Walker_Nav_Menu_Edit';
- }
-
- $walker_filename = dirname( __FILE__ ) . '/um-navmenu-walker.php';
- $walker_template = file_get_contents( dirname( __FILE__ ) . '/um-navmenu-walker-template.php' );
-
- $current_walker_content = file_get_contents( $walker_filename );
- if ( strpos( $current_walker_content, $um_walker ) === false ||
- strpos( $current_walker_content, $walker ) === false ) {
-
- $walker_template = str_replace(
- array(
- '{{{%um_navmenu_walker%}}}',
- '{{{%parent_walker%}}}'
- ),
- array(
- $um_walker,
- $walker
- ),
- $walker_template
+ self::$fields = array(
+ 'um_nav_public' => __( 'Display Mode' ),
+ 'um_nav_roles' => __( 'By Role' )
);
- $fp = fopen( $walker_filename, 'w+' );
- fwrite( $fp, $walker_template );
- fclose( $fp );
+ add_action( 'wp_update_nav_menu_item', array( __CLASS__, '_save' ), 10, 3 );
+ //add_filter( 'manage_nav-menus_columns', array( __CLASS__, '_columns' ), 99 );
+
+ add_action( 'load-nav-menus.php', array( __CLASS__, 'enqueue_nav_menus_scripts' ) );
+ add_action( 'admin_footer-nav-menus.php', array( __CLASS__, '_wp_template' ) );
}
- require_once $walker_filename;
- return $um_walker;
+
+
+ /**
+ * @param $menu_id
+ * @param $menu_item_db_id
+ * @param $menu_item_args
+ */
+ public static function _save( $menu_id, $menu_item_db_id, $menu_item_args ) {
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
+ return;
+ }
+
+ foreach ( self::$fields as $_key => $label ) {
+
+ if ( $_key == 'um_nav_roles' ) {
+
+ $key = sprintf( 'menu-item-%s', $_key );
+
+ // Sanitize
+ if ( ! empty( $_POST[ $key ][ $menu_item_db_id ] ) ) {
+ // Do some checks here...
+ $value = $_POST[ $key ][ $menu_item_db_id ];
+ } else {
+ $value = null;
+ }
+
+ } else {
+
+ $key = sprintf( 'menu-item-%s', $_key );
+
+ // Sanitize
+ if ( ! empty( $_POST[ $key ][ $menu_item_db_id ] ) ) {
+ // Do some checks here...
+ $value = $_POST[ $key ][ $menu_item_db_id ];
+ } else {
+ $value = null;
+ }
+ }
+
+ // Update
+ if ( ! is_null( $value ) ) {
+ update_post_meta( $menu_item_db_id, $key, $value );
+ } else {
+ delete_post_meta( $menu_item_db_id, $key );
+ }
+ }
+ }
+
+
+ /**
+ * @param $columns
+ *
+ * @return array
+ */
+ public static function _columns( $columns ) {
+ $columns = array_merge( $columns, self::$fields );
+
+ return $columns;
+ }
+
+
+ /**
+ *
+ */
+ public static function enqueue_nav_menus_scripts() {
+ add_action( 'admin_enqueue_scripts', array( __CLASS__, 'admin_enqueue_scripts' ) );
+ }
+
+
+ /**
+ *
+ */
+ public static function admin_enqueue_scripts() {
+ UM()->admin_enqueue()->load_nav_manus_scripts();
+
+ $menus = get_posts( 'post_type=nav_menu_item&numberposts=-1' );
+ $menu_restriction_data = array();
+
+ foreach ( $menus as $data ) {
+ $_nav_roles_meta = get_post_meta( $data->ID, 'menu-item-um_nav_roles', true );
+
+ $um_nav_roles = array();
+ if ( $_nav_roles_meta ) {
+ foreach ( $_nav_roles_meta as $key => $value ) {
+ if ( is_int( $key ) ) {
+ $um_nav_roles[] = $value;
+ }
+ }
+ }
+
+ $menu_restriction_data[ $data->ID ] = array(
+ 'um_nav_public' => get_post_meta( $data->ID, 'menu-item-um_nav_public', true ),
+ 'um_nav_roles' => $um_nav_roles,
+ );
+ }
+ wp_localize_script( 'um_admin_nav_manus', 'um_menu_restriction_data', $menu_restriction_data );
+ }
+
+
+ /**
+ *
+ */
+ public static function _wp_template() {
+ ?>
+
+