Addon.php
2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
namespace ACP\Bookmark;
use AC\ListScreen;
use AC\ListScreenRepository\Storage;
use AC\Registerable;
use AC\Request;
use ACP\Bookmark\Controller\RequestSetter;
use ACP\Bookmark\Setting;
class Addon implements Registerable {
/**
* @var Storage
*/
private $storage;
/**
* @var Request
*/
private $request;
/**
* @var SegmentRepository
*/
private $segment_repository;
public function __construct( Storage $storage, Request $request, SegmentRepository $segment_repository ) {
$this->storage = $storage;
$this->request = $request;
$this->segment_repository = $segment_repository;
}
public function register() {
add_action( 'wp_ajax_acp_search_segment_request', [ $this, 'segment_request' ] );
add_action( 'ac/table/list_screen', [ $this, 'request_setter' ] );
add_action( 'acp/list_screen/deleted', [ $this, 'delete_segments_after_list_screen_deleted' ] );
add_action( 'deleted_user', [ $this, 'delete_segments_after_user_deleted' ] );
}
public function request_setter( ListScreen $list_screen ) {
$search_setter = new RequestSetter( new Setting\PreferredSegment( $list_screen, $this->segment_repository ) );
$search_setter->handle( $this->request );
}
public function segment_request() {
check_ajax_referer( 'ac-ajax' );
$segment = new Controller\Segment(
$this->storage,
$this->request,
$this->segment_repository
);
$segment->dispatch( $this->request->get( 'method' ) );
}
/**
* @param ListScreen $list_screen
*/
public function delete_segments_after_list_screen_deleted( ListScreen $list_screen ) {
$segments = $this->segment_repository->find_all( [
SegmentRepository::FILTER_LIST_SCREEN => $list_screen->get_id(),
] );
foreach ( $segments as $segment ) {
$this->segment_repository->delete( $segment->get_id() );
}
}
/**
* @param int $user_id
*/
public function delete_segments_after_user_deleted( $user_id ) {
$segments = $this->segment_repository->find_all( [
SegmentRepository::FILTER_USER => (int) $user_id,
SegmentRepository::FILTER_GLOBAL => false,
] );
foreach ( $segments as $segment ) {
$this->segment_repository->delete( $segment->get_id() );
}
}
}