Files
2025-02-24 22:33:42 +01:00

103 lines
2.0 KiB
PHP

<?php
/**
* @package Polylang-Pro
*/
defined( 'ABSPATH' ) || exit;
/**
* Class to manage user meta of a metabox button.
*
* @since 3.6
*/
class PLL_Toggle_User_Meta {
/**
* Meta name.
*
* @var string
*/
private $meta_name;
/**
* Constructor.
*
* @since 3.6
*
* @param string $meta_name Meta name the object will manage.
*/
public function __construct( string $meta_name ) {
$this->meta_name = $meta_name;
}
/**
* Returns the user meta name storing the enabled/disabled statuses of the action per post type.
*
* @since 3.6
*
* @return string The user meta name.
*/
public function get_meta_name(): string {
return $this->meta_name;
}
/**
* Tells whether the button is active or not.
*
* @since 2.1
*
* @global $post
*
* @return bool
*/
public function is_active() {
global $post;
$user_meta = $this->get();
return ! empty( $user_meta[ $post->post_type ] );
}
/**
* Returns the user meta value.
*
* @since 3.6
*
* @return bool[]
*/
public function get() {
$user_meta = get_user_meta( (int) get_current_user_id(), $this->get_meta_name(), true );
return is_array( $user_meta ) ? $user_meta : array();
}
/**
* Updates the user meta.
*
* @since 3.6
*
* @param bool[] $user_meta An array with post type as key and boolean as value.
* @param WP_User|null $user An instance of `WP_User`.
* @return bool
*/
public function update( $user_meta, $user = null ) {
if ( ! $user instanceof WP_User ) {
$user = wp_get_current_user();
}
return (bool) update_user_meta( (int) $user->ID, $this->get_meta_name(), $user_meta );
}
/**
* Saves the button state.
*
* @since 2.1
*
* @param string $post_type Current post type.
* @param bool $active New requested button state.
* @return bool Whether the new button state is accepted or not.
*/
public function toggle_option( $post_type, $active ) {
$user_meta = $this->get();
$user_meta[ $post_type ] = (bool) $active;
return $this->update( $user_meta );
}
}