-
Notifications
You must be signed in to change notification settings - Fork 0
/
Base.php
83 lines (63 loc) · 1.86 KB
/
Base.php
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
<?php
namespace Expresser\Role;
use Expresser\Support\Model;
use WP_Role;
abstract class Base extends Model
{
public $name;
public $label;
protected $role;
public function __construct(WP_Role $role = null)
{
$this->role = $role ?: new WP_Role($this->name, $this->capabilities);
parent::__construct((array) $this->role);
}
public function newQuery()
{
return (new Builder(new Query))->setModel($this)->name($this->name);
}
// TODO: Prevents access to WP_Role capabilities
public function getCapabilitiesAttribute()
{
return [];
}
public function addCapability($capability)
{
$this->role->add_cap($capability);
}
public function removeCapability($capability)
{
$this->role->remove_cap($capability);
}
public static function registerHooks($class)
{
add_action('after_switch_theme', [$class, 'registerRole'], PHP_INT_MAX);
add_action('after_switch_theme', [$class, 'registerCapabilities'], PHP_INT_MAX);
add_action('switch_theme', [$class, 'deregisterCapabilities'], PHP_INT_MAX);
add_action('switch_theme', [$class, 'deregisterRole'], PHP_INT_MAX);
}
public static function registerRole()
{
$role = new static();
add_role($role->name, $role->label);
}
public static function deregisterRole()
{
$role = new static();
remove_role($role->name);
}
public static function registerCapabilities()
{
$role = new static();
foreach ($role->capabilities as $capability) {
$role->addCapability($capability);
}
}
public static function deregisterCapabilities()
{
$role = new static();
foreach ($role->capabilities as $capability) {
$role->removeCapability($capability);
}
}
}