76 lines
1.8 KiB
PHP
76 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* Control condition check.
|
|
*
|
|
* @package visual-portfolio
|
|
*/
|
|
|
|
/**
|
|
* Visual_Portfolio_Control_Get_Value
|
|
*/
|
|
class Visual_Portfolio_Control_Get_Value {
|
|
/**
|
|
* Get control value.
|
|
* Supported array names like `images[3].format`
|
|
*
|
|
* @param string $name - control name.
|
|
* @param array $attributes - block attributes.
|
|
*
|
|
* @return mixed value.
|
|
*/
|
|
public static function get( $name, $attributes ) {
|
|
$val = isset( $attributes[ $name ] ) ? $attributes[ $name ] : null;
|
|
|
|
// Parse arrays and objects.
|
|
// Example `images[3].format`.
|
|
if ( null !== $val && preg_match( '/[\[\.]/', $name ) ) {
|
|
// Find parts, used for objects.
|
|
// Example `images.format`.
|
|
$val_object_parts = explode( '.', $name );
|
|
$val_parts = array();
|
|
|
|
if ( $val_object_parts && ! empty( $val_object_parts ) ) {
|
|
// Find parts, used for arrays.
|
|
// Example `images[3]`.
|
|
foreach ( $val_object_parts as $obj_part ) {
|
|
if ( preg_match( '/[\[]/', $obj_part ) ) {
|
|
$val_array_parts = preg_split( '/[\[\]]/', $obj_part );
|
|
|
|
if ( $val_array_parts && ! empty( $val_array_parts ) ) {
|
|
foreach ( $val_array_parts as $arr_part ) {
|
|
if ( '' !== $arr_part ) {
|
|
$arr_part_int = (int) $arr_part;
|
|
if ( "$arr_part_int" === $arr_part ) {
|
|
$val_parts[] = $arr_part_int;
|
|
} else {
|
|
$val_parts[] = $arr_part;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$val_parts[] = $obj_part;
|
|
}
|
|
}
|
|
|
|
// Try to find value in attributes.
|
|
if ( ! empty( $val_parts ) ) {
|
|
$current_val = $attributes;
|
|
|
|
foreach ( $val_parts as $part_name ) {
|
|
if ( $current_val && isset( $current_val[ $part_name ] ) ) {
|
|
$current_val = $current_val[ $part_name ];
|
|
} else {
|
|
$current_val = null;
|
|
}
|
|
}
|
|
|
|
$val = $current_val;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $val;
|
|
}
|
|
}
|