rep_install(); } public function rep_instances(): array { return array( new Advanced_Rules\Must_Equal_Rule(), new Advanced_Rules\Must_Contain_Characters_Rule(), new Advanced_Rules\Must_Not_Contain_Characters_Rule(), new Advanced_Rules\Match_Regexp_Rule(), new Advanced_Rules\Match_Not_Regexp_Rule(), new Advanced_Rules\Server_Side_Rule(), ); } public function validate_block( Field_Data_Parser $parser ) { $validation = $parser->get_setting( 'validation' ); $rules = $validation['rules'] ?? array(); $this->prepare_rules( $rules ); foreach ( $rules as $index => $rule_attrs ) { try { $rule = $this->get_item( $rule_attrs['type'] ?? '' ); } catch ( Repository_Exception $exception ) { continue; } $rule_attrs['_rule_index'] = $index; $rule->set_settings( $rule_attrs ); $rule->validate_field( $parser ); } } public function get_ssr(): Advanced_Rules\Server_Side_Rule { try { /** @var Advanced_Rules\Server_Side_Rule $rule */ $rule = $this->get_item( Advanced_Rules\Server_Side_Rule::class ); } catch ( Repository_Exception $exception ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped wp_die( $exception->getMessage() ); } return $rule; } public function prepare_rules( array &$rules ) { foreach ( $rules as &$rule ) { // Rules live in the form's own blocks (post_content), writable only // with `edit_post` - never taken from the request, even on the REST // validation route, which reloads them via Block_Helper::get_blocks_by_post(). $rule['value'] = jet_fb_parse_dynamic_trusted( $rule['value'] ?? '' ); } } /** * @param string $name * * @return Advanced_Rules\Rule * @throws Repository_Exception */ public function get_item( string $name ): Advanced_Rules\Rule { return $this->rep_get_item( $name ); } }