You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.1 KiB
159 lines
3.1 KiB
9 months ago
|
<?php
|
||
|
/**
|
||
|
* @package Freemius
|
||
|
* @copyright Copyright (c) 2015, Freemius, Inc.
|
||
|
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
||
|
* @since 1.0.3
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get object's public variables.
|
||
|
*
|
||
|
* @author Vova Feldman (@svovaf)
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param object $object
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function fs_get_object_public_vars( $object ) {
|
||
|
return get_object_vars( $object );
|
||
|
}
|
||
|
|
||
|
class FS_Entity {
|
||
|
/**
|
||
|
* @var number
|
||
|
*/
|
||
|
public $id;
|
||
|
/**
|
||
|
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
||
|
*/
|
||
|
public $updated;
|
||
|
/**
|
||
|
* @var string Datetime value in 'YYYY-MM-DD HH:MM:SS' format.
|
||
|
*/
|
||
|
public $created;
|
||
|
|
||
|
/**
|
||
|
* @param bool|object $entity
|
||
|
*/
|
||
|
function __construct( $entity = false ) {
|
||
|
if ( ! ( $entity instanceof stdClass ) && ! ( $entity instanceof FS_Entity ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$props = fs_get_object_public_vars( $this );
|
||
|
|
||
|
foreach ( $props as $key => $def_value ) {
|
||
|
$this->{$key} = isset( $entity->{$key} ) ?
|
||
|
$entity->{$key} :
|
||
|
$def_value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static function get_type() {
|
||
|
return 'type';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @author Vova Feldman (@svovaf)
|
||
|
* @since 1.0.6
|
||
|
*
|
||
|
* @param FS_Entity $entity1
|
||
|
* @param FS_Entity $entity2
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
static function equals( $entity1, $entity2 ) {
|
||
|
if ( is_null( $entity1 ) && is_null( $entity2 ) ) {
|
||
|
return true;
|
||
|
} else if ( is_object( $entity1 ) && is_object( $entity2 ) ) {
|
||
|
return ( $entity1->id == $entity2->id );
|
||
|
} else if ( is_object( $entity1 ) ) {
|
||
|
return is_null( $entity1->id );
|
||
|
} else {
|
||
|
return is_null( $entity2->id );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private $_is_updated = false;
|
||
|
|
||
|
/**
|
||
|
* Update object property.
|
||
|
*
|
||
|
* @author Vova Feldman (@svovaf)
|
||
|
* @since 1.0.9
|
||
|
*
|
||
|
* @param string|array[string]mixed $key
|
||
|
* @param string|bool $val
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function update( $key, $val = false ) {
|
||
|
if ( ! is_array( $key ) ) {
|
||
|
$key = array( $key => $val );
|
||
|
}
|
||
|
|
||
|
$is_updated = false;
|
||
|
|
||
|
foreach ( $key as $k => $v ) {
|
||
|
if ( $this->{$k} === $v ) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if ( ( is_string( $this->{$k} ) && is_numeric( $v ) ||
|
||
|
( is_numeric( $this->{$k} ) && is_string( $v ) ) ) &&
|
||
|
$this->{$k} == $v
|
||
|
) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Update value.
|
||
|
$this->{$k} = $v;
|
||
|
|
||
|
$is_updated = true;
|
||
|
}
|
||
|
|
||
|
$this->_is_updated = $is_updated;
|
||
|
|
||
|
return $is_updated;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks if entity was updated.
|
||
|
*
|
||
|
* @author Vova Feldman (@svovaf)
|
||
|
* @since 1.0.9
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function is_updated() {
|
||
|
return $this->_is_updated;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $id
|
||
|
*
|
||
|
* @author Vova Feldman (@svovaf)
|
||
|
* @since 1.1.2
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
static function is_valid_id($id){
|
||
|
return is_numeric($id);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @author Leo Fajardo (@leorw)
|
||
|
* @since 2.3.1
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function get_class_name() {
|
||
|
return get_called_class();
|
||
|
}
|
||
|
}
|