Form_Category

Class representing a form category.

Description

Source

File: src/db-objects/form-categories/form-category.php

class Form_Category extends Core_Model {
	use Sitewide_Model_Trait;

	/**
	 * Constructor.
	 *
	 * Sets the ID and fetches relevant data.
	 *
	 * @since 1.0.0
	 *
	 * @param Leaves_And_Love\Plugin_Lib\DB_Objects\Manager $manager The manager instance for the model.
	 * @param WP_Post|null                                  $db_obj  Optional. The database object or
	 *                                                               null for a new instance.
	 */
	public function __construct( $manager, $db_obj = null ) {
		parent::__construct( $manager, $db_obj );

		$this->redundant_prefix = 'term_';
	}

	/**
	 * Magic isset-er.
	 *
	 * Checks whether a property is set.
	 *
	 * @since 1.0.0
	 *
	 * @param string $property Property to check for.
	 * @return bool True if the property is set, false otherwise.
	 */
	public function __isset( $property ) {
		switch ( $property ) {
			case 'id':
			case 'title':
				return true;
		}

		return parent::__isset( $property );
	}

	/**
	 * Magic getter.
	 *
	 * Returns a property value.
	 *
	 * @since 1.0.0
	 *
	 * @param string $property Property to get.
	 * @return mixed Property value, or null if property is not set.
	 */
	public function __get( $property ) {
		switch ( $property ) {
			case 'id':
				return $this->original->term_id;
			case 'title':
				return $this->original->name;
		}

		return parent::__get( $property );
	}

	/**
	 * Magic setter.
	 *
	 * Sets a property value.
	 *
	 * @since 1.0.0
	 *
	 * @param string $property Property to set.
	 * @param mixed  $value    Property value.
	 */
	public function __set( $property, $value ) {
		$found = false;
		$changed = false;

		switch ( $property ) {
			case 'id':
			case 'count':
				return;
			case 'title':
				$found = true;
				if ( $this->original->name !== $value ) {
					$this->original->name = $value;
					$changed = true;
				}
				break;
		}

		if ( $found ) {
			if ( $changed && ! in_array( $property, $this->pending_properties, true ) ) {
				$this->pending_properties[] = $property;
			}

			return;
		}

		parent::__set( $property, $value );
	}

	/**
	 * Returns all current values as $property => $value pairs.
	 *
	 * @since 1.0.0
	 *
	 * @param bool $pending_only Whether to only return pending properties. Default false.
	 * @return array Array of $property => $value pairs.
	 */
	protected function get_property_values( $pending_only = false ) {
		$properties = array( 'id', 'title', 'slug', 'description', 'parent', 'count' );
		if ( $pending_only ) {
			$properties = $this->pending_properties;
		}

		$values = array();
		foreach ( $properties as $property ) {
			$values[ $property ] = $this->__get( $property );
		}

		return $values;
	}

	/**
	 * Fills the $original property with a default object.
	 *
	 * This method is called if a new object has been instantiated.
	 *
	 * @since 1.0.0
	 */
	protected function set_default_object() {
		$this->original = new WP_Term( new stdClass() );
	}

	/**
	 * Returns the names of all properties that should be accessible on the Core object.
	 *
	 * @since 1.0.0
	 *
	 * @return array Array of property names.
	 */
	protected function get_db_fields() {
		return array(
			'slug',
			'description',
			'parent',
			'count',
		);
	}
}

Changelog

Changelog
Version Description
1.0.0 Introduced.

Methods