1 <?php
2
3 4 5 6 7 8 9 10
11
12 namespace WC_POS\Admin\Settings;
13
14 class Access extends Page {
15
16 protected static $instance;
17
18 19 20
21 public function __construct() {
22 if(!current_user_can('promote_users')){
23 $this->current_user_authorized = false;
24 }
25
26 $this->id = 'access';
27 $this->label = __( 'POS Access', 'woocommerce-pos' );
28
29
30 $this->caps = apply_filters('woocommerce_pos_capabilities', array(
31 'pos' => array(
32 'manage_woocommerce_pos',
33 'access_woocommerce_pos'
34 ),
35 'woo' => array(
36 'read_private_products',
37 'read_private_shop_orders',
38 'publish_shop_orders',
39 'list_users'
40 ),
41 ));
42 }
43
44 45 46 47
48 public function get($key = false){
49 return array(
50 'id' => $this->id,
51 'roles' => $this->get_role_caps()
52 );
53 }
54
55 56 57 58 59
60 private function get_role_caps(){
61 global $wp_roles;
62 $role_caps = array();
63
64 $roles = $wp_roles->roles;
65 if($roles): foreach($roles as $slug => $role):
66 $role_caps[$slug] = array(
67 'name' => $role['name'],
68 'capabilities' => array(
69 'pos' => array_intersect_key(
70 $role['capabilities'],
71 array_flip($this->caps['pos'])
72 ),
73 'woo' => array_intersect_key(
74 $role['capabilities'],
75 array_flip($this->caps['woo'])
76 )
77 )
78 );
79 endforeach; endif;
80
81 return $role_caps;
82 }
83
84 85 86 87
88 public function set( array $data ){
89 if(isset($data['roles'])){
90 $this->update_capabilities($data['roles']);
91 }
92 return $this->get();
93 }
94
95 96 97 98 99
100 private function update_capabilities( array $roles ){
101 foreach($roles as $slug => $array):
102
103 $role = get_role($slug);
104
105 if( $array['capabilities'] ) : foreach( $array['capabilities'] as $key => $caps ):
106 if( $caps ): foreach( $caps as $cap => $grant ):
107 if( in_array( $cap, $this->caps[$key] ) ){
108 $grant ? $role->add_cap($cap) : $role->remove_cap($cap);
109 }
110 endforeach; endif;
111 endforeach; endif;
112
113 endforeach;
114 }
115
116 117 118 119 120 121 122
123 public function delete(){
124 global $wp_roles;
125
126 $roles = $wp_roles->roles;
127 $caps = array_merge( $this->caps['pos'], $this->caps['woo'] );
128
129 if( $roles ): foreach( $roles as $slug => $array ):
130 $role = get_role($slug);
131 $action = ( $slug == 'administrator' || $slug == 'shop_manager' ) ? 'add_cap' : 'remove_cap';
132 if( $caps ): foreach( $caps as $cap ):
133 $role->$action($cap);
134 endforeach; endif;
135 endforeach; endif;
136
137 return $this->get();
138 }
139
140 }