/** * Parses an element/tag property string and returns an array of properties. * * @param string $string The property string to parse. * @param boolean $valuesOnly Indicates only the property value should be * returned. */ public function parsePropertyString($string, $valuesOnly = false) { $properties = array(); $tagProps = xPDO::escSplit("&", $string); foreach ($tagProps as $prop) { $property = xPDO::escSplit('=', $prop); if (count($property) == 2) { $propName = $property[0]; if (substr($propName, 0, 4) == "amp;") { $propName = substr($propName, 4); } $propValue = $property[1]; $propType = 'textfield'; $propDesc = ''; $propOptions = array(); $pvTmp = xPDO::escSplit(';', $propValue); if ($pvTmp && isset($pvTmp[1])) { $propDesc = $pvTmp[0]; if (($pvTmp[1] == 'list' || $pvTmp[1] == 'combo') && isset($pvTmp[3]) && $pvTmp[3]) { if (!$valuesOnly) { $propType = modParser::_XType($pvTmp[1]); $options = explode(',', $pvTmp[2]); if ($options) { foreach ($options as $option) { $propOptions[] = array('name' => ucfirst($option), 'value' => $option); } } } $propValue = $pvTmp[3]; } elseif ($pvTmp[1] != 'list' && $pvTmp[1] != 'combo' && isset($pvTmp[2]) && $pvTmp[2]) { if (!$valuesOnly) { $propType = modParser::_XType($pvTmp[1]); } $propValue = $pvTmp[2]; } else { $propValue = $pvTmp[0]; } } $propValue = trim($propValue, "`"); $propValue = str_replace("``", "`", $propValue); if ($valuesOnly) { $properties[$propName] = $propValue; } else { $properties[$propName] = array('name' => $propName, 'desc' => $propDesc, 'type' => $propType, 'options' => $propOptions, 'value' => $propValue); } } } return $properties; }