You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.9 KiB
153 lines
4.9 KiB
<?php
|
|
|
|
|
|
class WpaeString
|
|
{
|
|
const MIDDLE_COMMA = "*middlecomma*";
|
|
|
|
public function isBetween($haystack, $search, $start, $end)
|
|
{
|
|
if($haystack == $search) {
|
|
return false;
|
|
}
|
|
if (strpos($haystack, $start) === false) {
|
|
return false;
|
|
}
|
|
|
|
$haystack = str_replace($search, "#SNIPPET#", $haystack);
|
|
$search = "#SNIPPET#";
|
|
|
|
$searchPosition = strpos($haystack, $search);
|
|
|
|
$firstString = substr($haystack, 0, $searchPosition);
|
|
$lastString = substr($haystack, $searchPosition + strlen($search), strlen($haystack));
|
|
|
|
$isInFirstString = false;
|
|
$isInLastString = false;
|
|
|
|
// Make sure the number of strings in the part before and after is not equal
|
|
// to exclude cases like [a]b[c] we want only cases like a[b]c
|
|
$numberOfStartInFirstString = substr_count($firstString, $start);
|
|
$numberOfEndInFirstString = substr_count($firstString, $end);
|
|
|
|
$numberOfStartInLastString = substr_count($lastString, $start);
|
|
$numberOfEndInLastString = substr_count($lastString, $end);
|
|
|
|
if(strpos($firstString, $start) !== false && $numberOfStartInFirstString - $numberOfEndInFirstString) {
|
|
$isInFirstString = true;
|
|
}
|
|
|
|
if(strpos($lastString, $end) !== false && $numberOfStartInLastString - $numberOfEndInLastString) {
|
|
$isInLastString = true;
|
|
}
|
|
|
|
return $isInFirstString && $isInLastString;
|
|
}
|
|
|
|
/**
|
|
* @param $sanitizedSnippet
|
|
* @return mixed
|
|
*/
|
|
public function quoteParams($sanitizedSnippet)
|
|
{
|
|
if(strpos($sanitizedSnippet, 'array') !== false) {
|
|
return $sanitizedSnippet;
|
|
}
|
|
|
|
if(strpos($sanitizedSnippet, WpaeXmlProcessor::SNIPPET_DELIMITER) === false && strpos($sanitizedSnippet, '"') === false && strpos($sanitizedSnippet, "'") === false ) {
|
|
$sanitizedSnippet = str_replace("(","(\"",$sanitizedSnippet);
|
|
$sanitizedSnippet = str_replace(")","\")",$sanitizedSnippet);
|
|
|
|
return $sanitizedSnippet;
|
|
}
|
|
|
|
$sanitizedSnippet = str_replace(WpaeXmlProcessor::SNIPPET_DELIMITER, '"', $sanitizedSnippet);
|
|
|
|
$sanitizedString = "";
|
|
|
|
$isInString = false;
|
|
|
|
for($i=0; $i< strlen($sanitizedSnippet); $i++) {
|
|
if($sanitizedSnippet[$i] == "\"") {
|
|
if($isInString) {
|
|
$isInString = false;
|
|
} else {
|
|
$isInString = true;
|
|
}
|
|
|
|
}
|
|
|
|
if($sanitizedSnippet[$i] === "," && $isInString) {
|
|
$sanitizedString.= self::MIDDLE_COMMA;
|
|
} else {
|
|
$sanitizedString .= $sanitizedSnippet[$i];
|
|
}
|
|
}
|
|
|
|
$sanitizedSnippet = $sanitizedString;
|
|
|
|
if(strpos($sanitizedSnippet,"(") !== false && strpos($sanitizedSnippet, ")") !== false) {
|
|
|
|
$sanitizedSnippet = str_replace("()", '("")', $sanitizedSnippet);
|
|
$parts = explode("(", $sanitizedSnippet);
|
|
if (!isset($parts[1])) {
|
|
//TODO: Can this happen?
|
|
}
|
|
$params = $parts[1];
|
|
$parameterPart = $parts[1];
|
|
$originalParameterPart = $parts[1];
|
|
|
|
$params = explode(")", $params);
|
|
$params = $params[0];
|
|
|
|
if (strpos($params, ",") !== false) {
|
|
$params = explode(",", $params);
|
|
} else {
|
|
$params = array($params);
|
|
}
|
|
|
|
foreach ($params as $param) {
|
|
if (!preg_match('/".*"/', $param)) {
|
|
$parameterPart = str_replace(','.$param, ',"' .trim($param) . '"', $parameterPart);
|
|
$parameterPart = str_replace('('.$param, '("' .trim($param) . '"', $parameterPart);
|
|
}
|
|
}
|
|
|
|
$sanitizedSnippet = str_replace($originalParameterPart, $parameterPart, $sanitizedSnippet);
|
|
}
|
|
|
|
$sanitizedSnippet = str_replace(self::MIDDLE_COMMA, ',', $sanitizedSnippet);
|
|
|
|
return $sanitizedSnippet;
|
|
}
|
|
|
|
/**
|
|
* @param $sanitizedSnippet
|
|
* @return string
|
|
*/
|
|
private function quoteStringWithTokenizer($sanitizedSnippet)
|
|
{
|
|
$sanitizedSnippet = explode("(", $sanitizedSnippet);
|
|
$functionName = $sanitizedSnippet[0];
|
|
$sanitizedSnippet = $sanitizedSnippet[1];
|
|
$sanitizedSnippet = str_replace(')', '', $sanitizedSnippet);
|
|
|
|
$tokens = token_get_all('<?php ' . $sanitizedSnippet . ' ?>');
|
|
|
|
$sanitizedString = "";
|
|
|
|
foreach ($tokens as $token) {
|
|
if ($token[0] == 319) {
|
|
$sanitizedString .= '"' . $token[1] . '",';
|
|
}
|
|
if ($token[0] == 323) {
|
|
$sanitizedString .= $token[1] . ',';
|
|
}
|
|
}
|
|
|
|
$sanitizedString = substr($sanitizedString, 0, -1);
|
|
$sanitizedString = $functionName . '(' . $sanitizedSnippet . ')';
|
|
|
|
return $sanitizedString;
|
|
}
|
|
} |