. /** * Filter converting emoticon texts into images * * This filter uses the emoticon settings in Site admin > Appearance > HTML settings * and replaces emoticon texts with images. * * @package filter * @subpackage emoticon * @see emoticon_manager * @copyright 2010 David Mudrak * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); class filter_emoticon extends moodle_text_filter { /** * Apply the filter to the text * * @see filter_manager::apply_filter_chain() * @param string $text to be processed by the text * @param array $options filter options * @return string text after processing */ public function filter($text, array $options = array()) { if (!isset($options['originalformat'])) { // if the format is not specified, we are probably called by {@see format_string()} // in that case, it would be dangerous to replace text with the image because it could // be stripped. therefore, we do nothing return $text; } if (in_array($options['originalformat'], explode(',', get_config('filter_emoticon', 'formats')))) { $this->replace_emoticons($text); } return $text; } //////////////////////////////////////////////////////////////////////////// // internal implementation starts here //////////////////////////////////////////////////////////////////////////// /** * Replace emoticons found in the text with their images * * @param string $text to modify * @return void */ protected function replace_emoticons(&$text) { global $CFG, $OUTPUT, $PAGE; static $emoticontexts = array(); // internal cache used for replacing static $emoticonimgs = array(); // internal cache used for replacing $lang = current_language(); $theme = $PAGE->theme->name; if (!isset($emoticontexts[$lang][$theme]) or !isset($emoticonimgs[$lang][$theme])) { // prepare internal caches $manager = get_emoticon_manager(); $emoticons = $manager->get_emoticons(); $emoticontexts[$lang][$theme] = array(); $emoticonimgs[$lang][$theme] = array(); foreach ($emoticons as $emoticon) { $emoticontexts[$lang][$theme][] = $emoticon->text; $emoticonimgs[$lang][$theme][] = $OUTPUT->render($manager->prepare_renderable_emoticon($emoticon)); } unset($emoticons); } if (empty($emoticontexts[$lang][$theme])) { // No emoticons defined, nothing to process here return; } // detect all the