Project

General

Profile

« Previous | Next » 

Revision fc4e8df8

Added by Phil Davis over 10 years ago

Code style etc inc vwx3

rebased version with conflicts resolved due to a bunch of recent changes
in vpn.inc

View differences:

etc/inc/xmlreader.inc
37 37
/* The following items will be treated as arrays in config.xml */
38 38
function listtags() {
39 39
	/*
40
         * Please keep this list alpha sorted and no longer than 80 characters
41
         * I know it's a pain, but it's a pain to find stuff too if it's not
42
         */
40
	 * Please keep this list alpha sorted and no longer than 80 characters
41
	 * I know it's a pain, but it's a pain to find stuff too if it's not
42
	 */
43 43
	$ret = array(
44 44
		'acls', 'alias', 'aliasurl', 'allowedip', 'allowedhostname', 'authserver',
45 45
		'bridged', 'build_port_path',
......
72 72
}
73 73

  
74 74
function add_elements(&$cfgarray, &$parser) {
75
        global $listtags;
76

  
77
        while ($parser->read()) {
78
                switch ($parser->nodeType) {
79
                case XMLReader::WHITESPACE:
80
                case XMLReader::SIGNIFICANT_WHITESPACE:
81
                        break;
82
                case XMLReader::ELEMENT:
83
                        if (isset($listtags[strtolower($parser->name)])) {
84
				$cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])];
85
                        	if (!$parser->isEmptyElement) {
86
                                        add_elements($cfgref, $parser);
87
				} else
88
					$cfgref = array();
89
					
90
                        } else {
91
				if (isset($cfgarray[$parser->name]) && (!is_array($cfgarray[$parser->name]) || !isset($cfgarray[$parser->name][0]))) {
92
					$nodebkp = $cfgarray[$parser->name];
93
					$cfgarray[$parser->name] = array();
94
					$cfgarray[$parser->name][] = $nodebkp;
95
					$cfgref =& $cfgarray[$parser->name][0];
96
					unset($nodebkp);
97
				} else
98
					$cfgref =& $cfgarray[$parser->name];
99

  
100
                        	if ($parser->isEmptyElement) {
101
					if (is_array($cfgref))
102
						$cfgref[] = array();
103
					else
104
						$cfgref = "";
105
				} else {
106
					if (is_array($cfgref)) {
107
						$cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])];
108
						add_elements($cfgref, $parser);
109
					} else
75
	global $listtags;
76

  
77
	while ($parser->read()) {
78
		switch ($parser->nodeType) {
79
			case XMLReader::WHITESPACE:
80
			case XMLReader::SIGNIFICANT_WHITESPACE:
81
				break;
82
			case XMLReader::ELEMENT:
83
				if (isset($listtags[strtolower($parser->name)])) {
84
					$cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])];
85
					if (!$parser->isEmptyElement) {
110 86
						add_elements($cfgref, $parser);
87
					} else {
88
						$cfgref = array();
89
					}
90
				} else {
91
					if (isset($cfgarray[$parser->name]) && (!is_array($cfgarray[$parser->name]) || !isset($cfgarray[$parser->name][0]))) {
92
						$nodebkp = $cfgarray[$parser->name];
93
						$cfgarray[$parser->name] = array();
94
						$cfgarray[$parser->name][] = $nodebkp;
95
						$cfgref =& $cfgarray[$parser->name][0];
96
						unset($nodebkp);
97
					} else {
98
						$cfgref =& $cfgarray[$parser->name];
99
					}
100

  
101
					if ($parser->isEmptyElement) {
102
						if (is_array($cfgref)) {
103
							$cfgref[] = array();
104
						} else {
105
							$cfgref = "";
106
						}
107
					} else {
108
						if (is_array($cfgref)) {
109
							$cfgref =& $cfgarray[$parser->name][count($cfgarray[$parser->name])];
110
							add_elements($cfgref, $parser);
111
						} else {
112
							add_elements($cfgref, $parser);
113
						}
114
					}
111 115
				}
112
			}
113 116

  
114
			$i = 0;
115
			while ($parser->moveToAttributeNo($i)) {
116
				$cfgref[$parser->name] = $parser->value;
117
				$i++;
118
			}
119
                        break;
120
                case XMLReader::TEXT:
121
		case XMLReader::CDATA:
122
                        $cfgarray = $parser->value;
123
                        break;
124
                case XMLReader::END_ELEMENT:
125
			return;
126
			break;
127
                default:
128
                        break;
129
                }
117
				$i = 0;
118
				while ($parser->moveToAttributeNo($i)) {
119
					$cfgref[$parser->name] = $parser->value;
120
					$i++;
121
				}
122
				break;
123
			case XMLReader::TEXT:
124
			case XMLReader::CDATA:
125
				$cfgarray = $parser->value;
126
				break;
127
			case XMLReader::END_ELEMENT:
128
				return;
129
				break;
130
			default:
131
				break;
132
		}
130 133
	}
131 134
}
132 135

  
......
134 137
	global $listtags;
135 138

  
136 139
	$listtags = listtags();
137
        if (isset($GLOBALS['custom_listtags'])) {
138
          foreach($GLOBALS['custom_listtags'] as $tag) {
139
            $listtags[$tag] = $tag;
140
          }
141
        }
140
	if (isset($GLOBALS['custom_listtags'])) {
141
		foreach ($GLOBALS['custom_listtags'] as $tag) {
142
			$listtags[$tag] = $tag;
143
		}
144
	}
142 145

  
143 146
	return parse_xml_config_raw($cffile, $rootobj);
144 147
}
......
147 150
	global $listtags;
148 151

  
149 152
	$listtags = listtags_pkg();
150
        if (isset($GLOBALS['custom_listtags_pkg'])) {
151
          foreach($GLOBALS['custom_listtags_pkg'] as $tag) {
152
            $listtags[$tag] = $tag;
153
          }
154
        }
153
	if (isset($GLOBALS['custom_listtags_pkg'])) {
154
		foreach ($GLOBALS['custom_listtags_pkg'] as $tag) {
155
			$listtags[$tag] = $tag;
156
		}
157
	}
155 158
	return parse_xml_config_raw($cffile, $rootobj, $isstring);
156 159
}
157 160

  
......
164 167
	if ($par->open($cffile, "UTF-8", LIBXML_NOERROR | LIBXML_NOWARNING)) {
165 168
		add_elements($parsedcfg, $par);
166 169
		$par->close();
167
	} else
170
	} else {
168 171
		log_error(sprintf(gettext("Error returned while trying to parse %s"), $cffile));
172
	}
169 173

  
170 174
	if ($rootobj) {
171
		if (!is_array($rootobj))
175
		if (!is_array($rootobj)) {
172 176
			$rootobj = array($rootobj);
173
		foreach ($rootobj as $rootobj_name)
174
			if ($parsedcfg[$rootobj_name])
177
		}
178
		foreach ($rootobj as $rootobj_name) {
179
			if ($parsedcfg[$rootobj_name]) {
175 180
				break;
176
		
181
			}
182
		}
183

  
177 184
		return $parsedcfg[$rootobj_name];
178 185
	} else {
179 186
		return $parsedcfg;
......
181 188
}
182 189

  
183 190
function dump_xml_config_sub(& $writer, $arr) {
184
        global $listtags;
185

  
186
        foreach ($arr as $ent => $val) {
187
                if (is_array($val)) {
188
                        /* is it just a list of multiple values? */
189
                        if (isset($listtags[strtolower($ent)])) {
190
                                foreach ($val as $cval) {
191
                                        if (is_array($cval)) {
192
                                                if (empty($cval))
193
                                                        $writer->writeElement($ent);
194
                                                else {
195
                                                        $writer->startElement($ent);
196
                                                        dump_xml_config_sub($writer, $cval);
197
                                                        $writer->endElement();
198
                                                }
199
                                        } else {
200
                                                if($cval === false) continue;
201
                                                if ((is_bool($val) && ($val == true)) || ($val === ""))
202
                                                        $writer->writeElement($ent);
203
                                                else if (!is_bool($val))
191
	global $listtags;
192

  
193
	foreach ($arr as $ent => $val) {
194
		if (is_array($val)) {
195
			/* is it just a list of multiple values? */
196
			if (isset($listtags[strtolower($ent)])) {
197
				foreach ($val as $cval) {
198
					if (is_array($cval)) {
199
						if (empty($cval)) {
200
							$writer->writeElement($ent);
201
						} else {
202
							$writer->startElement($ent);
203
							dump_xml_config_sub($writer, $cval);
204
							$writer->endElement();
205
						}
206
					} else {
207
						if ($cval === false) {
208
							continue;
209
						}
210
						if ((is_bool($val) && ($val == true)) || ($val === "")) {
211
							$writer->writeElement($ent);
212
						} else if (!is_bool($val)) {
204 213
							$writer->writeElement($ent, $cval);
205
                                        }
206
                                }
207
                        } else if (empty($val)) {
208
                                $writer->writeElement($ent);
209
                        } else {
210
                                /* it's an array */
211
                                $writer->startElement($ent);
212
                                dump_xml_config_sub($writer, $val);
213
                                $writer->endElement();
214
                        }
215
                } else {
216
			if ((is_bool($val) && ($val == true)) || ($val === ""))
217
                                $writer->writeElement($ent);
218
                        else if (!is_bool($val))
219
                                $writer->writeElement($ent, $val);
220
                }
221
        }
214
						}
215
					}
216
				}
217
			} else if (empty($val)) {
218
				$writer->writeElement($ent);
219
			} else {
220
				/* it's an array */
221
				$writer->startElement($ent);
222
				dump_xml_config_sub($writer, $val);
223
				$writer->endElement();
224
			}
225
		} else {
226
			if ((is_bool($val) && ($val == true)) || ($val === "")) {
227
				$writer->writeElement($ent);
228
			} else if (!is_bool($val)) {
229
				$writer->writeElement($ent, $val);
230
			}
231
		}
232
	}
222 233
}
223 234

  
224 235
function dump_xml_config($arr, $rootobj) {
225 236
	global $listtags;
226 237

  
227 238
	$listtags = listtags();
228
        if (isset($GLOBALS['custom_listtags'])) {
229
          foreach($GLOBALS['custom_listtags'] as $tag) {
230
            $listtags[$tag] = $tag;
231
          }
232
        }
239
	if (isset($GLOBALS['custom_listtags'])) {
240
		foreach ($GLOBALS['custom_listtags'] as $tag) {
241
			$listtags[$tag] = $tag;
242
		}
243
	}
233 244
	return dump_xml_config_raw($arr, $rootobj);
234 245
}
235 246

  
......
237 248
	global $listtags;
238 249

  
239 250
	$listtags = listtags_pkg();
240
        if (isset($GLOBALS['custom_listtags_pkg'])) {
241
          foreach($GLOBALS['custom_listtags_pkg'] as $tag) {
242
            $listtags[$tag] = $tag;
243
          }
244
        }
251
	if (isset($GLOBALS['custom_listtags_pkg'])) {
252
		foreach ($GLOBALS['custom_listtags_pkg'] as $tag) {
253
			$listtags[$tag] = $tag;
254
		}
255
	}
245 256
	return dump_xml_config_raw($arr, $rootobj);
246 257
}
247 258

  
248 259
function dump_xml_config_raw($arr, $rootobj) {
249 260

  
250
        $writer = new XMLWriter();
251
        $writer->openMemory();
252
        $writer->setIndent(true);
253
        $writer->setIndentString("\t");
254
        $writer->startDocument("1.0", "UTF-8");
255
        $writer->startElement($rootobj);
261
	$writer = new XMLWriter();
262
	$writer->openMemory();
263
	$writer->setIndent(true);
264
	$writer->setIndentString("\t");
265
	$writer->startDocument("1.0", "UTF-8");
266
	$writer->startElement($rootobj);
256 267

  
257
        dump_xml_config_sub($writer, $arr);
268
	dump_xml_config_sub($writer, $arr);
258 269

  
259
        $writer->endElement();
260
        $writer->endDocument();
261
        $xmlconfig = $writer->outputMemory(true);
270
	$writer->endElement();
271
	$writer->endDocument();
272
	$xmlconfig = $writer->outputMemory(true);
262 273

  
263
        return $xmlconfig;
274
	return $xmlconfig;
264 275
}
265 276

  
266 277
?>

Also available in: Unified diff