diff --git a/includes/admin/assets/js/um-admin-nav-menu.js b/includes/admin/assets/js/um-admin-nav-menu.js
new file mode 100644
index 00000000..8450a0ef
--- /dev/null
+++ b/includes/admin/assets/js/um-admin-nav-menu.js
@@ -0,0 +1,36 @@
+jQuery(document).ready(function ($) {
+ var template = wp.template( 'um-nav-menus-fields' );
+
+ $( document ).on( 'menu-item-added', function ( e, $menuMarkup ) {
+ var id = $( $menuMarkup ).attr('id').substr(10);
+
+ 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(){
+ var id = $(this).attr('id').substr(10);
+ 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/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php
index e26be8e7..74e818ce 100644
--- a/includes/admin/core/class-admin-enqueue.php
+++ b/includes/admin/core/class-admin-enqueue.php
@@ -339,6 +339,15 @@ if ( ! class_exists( 'Admin_Enqueue' ) ) {
}
+ /***
+ *** @Load jQuery custom code
+ ***/
+ function load_nav_manus_scripts() {
+
+ wp_register_script( 'um_admin_nav_manus', $this->js_url . 'um-admin-nav-menu.js', array('jquery','wp-util'), '', true );
+ wp_enqueue_script( 'um_admin_nav_manus' );
+
+ }
/***
*** @Load AJAX
diff --git a/includes/core/um-navmenu-walker-edit.php b/includes/core/um-navmenu-walker-edit.php
deleted file mode 100644
index c48c9010..00000000
--- a/includes/core/um-navmenu-walker-edit.php
+++ /dev/null
@@ -1,160 +0,0 @@
- __( 'Display Mode'),
- 'um_nav_roles' => __('By Role')
-
- );
- }
-
-
- 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; ?>
-
-
-
-
-
-
-
- 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 e474e9bc..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() {
+ ?>
+
+