<?php class WPCF7_Validation implements ArrayAccess { private $invalid_fields = array(); private $container = array(); public function __construct() { $this->container = array( 'valid' => true, 'reason' => array(), 'idref' => array(), ); } public function invalidate( $context, $message ) { if ( $context instanceof WPCF7_FormTag ) { $tag = $context; } elseif ( is_array( $context ) ) { $tag = new WPCF7_FormTag( $context ); } elseif ( is_string( $context ) ) { $tags = wpcf7_scan_form_tags( array( 'name' => trim( $context ) ) ); $tag = $tags ? new WPCF7_FormTag( $tags[0] ) : null; } $name = ! empty( $tag ) ? $tag->name : null; if ( empty( $name ) or ! wpcf7_is_name( $name ) ) { return; } if ( $this->is_valid( $name ) ) { $id = $tag->get_id_option(); if ( empty( $id ) or ! wpcf7_is_name( $id ) ) { $id = null; } $this->invalid_fields[$name] = array( 'reason' => (string) $message, 'idref' => $id, ); } } public function is_valid( $name = null ) { if ( ! empty( $name ) ) { return ! isset( $this->invalid_fields[$name] ); } else { return empty( $this->invalid_fields ); } } public function get_invalid_fields() { return $this->invalid_fields; } public function offsetSet( $offset, $value ) { if ( isset( $this->container[$offset] ) ) { $this->container[$offset] = $value; } if ( 'reason' == $offset and is_array( $value ) ) { foreach ( $value as $k => $v ) { $this->invalidate( $k, $v ); } } } public function offsetGet( $offset ) { if ( isset( $this->container[$offset] ) ) { return $this->container[$offset]; } } public function offsetExists( $offset ) { return isset( $this->container[$offset] ); } public function offsetUnset( $offset ) { } }