smilie shortcut
* 'icons' => icon in html
*
* @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array)
*/
public static function getList()
{
$texts = array(
'<3',
'</3',
'<\\3',
':-)',
';-)',
':-(',
':-P',
':-p',
':-"',
':-"',
':-x',
':-X',
':-D',
'8-|',
'8-O',
':-O',
'\\o/',
'o.O',
'O.o',
'o_O',
'O_o',
":'(",
":-!",
":-/",
":-[",
"8-)",
':beer',
':homebrew',
':coffee',
':facepalm',
':like',
':dislike',
'~friendica',
'red#',
'red#matrix'
);
$icons = array(
'',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'
',
'~friendica
',
'red
matrix',
'red
matrix'
);
$params = array('texts' => $texts, 'icons' => $icons);
call_hooks('smilie', $params);
return $params;
}
/**
* @brief Replaces text emoticons with graphical images
*
* It is expected that this function will be called using HTML text.
* We will escape text between HTML pre and code blocks from being
* processed.
*
* At a higher level, the bbcode [nosmile] tag can be used to prevent this
* function from being executed by the prepare_text() routine when preparing
* bbcode source for HTML display
*
* @param string $s Text that should be replaced
* @param boolean $sample optional, default false
* @param boolean $no_images Only replace emoticons without images
*
* @return string HML Output of the Smilie
*/
public static function replace($s, $sample = false, $no_images = false)
{
if (intval(Config::get('system', 'no_smilies'))
|| (local_user() && intval(PConfig::get(local_user(), 'system', 'no_smilies')))
) {
return $s;
}
$s = preg_replace_callback('/
(.*?)<\/pre>/ism', 'self::encode', $s);
$s = preg_replace_callback('/(.*?)<\/code>/ism', 'self::encode', $s);
$params = self::getList();
if ($no_images) {
$cleaned = array('texts' => array(), 'icons' => array());
$icons = $params['icons'];
foreach ($icons as $key => $icon) {
if (!strstr($icon, '
';
for ($x = 0; $x < count($params['texts']); $x ++) {
$s .= '- ' . $params['texts'][$x] . '
- ' . $params['icons'][$x] . '
';
}
} else {
$params['string'] = preg_replace_callback('/<(3+)/', 'self::pregHeart', $params['string']);
$s = str_replace($params['texts'], $params['icons'], $params['string']);
}
$s = preg_replace_callback('/(.*?)<\/pre>/ism', 'self::decode', $s);
$s = preg_replace_callback('/(.*?)<\/code>/ism', 'self::decode', $s);
return $s;
}
/**
* @param string $m string
*
* @return string base64 encoded string
*/
private static function encode($m)
{
return(str_replace($m[1], base64url_encode($m[1]), $m[0]));
}
/**
* @param string $m string
*
* @return string base64 decoded string
*/
private static function decode($m)
{
return(str_replace($m[1], base64url_decode($m[1]), $m[0]));
}
/**
* @brief expand <3333 to the correct number of hearts
*
* @param string $x string
*
* @return string HTML Output
*
* @todo: Rework because it doesn't work correctly
*/
private static function pregHeart($x)
{
if (strlen($x[1]) == 1) {
return $x[0];
}
$t = '';
for ($cnt = 0; $cnt < strlen($x[1]); $cnt ++) {
$t .= '
';
}
$r = str_replace($x[0], $t, $x[0]);
return $r;
}
}