From 5b85aa163f9eb8fcfaf161a73c1024513f3b69c6 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Thu, 1 Sep 2016 23:59:59 +0000 Subject: [PATCH] Smilies: Add the `smilies` filter. This new filter allows the smilies array to be modified with a filter, instead of having to directly access the global. Props mte90, jorbin. Fixes #35905. git-svn-id: https://develop.svn.wordpress.org/trunk@38504 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 12 +++++++ tests/phpunit/tests/formatting/Smilies.php | 42 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index e3d10601ca..95672f5350 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -3342,6 +3342,18 @@ function smilies_init() { ); } + /** + * Filter all the smilies. + * + * This filter must be added before `smilies_init` is run, as + * it is normally only run once to setup the smilies regex. + * + * @since 4.6.0 + * + * @param array $wpsmiliestrans List of the smilies. + */ + $wpsmiliestrans = apply_filters('smilies', $wpsmiliestrans); + if (count($wpsmiliestrans) == 0) { return; } diff --git a/tests/phpunit/tests/formatting/Smilies.php b/tests/phpunit/tests/formatting/Smilies.php index 9cd3b06f1c..7d7ae0cef5 100644 --- a/tests/phpunit/tests/formatting/Smilies.php +++ b/tests/phpunit/tests/formatting/Smilies.php @@ -312,4 +312,46 @@ class Tests_Formatting_Smilies extends WP_UnitTestCase { // standard smilies, use_smilies: OFF update_option( 'use_smilies', 0 ); } + + /** + * Test to ensure smilies can be removed with a filter + * + * @ticket 35905 + */ + public function test_smilies_filter_removes_smilies() { + add_filter( 'smilies', array( $this, '_filter_remove_smilies' ) ); + smilies_init(); + remove_filter( 'smilies', array( $this, '_filter_remove_smilies' ) ); + + $txt = ':oops: I did it again'; + + $this->assertEquals( $txt, convert_smilies( $txt ) ); + } + + /** + * Test to ensure smilies can be added with a filter + * + * @ticket 35905 + */ + public function test_smilies_filter_adds_smilies() { + add_filter( 'smilies', array( $this, '_filter_add_smilies' ) ); + smilies_init(); + remove_filter( 'smilies', array( $this, '_filter_add_smilies' ) ); + + $txt = 'You played with my <3'; + $expected_txt = 'You played with my \xe2\x9d\xa4'; + + $this->assertEquals( $expected_txt, convert_smilies( $txt ) ); + } + + + public function _filter_remove_smilies( $wpsmiliestrans ) { + unset( $wpsmiliestrans[':oops:'] ); + return $wpsmiliestrans; + } + + public function _filter_add_smilies( $wpsmiliestrans ) { + $wpsmiliestrans['<3'] = '\xe2\x9d\xa4'; + return $wpsmiliestrans; + } }