Completed
Push — dna-menus-module ( 769bd6 )
by
unknown
303:22 queued 295:21
created

Menus::update_nav_menu()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace Automattic\Jetpack\Sync\Modules;
4
5
class Menus extends Jetpack_Sync_Module {
6
	private $nav_items_just_added = array();
7
8
	function name() {
9
		return 'menus';
10
	}
11
12
	public function init_listeners( $callable ) {
13
		add_action( 'wp_create_nav_menu', $callable, 10, 2 );
14
		add_action( 'wp_update_nav_menu', array( $this, 'update_nav_menu' ), 10, 2 );
15
		add_action( 'wp_add_nav_menu_item', array( $this, 'update_nav_menu_add_item' ), 10, 3 );
16
		add_action( 'wp_update_nav_menu_item', array( $this, 'update_nav_menu_update_item' ), 10, 3 );
17
		add_action( 'post_updated', array( $this, 'remove_just_added_menu_item' ), 10, 2 );
18
19
		add_action( 'jetpack_sync_updated_nav_menu', $callable, 10, 2 );
20
		add_action( 'jetpack_sync_updated_nav_menu_add_item', $callable, 10, 4 );
21
		add_action( 'jetpack_sync_updated_nav_menu_update_item', $callable, 10, 4 );
22
		add_action( 'delete_nav_menu', $callable, 10, 3 );
23
	}
24
25
	public function update_nav_menu( $menu_id, $menu_data = array() ) {
26
		if ( empty( $menu_data ) ) {
27
			return;
28
		}
29
		/**
30
		 * Helps sync log that a nav menu was updated.
31
		 *
32
		 * @since 5.0.0
33
		 *
34
		 * @param int $menu_id, the id of the menu
35
		 * @param object $menu_data
36
		 */
37
		do_action( 'jetpack_sync_updated_nav_menu', $menu_id, $menu_data );
38
	}
39
40
	public function update_nav_menu_add_item( $menu_id, $nav_item_id, $nav_item_args ) {
41
		$menu_data                    = wp_get_nav_menu_object( $menu_id );
42
		$this->nav_items_just_added[] = $nav_item_id;
43
		/**
44
		 * Helps sync log that a new menu item was added.
45
		 *
46
		 * @since 5.0.0
47
		 *
48
		 * @param int $menu_id, the id of the menu
49
		 * @param object $menu_data
50
		 * @param int $nav_item_id
51
		 * @param int $nav_item_args
52
		 */
53
		do_action( 'jetpack_sync_updated_nav_menu_add_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
54
	}
55
56
	public function update_nav_menu_update_item( $menu_id, $nav_item_id, $nav_item_args ) {
57
		if ( in_array( $nav_item_id, $this->nav_items_just_added ) ) {
58
			return;
59
		}
60
		$menu_data = wp_get_nav_menu_object( $menu_id );
61
		/**
62
		 * Helps sync log that an update to the menu item happened.
63
		 *
64
		 * @since 5.0.0
65
		 *
66
		 * @param int $menu_id, the id of the menu
67
		 * @param object $menu_data
68
		 * @param int $nav_item_id
69
		 * @param int $nav_item_args
70
		 */
71
		do_action( 'jetpack_sync_updated_nav_menu_update_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
72
	}
73
74
	public function remove_just_added_menu_item( $nav_item_id, $post_after ) {
75
		if ( 'nav_menu_item' !== $post_after->post_type ) {
76
			return;
77
		}
78
		$this->nav_items_just_added = array_diff( $this->nav_items_just_added, array( $nav_item_id ) );
79
	}
80
}
81