Admin
3 years ago
Commands
4 years ago
Db
4 years ago
Ecommerce
3 years ago
Report
4 years ago
Site
3 years ago
TrackingCode
4 years ago
Updater
4 years ago
User
3 years ago
WpStatistics
4 years ago
views
4 years ago
API.php
4 years ago
Access.php
4 years ago
AjaxTracker.php
5 years ago
Annotations.php
4 years ago
Bootstrap.php
4 years ago
Capabilities.php
4 years ago
Compatibility.php
4 years ago
Email.php
4 years ago
Installer.php
4 years ago
Logger.php
4 years ago
OptOut.php
4 years ago
Paths.php
4 years ago
PrivacyBadge.php
4 years ago
RedirectOnActivation.php
4 years ago
Referral.php
4 years ago
Roles.php
4 years ago
ScheduledTasks.php
4 years ago
Settings.php
4 years ago
Site.php
3 years ago
TrackingCode.php
4 years ago
Uninstaller.php
4 years ago
Updater.php
4 years ago
User.php
4 years ago
Access.php
74 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Matomo - free/libre analytics platform |
| 4 | * |
| 5 | * @link https://matomo.org |
| 6 | * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later |
| 7 | * @package matomo |
| 8 | */ |
| 9 | |
| 10 | namespace WpMatomo; |
| 11 | |
| 12 | use WpMatomo\User\Sync; |
| 13 | |
| 14 | if ( ! defined( 'ABSPATH' ) ) { |
| 15 | exit; // if accessed directly |
| 16 | } |
| 17 | |
| 18 | class Access { |
| 19 | public static $matomo_permissions = [ |
| 20 | Capabilities::KEY_NONE => 'None', |
| 21 | Capabilities::KEY_VIEW => 'View', |
| 22 | Capabilities::KEY_WRITE => 'Write', |
| 23 | Capabilities::KEY_ADMIN => 'Admin', |
| 24 | ]; |
| 25 | |
| 26 | /** |
| 27 | * @var Settings |
| 28 | */ |
| 29 | private $settings; |
| 30 | |
| 31 | public function __construct( Settings $settings ) { |
| 32 | $this->settings = $settings; |
| 33 | } |
| 34 | |
| 35 | public function get_permission_for_role( $role_name ) { |
| 36 | $options = $this->settings->get_global_option( Settings::OPTION_KEY_CAPS_ACCESS ); |
| 37 | |
| 38 | $role = get_role( $role_name ); |
| 39 | if ( $role && isset( $options[ $role_name ] ) ) { |
| 40 | return $options[ $role_name ]; |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | public function save( $values ) { |
| 45 | global $wp_roles; |
| 46 | |
| 47 | $roles = new Roles( $this->settings ); |
| 48 | $available_roles = $roles->get_available_roles_for_configuration(); |
| 49 | |
| 50 | $caps_to_store = []; |
| 51 | foreach ( $values as $role => $matomo_permission ) { |
| 52 | if ( isset( $available_roles[ $role ] ) && |
| 53 | $wp_roles->is_role( $role ) |
| 54 | && array_key_exists( $matomo_permission, self::$matomo_permissions ) ) { |
| 55 | $caps_to_store[ $role ] = $matomo_permission; |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | // we can't add the capabilities to the role directly using say $wp_roles->add_role cause it would not be |
| 60 | // synced across sites when the plugin is network activated |
| 61 | $this->settings->apply_changes( [ Settings::OPTION_KEY_CAPS_ACCESS => $caps_to_store ] ); |
| 62 | |
| 63 | $sync = new Sync(); |
| 64 | $sync->sync_current_users(); |
| 65 | |
| 66 | $wp_roles->init_roles(); |
| 67 | |
| 68 | if ( $this->settings->is_network_enabled() ) { |
| 69 | // we do this in the background syncing across all sites... |
| 70 | wp_schedule_single_event( time() + 10, ScheduledTasks::EVENT_SYNC ); |
| 71 | } |
| 72 | } |
| 73 | } |
| 74 |