$val) { $original[$key] = token_logic_token_replace_alter($val, $tokens, $values, $leading, $trailing); } return $original; } $return = ''; $if = $leading.'if'.$trailing; $then = $leading.'then'.$trailing; $equals = $leading.'equals'.$trailing; $notequals = $leading.'notequals'.$trailing; $endif = $leading.'endif'.$trailing; $start = strpos($original, $if); if ($start === FALSE ) { // no if's there return $original; } $equalsp = strpos($original, $equals, $start); $thenp = strpos($original, $thenp, $start); $end = strpos($original, $endif, $start) + strlen($endif); $within = $start; while ($within = strpos($original, $if, $within + strlen($if)) && $within < $end) { //we have an [if] between our [if] and [endif], we need to grab more $end = strpos($original, $endif, $end); if($end === FALSE) { //not enough [endif]s return $original; } $end += strlen($endif); } //we now have one overarching if statement between $start and $end, including the tags themselves $return = substr($original, 0, $start); //evaluate logic $evaluate = substr($original, $start+strlen($if), $end-$start-strlen($if)-strlen($endif)); $evaluate = explode($then, $evaluate, 2); $arg = explode($equals, $evaluate[0]); if (count($arg) == 2) { if (_token_replace_tokens($arg[0], $tokens, $values, $leading, $trailing) == _token_replace_tokens($arg[1], $tokens, $values, $leading, $trailing)) { $return .= token_logic_token_replace_alter($evaluate[1], $tokens, $values, $leading, $trailing); } } else { $arg = explode($notequals, $evaluate[0]); if (_token_replace_tokens($arg[0], $tokens, $values, $leading, $trailing) != _token_replace_tokens($arg[1], $tokens, $values, $leading, $trailing)) { $return .= token_logic_token_replace_alter($evaluate[1], $tokens, $values, $leading, $trailing); } } $return .= token_logic_token_replace_alter(substr($original, $end), $tokens, $values, $leading, $trailing); return $return; }