Geen omschrijving

Capabilities.php 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace MailPoet\Config;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\WP\Functions as WPFunctions;
  5. use WP_Role;
  6. class Capabilities {
  7. const MEMBERS_CAP_GROUP_NAME = 'mailpoet';
  8. private $renderer = null;
  9. /** @var WPFunctions */
  10. private $wp;
  11. /** @var AccessControl */
  12. private $accessControl;
  13. public function __construct(
  14. $renderer = null,
  15. WPFunctions $wp = null
  16. ) {
  17. if ($renderer !== null) {
  18. $this->renderer = $renderer;
  19. }
  20. if ($wp == null) {
  21. $wp = new WPFunctions;
  22. }
  23. $this->wp = $wp;
  24. $this->accessControl = new AccessControl;
  25. }
  26. public function init() {
  27. $this->setupMembersCapabilities();
  28. }
  29. public function setupWPCapabilities() {
  30. $permissions = $this->accessControl->getDefaultPermissions();
  31. $roleObjects = [];
  32. foreach ($permissions as $name => $roles) {
  33. foreach ($roles as $role) {
  34. if (!isset($roleObjects[$role])) {
  35. $roleObjects[$role] = WPFunctions::get()->getRole($role);
  36. }
  37. if (!$roleObjects[$role] instanceof WP_Role) continue;
  38. $roleObjects[$role]->add_cap($name);
  39. }
  40. }
  41. }
  42. public function removeWPCapabilities() {
  43. $permissions = $this->accessControl->getDefaultPermissions();
  44. $roleObjects = [];
  45. foreach ($permissions as $name => $roles) {
  46. foreach ($roles as $role) {
  47. if (!isset($roleObjects[$role])) {
  48. $roleObjects[$role] = WPFunctions::get()->getRole($role);
  49. }
  50. if (!$roleObjects[$role] instanceof WP_Role) continue;
  51. $roleObjects[$role]->remove_cap($name);
  52. }
  53. }
  54. }
  55. public function setupMembersCapabilities() {
  56. $this->wp->addAction('admin_enqueue_scripts', [$this, 'enqueueMembersStyles']);
  57. $this->wp->addAction('members_register_cap_groups', [$this, 'registerMembersCapGroup']);
  58. $this->wp->addAction('members_register_caps', [$this, 'registerMembersCapabilities']);
  59. }
  60. public function enqueueMembersStyles() {
  61. WPFunctions::get()->wpEnqueueStyle(
  62. 'mailpoet-admin-global',
  63. Env::$assetsUrl . '/dist/css/' . $this->renderer->getCssAsset('mailpoet-admin.css')
  64. );
  65. }
  66. public function registerMembersCapGroup() {
  67. members_register_cap_group(
  68. self::MEMBERS_CAP_GROUP_NAME,
  69. [
  70. 'label' => WPFunctions::get()->__('MailPoet', 'mailpoet'),
  71. 'caps' => [],
  72. 'icon' => 'mailpoet-icon-logo',
  73. 'priority' => 30,
  74. ]
  75. );
  76. }
  77. public function registerMembersCapabilities() {
  78. $permissions = $this->accessControl->getPermissionLabels();
  79. foreach ($permissions as $name => $label) {
  80. $this->registerMembersCapability($name, $label);
  81. }
  82. }
  83. public function registerMembersCapability($name, $label) {
  84. members_register_cap(
  85. $name,
  86. [
  87. 'label' => $label,
  88. 'group' => self::MEMBERS_CAP_GROUP_NAME,
  89. ]
  90. );
  91. }
  92. }