PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.31.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.31.2
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Form / FormValidationService.php
surecart / app / src / Form Last commit date
FormValidationService.php 3 years ago
FormValidationService.php
95 lines
1 <?php
2
3 namespace SureCart\Form;
4
5 /**
6 * Handles server-side form validation of gutenberg blocks.
7 */
8 class FormValidationService {
9 /**
10 * Holds the parsed blocks.
11 *
12 * @var array
13 */
14 protected $blocks = [];
15
16 /**
17 * The form post content.
18 *
19 * @var string
20 */
21 protected $content = '';
22
23 /**
24 * Params to validate.
25 *
26 * @var array
27 */
28 protected $params = [];
29
30 /**
31 * Get things going.
32 *
33 * @param string $content Post content.
34 * @param array $params Params to validate.
35 */
36 public function __construct( $content, $params = [] ) {
37 $this->content = $content;
38 $this->params = $params;
39 }
40
41 /**
42 * Validate the form submission.
43 *
44 * @return true|WP_Error
45 */
46 public function validate() {
47 $this->blocks = parse_blocks( $this->content );
48 return true;
49 }
50
51 /**
52 * Find required blocks recursively.
53 */
54 public function findRequiredBlocks() {
55 return $this->getNestedBlocksWhere( 'required', true );
56 }
57
58 /**
59 * Get nested block with a specific attribute/value pair.
60 *
61 * @param string $attribute Attribute name.
62 * @param any $value The value.
63 * @return array
64 */
65 protected function getNestedBlocksWhere( $attribute, $value ) {
66 $blocks_with_requirements = $this->getNestedBlockWithAttribute( $this->blocks, 'required' );
67 return array_filter(
68 $blocks_with_requirements,
69 function( $block ) use ( $attribute, $value ) {
70 return $block['attrs'][ $attribute ] === $value;
71 }
72 );
73 }
74
75 /**
76 * Get nested values from an array
77 *
78 * @param array $array Array to search.
79 * @param string $nested_key Nested key to search for.
80 * @return array
81 */
82 protected function getNestedBlockWithAttribute( array $array, $nested_key ) {
83 $return = array();
84 array_walk_recursive(
85 $array,
86 function( $a, $key ) use ( &$return, $nested_key ) {
87 if ( $nested_key === $key ) {
88 $return[] = $a;
89 }
90 }
91 );
92 return $return;
93 }
94 }
95