<?php /** * Operating System Condition logic swiftly crafted. * * @since 4.11.0 * * @package Divi * @sub-package Builder */ namespace Module\Field\DisplayConditions; /** * Operating System Condition Trait. */ trait OperatingSystemCondition { /** * Processes "Operating System" condition. * * @since 4.11.0 * * @param array $condition_settings Containing all settings of the condition. * * @return boolean Condition output. */ protected function _process_operating_system_condition( $condition_settings ) { $display_rule = isset( $condition_settings['operatingSystemDisplay'] ) ? $condition_settings['operatingSystemDisplay'] : 'is'; $operating_systems_raw = isset( $condition_settings['operatingSystems'] ) ? $condition_settings['operatingSystems'] : ''; $operating_systems = explode( '|', $operating_systems_raw ); $current_os = $this->_get_os(); $should_display = array_intersect( $operating_systems, (array) $current_os ) ? true : false; return ( 'is' === $display_rule ) ? $should_display : ! $should_display; } /** * Returns the Operating System name based on user agent. * * @since 4.11.0 * * @return string */ protected function _get_os() { $os_platform = 'unknown'; // phpcs:ignore ET.Sniffs.ValidatedSanitizedInput -- User Agent is not stored or displayed therefore XSS safe. $user_agent = $_SERVER['HTTP_USER_AGENT']; $os_array = array( '/windows nt/i' => 'windows', '/macintosh|mac os x/i' => 'macos', '/linux/i' => 'linux', '/android/i' => 'android', '/iphone/i' => 'iphone', '/ipad/i' => 'ipad', '/ipod/i' => 'ipod', '/appletv/i' => 'appletv', '/playstation/i' => 'playstation', '/xbox/i' => 'xbox', '/nintendo/i' => 'nintendo', '/webos|hpwOS/i' => 'webos', ); foreach ( $os_array as $regex => $value ) { if ( preg_match( $regex, $user_agent ) ) { $os_platform = $value; } } return $os_platform; } }