From d8e62ff260991b911a05092d285aa6a31cdb8229 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Fri, 12 Mar 2010 14:33:02 +0000 Subject: [PATCH] - Patch #681782 by Dave Reid: 'clean' option in token_replace() does not do anything. --- includes/token.inc | 3 +++ modules/system/system.test | 16 ++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/includes/token.inc b/includes/token.inc index 3f9a5b5ce023..2db6c78c906e 100644 --- a/includes/token.inc +++ b/includes/token.inc @@ -78,6 +78,9 @@ function token_replace($text, array $data = array(), array $options = array()) { $replacements = array(); foreach (token_scan($text) as $type => $tokens) { $replacements += token_generate($type, $tokens, $data, $options); + if (!empty($options['clear'])) { + $replacements += array_fill_keys($tokens, ''); + } } // Optionally alter the list of replacement values. diff --git a/modules/system/system.test b/modules/system/system.test index c5366c541f0e..049502194c44 100644 --- a/modules/system/system.test +++ b/modules/system/system.test @@ -1449,26 +1449,30 @@ class TokenReplaceTestCase extends DrupalWebTestCase { $source .= '[node:author:name]'; // Node author's name $source .= '[node:created:since]'; // Time since the node was created $source .= '[current-user:name]'; // Current user's name - $source .= '[user:name]'; // No user passed in, should be untouched $source .= '[date:short]'; // Short date format of REQUEST_TIME - $source .= '[bogus:token]'; // Nonexistent token, should be untouched + $source .= '[user:name]'; // No user passed in, should be untouched + $source .= '[bogus:token]'; // Non-existent token $target = check_plain($node->title); $target .= check_plain($account->name); $target .= format_interval(REQUEST_TIME - $node->created, 2, $language->language); $target .= check_plain($user->name); - $target .= '[user:name]'; $target .= format_date(REQUEST_TIME, 'short', '', NULL, $language->language); - $target .= '[bogus:token]'; + // Test that the clear parameter cleans out non-existent tokens. + $result = token_replace($source, array('node' => $node), array('language' => $language, 'clear' => TRUE)); + $result = $this->assertFalse(strcmp($target, $result), 'Valid tokens replaced while invalid tokens cleared out.'); + + // Test without using the clear parameter (non-existant token untouched). + $target .= '[user:name]'; + $target .= '[bogus:token]'; $result = token_replace($source, array('node' => $node), array('language' => $language)); + $this->assertFalse(strcmp($target, $result), 'Valid tokens replaced while invalid tokens ignored.'); // Check that the results of token_generate are sanitized properly. This does NOT // test the cleanliness of every token -- just that the $sanitize flag is being // passed properly through the call stack and being handled correctly by a 'known' // token, [node:title]. - $this->assertFalse(strcmp($target, $result), t('Basic placeholder tokens replaced.')); - $raw_tokens = array('title' => '[node:title]'); $generated = token_generate('node', $raw_tokens, array('node' => $node)); $this->assertFalse(strcmp($generated['[node:title]'], check_plain($node->title)), t('Token sanitized.')); -- GitLab