/home/preegmxb/gymnyou.com/wp-content/plugins/canvas/gutenberg/utils/is-field-visible/index.php
<?php
/**
 * Check if field visible.
 *
 * @package Canvas
 */

if ( ! class_exists( 'CNVS_Gutenberg_Utils_Is_Field_Visible' ) ) {
	/**
	 * Class Gutenberg Utils Is Field Visible.
	 */
	class CNVS_Gutenberg_Utils_Is_Field_Visible {
		/**
		 * Check active_callback in custom controls.
		 *
		 * @param array $fieldData field data.
		 * @param array $attributes block attributes.
		 * @param array $allFields all fields.
		 * @param array $prepareAttrs prepare attributes for server render.
		 *
		 * @return boolean
		 */
		public static function check( $fieldData, $attributes, $allFields, $prepareAttrs = true ) {
			$result = true;

			// if ( $prepareAttrs ) {
			// 	$attributes = apply_filters( 'canvas_block_prepare_server_render_attributes', $attributes, array( 'fields' => $allFields ) );
			// }

			if ( isset( $fieldData['active_callback'] ) ) {
				$result = self::checkCondition( $fieldData['active_callback'], $attributes, 'AND' );
			}

			return $result;
		}

		/**
		 * Compare 2 values
		 *
		 * @param mixed  $lval Left value.
		 * @param string $operator Operator.
		 * @param mixed  $rval Right value.
		 *
		 * @return boolean
		 */
		public static function compare( $lval, $operator, $rval ) {
			$check_result = true;

			switch ( $operator ) {
				case '==':
					$check_result = $lval == $rval;
					break;
				case '===':
					$check_result = $lval === $rval;
					break;
				case '!=':
					$check_result = $lval != $rval;
					break;
				case '!==':
					$check_result = $lval !== $rval;
					break;
				case '>=':
					$check_result = $lval >= $rval;
					break;
				case '<=':
					$check_result = $lval <= $rval;
					break;
				case '>':
					$check_result = $lval > $rval;
					break;
				case '<':
					$check_result = $lval < $rval;
					break;
				case 'AND':
					$check_result = $lval && $rval;
					break;
				case 'OR':
					$check_result = $lval || $rval;
					break;
				default:
					$check_result = $lval;
					break;
			}

			return $check_result;
		}

		/**
		 * Check condition
		 *
		 * @param array  $conditions - Conditions array.
		 * @param array  $attributes - Available block attributes.
		 * @param string $relation - Can be one of 'AND' or 'OR'.
		 *
		 * @return boolean
		 */
		public static function checkCondition( $conditions, $attributes, $relation ) {
			$childRelation = ( 'AND' === $relation ) ? 'OR' : 'AND';

			// By default result will be TRUE for relation AND and FALSE for relation OR.
			$result = $relation === 'AND';

			foreach ( $conditions as $data ) {
				if ( is_array( $data ) && ! isset( $data['field'] ) ) {
					$result = self::compare( $result, $relation, self::checkCondition( $data, $attributes, $childRelation ) );
				} elseif ( isset( $data['field'] ) ) {
					$splitValName = explode( '.', $data['field'] );
					$fieldVal     = null;

					// Check for array values like: toggleListName['option1'].
					if ( 2 === count( $splitValName ) && isset( $attributes[ $splitValName[0] ] ) && isset( $attributes[ $splitValName[0] ][ $splitValName[1] ] ) ) {
						$fieldVal = $attributes[ $splitValName[0] ][ $splitValName[1] ];
					}

					// Check for normal values.
					if ( null === $fieldVal && isset( $attributes[ $data['field'] ] ) ) {
						$fieldVal = $attributes[ $data['field'] ];
					}

					// Check count.
					if ( isset( $data['count'] ) ) {
						$count    = explode( $data['count'], $fieldVal );
						$fieldVal = count( $count ) - 1;
					}

					if ( null !== $fieldVal ) {
						$result = self::compare( $result, $relation, self::compare( $fieldVal, isset( $data['operator'] ) ? $data['operator'] : '===', isset( $data['value'] ) ? $data['value'] : true ) );
					}
				}
			}

			return $result;
		}
	}
}