X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FAPI%2FHTMLInputCoder.php;h=adf528920cb94c042f4b8d1a9e404a392d487919;hb=38891c5df73b338a5e1274317bb2a9334841be2a;hp=498d606e3e5a49f14d7210bb8245fbed10145aeb;hpb=54744051dea726c2b1495f24fc1cf7ba7fa25e11;p=civicrm-core.git diff --git a/CRM/Utils/API/HTMLInputCoder.php b/CRM/Utils/API/HTMLInputCoder.php index 498d606e3e..adf528920c 100644 --- a/CRM/Utils/API/HTMLInputCoder.php +++ b/CRM/Utils/API/HTMLInputCoder.php @@ -1,27 +1,11 @@ '], ['<', '>'], $values); + $values = $this->encodeValue($values); + } + } + + public function encodeValue($value) { + return str_replace(['<', '>'], ['<', '>'], $value); + } + + /** + * Perform in-place decode on strings (in a list of records). + * + * @param array $rows + * Ex in: $rows[0] = ['first_name' => 'A&W']. + * Ex out: $rows[0] = ['first_name' => 'A&W']. + */ + public function encodeRows(&$rows) { + foreach ($rows as $rid => $row) { + $this->encodeRow($rows[$rid]); + } + } + + /** + * Perform in-place encode on strings (in a single record). + * + * @param array $row + * Ex in: ['first_name' => 'A&W']. + * Ex out: ['first_name' => 'A&W']. + */ + public function encodeRow(&$row) { + foreach ($row as $k => $v) { + if (is_string($v) && !$this->isSkippedField($k)) { + $row[$k] = $this->encodeValue($v); + } } } @@ -161,7 +177,39 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { } } elseif ($castToString || is_string($values)) { - $values = str_replace(['<', '>'], ['<', '>'], $values); + $values = $this->decodeValue($values); + } + } + + public function decodeValue($value) { + return str_replace(['<', '>'], ['<', '>'], $value); + } + + /** + * Perform in-place decode on strings (in a list of records). + * + * @param array $rows + * Ex in: $rows[0] = ['first_name' => 'A&W']. + * Ex out: $rows[0] = ['first_name' => 'A&W']. + */ + public function decodeRows(&$rows) { + foreach ($rows as $rid => $row) { + $this->decodeRow($rows[$rid]); + } + } + + /** + * Perform in-place decode on strings (in a single record). + * + * @param array $row + * Ex in: ['first_name' => 'A&W']. + * Ex out: ['first_name' => 'A&W']. + */ + public function decodeRow(&$row) { + foreach ($row as $k => $v) { + if (is_string($v) && !$this->isSkippedField($k)) { + $row[$k] = $this->decodeValue($v); + } } }