PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / application / Core / ConfigPress / Reader.php
advanced-access-manager / application / Core / ConfigPress Last commit date
Evaluator.php 6 years ago Reader.php 6 years ago
Reader.php
149 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * ConfigPress Reader
12 *
13 * Parse configuration string
14 *
15 * @package ConfigPress
16 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17 * @copyright Copyright Vasyl Martyniuk
18 */
19 class AAM_Core_ConfigPress_Reader {
20
21 /**
22 *
23 */
24 const SEPARATOR = '.';
25
26 /**
27 *
28 */
29 const INHERIT_KEY = ':';
30
31 /**
32 * Parse INI config
33 *
34 * Parse configuration string
35 *
36 * @param string $string
37 *
38 * @return array|bool
39 *
40 * @throws Exception
41 */
42 public function parseString($string) {
43 if (!empty($string)) {
44 //parse the string
45 set_error_handler(array($this, 'parserError'));
46 $ini = parse_ini_string($string, true);
47 restore_error_handler();
48
49 $response = $this->process(is_array($ini) ? $ini : array());
50 } else {
51 $response = array();
52 }
53
54 return $response;
55 }
56
57 /**
58 *
59 * @param type $error
60 * @param type $message
61 * @throws Exception
62 */
63 public function parserError($error, $message = '') {
64 AAM_Core_Console::add(
65 sprintf('Error parsing config string: %s', $message), $error
66 );
67 }
68
69 /**
70 * Process data from the parsed ini file.
71 *
72 * @param array $data
73 * @return array
74 */
75 protected function process(array $data) {
76 $config = array();
77
78 foreach ($data as $section => $data) {
79 //check if section has parent section or property
80 if (preg_match('/[\s\w]{1}' . self::INHERIT_KEY . '[\s\w]{1}/', $section)) {
81 $section = $this->inherit($section, $config);
82 } else {
83 //evaluate the section and if not false move forward
84 $evaluator = new AAM_Core_ConfigPress_Evaluator($section);
85 if ($evaluator->evaluate()) {
86 $section = $evaluator->getAlias();
87 $config[$section] = array();
88 } else {
89 continue; //conditional section that did not meet condition
90 }
91 }
92
93 if (is_array($data)) { //this is a INI section, build the nested tree
94 $this->buildNestedSection($data, $config[$section]);
95 } else { //single property, no need to do anything
96 $config[$section] = $this->parseValue($data);
97 }
98 }
99
100 return $config;
101 }
102
103 /**
104 *
105 * @param type $section
106 * @param type $config
107 * @return type
108 */
109 protected function inherit($section, &$config) {
110 $sections = explode(self::INHERIT_KEY, $section);
111 $target = trim($sections[0]);
112 $parent = trim($sections[1]);
113
114 if (isset($config[$parent])) {
115 $config[$target] = $config[$parent];
116 }
117
118 return $target;
119 }
120
121 /**
122 *
123 * @param type $data
124 * @param type $config
125 */
126 protected function buildNestedSection($data, &$config) {
127 foreach ($data as $key => $value) {
128 $root = &$config;
129 // TODO - Remove July 2019
130 foreach (explode(self::SEPARATOR, apply_filters('aam-configpress-compatibility-filter', $key)) as $level) {
131 if (!isset($root[$level])) {
132 $root[$level] = array();
133 }
134 $root = &$root[$level];
135 }
136 $root = $this->parseValue($value);
137 }
138 }
139
140 /**
141 *
142 * @param type $value
143 * @return type
144 */
145 protected function parseValue($value) {
146 return is_string($value) ? trim($value) : $value;
147 }
148
149 }