port->get_data( 'user-groups' ); foreach ( $data as &$user_group ) { $user_group['users'] = $context->map_user_list( $user_group['users'] ); $user_group['roles'] = $context->map_role_list( $user_group['roles'] ); } return $export->with_data( 'user-groups', $data ); } public function get_user_paths(): array { return [ '*.users' ]; } public function get_role_paths(): array { return [ '*.roles' ]; } } ]; } public function export( $options ): Result { return Result::success( array_map( static function ( User_Group $group ) { return [ 'id' => $group->get_id(), 'label' => $group->get_label(), 'users' => array_map( [ Export::class, 'format_user' ], $group->get_users() ), 'roles' => array_map( [ Export::class, 'format_role' ], $group->get_roles() ), 'canonical' => $group->get_canonical_roles(), 'min_role' => $group->get_min_role(), ]; }, $this->repository->all() ) ); } public function import( Export $from, Import_Context $context ): Result { array_map( [ $this->repository, 'delete' ], $this->repository->all() ); $result = Result::success(); foreach ( $from->get_data( $this->get_export_slug() ) as $config ) { $user_group = new User_Group( $config['id'] ); $user_group->set_label( $config['label'] ); $user_group->set_canonical_roles( $config['canonical'] ); $user_group->set_min_role( $config['min_role'] ); foreach ( $config['roles'] as $role ) { $user_group->add_role( $role['slug'] ); } foreach ( $config['users'] as $user ) { if ( $user = get_userdata( $user['id'] ) ) { $user_group->add_user( $user ); } } try { $this->repository->persist( $user_group ); } catch ( \Exception $e ) { $result->add_warning_message( sprintf( __( 'Could not import \'%1$s\' User Group: %2$s', 'better-wp-security' ), $config['label'], $e->getMessage() ) ); } } return $result; } }