balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

user-favorites.php (2759B)


      1 <?php
      2 namespace Elementor\Modules\Library;
      3 
      4 if ( ! defined( 'ABSPATH' ) ) {
      5 	exit; // Exit if accessed directly.
      6 }
      7 
      8 class User_Favorites {
      9 	const USER_META_KEY = 'elementor_library_favorites';
     10 
     11 	/**
     12 	 * @var int
     13 	 */
     14 	private $user_id;
     15 
     16 	/**
     17 	 * @var array|null
     18 	 */
     19 	private $cache;
     20 
     21 	/**
     22 	 * User_Favorites constructor.
     23 	 *
     24 	 * @param $user_id
     25 	 */
     26 	public function __construct( $user_id ) {
     27 		$this->user_id = $user_id;
     28 	}
     29 
     30 	/**
     31 	 * @param null  $vendor
     32 	 * @param null  $resource
     33 	 * @param false $ignore_cache
     34 	 *
     35 	 * @return array
     36 	 */
     37 	public function get( $vendor = null, $resource = null, $ignore_cache = false ) {
     38 		if ( $ignore_cache || empty( $this->cache ) ) {
     39 			$this->cache = get_user_meta( $this->user_id, self::USER_META_KEY, true );
     40 		}
     41 
     42 		if ( ! $this->cache || ! is_array( $this->cache ) ) {
     43 			return [];
     44 		}
     45 
     46 		if ( $vendor && $resource ) {
     47 			$key = $this->get_key( $vendor, $resource );
     48 
     49 			return isset( $this->cache[ $key ] ) ? $this->cache[ $key ] : [];
     50 		}
     51 
     52 		return $this->cache;
     53 	}
     54 
     55 	/**
     56 	 * @param $vendor
     57 	 * @param $resource
     58 	 * @param $id
     59 	 *
     60 	 * @return bool
     61 	 */
     62 	public function exists( $vendor, $resource, $id ) {
     63 		return in_array( $id, $this->get( $vendor, $resource ), true );
     64 	}
     65 
     66 	/**
     67 	 * @param       $vendor
     68 	 * @param       $resource
     69 	 * @param array $value
     70 	 *
     71 	 * @return $this
     72 	 * @throws \Exception
     73 	 */
     74 	public function save( $vendor, $resource, $value = [] ) {
     75 		$all_favorites = $this->get();
     76 
     77 		$all_favorites[ $this->get_key( $vendor, $resource ) ] = $value;
     78 
     79 		$result = update_user_meta( $this->user_id, self::USER_META_KEY, $all_favorites );
     80 
     81 		if ( false === $result ) {
     82 			throw new \Exception( __( 'Failed to save user favorites', 'elementor' ) );
     83 		}
     84 
     85 		$this->cache = $all_favorites;
     86 
     87 		return $this;
     88 	}
     89 
     90 	/**
     91 	 * @param $vendor
     92 	 * @param $resource
     93 	 * @param $id
     94 	 *
     95 	 * @return $this
     96 	 * @throws \Exception
     97 	 */
     98 	public function add( $vendor, $resource, $id ) {
     99 		$favorites = $this->get( $vendor, $resource );
    100 
    101 		if ( in_array( $id, $favorites, true ) ) {
    102 			return $this;
    103 		}
    104 
    105 		$favorites[] = $id;
    106 
    107 		$this->save( $vendor, $resource, $favorites );
    108 
    109 		return $this;
    110 	}
    111 
    112 	/**
    113 	 * @param $vendor
    114 	 * @param $resource
    115 	 * @param $id
    116 	 *
    117 	 * @return $this
    118 	 * @throws \Exception
    119 	 */
    120 	public function remove( $vendor, $resource, $id ) {
    121 		$favorites = $this->get( $vendor, $resource );
    122 
    123 		if ( ! in_array( $id, $favorites, true ) ) {
    124 			return $this;
    125 		}
    126 
    127 		$favorites = array_filter( $favorites, function ( $item ) use ( $id ) {
    128 			return $item !== $id;
    129 		} );
    130 
    131 		$this->save( $vendor, $resource, $favorites );
    132 
    133 		return $this;
    134 	}
    135 
    136 	/**
    137 	 * @param $vendor
    138 	 * @param $resource
    139 	 *
    140 	 * @return string
    141 	 */
    142 	private function get_key( $vendor, $resource ) {
    143 		return "{$vendor}/{$resource}";
    144 	}
    145 }